라이브러리(Library)
: 컴퓨터 시스템에서 프로그램들이 함수나 변수를 공유해서 사용할 수 있게 함
ex) printf, scanf, strlen, memcpy, malloc 등
- 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어 코드 개발의 효율이 높아짐
링크(Link)
: 컴파일의 마지막 단계
- 프로그램에서 어떤 라이브러리의 함수를 사용하면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결됨
- 리눅스에서 C 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일(Object file)로 번역됨
- 오브젝트 파일은 실행 가능한 형식을 갖추지만, 라이브러리 함수들의 정의가 어디 있는지 알지 못하므로 실행 불가능
- 동적 링크: 동적 라이브러리를 링크하는 것
- 동적 링크된 바이너리를 실행하면 동적 라이브러리가 프로세스의 메모리에 매핑됨
- 정적 링크: 정적 라이브러리를 링크하는 것
- 정적 링크를 하면 바이너리에 정적 라이브러리에 필요한 모든 함수가 포함됨
- 탐색 비용이 절감되는 듯 보이지만, 복제가 여러 번 이루어지게 되므로 용량을 낭비
PLT(Procedure Linkage Table) & GOT(Global Offset Table)
: 라이브러리에서 동적 링크된 심볼의 주소를 찾을 때 사용하는 테이블
- 바이너리가 실행되면 ASLR에 의해 라이브러리가 임의의 주소에 매핑됨
- 이 상태에서 라이브러리의 함수를 호출하면 함수의 이름을 바탕으로 라이브러리에서 심볼들을 탐색하고, 해당 함수의 정의를 발견하면 그 주소로 실행 흐름을 옮김
- GOT 엔트리에 실제 함수의 주소를 찾아 써넣음
- GOT Overwrite: GOT 엔트리에 임의의 값을 오버라이트하여 실행 흐름을 변조하는 공격
'보안' 카테고리의 다른 글
[시스템해킹] Return Oriented Programming(ROP); GOT Overwrite (0) | 2024.04.24 |
---|---|
[시스템해킹] Return to Library (0) | 2024.04.23 |
[시스템해킹] NX & ASLR (0) | 2024.04.23 |
[시스템해킹] Background: Calling Convention(함수 호출 규약) (0) | 2024.04.23 |
[시스템해킹] Background: x86 Assembly (0) | 2024.04.23 |