Relro
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Relro
RELRO๋ Relocation Read-Only์ ์ฝ์๋ก, ๋ง์ปค(ld)์ ์ํด ๊ตฌํ๋ ์ํ ์กฐ์น๋ก, ELF์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ํ์ ์งํฉ์ ๋ชจ๋ ์ฌ๋ฐฐ์น๊ฐ ์ ์ฉ๋ ํ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ํํฉ๋๋ค. ๋ชฉํ๋ ๊ณต๊ฒฉ์๊ฐ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ญ์ฐธ์กฐ๋๋ GOT (Global Offset Table) ๋๋ ๊ธฐํ ์ฌ๋ฐฐ์น ๊ด๋ จ ํ
์ด๋ธ์ ํญ๋ชฉ์ ๋ฎ์ด์ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์
๋๋ค (์: __fini_array).
ํ๋ ๋ง์ปค๋ GOT (๋ฐ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์น์
)์ .bss๋ณด๋ค ์์ ์์น์ํค๊ณ , ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋์ ๋ก๋๊ฐ ์ฌ๋ฐฐ์น๋ฅผ ์ ์ฉํ ํ RโX๋ก ๋ค์ ๋งคํ๋๋ ์ ์ฉ PT_GNU_RELRO ์ธ๊ทธ๋จผํธ๋ฅผ ์์ฑํ์ฌ RELRO๋ฅผ ๊ตฌํํฉ๋๋ค. ๋ฐ๋ผ์ .bss์์์ ์ ํ์ ์ธ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ ๋ ์ด์ GOT์ ๋๋ฌํ ์ ์์ผ๋ฉฐ, ์์ ์ฐ๊ธฐ ์์๋ฅผ ์ฌ์ฉํ์ฌ RELRO๋ก ๋ณดํธ๋ ํ์ด์ง ๋ด์ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
๋ง์ปค๊ฐ ์์ฑํ ์ ์๋ ๋ณดํธ ์์ค์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค:
Partial RELRO
- ํ๋๊ทธ
-Wl,-z,relro(๋๋ld๋ฅผ ์ง์ ํธ์ถํ ๋-z relro)๋ก ์์ฑ๋ฉ๋๋ค. - GOT์ ๋น-PLT ๋ถ๋ถ(๋ฐ์ดํฐ ์ฌ๋ฐฐ์น์ ์ฌ์ฉ๋๋ ๋ถ๋ถ)๋ง ์ฝ๊ธฐ ์ ์ฉ ์ธ๊ทธ๋จผํธ์ ๋ฐฐ์น๋ฉ๋๋ค. ๋ฐํ์์ ์์ ํด์ผ ํ๋ ์น์ โ ๊ฐ์ฅ ์ค์ํ .got.plt๋ ์ง์ฐ ๋ฐ์ธ๋ฉ์ ์ง์ํ๋ฉฐ ์ฌ์ ํ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๋ก ์ธํด ์์ ์ฐ๊ธฐ ์์๊ฐ PLT ํญ๋ชฉ์ ๋ฎ์ด์ฐ๊ฑฐ๋ ret2dlresolve๋ฅผ ์ํํ์ฌ ์คํ ํ๋ฆ์ ๋ฆฌ๋๋ ์ ํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ์ํฅ์ ๋ฏธ๋ฏธํ๋ฉฐ, ๋ฐ๋ผ์ ๊ฑฐ์ ๋ชจ๋ ๋ฐฐํฌํ์ด ์๋ ๊ฐ ์ต์ Partial RELRO๋ก ํจํค์ง๋ฅผ ์ ๊ณตํด์์ต๋๋ค (2016๋ ๋ถํฐ GCC/Binutils์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค).
Full RELRO
- ๋ ๊ฐ์ง ํ๋๊ทธ
-Wl,-z,relro,-z,now(์ผ๋ช-z relro -z now)๋ก ์์ฑ๋ฉ๋๋ค.-z now๋ ๋์ ๋ก๋๊ฐ ๋ชจ๋ ๊ธฐํธ๋ฅผ ๋ฏธ๋ฆฌ ํด๊ฒฐํ๋๋ก ๊ฐ์ ํ์ฌ (์ฆ๊ฐ์ ๋ฐ์ธ๋ฉ) .got.plt๊ฐ ๋ค์ ์ฐ์ผ ํ์๊ฐ ์๊ณ ์์ ํ๊ฒ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋งคํ๋ ์ ์๋๋ก ํฉ๋๋ค. - ์ ์ฒด GOT, .got.plt, .fini_array, .init_array, .preinit_array ๋ฐ ๋ช ๊ฐ์ง ์ถ๊ฐ ๋ด๋ถ glibc ํ
์ด๋ธ์ด ์ฝ๊ธฐ ์ ์ฉ
PT_GNU_RELRO์ธ๊ทธ๋จผํธ์ ํฌํจ๋ฉ๋๋ค. - ์ธก์ ๊ฐ๋ฅํ ์์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ์ง๋ง (๋ชจ๋ ๋์ ์ฌ๋ฐฐ์น๊ฐ ์์ ์ ์ฒ๋ฆฌ๋จ) ๋ฐํ์ ์ค๋ฒํค๋๋ ์์ต๋๋ค.
2023๋ ๋ถํฐ ์ฌ๋ฌ ์ฃผ์ ๋ฐฐํฌํ์ด ๊ธฐ๋ณธ์ ์ผ๋ก Full RELRO๋ก ์์คํ ํด ์ฒด์ธ (๋ฐ ๋๋ถ๋ถ์ ํจํค์ง)์ ์ปดํ์ผํ๋ ๊ฒ์ผ๋ก ์ ํํ์ต๋๋ค โ ์: Debian 12 โbookwormโ (dpkg-buildflags 13.0.0) ๋ฐ Fedora 35+. ๋ฐ๋ผ์ ํํ ์คํฐ๋ก์ ๋ชจ๋ GOT ํญ๋ชฉ์ด ์ฝ๊ธฐ ์ ์ฉ์ธ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋ ๊ฒ์ผ๋ก ์์ํด์ผ ํฉ๋๋ค.
How to Check the RELRO status of a binary
$ checksec --file ./vuln
[*] '/tmp/vuln'
Arch: amd64-64-little
RELRO: Full
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x400000)
checksec (๋ถ๋ถ pwntools ๋ฐ ๋ง์ ๋ฐฐํฌํ) ๋ ELF ํค๋๋ฅผ ํ์ฑํ๊ณ ๋ณดํธ ์์ค์ ์ถ๋ ฅํฉ๋๋ค. checksec๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ, readelf์ ์์กดํ์ธ์:
# Partial RELRO โ PT_GNU_RELRO is present but BIND_NOW is *absent*
$ readelf -l ./vuln | grep -E "GNU_RELRO|BIND_NOW"
GNU_RELRO 0x0000000000600e20 0x0000000000600e20
# Full RELRO โ PT_GNU_RELRO *and* the DF_BIND_NOW flag
$ readelf -d ./vuln | grep BIND_NOW
0x0000000000000010 (FLAGS) FLAGS: BIND_NOW
์ด์ง ํ์ผ์ด ์คํ ์ค์ธ ๊ฒฝ์ฐ(์: set-uid root ํฌํผ), **/proc/$PID/exe**๋ฅผ ํตํด ์คํ ํ์ผ์ ์ฌ์ ํ ๊ฒ์ฌํ ์ ์์ต๋๋ค:
readelf -l /proc/$(pgrep helper)/exe | grep GNU_RELRO
์์ ์ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋ RELRO ํ์ฑํํ๊ธฐ
# GCC example โ create a PIE with Full RELRO and other common hardenings
$ gcc -fPIE -pie -z relro -z now -Wl,--as-needed -D_FORTIFY_SOURCE=2 main.c -o secure
-z relro -z now๋ GCC/clang( -Wl, ๋ค์ ์ ๋ฌ๋จ)์ ld ๋ชจ๋์์ ์๋ํฉ๋๋ค. **CMake 3.18+**๋ฅผ ์ฌ์ฉํ ๋๋ ๋ด์ฅ ํ๋ฆฌ์
์ ํตํด ์ ์ฒด RELRO๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค:
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) # LTO
set(CMAKE_ENABLE_EXPORTS OFF)
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,relro,-z,now")
์ฐํ ๊ธฐ์
| RELRO ์์ค | ์ผ๋ฐ์ ์ธ ์์ | ๊ฐ๋ฅํ ์ ์ฉ ๊ธฐ์ |
|---|---|---|
| ์์ / ๋ถ๋ถ | ์์ ์ฐ๊ธฐ | 1. .got.plt ํญ๋ชฉ์ ๋ฎ์ด์ฐ๊ณ ์คํ์ ์ ํํฉ๋๋ค. 2. ret2dlresolve โ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์ธ๊ทธ๋จผํธ์์ ๊ฐ์ง Elf64_Rela ๋ฐ Elf64_Sym์ ์์ฑํ๊ณ _dl_runtime_resolve๋ฅผ ํธ์ถํฉ๋๋ค.3. .fini_array / atexit() ๋ชฉ๋ก์ ํจ์ ํฌ์ธํฐ๋ฅผ ๋ฎ์ด์๋๋ค. |
| ์ ์ฒด | GOT๋ ์ฝ๊ธฐ ์ ์ฉ | 1. ๋ค๋ฅธ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์ฝ๋ ํฌ์ธํฐ (C++ vtables, __malloc_hook < glibc 2.34, __free_hook, ์ฌ์ฉ์ ์ ์ .data ์น์
์ ์ฝ๋ฐฑ, JIT ํ์ด์ง)๋ฅผ ์ฐพ์ต๋๋ค.2. ์๋ ์ฝ๊ธฐ ์์๋ฅผ ์ ์ฉํ์ฌ libc๋ฅผ ์ ์ถํ๊ณ SROP/ROP into libc๋ฅผ ์ํํฉ๋๋ค. 3. DT_RPATH/ LD_PRELOAD๋ฅผ ํตํด ์
์ฑ ๊ณต์ ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํฉ๋๋ค (ํ๊ฒฝ์ด ๊ณต๊ฒฉ์ ์ ์ด ํ์ ์๋ ๊ฒฝ์ฐ) ๋๋ ld_audit.4. ํ์ ๋ฌธ์์ด ๋๋ ๋ถ๋ถ ํฌ์ธํฐ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ ์ฉํ์ฌ GOT์ ์๋์ง ์๊ณ ์ ์ด ํ๋ฆ์ ์ ํํฉ๋๋ค. |
๐ก ์ ์ฒด RELRO๊ฐ ์๋๋ผ๋ **๋ก๋๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ GOT (์: libc ์์ฒด)**๋ ๋ถ๋ถ RELRO๋ง ์์ต๋๋ค. ์๋ํ๋ฉด ์ด๋ฌํ ๊ฐ์ฒด๋ ๋ก๋๊ฐ ์ฌ๋ฐฐ์น๋ฅผ ์ ์ฉํ ๋ ์ด๋ฏธ ๋งคํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ ์ฐ๊ธฐ ์์๋ฅผ ์ป์ผ๋ฉด ๋ค๋ฅธ ๊ณต์ ๊ฐ์ฒด์ ํ์ด์ง๋ฅผ ๋์์ผ๋ก ํ์ฌ libc์ GOT ํญ๋ชฉ์ด๋
__rtld_global์คํ์ ๋ฎ์ด์จ์ ์คํ์ ์ ํํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ CTF ์ฑ๋ฆฐ์ง์์ ์ ๊ธฐ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค.
์ค์ ์ฐํ ์์ (2024 CTF โ pwn.college โenlightenedโ)
์ด ๋์ ๊ณผ์ ๋ ์ ์ฒด RELRO์ ํจ๊ป ์ ๊ณต๋์์ต๋๋ค. ์ด ์
์ฉ์ ์คํ ๋ฐ์ด ์์ ์ฌ์ฉํ์ฌ ํ ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ์์์ํค๊ณ , tcache poisoning์ผ๋ก libc๋ฅผ ์ ์ถํ ํ, __free_hook (RELRO ์ธ๊ทธ๋จผํธ ์ธ๋ถ)์ ์๊ฐ์ ฏ์ผ๋ก ๋ฎ์ด์จ์ ์ฝ๋ ์คํ์ ์ป์์ต๋๋ค. GOT ์ฐ๊ธฐ๋ ํ์ํ์ง ์์์ต๋๋ค.
์ต๊ทผ ์ฐ๊ตฌ ๋ฐ ์ทจ์ฝ์ (2022-2025)
- glibc 2.40์์
__malloc_hook/__free_hook๋น๊ถ์ฅ (2025) โ ์ด๋ฌํ ๊ธฐํธ๋ฅผ ์ ์ฉํ ๋๋ถ๋ถ์ ํ๋ ํ ์ ์ฉ์ ์ด์ rtld_global._dl_load_jump๋๋ C++ ์์ธ ํ ์ด๋ธ๊ณผ ๊ฐ์ ๋์ฒด ๋ฒกํฐ๋ก ์ ํํด์ผ ํฉ๋๋ค. ํํฌ๊ฐ RELRO ์ธ๋ถ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ค์ ์ ๊ฑฐ๋ ์ ์ฒด RELRO ์ฐํ ๋์ด๋๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. - Binutils 2.41 โ์ต๋ ํ์ด์ง ํฌ๊ธฐโ ์์ (2024) โ ๋ฒ๊ทธ๋ก ์ธํด RELRO ์ธ๊ทธ๋จผํธ์ ๋ง์ง๋ง ๋ช ๋ฐ์ดํธ๊ฐ ์ผ๋ถ ARM64 ๋น๋์์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ํ์ด์ง๋ฅผ ๊ณต์ ํ ์ ์์ด
mprotect์ดํ์ ์ธ ์ ์๋ ์์ RELRO ๊ฐญ์ด ๋จ์์ต๋๋ค. ์ ์คํธ๋ฆผ์ ์ด์ PT_GNU_RELRO๋ฅผ ํ์ด์ง ๊ฒฝ๊ณ์ ์ ๋ ฌํ์ฌ ํด๋น ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ฐธ์กฐ
- Binutils ๋ฌธ์ โ
-z relro,-z now๋ฐPT_GNU_RELRO - โRELRO โ ์ ์ฒด, ๋ถ๋ถ ๋ฐ ์ฐํ ๊ธฐ์ โ โ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ @ wolfslittlered 2023
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


