2019-01-21
DEP Policy
- DEP 정책은 Data, Heap, Stack Section에서 코드의 실행을 방지
- 앞에서 수행했던 RET 기반의 공격과 SEH 기반 공격에서 쉘코드가 Stack에 존재하므로 DEP에 의해 쉘코드의 실행이 방지됨
RTL
Return To Library
bufferoverflow에 취약한 소스코드- Stack에 존재하는 RET 명령에 의해 수행되는 Return Addr.주소에 Library 함수 주소를 입력하고 Library 함수가 참조하는 인자영역에 알맞은 인자를 구성함으로써 실행 가능한 영역에서만 실행하여 원하는 PAYLOAD를 실행시킬수 있다
- SEH기반인 경우 ADD ESP, xx-RET 명령을 통해 원하는 구성된 RTL 영역을 실행시키게 할수 있다
Direct-RET (Return to Shell code)
Trampoline (Return to JMP ESP)
NOP Slide
DEP: Trampolin 과 NOP Slide 를 막을 수 있음
RTL을 이용하여 다시 뚫음 - Windows에서는 사용이 어려움
ROP : RTL 대신 사용하는 ROP
ASLR
ROP : Static DLL에 대하여 사용(ASLR의 부족한 부분에 대해)
ROP
Return Oriented Programming
- ByPass DEP
- RTL 구성
- ShellCode를 실행 가능한 영역으로 복사 후 실행
- ShellCode를 실행 가능한 영역으로 설정 후 실행
- ShellCode를 실행하기 전에 DEP 설정 변경 후 실행 (단, Permanent Flag에 영향을 받음)
- ROP
- 기본 개념은 RTL과 동일
- 프로그램 내부에 있는 Module의 실행가능한 영역에 있는 가젯을 이용하여 공격코드 생성
- ROP를 이용하여 RTL을 구성할 수 있으며, 보통 RTL의 구성 목적은 ShellCode가 있는 영역을 실행가능하게 하거나, 실행가능한 영역으로 복사하거나, DEP정책을 수정하게 끔 구성
- Gadjet
- 기계어코드의 끝에 ret명령을 포함하는 명령의 집합
- ret명령으로 Gadjet이 실행된 후 Gadjet의 ret명령에 의해 다음 Gadjet을 실행
- Gadjet을 연속으로 호출하여 원하는 명령을 수행
- Gadjet 사용 조건
- NULL이 입력되지 않아야 하는 경우 주소에 NULL이 포함되지 않게 함
- 가젯이 존재하는 모듈은 주소가 변경(ASLR)되지 않아야 함
- Weapon
- DEP를 우회하기 위해 사용되는 Windows API
- DEP를 우회하기 위한 접근방식
- RTL(Return To Library) 방식을 이용
- 대상 프로세스의 DEP 정책을 변경 후 ShellCode 실행
- ShellCode가 존재하는 메모리 영역을 실행가능한 영역으로 변경 후 실행
- 새로운 실행가능한 영역을 할당 후 ShellCode를 복사한 후 실행
- 환경에 따라 구성이 가능하거나 용이한 API를 선정하여 ROP Chain 구성
- https://msdn.microsoft.com/en-us/library/windows/desktop/aa366898(v=vs.85).aspx
No comments:
Post a Comment