해당 프로세스에 허용된 범위의 메모리 버퍼에만 접근하여 읽기 또는 쓰기 기능을 하도록 검증방법과 메모리 접근요청이 허용범위를 벗어났을 때 처리방법을 설계해야 한다.
(입력데이터 검증 및 표현) 메모리 버퍼 오버플로우
(입력데이터 검증 및 표현) 포맷 스트링 삽입
OO는 지난 15일에 이어 27일 또다시 OO에 존재하는 코드 실행 취약점을 악용한 악성코드 유포 사례가 발견됐다며 주의를 당부했다.
국내 특정 조직들을 대상으로 발송된 이메일의 첨부 파일 형태로 유포된 이 한글파일은 HncTextArt_hplg에 존재하는 스택(Stack)의 경계를 체크하지 않아 발생하는 버퍼오버플로우(Buffer Overflow) 취약점이며, 해당 취약점은 2010년부터 지속적으로 악용돼 왔던 OO 소프트웨어 취약점들 중 하나다.
① 메모리를 프로그래머가 관리하는 플랫폼을 사용(C나 C++)하는 경우 메모리 버퍼의 경계 값을 넘어서 메모리를 읽거나 저장하지 않도록 경계설정 또는 검사 수행
② 개발 시, 메모리 버퍼오버플로우를 발생시킬 수 있는 취약한 API를 사용 금지
① 실행되는 시스템에 Non-executable Stack, 랜덤스택(ASLR), 스택가드(StackGuard)와 같은 메모리 보호 정책이 적용되도록 해야 하며, 프로그램 코딩 시 안전한 함수를 사용. 메모리 사용 시 경계 값을 검사하고 사용(시큐어코딩 규칙)
② 메모리 버퍼오버플로우 취약성을 가지고 있는 함수들을 식별하여 개발자들이 해당 함수를 사용 제한(시큐어코딩 규칙)
스택(Stack)이나 힙(Heap)에 할당되는 메모리에 문자열 등이 저장될 때 최초 정의된 메모리의 크기를 초과하여 문자열을 저장하는 경우 버퍼 오버플로우가 발생한다.
공격자는 외부입력값에 포맷 문자열을 삽입하여 취약한 프로세스를 공격하거나 메모리 내용을 읽거나 쓸 수 있다. 그 결과, 공격자는 취약한 프로세스의 권한을 취득하여 임의의 코드를 실행할 수 있다.