기본개념

[ROP] Ret2ZP on ARM (like RTL on x86)

우와해커 2020. 1. 5. 04:12

RTL은 ROP 기법중 하나로 간단한 버전이라고 생각하면된다.

RTL이란?
Ret2LibC Overwrites the return address and pass parameters to vulnerable function.

What does it mean for (non-executable-stack) exploitation? 
Parameters needed to be setup instead of just putting them in the right order on the stack like you were used to on X86. 
Meaning you can control the Base Pointer (can be used for Frame faking), 
the function to call to (SYSTEM(buf)), the parameter to pass to function (&/bin/sh) 
->and the exit function that will be executed after SYSTEM(buf).

- X86은 스택의 값을 매개변수로 사용하지만 ARM은 레지스터 r0 ~ r3를 사용하므로 
  개념은 RTL과비슷하지만 exploit을 위한 조금 환경이 다르다.
  
So there’s no - ”Ret2Libc” for us on ARM, we’ll have to make some adjustments.
RoP + Ret2Libc + Stack lifting + Parameter/Variable adjustments = Ret2ZP
● Ret2ZP == Return to Zero-Protection

그래서 ARM에서는 Re2ZP라는 기법이라고 부른다.


이 기법을 사용하려면 arm의 호출규약을 이해해야한다.


특히 알아두어야 할 부분

 

* 우리는 오로지 존재하는 지역변수만 덮어 쓸 수 있다.
* r0 to r3: 서브루틴을 위한 매개변수를 유지하는데 사용된다. 
* ARM에서 PC는 x86의 EIP와 같다.
* LR(LinkRegister)
- LR은 서브루틴 함수를 호출하기전에 서브루틴이 끝나고 돌아올 다음 명령어를 저장한다.  cf. bl lr
- 함수가 끝나고 자신을 호출한 콜러 함수로 리턴될때, r14(LR)의 값을 r15(PC)로 pop한 후 호출자로 이동한다.

 

NX보호를 우회하기 위한 가젯을 libc코드에서 찾아야한다.

조건은 다음과 같다.
1. 각 가젯은 다음 가젯이 이어서 실행될 수 있도록 다음 가젯의 주소가 PC에 저장되야 한다.
2. 가젯이 실행되기 위해 마지막 명령어로 브런치를 사용해야된다.
3. Exploit을 위해 각 가젯들은 매개변수와 지역변수, 스택위치를 적절하게 조정해야 한다. (=Ret2ZP)
4. 오로지 실행권한이 존재하는 libc영역(r-x)에 위치한 코드만 실행될 수 있다.
5. 스택은 실행권한이 없기 때문에(rw-) 스택에 위치한 코드는 실행되지 않는다.

 

 


슬라이드에서 본건데 무슨말인지 ㅎ???
In ARM there are a few ways of exploitation depending on the vulnerable function:
(I) 리턴 값이 않는 취약한 함수(void)
(II) 리턴 값이 없는 취약한 함수지만 r0 ~ r3 매개변수를 이용하는 함수
(III) 취약한 함수는 매개변수를 리턴한다. (int, char* , ...)
버퍼를 더 짧게 만들기 위해 이들을 모두 활용하는 방법 또는 일부를 활용하는 방법에 대해 자세히 이해하려면 계속 읽으십시오.

'기본개념' 카테고리의 다른 글

[ARM] ldr pre-index, post-index  (0) 2020.01.05
QEMU 파일전송  (0) 2020.01.05
[펌] ARM / x86 에서의 함수 호출 /리턴방식 비교  (0) 2020.01.01
StackFrame  (0) 2020.01.01
[ARM Aseembly basics Part 1 to 7] - v1.0  (0) 2019.12.25