라이브러리
컴퓨터 시스템에서 , 프로그램들이 함수나 , 변수를 공유해서 사용할 수 있게 함.
printf, scanf, strlen 등 C프로그래머들이 코드를 작성하면서 자주 사용하는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램들이 공유해서 사용할 수 있도록 지원함.
-> 같은 함수를 반복적으로 정의해야하는 수고를 덜 수 있어서 코드 개발의 효율이 높아짐
각 언어에서는 범용적으로 많이 사용하는 함수들(printf...)은 표준 라이브러리로 제작되어있음.
C의 표준 라이브러리인 libc는 우분투에 기본적으로 탑재됨.
/lib/x86-64-linux-gnu/libc.so.6
에 위치.
링크
컴파일 되는 과정
전처리(.i) -> 컴파일(.s) -> 어셈블(.o) -> 링킹
즉 어셈블 까지 가면 목적파일, 실행가능한 파일이 생성이 되는데, 이때 링크가 되지 않았기에 함수들이 어디에 정의되어있는지 몰라서 알 수가 없다.
$ gcc -c hello-world.c -o hello-world.o
여기까지하면 실행 가능한 형식을 갖추지만 링크가 되지 않음
$ gcc -o hello-world.c -o hello-world.o
이건 링크가 됨
라이브러리의 링크와 종류
동적 링크 : 동적 라이브러리를 링크함
실행중에 라이브러리의 함수를 호출하면 매핑된 라이브러리에서 호출할 함수의 주소를 찾고 그 함수를 실행.
정적 링크 : 정적 라이브러리를 링크함.
일단 모든 함수 암기느낌. 라이브러리를 참조하는 것이 아니라 자신의 함수를 호출하는 것처럼 호출 가능.
PLT & GOT
PLT ( Procedure Linkage Table)
GOT(Global Offset Table)
둘은 라이브러리에서 동적 링크된 심볼의 주소를 찾을 때 사용
바이너리가 실행되면 ASLR 에 의해 라이브러리가 임의의 주소에 매핑되는데, 라이브러리 함수를 호출하면 함수의 이름을 바탕으로 라이브러리에서 심볼들을 탐색, 함수 정의 발견하면 그 주소로 실행 흐름을 옮김(runtime resolve)
반복적으로 호출되는 함수의 정의를 매번 탐색하는 건 비효율적이니까, ELF는 GOT라는 테이블을 두고, resolve 된 함수의 주소를 해당 테이블에 지정하고, 나중에 다시 해당 함수를 호출하면 저장된 주소를 꺼내서 사용
그니까 한 번 사용한 함수는 GOT에 저장을 해놓는다는 건데, 이 GOT값을 검증을 하지 않는다.
puts의 GOT 엔트리에 저장된 공격잢을 공격자가 임의로 변경할 수 있으면 puts가 호출될 때 공격자가 원하는 코드가 실행될 수 있게함.
GOT OvrWrite라고 함.
그니까 정리를 하자면, PLT 는 외부 라이브러리 함수를 사용할 수 있도록 주소를 연결해 주는 역할을 하는 테이블
GOT는 PLT에서 호출하는 resolve함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테이블
ASLR이 적용되어 있는 환경에서, 동적 링크 바이너리의 경우 바이너리가 실행되기 전까지 라이브러리 함수의 존재를 알 수 없기 때문에 라이브러리가 메모리에 매핑된 후 라이브러리 함수가 호출되면 정적 주소를 통해 해당 함수의 PLT와 GOt 영역에 접근함으로써 함수의 주소를 찾는다.
에필로그
SSP_000
https://dreamhack.io/wargame/challenges/32
이 문제 풀 때 Canary + GOT Overwrite 가 적용되었던 거였다. 이때
남의 풀이 보면서 왜 이렇게 되는지 되게 의아 했었는데, 이제야 개념이 좀 잡히는 것 같다.
해당 설명은 화이트햇 과제를 하면서 제출했기에, PPT 형식으로 작성되어서 올릴지말지는 고민중이다.
'보안 스터디 > 시스템 해킹' 카테고리의 다른 글
[드림핵/워게임] Return to Library (시스템 해킹) (0) | 2024.04.27 |
---|---|
[드림핵/시스템 해킹] Exploit Tech: Return to Library (0) | 2024.04.26 |
[드림핵/시스템해킹] Mitigation: NX & ASLR (0) | 2024.04.21 |
[드림핵/워게임] shell_basic (포너블/시스템해킹) (1) | 2024.01.27 |
[드림핵/시스템해킹] Exploit Tech: Shellcode -2 (0) | 2023.12.31 |