Exploit Prevention의 다층 방어 구조
Exploit Prevention은 단일 기술이 아니라 메모리 보호, 주소 공간 무작위화, 제어 흐름 검증을 포함한 여러 완화 기법의 조합입니다. 이러한 기법들은 하드웨어(NX 비트), 운영체제 커널, 컴파일러 수준에서 작동하여 방어 깊이(Defense-in-Depth)를 형성합니다. 각 계층이 독립적으로 작동하므로, 한 기술의 우회 시도는 다른 계층에서 탐지 및 차단됩니다.
핵심 기술 메커니즘
DEP(Data Execution Prevention)/NX 비트: 메모리 페이지를 데이터와 코드 영역으로 명확히 구분합니다. 스택과 힙 영역을 비실행(Non-Executable) 상태로 표시하여 공격자가 주입한 셸코드 실행을 CPU 수준에서 차단합니다.
ASLR(Address Space Layout Randomization): 프로세스 시작 시 실행 파일, 라이브러리, 스택, 힙의 기본 주소를 무작위로 배치합니다. 64비트 주소 공간에서 이 무작위화 엔트로피는 고정 주소 참조 공격을 사실상 무효화합니다.
CFG(Control Flow Guard): 간접 함수 호출 전에 컴파일 타임에 삽입된 검증 명령어를 통해 호출 대상이 유효한지 확인합니다. 함수 포인터 오버라이트 후 임의 코드 실행을 시도하는 공격을 원점에서 차단합니다.
실무 배포 시 주의점
DEP, ASLR, 스택 카나리, CFG를 시스템 전체에 일관되게 적용해야 방어 효과가 최대화됩니다. Windows에서는 /DYNAMICBASE 링커 플래그로 ASLR을 활성화하고, Linux에서는 kernel.randomize_va_space=2로 설정합니다. 모든 레이어가 활성화되어야 ROP(Return-Oriented Programming), JIT 분사(JIT Spraying) 같은 고급 공격 기법의 성공률이 현저히 낮아집니다.