이번 글에서는 DEP와 우회 방법에 대해 알아 보겠습니다.
1. win32 하드웨어 DEP
쉽게 메모리의 특정 영역을 시행 불가능 영역으로 표시해서 데이터 실행을 막는 기법이다.
만약, DEP로 보호되고 있는 페이지에서 코드를 실행하려는 시도가 포착되면, 접근 위반(STATUS_ACCESS_VIOLATION (0xC0000005))이 발생한다. 대부분의 경우, 프로세스 종료로 이어진다.
nop도 DEP가 활성화 된 상태에서는 실행되지 않는다.
각각의 가상 메모리 페이지에 대한 DEP 함수는 해당 페이지에 표시를 하기 위해 PTE(페이지 테이블 엔트리)에 있는 비트를 변화 시킨다.
OS안에서 DEP가 작동하는 방법은 아래와 같이 OS DEP 설정에 따라 달라진다.
- OptIn: 한정된 윈도우 시스템 모듈/바이너리 세트맊 DEP에 의해 보호된다.
- OptOut: 예외 리스트에 등록한 프로세스를 제외한 윈도우 시스템의 모든 프로그램, 프로세스, 서비스 가 보호 된다.
- AlwaysOn: 윈도우 시스템의 모든 프로그램, 프로세스, 서비스 등이 보호된다. 예외는 없다.
- AlwaysOff: DEP가 꺼진 상태다.
DEP 우회
1. 명령 실행(WinExec <- RTL 기법)
2. 스택에 존재하는 shellcode 페이지를 실행 가능하도록 표시 후 shellcode로 점프
3. shellcode를 실행 가능 영역으로 복사하고 그 위치로 점프(공격자는 메모리를 할당한 뒤 해당 영역을 실행 가능한 영역으로 먼저 표시해야 할 수 있음)
4. shellcode를 실행하기 전에 현재 프로세스의 DEP 설정을 변경
가장 성공률이 높은 기법은 RTL 기법이라고 한다. 하지만, RTL로는 shellcode를 만들기 힘들다.
우리가 원하는 것은 DEP 설정 우회/변경을 시도해서 shellcode가 실행되도록 하는 것이다. 다행히도, 페이지를 실행 가능하도록 마크하는 것과 DEP 정책 설정을 바꾸는 것 등은 네이티브 윈도우 OS API 또는 함수 호출을 사용해 수행할 수 있다.
ㄷㄷ
걍 ROP 쓰면 됨
DEP를 우회할 수 있는 윈도우 함수
아래 제시된 함수들은 DEP를 우회 또는 비활성화 시킬 수 있는 주요 함수 목록입니다.
1. VirtualAlloc(MEM_COMMIT + PAGE_READWRITE_EXECUTE) + copy memory
위 함수는 실행 가능한 새로운 메모리 영역을 생성하고, shellcode를 거기에 복사한 다음 실행할 수 있도록 합니다.
이 기법은 두 개의 API를 서로 체인으로 연결하는 작업이 필요합니다.
2. HeapCreate(HEAP_CREATE_ENABLE_EXECUTE) + HeapAlloc() + copy memory
위 함수는 VirtualAlloc와 비슷한 원리로 동작하지만, 3개의 API를 체인으로 연결해야 한다는 점이 다릅니다.
3. SetProcessDEPPolicy()
위 함수는 현재 프로세스에 대한 DEP 정책을 변경시킬 수 있습니다.
단, DEP 정책이 Optin 또는 OptOut일 경우에만 해당 합니다.
4. NtSetInformationProcess()
위 함수도 마찬가지로 현재 프로세스에 대한 DEP 정책을 바꿀 수 있습니다.
5. VirtualProtect(PAGE_READ_WRITE_EXECUTE)
위 함수는 주어진 메모리 페이지에 대한 보호 수준을 변경시켜 shellcode가 위치한 메모리 영역을 실행 가능하도록 마크합니다.
6. WriteProcessMemory()
위 함수는 shellcode를 쓰기와 실행이 허용된 다른 메모리 위치로 복사하는 함수입니다.
6가지 함수들을 사용하려면 ROP 해야함 ㅇㅇ
참고해서 사용하자
이후 블로그 내용은 수동으로 가젯 찾고 ROP 하는 내용인데 굳이 정리할 필요가 없어 보여서 안넣고 (실제 익스 할 때는 툴 사용할 거 같아서...)
x86 환경에서 DEP 우회하는 다른 블로그 글을 보는 게 좋아 보인다.
아래 글 보자 ㅇㅇ
https://lidron.tistory.com/155
'윈도우 버그 헌팅' 카테고리의 다른 글
Easy RM to MP3 Converter(BOF 실습 - mona) (0) | 2024.03.15 |
---|---|
Easy RM to MP3 Converter(BOF 실습) (0) | 2024.03.14 |
Exploit writing tutorial part 9 (0) | 2024.03.07 |
Exploit writing tutorial part 8 (0) | 2024.03.06 |
Exploit writing tutorial part 7 (0) | 2024.03.05 |