DEP(Data Execution Protection)란
데이터 실행 방지로 스택이나 힙에서의 쉘 코드 실행을 막아주는 메모리 보호 기법이다.
종류
HardWare DEP : 가상 메모리 페이지 단위로 해당 메모리에서 코드를 실행할 수 없음을 나타낸다.
SoftWare DEP : seh overwrite같이 특정 유형의 악의적인 코드 공격을 막아준다. (SafeSEH)
Windows에 DEP정책
OptIn : default설정으로 필수적인 Windows 프로그램 및 서비스에만 사용(DEP가 set된 프로그램)
OptOut : 사용자가 직접 선택한 항목을 제외한 모든 프로그램 및 서비스에 사용
AlwaysOn : 모든 프로세스에 항상 DEP 적용
AlwaysOff : DEP를 사용하지 않음
OptIn, OptOut일 경우에는 runtime에서 DEP On/Off가 가능하지만 AlwaysOn, AlwaysOff는 불가능함.
OptIn에서 DEP가 set된 프로그램은 IMAGE_OPTIONAL_HEADER의 DLL Characteristics의 NX_COMPAT 비트를 확인하면 된다.
- notepad를 확인해본 결과 -
실행 창에 sysdm.cpl로 시스템 속성을 들어가서 DEP에 대한 설정을 할 수 있다.
(OptIn과 OptOut에 대한 설정을 할 수 있다.)
AlwaysOn이나 AlwaysOff설정을 하려면 관리자 권한의 cmd창에서 아래와 같은 명령으로 설정 할 수 있다.
bcdedit.exe /set {current} nx AlwaysOff
bcdedit.exe /set {current} nx AlwaysOn
bcdedit.exe /set {current} nx OptIn
bcdedit.exe /set {current} nx OptOut
DEP적용시 bof공격은 RTL로 우회 가능하며 ASLR까지 적용되어 있다면 ROP를 사용하면 될 것이다.
관련 함수
VirtualProtect()
VirtualAlloc()
HeapAlloc()
HeapCreate()
SetProcessDEPPolicy()
NtSetInformationProcess()
WriteProcessMemory()
등 ..
1) ROP이용
- 1. VirtualAlloc()같은 함수로 실행비트가 있도록 메모리 할당.
- 2. shellcode를 VirtualAlloc으로 할당받은 영역에 복사.
- 3. 해당 shellcode 실행
2) ROP이용
RTL을 ROP로 WinExec함수 호출 + 인자 구성
'System > Windows' 카테고리의 다른 글
pydbg로 Fuzzer 만들기 (0) | 2014.04.27 |
---|---|
Windows에서의 스택 할당 (0) | 2013.12.28 |
FileFuzz, Peach Fuzzer 링크 (0) | 2013.11.12 |
windows bof [basic stack overflow] (2) | 2012.04.08 |
windows bof [쉘 코드 만들기] (0) | 2012.04.08 |