Security || AI

FPO (Frame Pointer Overflow) 본문

Hacking&Security/시스템[System]

FPO (Frame Pointer Overflow)

보안&인공지능 2021. 2. 11. 04:02

Dreamhack 문제를 풀다가 공부하고 넘어가야할 것 같아서 공부하게된 개념이다.

 

FPO(Frame Pointer Overflow)란 무엇인가?

ret위의 sfp영역의 1byte를 오버플로우시켜 eip를  변경시키는 기법이다.

여기서, eip를 쉘코드를 실행시키는 함수 등으로 변조시킬 수 있다.

 

FPO의 발생 조건

1. 메인 함수 이외의 서브 함수가 필요하다.

2. SFP영역에서 1바이트 오버플로우가 일어나야한다.

 

원리

1. 서브함수의 스택은 메인함수의 스택 위에 쌓인다.

2. 서브함수가 종료될 때, 메인함수로 돌아가야하는 주소를 sfp가 저장한다. 이때, sfp를 변조시켜 공격하는 것이다.

 

알아야할 개념

함수의 에필로그는 아래의 과정을 거친다.

leave
ret

 

leave의 과정:

move esp, ebp
pop ebp

esp에 ebp의 값을 넣어 esp와 ebp가 같은 값을 가지게 한다.

그 다음, pop ebp를 통해 ebp의 값을 뺀다. 이 때, sfp(이전 함수의 ebp)의 값이 ebp에 들어가게 된다.

이렇게 되면, 서브 함수는 사라지고, 메인 함수가 다시 나오게 되는 구조이다.

 

ret의 과정:

pop eip
jmp eip

pop을 통해 eip를 꺼낸 다음, push eip를 통해 ret에 eip를 넣는다.

그 다음, jmp eip를 통해 해당 함수의 다음 명령어를 실행하게 된다.

 

이러한 에필로그 과정을 보면, esp에 쉘코드 주소가 들어가 있다면, eip가 쉘코드의 주소를 카리키고 쉘코드가 실행될 것이다.

반응형