상세 컨텐츠

본문 제목

Frame faking(Fake ebp)

본문

Frame faking이란 ?

 

- 가짜 스택 프레임 포인터(Stack Frame Pointer)를 만들어 프로그램의 실행 흐름을 제어하는 것이다.

  • Return Address영역 까지만 덮어쓸수 있을 경우 사용 가능하다.
  • leave-ret Gadget을 사용하여 IP(Instruction Pointer)를 조작한다.

 

LEAVE & RET instruction

  • LEAVE 명령어는 다음과 같이 동작한다.
    • RBP(EBP) 레지스터에 저장된 값을 RSP(ESP) 레지스터에 저장한다.
    • RSP(ESP) 레지스터가 가리키는 Stack영역에 값을 RBP(EBP) 레지스터에 저장한다.
  • RET 명령어는 다음과 같이 동작한다.
    • RSP(ESP) 레지스터가 가리키는 Stack영역에 값을 RIP(EIP) 레지스터에 저장한다.
    • JMP 명령어를 이용해 RIP(EIP)에 저장된 영역으로 이동한다.
Instruction 64 bit 32 bit
leave

MOV RSP, RBP

POP RBP

MOV ESP, EBP

POP EBP

ret

POP RIP

JMP RIP

POP EIP

JMP EIP

[EXAMPLE]

- 함수 프롤로그가 진행되어, ebp와 esp가 같을 때의 모습이다.

- buf + 4 위치에 Shellcode를 넣고, buf에는 Shellcode의 시작 주소 &(buf + 4)를 넣는다.

- SFP는 &(buf - 4), RET는 leave-ret Gadget으로 덮어 씌운다.

 

- 다음 상태에서 함수 에필로그의 leave 명령어가 진행된다.

 

- leave 명령어가 수행되면서 ebp는 &(buf - 4)로가고, esp는 RET을 가리킬 것이다.

- ret 명령어도 진행해 보자

 

 - ret 명령어로, esp는 RET+4, eip는 RET을 가리키며 JMP eip로 인해 다시 leave-ret이 실행된다.

 

- leave 명령어가 수행되어 esp가 buf의 시작 주소로 이동한다. (mov esp, ebp ; pop ebp)

 

- 현재 esp는 buf의 시작 주소를 가리키고 있다. buf의 시작 주소에는 Shellcode의 시작 주소가 들어 있다.

- ret 명령어가 수행되어 Shellcode의 시작 주소가 EIP로 저장되고, JMP EIP를 통해 Shellcode가 실행된다.

 

Proof of concept

  • 해당 프로그램은 Stack address, Libc address를 출력한다.
    • Stack address: buf
    • Libc address: printf_addr
  • read()함수를 이용해 사용자로 부터 70개의 문자를 입력 받는다.
    • 이로 인해 Return address영역까지만 값을 덮어쓸 수 있다.

- buf ~ ret : 66 bytes

 

- RTL을 사용하기 위해 printf, system, /bin/sh의 offset을 구한다.

 

- leave-ret Gadget을 libc에서 찾고, gdb에서 해당 offset이 맞는지 확인한다. 이제 준비는 끝났다.

 

- 다음과 같이 Stack 영역을 덮어써서 Frame faking을 사용할 수 있다.

  • Frame Pointer 영역 : "RTL 코드가 저장되어 있는 주소 - 0x4" 주소를 저장
  • Return Address 영역 : leave 명령어가 저장되어 있는 주소를 저장
buf[0] 0x90909090
buf[4] system function address in libc
buf[8] dummy
buf[12] "/bin/sh" address
- -
Frame Pointer buf[0] STACK address
Return Address leave-ret address in libc

Exploit

 

 

REF: https://www.lazenca.net/pages/viewpage.action?pageId=12189944

 

04.Frame faking(Fake ebp) - TechNote - Lazenca.0x0

Excuse the ads! We need some help to keep our site up. List Frame faking(Fake ebp) Frame faking이란 가짜 스택 프레임 포인터(Stack Frame Pointer)를 만들어 프로그램의 실행 흐름을 제어하는 것입니다.Return Address영역 까��

www.lazenca.net

https://d4m0n.tistory.com/88?category=796362

 

Fake EBP

Fake EBP란? Fake EBP는 EBP를 조작하여 leave-ret Gadget을 이용해 IP(Instruction Pointer)를 조작하는 공격 기법을 말한다. 이 기법은 주로 RET에 스택 주소와 라이브러리 주소를 덮어씌울 수 없을 때 사용한다..

d4m0n.tistory.com

 

댓글 영역