Memory Corruption 종류

  1. buffer overflow
    할당된 Memory 영역보다 큰 값이 입력될 때 발생
    – 실행 흐름 변경 가능
  2. integer overflow
    자료형의 지정된 범위보다 큰 값이 입력될 때 발생
    – 분기 조작
    – 메모리 영역 할당 사이즈 조작
  3. format string bug
    Printf 함수의 Format String(%d, %s, etc..)을 지정하지 않고 사용함으로써, 공격자가 원하는 메모리 위치에 읽기 쓰기가 가능한 취약점
    – 실행 흐름 변경
    – 시스템 명령어 실행
  4. out of bounds
    지정된 범위 이상의 메모리에 접근할 수 있는 취약점
    – 특정 메모리 값 읽기 / 쓰기
  5. info leak
    메모리 정보가 노출되는 취약점
    – 메모리 상의 중요 정보를 통해 Exploit Code 작성에 도움
  6. type confusion
    객체 타입에 혼동이 있는 취약점
    – 실행 흐름 변경
  7. use after free
    해제된 메모리를 다시 사용할 떄 발생하는 취약점
    – 실행 흐름 변경

메모리 취약점 보호 기법 및 우회 기법

공통
stack cookie / stack canary
함수의 시작 단계에서 Buffer에 특정 값을 삽입하고 함수 종료 단계에서 확인함으로서, 변조가 발생했는지 여부를 확인하는 Stack memory 보호기법

DEP /NX-bit
쓰기가 가능한 영역에서는 실행을, 실행이 가능한 영역에서는 쓰기를 방지하는 보호기법

ASLR
코드 및 모듈 등의 주소 값을 실행될 때 마다 랜덤하게 지정함으로서, Exploit 코드 실행을 방지하는 보호기법

Windows

CFG
컴파일과 링크 시점에 모든 간접호출 전에 타겟체크를 위한 추가 호출을 삽입함으로써 간접호출을 보호하는 기법

Linux

ASCII Armor
함수의 첫 번째 Bytes를 무조건 “0x00″으로 설정하여, Exploit 코드 실행을 방지하는 보호기법


게시됨

카테고리

작성자

태그: