IT 그리고 정보보안/Knowledge base

RET Sled

plummmm 2021. 4. 15. 21:28
반응형

ASCII Armor로 인해 RTL 공격이 막히는건 저번에 설명했따.

그럼 해결책이 없는 것인가. RET Sled 즉, RET 썰매를 이용하면 된다.

 

간단하게 설명해 NOP Sled와 비슷한 맥락인데,

RET을 연쇄적으로 호출하여 스택상의 위치를 계속 위로 옮기는 작업이다.

이게 아스키 아머랑 뭔 상관이 있는가.

 

아스키아머가 적용되어있으면 페이로드에 인자를 구성해서 올릴 수가 없다.

이 상황에서 인자값을 변조시키고 싶다면 

스택상의 함수의 실행 위치를 옮기면 되지 않겠는가.

그 때 필요한 테크닉이 RET Sled

 

원리는 간단하다. 어셈블리 RET 명령어를 이용하는 것이다.

리턴 어드레스의 RET가 아니라 어셈 명령어 RET

RET 명령은 두가지로 구성된다.

 

pop eip

jmp eip

 

다음 실행될 명령을 EIP에 저장하고 스택을 비운 뒤 그 명령어로 jmp연산을 하는 것

RET 명령이 수행되면 ESP가 스택 한칸 만큼 증가하겠지

 

이 작업을 연속적으로 실행하면 스택상의 위치를 원하는 만큼 올릴 수 있다.

 

 

 

아스키아머 뚫을 때 이방법을 사용하면 되겠음.

하는 방법이야 뭐 간단하다.

 

GDB 디버깅 하여 main 디스어셈블하면 RET 명령어가 위치한 

코드영역의 주소를 알 수 있다.

 

 

우리는 이 주소를 RET Gadget (RET 가젯) 이라고 부름.

RET 가젯을 RET(Return Address) 자리에

집어 넣어주면 pop eip, jmp eip가 수행되면서

리턴 어드레스 위치 바로 한칸 위에 esp가 위치하게 된다.

거기서 또 RET Sled를 돌리면 또 올라가겠지.

 

그런 식으로 내가 원하는 위치에 함수 주소를 넣을 수 있다.

 

ps. 참고로 RET 가젯은 고정적임. 코드 영역에 있는 거니까.

프로그램 실행하기 전에 컴파일 단계에서 결정되는 부분이므로

프로그램 실행한다고 해서 주소가 바뀌거나 하지않는다.

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

Fake EBP  (0) 2021.04.15
RTL(bypass NX-bit, ASCII Armor)  (0) 2021.04.15
Omega Project  (0) 2021.04.15
RTL (Return-to-Libc) Attack  (0) 2021.04.15
Shellcode 작성  (0) 2021.04.15