https://www.corelan.be/index.php/2009/09/21/exploit-writing-tutorial-part-6-bypassing-stack-cookies-safeseh-hw-dep-and-aslr/

 

Exploit writing tutorial part 6 : Bypassing Stack Cookies, SafeSeh, SEHOP, HW DEP and ASLR | Corelan Cybersecurity Research

Introduction In all previous tutorials in this Exploit writing tutorial series, we have looked at building exploits that would work on Windows XP / 2003 server. The success of all of these exploits (whether they are based on direct ret overwrite or excepti

www.corelan.be

 

 

이번 글에서는 다양한 windows 보호 기법을 알아 보겠습니다.

 

1. Stack Cookie

stack cookie는 컴파일러 옵션입니다. 

프로그램 실행시 Data 섹션에 Master Cookie를 랜덤한 값으로 만들고 ... <- 리눅스 canary와 유사합니다.

추가로 보호기법 성능 이슈를 줄이기 위해서, 지역변수에 입력 받는 버퍼가 없는 경우에는 stack frame에 cookie를 넣지 않습니다. <- 리눅스에도 있나..?

그리고 지역변수 순서 변경(reordering)를 통해 overflow가 발생하더라도 다른 지역변수를 덮지 못하게 합니다.

 

Stack Cookie 우회 방법

A. stack cookie leak

B. Master Cookie <- arbitrary write

C. SEH Overwrite <- Cookie overwrite 되면 Exception 발생

D.  buffer write가 없는 stack frame 사용 <- stack cookie가 없기 때문

E. stack 지역 변수만 overwrite

 

일단, cookie 값이 변하는 지 확인해 보자!

 

 

 

 

2. SafeSEH(추후 다시 정리!!!!)

SafeSEH는 SEH Overwrite를 막기 위한 보호기법입니다. 

프로그램 실행 시 예외가 발생하면 예외 핸들러를 호출하기 전 ntdll.dll의 KiUserExceptionDispatcher 함수가 호출됩니다.

이 함수가 호출되면 예외 핸들러의 주소가 변조되었는지 확인 후 적절한 핸들러라면 호출합니다.

변조된 핸들러로 판단되면 다음 핸들러로 넘어가고 변조를 확인 <- 반복

 

SafeSEH 우회하기

1. 모듈 중 SafeSEH가 적용되지 않은 모듈이 있다면 해당 모듈에서 가젯을 찾아 핸들러에 덮는다.

2. shellcode를 heap에 올리고, 핸들러를 heap 주소로 덮으면 가능 -> heap spray 기법

 

 

 

3. DEP(Data Execution Prevention)

DEP는 실행 권한을 제거해 shellcode를 실행할 수 없도록 합니다. windows xp sp2부터 도입되었습니다.

DEP는 하드웨어 기반 DEP, 소프트웨어 DEP 두 가지 모드가 존재합니다.

 

하드웨어 기반 DEP는 메모리 페이지를 실행 불가능한 영역으로 마크합니다.(NX bit)

소프트웨어 기반 DEP는 코드 실행은 보호하지 못하지만 SEH 기반 공격은 막을 수 있습니다.

즉, 소프트웨어 DEP는 SafeSEH라고 할 수 있습니다.

 

프로세서나 시스템이 NX bit를 지원한다면 윈도우 DEP는 곧 하드웨어 DEP가 됩니다. 만약, 프로세서가 NX를 지원하지 않는다면, 사용자는 DEP가 아닌 SafeSEH 기능만 사용할 수 있습니다.

 

 

하드웨어 DEP 우회

A. ret2libc

B. ZwProtectVirtualMemory <- RTL Chain을 걸어 메모리 특정 부분의 실행 권한을 재정의 하는 기법

C.Disable DEP for the process

D. ROP

 

 

 

4. ASLR

프로세스 내의 다양한 오브젝트에 대하여 실행 시 주소를 랜덤화 시킵니다.

실행파일 image, library, stack, heap, TEB, PEB ... 등등

따라서, 공격자는 오브젝트에 대한 정확한 주소를 예측할 수 없으므로 공격에 실패하게 됩니다.

 

 

ASLR 우회

A. memory leak <- 특정 주소 leak 하고 offset 계산하면 가능

B. Brute Force <- x86 바이너리 heap 영역에서 사용(예측해야 하는 주소 길이가 짧고 확률적으로 예측할 수 있기 때문)(heap spray 말하는 건가?)

 

'윈도우 버그 헌팅' 카테고리의 다른 글

Exploit writing tutorial part 8  (0) 2024.03.06
Exploit writing tutorial part 7  (0) 2024.03.05
Exploit writing tutorial part 3  (0) 2024.02.21
Exploit writing tutorial part 2  (0) 2024.02.20
Exploit writing tutorial part 1  (0) 2024.02.20