본문 바로가기
System/Windows

메모리 보호 기법 DEP/NX

by bbolmin 2012. 9. 5.

 

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