본문 바로가기

System/Windows

System/Hacking/DEP와 DEP 우회

반응형




DEP 기법
DEP(Data Execution Prevention)란, 실행 권한이 없는 메모리 영역의 코드가 실행되지 못하도록 방지하는 기법
  • 스택 영역, 힙 영역의 실행 코드 방지

DEP의 우회
- 초기 기법 : RTL 기법
- 현재 기법 : ROP 기법
  • RTL Chaining 기법
-> DEP와 ASLR은 Exploit 방지의 핵심

DEP 종류
- H/W 기반, S/W 기반
  • 최근 CPU에서는 대부분 H/W기반 지원
  • 옵션에 따라 여러 가지 방식으로 동작

DEP 옵션

옵션
설명
Optin
지정된 바이너리만 보호
OptOut
지정된 바이너리를 제외하고 모두 보호
AlwaysOn
모든 프로세스를 항상 보호
AlwaysOff
모든 프로세스를 보호하지 않음

  • 기본 동작 방식 
    • windows 7 : OptIn
      추가적으로 Permanent DEP 옵션 지원
      Permanent DEP : 한번 DEP 정책이 활성화 되면 API를 이용하여 비활성화 할 수 없도록 함.

      1.DEP 정책 설정 확인
      - 시스템 속성 > 고급 > 성능의 설정(S) > 데이터 실행 방지(DEP) > 두가지 설정 가능

      데이터 실행 방지(DEP)를 필수 Windows 프로그램 및 서비스에만 사용(T) > OptIn
      데이터 실 방지(DEP)를 사용자가 직접 선택한 항목을 제외한 모든 프로그램 및 서비스에 사용(U) > OptOut

      2.명령어로 확인
      bcdedit / enum | findstr nx

      3.툴로 확인 
      Process Explorer

      4.mona의 modules 명령으로 확인
       - NXCompat이 true이면 permanent DEP 플래그 활성화

OptOut 후 공격
- 권한 에러 발생 > DEP로 인한 실패 :  스택에 실행 권한이 없다.

DEP 우회
1.DEP 비활성화
- SetProcessDEPPolicy() 함수를 이용해 현재 실행 중인 프로세스의 DEP 동작 모드를 변경
  • 제약 사항
    1.DEP 동작모드가 Always On/Off일 때는 동작하지 않음
    2.모듈이 NXCOMPAT으로 링크되어 있으면(Permanent) 동작하지 않음
    3.프로세스에서 딱 한번 실행이 가능하여, 프로세스 내부에서 함수를 호출할 경우 사용 할 수 없음.

2.실행권한이 존재하는 코드 블록 이용
로드된 모듈이나, 현재 프로세스의 코드 영역에 이미 실행권한이 존재 하므로 이러한 코드 중 원하는 기능을 하는 함수코드를 호출하는 것

  • RTL(Return To Library) 기술
    • ex) 리턴주소를 스택이 아닌 WinExeC() 함수의 시작 주소로 변경하여 원하는 명령 실행
    • 제약 사항
      ASLR로 인해 함수 주소가 가변적임


반응형