ROP(Return Oriented Programming) - x86

ROP는 공격자가 실행 공간 보호(NX bit) 및 코드 서명(Code Signing)과 같은 보안 방어가 있는 상태에서 코드를 실행할 수 있게 해주는 기술입니다.

= RTL + Gadget


이 기법에서는 공격자는 프로그램의 흐름을 변경하기 위해 Stack Overflow 취약성이 필요하고, 가젯이라고 하는 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어가 필요합니다.

ROP는 기본적으로 RTL 기법을 이용하며, 공격자는 RTL과 Gadgets을 이용해 공격에 필요한 코드를 프로그래밍 하는 것입니다.


PLT(Procedure Linkage Table) & GOT(Global Offset Table)

PLT에는 동적 링커가 공유 라이브러리의 함수를 호출하기 위한 코드가 저장되어 있습니다.

GOT(전역 오프셋 테이블)에는 동적 링커에 의해 공유 라이브러리에서 호출할 함수의 주소가 저장됩니다.

=>.got.plt 섹션에 저장


PLT와 GOT를 사용하는 이유

: Dynamic Link 방식으로 컴파일 하면 라이브러리가 프로그램 외부에 있기 때문에 함수의 주소를 알아오는 과정이 필요한 것입니다.


elfsymbol 찾고자하는 function_name => plt와 got 주소


쓸수 있는 공간 찾기 위한 방법

shell objdump -h ~/study/x86_rop/rop




ROP - x64


-------------------------------------------

     Gadget(POP RDI, RET) Addr

-------------------------------------------

          First argument value

-------------------------------------------

 Gadget(POP RSI, POP RDX,ret) Addr

-------------------------------------------

         Second argument value

-------------------------------------------

           Third argument value

-------------------------------------------

       read function address of libc

-------------------------------------------

        Gadget(POP RDI, RET) Addr

-------------------------------------------

            First argument value

-------------------------------------------

      System fucntion address of libc

-------------------------------------------


1. setresuid(0,0,0) => 권한을 root(0)으로 변경

2. system 함수를 이용해 "/bin/sh" 실행

ROPgadget --binary path | grep "string"












'Pwnable > PWNABLE 끄적끄적' 카테고리의 다른 글

2019.01.15  (0) 2019.01.15
2019.01.10  (0) 2019.01.10
2019.01.10  (0) 2019.01.10

+ Recent posts