Fake ebp (가짜 ebp) 기법에 대해 언급하려 한다.
들어가기 이전에, 머리에 상당히 쥐가 날 수 있다는 점..
늘 새로운 기법을 공부할 때면 사용 가능한 환경과 이유가 있겠지?
fake ebp 기법은 언제쓸까?
RET 이후로 덮어쓸 수 없을 때, 그리고
RET 자리에 스택 이나 라이브러리 주소를 필터해놓았을 경우 이다.
이런 경우에 RET에서 원하는 위치로 eip를 뽑아내야 하는데, 그렇지 못하다.
그래서 ebp위치를 옮겨 우리가 원하는 위치에서 원하는 RET를 뽑아내는 것이
Fake ebp 기법이다. 간단하게 말하자면.
fake ebp는 함수의 에필로그가 핵심이다.
leave와 ret
이놈들. 알다시피 leave ret 은 명령어를 해부하면 아래와 같다.
결론적으로 말하자면 에필로그를 이용해서 esp를 컨트롤하여
원하는 eip값을 얻어내는 것임.
그림으로 설명하는 것이 가장 이해가 빠를 것 같다.
먼저 아직 아무 일도 일어나지 않은 평온한 폭풍전야의 스택 상황
따로 설명할 필요 없다 생각한다.
현재 상태에서 오버플로우를 시켰을 때를 함 보자.
페이로드의 설명은 그림을 보고 난 후 하겠음.
페이로드를 올린 모습이다.
셸코드는 꼭 저곳에 올려야 하는건 아니고, 예를 들어 올린거,
다만 SFP는 항상 셸코드가 있는 주소 -4 위치 주소를 줘야 한다.
핵심은 leave-ret gadget 을 RET 자리에 올리는 것이다.
그럼 이제 오버플로우 된 후에 함수 자체의 에필로그(leave-ret)가 수행되면서
ebp, esp 레지스터의 변화에 대해서 보겠다.
이렇게 수행 되고 나면 eip는 leave-ret 가젯의 주소값을 가르키고 있을 것이다.
그럼 다시 한번 leave-ret 가젯으로 인해 에필로그가 일어난다..
fake ebp라는 이름이 ebp의 위치를 속여서 ret 자리를 해커 임의로 지정해준다는 의미에서 지어진 듯 하다.
그럼 이번에 leave-ret 가젯으로 인해 일어나는 에필로그로 ebp, esp 레지스터가 어떻게 변하는지 보자.
먼저 leave 가젯이 수행되면 mov esp, ebp로 인해 esp가 ebp와 같은 값을 가르키고
pop ebp가 수행되면서 ebp는 buf-4 자리에 있는 쓰레기값을 가르키면서 저~ 알 수 없는 곳으로 떠내려간다.
그리고 pop을 했으니 esp는 한칸 올라간다.
다음 ret 가젯이 수행되면 pop eip로 shellcode가 eip로.. 그리고 jmp eip로 인해 shellcode가 실행되도록 한다.
이렇게 하면 해커가 원하는 셸코드를 원하는 위치에 올릴 수 있다.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
RTL Chaining (esp lifting technique) (0) | 2021.04.15 |
---|---|
Frame Pointer Overwriting (0) | 2021.04.15 |
RTL(bypass NX-bit, ASCII Armor) (0) | 2021.04.15 |
RET Sled (0) | 2021.04.15 |
Omega Project (0) | 2021.04.15 |