쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 제거함
데이터가 배치된 메모리의 특정 부분에 읽기 전용 속성을 부여함
https://m-in-zu.tistory.com/77
Static Link vs Dynamic Link
Compile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로 변환하는 작업이다. (기계어)Pre-Processing : 전처리기 (Pre
m-in-zu.tistory.com
PLT, GOT의 Lazy Binding의 경우, GOT가 존재하는 영역에 쓰기 권한이 부여된다.
또한, ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료를 진행하는 .init_array, .fini_array가 존재한다.
따라서, 데이터 세그먼트에 존재하는 값들에 쓰기 권한을 부여하면 익스플로잇 가능성이 높아지기 때문에 이를 막기 위해,쓰기 권한이 필요하지 않은 데이터 세그먼트에 쓰기 권한을 제거하는 RELRO를 보호 기법으로 사용한다.
Partial RELRO
명령어 옵션 : gcc -Wl, -z, relro
INIT_ARRAY, FINI_ARRAY 등이 보호가 된다.
해당 바이너리의 objdump,와 ./prelro의 권한 확인으로 확실히 확인할 수 있다.
Full RELRO
명령어 옵션 : gcfc-Wl, -z,
NOW Binding을 이용하여 plt, got에 쓰기 권한이 없다.
따라서 got overwrite 등과 같은 공격 기법을 사용할 수 없다.
Bypass RELRO
Partial RELRO의 경우, 여전히 GOT overwrite 기법을 활용할 수 있다.
Full RELRO의 경우, .init_array, .fini_array, got, plt 영역에 권한이 모두 없으므로 hook을 사용할 수 있다.
Hook Overwrite
hook은, 동적 메모리의 할당과 해제 과정에서 사용하는 함수이다.
__malloc_hook은 libc.so에서 쓰기 가능한 영역에 위치하기 때문에, 이 변수 조작을 통해 malloc으로 익스플로잇을 할 수 있다.
__free_hook도 마찬가지로, 이 변수 조작을 통해 free로 익스플로잇을 할 수 있다.
'Hacking > Pwnable' 카테고리의 다른 글
| [Exploit] Hook Overwrite (0) | 2025.05.28 |
|---|---|
| [Mitigation] PIE | Position Independent Executable (0) | 2025.05.12 |
| [Exploit] Return Oriented Programming (ROP chain) (0) | 2024.09.19 |
| [Exploit] Return to Library (0) | 2024.09.06 |
| [Mitigation] ASLR (0) | 2024.08.25 |