이번 글에서는 다양한 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 |