ROP는
취약한 프로그램 내부의 어셈블리 기계어 가젯들을 이용하여 버퍼오버플로우를 일으키고 특정 명령을 실행시키는 것입니다.
기계어들(가젯)를 모아서 요리조리 기계어들을 연결시켜서 프로그래밍을 하기 때문에 Return Oriented Programming이라고 불립니다.
기계어 가젯들은
보통 ret 가젯 (leave ret 할때 그 ret 입니다)들을 포함하는데
pop pop ret
jmp esp 등 과 같은 것들이 있습니다.
임의의 코드를 실행 가능한 메모리 영역(executable memory)에 올릴 수 있는 확실한 방법이 없을 때(DEP, 데이터 실행 방지(Data Execution Prevention), 사용자가 원하는 곳에서부터 코드를 실행시킬 수 없다.)를 위한 것
출처: https://yous.be/2014/03/19/ropasaurusrex-a-primer-on-return-oriented-programming/
ROP 기법에는 여러가지 방법이 있는데
RTL, RTL Chaining, GOT overwrite 등이 있습니다.
이제 이에 대해서 각각 포스팅을 해보려고 합니다.