상세 컨텐츠

본문 제목

02.ROP(Return Oriented Programming)-x64

본문

  • ROP( Return-oriented programming )는 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태에서 코드를 실행할 수있게 해주는 기술이다.
    • RTL + Gadgets
  • 이 기법에서 공격자는 프로그램의 흐름을 변경하기 위해 Stack Overflow 취약성이 필요하고"가젯(Gadgets)"이라고 하는 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어가 필요하다.
    • 각 가젯은 일반적으로 반환 명령어(ret)로 끝이나며, 기존 프로그램 또는 공유 라이브러리 코드 내의 서브 루틴에 있다.
    • 가젯과 취약성을 사용하면 공격자가 임의의 작업을 수행 할 수 있다.

Gadgets - POP; POP; POP; RET

  • x86의 경우 pop 명령어의 피연산자가 중요하지 않았지만, x64에서는 호출 규약 때문에 피연산자가 매우 중요하다.

    • x86의 호출 규약은 Cdecl(C declaration)이며, x64의 호출 규약은 System V AMD64 ABI 이다.

    • x64의 ROP에서 POP 명령어의 역할은 다음과 같다.
      • ESP 레지스터의 값을 증가시켜 함수를 연속으로 호출하는 것
      • 호출할 함수에 전달될 인자 값을 레지스터에 저장하는 것
        • 인자 값은 Stack에 저장되어있음
        • 해당 역할 때문에 필요한 Gadgets을 찾기가 어려워 진다.
  • 예를 들어 다음과 같은 형태의 Gadgets을 사용된다.
    • 호출할 함수의 첫번째 인자 값을 저장 : "pop rdi; ret"
    • 호출할 함수의 두번째 인자 값을 저장 : "pop rsi; ret"
    • 호출할 함수의 첫번째, 세번째 인자 값을 저장: "pop rdi; pop rdx; ret"
  • 다음과 같은 방법으로 여러 개의 함수를 연속해서 실행할 수 있다.
    • x64에서는 Gadgets을 이용해 인자 값을 레지스터에 저장한 후에 함수를 호출한다.

ROP structure - x64

stack address value explanation
0x7ffffffe498 Gadget(pop rdi, ret) address Return address area of function
0x7ffffffe4a0 First argument value  
0x7ffffffe4a8 Gadget(pop rsi, pop rdx, ret) address  
0x7ffffffe4b0 Second argument value  
0x7ffffffe4b8 Third argument value  
0x7ffffffe4c0 read function address of libc  
0x7ffffffe4c8 Gadget(pop rdi, ret) address  
0x7ffffffe4d0 First argument value  
0x7ffffffe4d8 System function address of libc  

 

Proof of concept

다음과 같이 Overflow를 확인할 수 있다.

  • Return address - buf 변수의 시작 주소 = 72

  • 즉, 72개 이상의 문자를 입력함으로써 Return address 영역을 덮어 쓸 수 있다.

Exploit 순서

  1. setresuid 함수를 이용해 권한을 root(0)으로 변경

  2. system 함수를 이용해 "/bin/sh" 실행
setresuid(0,0,0)
system(binsh)

확인해야 할 정보 목록

  • "/bin/sh"문자열이 저장된 영역
  • libc offset
    • printf
    • system
    • setresuid

  • 가젯의 위치
    • pop rdi,ret
    • pop rsi,ret
    • pop rdx,ret

Find the Libc address of the "/bin/sh"

Get offset of printf, system, and setresuid functions

Find gadget

 

Exploit

 

관련글 더보기

댓글 영역