DEP는 힙과 스택 같은 메모리 영역에 있는 코드가 실행되는 것을 방지하기 위해 마이크로소프트 윈도도우에 구현된 보안 기능이다.
공격 코드가 자신의 셸 코드를 실행시키려는 대부분의 시도를 무력화시킬 수 있다.
왜그럴까 ? :
대부분의 공격 코드는 자신의 셸 코드를 힙이나 스택에 위치시키기 때문이다.
하지만 네이티브 윈도우API를 통해 DEP를 우회할 수 있는 트릭이 존재한다고 한다.
프로세스의 DEP 설정을 비활성화시키는 데 사용되는 윈도우 API는
NtSetInformationProcess() 다.
NtSetInformationProcess() 프토토타입
-----------------------------------------------------------------
NTSTATUS NtSetInformationProcess(
IN HANDLE hProcessHandle,
IN PROCESS_INFORMATION_CLASS ProcessInformationClass,
IN PVOID ProcessInfromation
IN ULONG ProcessInformationLength );
-----------------------------------------------------------------
프로세스의 DEP 설정을 비활성화 시키려면 NtSetInformationProcess() API의 ProcessInformationClass 파라미터에 ProcessExecuteFlags(0x22)를 설정하고, ProcessInfroamtion 파라미터에 MEM_EXECUTE_OPTION_ENABLE(0x2) 값을 설정하고 호출하면 된다.
하지만 함수를 직접 호출하면 문제가 생긴다.
NULL 파라미터가 포함되는 경우에는 말이다!!
따라서 스택에 존재하는 파라미터를 이용하는게 상책이다.
NtSetInformationProcess() 를 호출해라!
ntdll.dll의 디스어셈블된 코드
findantiedep.py 가 필요하다. 이건 immunity디버거에 있다.
공격 코드 문자열을 단순히 복사하기만 하면 JMP ESP 명령을 통해 제어권을 넘길 수 있다.
JMP ESP 입력
이 스크립트를 이용하면 DEP가 설정된다.
'파이썬 스터디 과제 > 파이썬 해킹 프로그래밍' 카테고리의 다른 글
5장-4 악성 코드의 안티 디버깅 루틴 무력화-2(반복적인 프로세스 탐지 기법 우회) (0) | 2015.01.26 |
---|---|
5장-4 악성 코드의 안티 디버깅 루틴 무력화 (0) | 2015.01.26 |
5장-3 공격코드개발-2 문자필터링 (0) | 2015.01.26 |
5장-3 공격 코드 개발 (0) | 2015.01.25 |
5장-2 Immunity 디버거 101 (0) | 2015.01.25 |
댓글