반응형
ROP(Return Oriented Programming)
ROP는 RTL Chain을 이용하여 몇 가지 유용한 API를 호출하여 DEP를 우회하는 방법.
- RTL와 비슷하게 실행권한이 존재하는 코드를 이용
- 함수뿐만 아니라 Gadget을 이용 하여 Chain만듬.
RTL (Return To Library)
쉘 코드가 아닌 Library로 돌아간다.
- 쉘코드를 직접 변조하지 않고, 이미 실행권한이 존재하는 라이브러리들의 코드 영역으로 변조.
- 함수에 필요한 인자값들은 스택에 미리 구성
- 로드된 모듈의 특정 함수만 사용 가능
RTL 접근
- 호출 하는 함수의 인자가 미리 호출어드레스 아래 스택에 구성되어 있어야 한다.
1.EIP Overwrite로 EIP를 원하는 값으로 변경이 가능
2.변경한 RET이 실행되어 WinExec 함수(예시)가 호출
- RET이 실행되면서, ESP가 하나 상승하고, 결과적으로 41414141의 값에 ESP값이 위치함.
- winExec의 인자값 00454A5 "calc", 계산기를 실행하는 인자가 들어 있음.
> 결과적으로 계산기가 실행됨.
- 제약사항
- 함수 주소를 정확히 알고 있어야함
- 인자값에 사용될 문자열 주소를 알아야함
- ASLR,Safe SEH이 기본적으로 Kernel32.DLL과 User32.DLL에 적용됨.
Chaining RTL
- RTL의 문제점 : 한번만 함수를 호출 할 수 있다.
- Chaining RTL : EIP를 변경하여 함수A가 실행된후, RET가 실행되면 함수 B가 실행되는 구조
- 함수의 호출 규약에 따라 POP POP RET or POP RET이 필요한 경우도 존재
- 함수 연속 실행 조건 : ESP를 실행할 함수가 존재하는 주소까지 ESP를 이동
반응형