본문 바로가기

Hacking & Security/System

PLT & GOT

PLT ( procedure Linkage Table )


- 외부 프로시저를 연결해주는 테이블

- PLT를 통해 다른 라이브러리에 있는 프로시저를 호출하여 사용할 수 있다.


GOT ( Global Offset Table )

PLT가 참조하는 테이블

- 프로시저들의 주소가 들어있다.


전반적인 PLT와 GOT의 흐름은 다음과 같이 정리된다.


함수 호출 ( PLT 호출 ) -> 함수의 실제 주소가 쓰여져있는 GOT로 점프 -> GOT 참조 -> 해당 함수로 점프


만일 , 첫 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 일련의 과정을 통하여 주소를 알아낸다.


호출이 두번이상 반복되면 첫 호출때 알아낸 주소로 바로 점프한다.


이렇게 참조하는 과정에서 주소를 변조하여 우리는 프로그램의 흐름을 변경시킬수 있다.

예를들어 , RTL 기법의 경우 got안에 들어있는 호출하고자 하는 해당함수의 포인터주소를 system함수를 가리키도록 바꿔서 쉘을 획득할 수 있다.


이러한 PLT & GOT방식을 이용하는 이유


PLT와 GOT를 왜 사용하는가에 대하여 알기위해서는 링커의 개념이 필요하다.


링커란 , 말 그대로 연결의 기능을 갖고있으며 이는 오브젝트 파일과 해당 함수의 실행코드를 찾아서 연결시켜준다.


Link방법에는 Static과 Dynamic 방식이 존재하는데 PLT&GOT는 Dynamic방식과 관련되어져 있다.


Dynamic Link 방식으로 프로그램이 만들어지게 될 경우 , 함수 호출시 PLT를 참조하게 된다.


이 PLT는 GOT로 점프하게되고 , GOT에 라이브러리에 조재하는 실제 함수의 주소가 쓰여져있어서 해당 함수를 호출하게 된다.


(위에서 언급한 라이브러리는 공유 라이브러리로써 하나의 메모리 공간에 매핑하고 여러 프로그램에서 공유하여 사용한다. )


하지만 , 이 방법은 실행파일이 라이브러리에 의존해야 하기 떄문에 라이브러리가 없으면 실행또한 불가능하다.


( Dynamic Linker의 역할 : 호출할 함수 이름이 있는 메모리의 주소를 구하고 이를 이용해 최종적으로 공유라이브러리에 있는 실제 함수의 주소를 구해온다. )



'Hacking & Security > System' 카테고리의 다른 글

Cloud Computing  (0) 2019.11.20
CyberPlatform Security #1  (0) 2019.11.18
Linux 환경에서의 메모리 보호기법  (0) 2018.08.21
환경변수란 ?  (0) 2018.01.30
Buffer Overflow Basic 3  (0) 2018.01.16