- buffer overflow
할당된 Memory 영역보다 큰 값이 입력될 때 발생
– 실행 흐름 변경 가능 - integer overflow
자료형의 지정된 범위보다 큰 값이 입력될 때 발생
– 분기 조작
– 메모리 영역 할당 사이즈 조작 - format string bug
Printf 함수의 Format String(%d, %s, etc..)을 지정하지 않고 사용함으로써, 공격자가 원하는 메모리 위치에 읽기 쓰기가 가능한 취약점
– 실행 흐름 변경
– 시스템 명령어 실행 - out of bounds
지정된 범위 이상의 메모리에 접근할 수 있는 취약점
– 특정 메모리 값 읽기 / 쓰기 - info leak
메모리 정보가 노출되는 취약점
– 메모리 상의 중요 정보를 통해 Exploit Code 작성에 도움 - type confusion
객체 타입에 혼동이 있는 취약점
– 실행 흐름 변경 - use after free
해제된 메모리를 다시 사용할 떄 발생하는 취약점
– 실행 흐름 변경
메모리 취약점 보호 기법 및 우회 기법
공통
stack cookie / stack canary
함수의 시작 단계에서 Buffer에 특정 값을 삽입하고 함수 종료 단계에서 확인함으로서, 변조가 발생했는지 여부를 확인하는 Stack memory 보호기법
DEP /NX-bit
쓰기가 가능한 영역에서는 실행을, 실행이 가능한 영역에서는 쓰기를 방지하는 보호기법
ASLR
코드 및 모듈 등의 주소 값을 실행될 때 마다 랜덤하게 지정함으로서, Exploit 코드 실행을 방지하는 보호기법
Windows
CFG
컴파일과 링크 시점에 모든 간접호출 전에 타겟체크를 위한 추가 호출을 삽입함으로써 간접호출을 보호하는 기법
Linux
ASCII Armor
함수의 첫 번째 Bytes를 무조건 “0x00″으로 설정하여, Exploit 코드 실행을 방지하는 보호기법