유형 | 입력데이터 검증 및 표현 |
설계항목 | 허용된 범위 내 메모리 접근 |
설명 | 해당 프로세스에 허용된 범위의 메모리 버퍼에만 접근하여 읽기 또는 쓰기 기능을 하도록 검증방법 설계 및 메모리 접근요청이 허용범위를 벗어났을 때 처리방법을 설계해야 한다. |
보안대책 | ① C나 C++같이 메모리를 프로그래머가 관리하는 플랫폼을 사용하는 경우 메모리 버퍼의 경계값을 넘어서 메모리를 읽거나 저장하지 않도록 경계설정 또는 검사를 반드시 수행해야 한다. ② 개발 시, 메모리 버퍼오버플로우를 발생시킬 수 있는 취약한 API를 사용하지 않도록 해야 한다. |
연관된 구현단계 기준 | 포맷 스트링 삽입 메모리 버퍼 오버플로우 |
취약점 개요
사례1 : 버퍼 오버플로우
스택(Stack)이나 힙(Heap)에 할당되는 메모리에 문자열 등이 저장될 때 최초 정의된 메모리의 크기를 초과하여 문자열을 저장하는 경우 버퍼 오버플로우가 발생한다.
사례2 : 포맷 스트링 삽입
공격자는 외부 입력값에 포맷 문자열을 삽입하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있다. 그 결과, 공격자는 취약한 프로세스의 권한을 취득하여 임의의 코드를 실행할 수 있다.
설계 시 고려사항
① C나 C++같이 메모리를 프로그래머가 관리하는 플랫폼을 사용하는 경우 메모리 버퍼의 경계값을 넘어서 메모리를 읽거나 저장하지 않도록 경계설정 또는 검사를 반드시 수행해야 한다.
실행되는 시스템 Non-executable Stack, 랜덤스택(ASLR, Address Space Layout Randomization), 스택가드(StackGuard)와 같은 메모리 보호 정책이 적용되도록 해야 하며, 구현단계에 안전한 함수사용법에 대한 설명과 메모리 사용 시 경계값을 검사하고 사용할 수 있도록 시큐어코딩 규칙을 정의한다.
② 개발 시, 메모리 버퍼오버플로우를 발생시킬 수 있는 취약한 API를 사용하지 않도록 해야 한다.
메모리 버퍼오버플로우 취약성을 가지고 있는 함수들을 식별하여 사용하지 않도록 시큐어코딩 규칙을 정의한다.
진단 세부사항
요구사항 ① C나 C++같이 메모리를 프로그래머가 관리하는 플랫폼을 사용하는 경우 메모리 버퍼의 경계값을 넘어서 메모리를 읽거나 저장하지 않도록 경계설정 또는 검사를 반드시 수행해야 한다.
- 메모리를 프로그래머가 관리하는 플랫폼을 사용하는 경우, 메모리 버퍼오버플로우가 발생하지 않도록 보안설계가 적용되어 있는지 확인
- 메모리 버퍼오버플로우를 점검하는 테스트 계획이 수립되어 있는지 확인
테스트 입력값 예 : 충분히 긴 문자열
요구사항 ② 개발 시, 메모리 버퍼오버플로우를 발생시킬 수 있는 취약한 API를 사용하지 않도록 해야 한다.
- 메모리 버퍼오버플로우 방지를 위한 안전한 API 목록이 정의되어 있는지 확인
- 메모리 버퍼오버플로우를 점검하는 테스트 계획이 수립되어 있는지 확인
테스트 입력값 예 : 충분히 긴 문자열
'Cert > 소프트웨어(SW) 보안약점 진단원' 카테고리의 다른 글
설계단계 보안설계 기준 - 업로드/다운로드 파일 검증 (0) | 2024.08.23 |
---|---|
설계단계 보안설계 기준 - 보안기능 입력값 검증 (0) | 2024.08.23 |
설계단계 보안설계 기준 - HTTP 프로토콜 유효성 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 웹 기반 중요 기능 수행 요청 유효성 검증 (0) | 2024.08.22 |
설계단계 보안설계 기준 - 웹 서비스 요청 및 결과 검증 (0) | 2024.08.22 |