감자 텃밭

[시스템] Gadget 가젯 본문

System/System Theory Information

[시스템] Gadget 가젯

g2h 2021. 11. 22. 18:26

Gadget의 본래의 개념은 프로그램 상에서 코드 조각을 지칭하였으며,

프로그램 내에 존재하는 명령어 조각 이다.

 

기존 프로그램에 존재하지만 libc파일에도 존재한다.

 

포너블(시스템 해킹)에서 주로 바이너리해킹에서 가젯을 사용하는경우

ret로 끝나는 연속된 명령어들을 의미하기도 한다.

 

주로 pop pop pop ret; 형식이며 여기서 pop은 호출된 함수에서 인자를 정리해주는 용도이다.

즉 read(0, buf, 64) 형식의 read()함수를 호출 했을시 인자값이 0, buf, 64 로 3개이므로

3개의 인자를 정리하기위해 pop pop pop를 쓰는것이다 그 후 ret;로 원하는 함수를 다시 한번 호출 할 수 있다.

  • 하는 함수의 인자가 3개 일 경우 : "pop; pop; pop; ret"
  • 호출 하는 함수의 인자가 2개 일 경우 : "pop; pop; ret"
  • 호출 하는 함수의 인자가 1개 일 경우 : "pop; ret"
  • 호출 하는 함수의 인자가 없을 경우 : "ret"

 

대표적으로 ROP 기법에서 주로 쓰이며 

아래와 같은 특징이 존재한다.


1. 프로시저를 사용하는 대신에 Gadget들을 이용

2. 모든 Gadget은 ret으로 끝나야 한다.

3. Gadget은 의도된 특정 행동을 수행한다.

4. 공격자는 여러 개의 Gadget을 조합해 공격의 정교함을 더할 수 있다.

 

참고자료
https://shayete.tistory.com/entry/6-Return-Oriented-Programming

 

※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.