제가 분석한 바로는 EMET 4.1 에서는 ROP를 차단하기 위해 주요 함수들 - VirtualProtect / VitualAlloc 등을 후킹 한 뒤, 해당 함수들의 호출 지점을 디스어셈블링 하여 해당 함수가 Call로 호출되는지 판단합니다.
패킹된 EXE면 항상 Call 한다는 보장이 없기 때문에, 테스트를 해보았습니다.
해당 EXE를 빌드 후, CodeVirtualizing 하였습니다
그 다음 해당 EXE를 EMET로 보호 후, 디버거를 붙인 다음 VirtualProtect 지점에 BP를 걸었습니다.
ESP가 가리키는 리턴 주소가 0x40A277입니다. 따라가봅니다.
0x40A277 부분이 CALL이 아닌 JMP군요. 논패킹 EXE라면 아래 그림과 같이 되어있습니다.
EMET는 호출 지점이 Call이 아니면 진단합니다.
보통 ROP는 RETN / JMP 로 함수를 호출하기 때문에 이런 방어법은 강력한 차단 수단이 될 수 있지만, 패킹된 프로그램의 경우 오진이 발생하니 패킹 여부를 인식할 필요가 있을 것 같습니다.
'Windows > Hacking & Vulnerability' 카테고리의 다른 글
브라우저 취약점 - Shellcode의 bad char로 인한 에러 해결 (0) | 2014.03.22 |
---|---|
EMET 4.1 - Force ASLR (0) | 2014.03.20 |
EMET 4.1 - 주요 후킹 API 그리고 Deep Hooks란? (0) | 2014.03.18 |
Windows 기반의 ROP 공격 #1 (0) | 2013.12.16 |
커널 후킹으로 프로세스 핸들 보호하기 (3) | 2012.10.11 |