๐ROP ์๋ฆฌ์ฆ๐
[ROP ์๋ฆฌ์ฆ (1)] ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌ
[ROP ์๋ฆฌ์ฆ (2)] PLT, GOT <-์ฌ๊ธฐ!
[ROP ์๋ฆฌ์ฆ (3)] Return to Library ๊ฐ๋ ๋ฐ ์ค์ต
[ROP ์๋ฆฌ์ฆ (4)] ๋๋ฆผํต(Dreamhack) - rop
์ง๋ ์๊ฐ์ ์ฐ๋ฆฌ๋ ๋งํฌ์ ๊ฐ๋
๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ์ฌ ์์๋ณด์๋ค. ์ฐ๋ฆฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ์์ ์ ์๋ค์ ๋ชจ์๋ ๋์๊ด์ด๋ผ๊ณ ๋น์ ํ๋ค. ์ด๋ ์ ์ ๋งํฌ๋ ๋์๊ด์ ์ฑ
๋ค์ ๋ค ์๊ธฐํ๋ ๊ฒ์ผ๋ก, ๋์ ๋งํฌ๋ ํ์ํ ๋๋ง๋ค ๋์๊ด์ ์ฑ
์ ์ฐธ๊ณ ํ๋ ๊ฒ์ผ๋ก ๋น์ ํ๋ค
์ค๋์ ๋งํฌ ์ค์์๋ '๋์ ๋งํฌ'๊ณผ์ ์์ ์ฌ์ฉ๋๋ PLT์ GOT์ ๋ํ์ฌ ๋ค๋ค๋ณผ ๊ฒ์ด๋ค ๐
Address Space Layout Randomization(ASLR)์ ๋ฐ์ด๋๋ฆฌ๊ฐ ์คํ๋ ๋๋ง๋ค ์คํ, ํ, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์์์ ์ฃผ์์ ํ ๋นํ๋ ๋ณดํธ ๊ธฐ๋ฒ์ด๋ค.
ASLR๊ฐ ์ ์ฉ๋ ํ๊ฒฝ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ๋งํฌํ์ฌ, ์ฆ runtime์์ ๋์ ์ผ๋ก ํจ์์ ์ ์๋ฅผ ์ฐพ๋ ๋ฐ์ด๋๋ฆฌ(Dynamically linked binary)๋ ๋ฐ์ด๋๋ฆฌ๊ฐ ์คํ๋ ๋๋ง๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋งคํ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๊ฐ ๋ณํ๋ค.
๊ทธ๋ ๋ค๋ฉด ASLRํ๊ฒฝ์์ ์ด๋ป๊ฒ ํจ์์ ์ฃผ์๋ฅผ ์ฐพ์๋ด์ผํ๋์ง์ ๋ํ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PLT์ GOT๊ฐ ์๋ ๊ฒ์ด๋ค.
PLT๋ ํจ์์ ์ค์ ์์น๋ฅผ ์์๋ด๋ ๊ณผ์ ์ ํ๋ ์ฝ๋ ๋ฉ์ด๋ฆฌ์ด๊ณ , GOT๋ PLT์์ ์์๋ธ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ด๋ผ๊ณ ํ ์ ์๋ค. GOT์ PLT์ ์ฃผ์๋ ์ ์ ์ด๋ฏ๋ก ์๋ค๋ฅผ ํตํด ์ค์ ํจ์์ ์ฃผ์์ ์ ๊ทผํ ์ ์๋ค!
PLT (Procedure Linking Table) : ์ธ๋ถ ํ๋ก์์ ๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ํ ์ด๋ธ. (์ฝ๋๊ฐ ๋ค์ด์์)
PLT์์๋ ์ค์ ํจ์์ ์์น๋ฅผ ์ฐพ์์ฃผ๋ ์ญํ ์ ํ๋ค.
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ puts ํจ์๋ฅผ ์คํํ๋ ค๊ณ ํ๋ฉด puts๋ฅผ callํ ํจ์๋ puts@plt ์ ๊ฐ์ ์ฃผ์๋ก call์ ํตํด ์ ํํ๋ค.
๊ทธ๋ฆฌ๊ณ plt ์ฃผ์์์ ํ๋ํ๋ ๋ ๋ช ๋ น์ ์คํํ๊ฒ ๋๋ค.
์ง์ main+14์์ si๋ฅผ ํตํด plt ์์ผ๋ก ๋ค์ด๊ฐ๋ณด์.
plt๋ก ๋ค์ด์๋๋ฐ ๋ค์ puts@got[plt]์ ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ฒ๋ผ PLT์์๋ GOT๋ผ๋ ๊ณณ์ ํตํด ํจ์์ ์ค์ ์ฃผ์์ ์ ๊ทผํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ puts@got[plt] ์ ์ฃผ์๋ rip + 0x2fca ๋ผ๋ ๊ฒ๋ ์ถ์ธกํ ์ ์๋ค
๋ฐ๋ผ์ ์ด๋ค ํจ์ func์ ์ค์ ์ฃผ์๋ฅผ ๋ชจ๋ฅด๋๋ผ๋, func@plt์ ์ฃผ์๋ฅผ ์๋ค๋ฉด ๋๊ฐ์ด func๋ฅผ ์คํํ ์ ์๋ค.
GOT (Global Offset Table) : PLT๊ฐ ์ฐธ๊ณ ํ๋ ํ ์ด๋ธ. ์ค์ ํจ์์ ์ฃผ์๊ฐ ๋ค์ด์๋ค. (์ฝ๋๊ฐ ๋ค์ด์์ง๋ ์์)
GOT์์๋ ์ค์ ํจ์์ ์ฃผ์๋ค์ ๊ฐ์ง๊ณ ์๋ค. ๋ง์น ์น์์ ํธ์คํธํ์ผ๊ณผ ๋น์ทํ ๋๋์ด๋ค(๋ชจ๋ฅด๋ฉด ๋์ด๊ฐ๋ ๋๋ค)
๊ทธ๋ฐ๋ฐ ์กฐ๊ธ ์ ์ ๋ช ๋ น์ด๋ฅผ ์คํํด๋ณด๋ got๊ฐ ์๋๋ผ puts@plt+6์ผ๋ก ์ด๋ํ๋ค!
got๋ช ๋ น์ด๋ฅผ ํ์ธํด got์ ๋ฌด์์ด ์๋ ํ์ธํด๋ณด๋ ์๋์ ๊ฐ์๋ค
๋ณด๋ GOT์ ์ฒซ์ค์ jmp puts@plt+6์ผ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ด์๋ค.
์ฌ๊ธฐ์ "GOT๋ ์ค์ ํจ์๊ฐ ๋ค์ด์๋ค๊ณ ํ์ง ์์๋์? ๊ทธ๋ฐ๋ฐ ์ PLT๋ก ์ ํํ๋์?"๋ผ๋ ๊ถ๊ธ์ฆ์ด ์์ ์ ์๋๋ฐ ๊ทธ๋ผ ์ ๋ฐ๋ผ์ค๊ณ ์๋ ๊ฒ์ด๋ค !! ์ด๋ ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์คํํ๊ณ ์๋ ํ๋ก๊ทธ๋จ์ด puts ํจ์๋ฅผ ํ๋ก๊ทธ๋จ ๋ด์์ '์ฒ์'์ผ๋ก ํธ์ถํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฒซ๋ฒ์งธ๋ก ํจ์๋ฅผ ํธ์ถํ ๋๋ GOT์ ์์ง putsํจ์์ ์ฃผ์๊ฐ ์ ํ์์ง ์๋ค. ์ค์ putsํจ์์ ์ฃผ์๋ putsํจ์ ์์์๋ _dl_runtime_resolve_fxsave๋ผ๋ ํจ์๋ฅผ ํตํด ๊ตฌํด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํจ์๊ฐ GOT์ putsํจ์์ ์ค์ ์์น๋ฅผ ์ ์ด์ค๋ค. ์ด๊ฒ ๋ฌด์จ์๋ฆฌ์ฃ ? ํ ์ ์๋๋ฐ ์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํจ์์ ์ฃผ์๋ฅผ ์ฐพ์ ์คํํ๋ ๊ณผ์ ์ ์์ ๊ฐ๋ค.
๋ค์ ๋ฐ๋ณตํด์ ์ ๊ธ์ ์ฝ์ด๋ณด์. -> ์ฒซ๋ฒ์งธ๋ก ํจ์๋ฅผ ํธ์ถํ ๋๋ GOT์ ์์ง putsํจ์์ ์ฃผ์๊ฐ ์ ํ์์ง ์๋ค. ์ค์ putsํจ์์ ์ฃผ์๋ putsํจ์ ์์์๋ _dl_runtime_resolve_fxsave๋ผ๋ ํจ์๋ฅผ ํตํด ๊ตฌํด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํจ์๊ฐ GOT์ putsํจ์์ ์ค์ ์์น๋ฅผ ์ ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ callee๋ก ์ด๋ํ๊ฒ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ calle์์ ๋ค์ ์ฝ๋๋ค์ ์ซ๋ฅด๋ฅต~ ์คํํ๋ค.
์ดํ ๋ค์ ํ๋ก๊ทธ๋จ์์ puts๋ฅผ ํธ์ถํ๋ฉด PLT๊ฐ GOT์ ๊ฐ์ ์ฐธ์กฐํ์ ๋(GOT์ ์ฝ๋๋ฅผ ์คํํ๋๊ฑด ์๋๋ค! GOT์๋ ์ฝ๋๊ฐ ์๋ค! PLT์๋ง ์ฝ๋๊ฐ ๋ค์ด์๋ค!!), ๋ค์ plt+6๋ก ๋์์ค์ง ์๊ณ ๋ฐ๋ก puts ํจ์์ ์ค์ ์์น๋ก ์ ํํ๊ฒ ๋๋ค. ์ด์ ์ดํด๊ฐ ๋์์๊น?
์ด๋ฐ ์์ผ๋ก ํจ์์ ์ฃผ์๋ฅผ ์ฐพ๋ ๊ฒ์ ์ฐ๋ฆฌ๋ Runtime Resolve๋ผ๊ณ ํ๋ค.
์ ๋ฆฌํ์๋ฉด, ํจ์์ ์ง์ง ์ฃผ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์๋๋ฐ ASLR๋ก ์ธํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ์ฃผ์๊ฐ ๋๋คํ๋๊ธฐ ๋๋ฌธ์ PLT๋ผ๋ ๊ฑธ ํตํด์ ํจ์์ ์ฐ ์ฃผ์๋ฅผ ์์๋ด๋ ๊ณผ์ ์ ๊ฑฐ์น๊ณ , GOT์ ๊ทธ ๊ฐ์ ๊ธฐ๋กํ์ฌ ๋์ค์ ๋๊ฐ์ ํจ์๋ฅผ ํธ์ถํ ๋์๋ PLT๊ฐ GOT์ ๋ด๊ฒจ์๋ ํจ์์ ์ฃผ์(๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์ ์ฃผ์. PLT๋ฅผ ํตํด ์๊น ์ฐพ์ ์ฃผ์)๋ก ์ ํํ๋ ๊ฒ์ด๋น
์ฐธ๊ณ ๋ก ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ํจ์๋ plt์ ์ ํ์ง ์๋๋ค! ๋ํ ASLR์ด ์ ์ฉ๋์ด๋ PLT ์ฃผ์๋ ๊ณ ์ ์์ ๊ธฐ์ตํ์(์ด๋ฅผ ํตํด Return to PLT ๊ณต๊ฒฉ์ ํ ์ ์๋ค!)
์ด์ ๋ ๋ฒ์งธ๋ก puts๋ฅผ ํธ์ถํด๋ณด์!
plt๋ก ๋ค์ด๊ฐ๋ณด์!
๋ค์ด์๋ณด๋ฉด ์ค๋ฅธ์ชฝ์ ์์ puts๋ผ๊ณ ๋์ด์๋๊ฑธ ๋ณผ ์ ์๋ค GOT์ ๋ชจ์ต์ ๋ค์๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์๊น์ ๋ค๋ฅด๊ฒ GOT์ puts์ ์ค์ ์์น 0x7ffff7e45820์ด ๋ค์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค !!
์ด๋ฐ์์ผ๋ก PLT์์๋ ๋ฐ๋ก puts ํจ์์ ์ค์ ์์น๋ก ์ ํํ๊ฒ๋๋ค!
"๋ฐ๋ผ์ PLT์ GOT ์์ญ์ด ์กด์ฌํ๋ ์ด์ ๋ Dynamically linked binary์ ๊ฒฝ์ฐ ๋ฐ์ด๋๋ฆฌ๊ฐ ์คํ๋๊ธฐ ์ ๊น์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ์ฃผ์๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๊ฐ ํธ์ถ๋๋ฉด, ์ ์ ์ฃผ์๋ฅผ ํตํด ํด๋น ํจ์์ PLT์ GOT ์์ญ์ ์ ๊ทผํจ์ผ๋ก์จ ํจ์์ ์ฃผ์๋ฅผ ์ฐพ๋๋ค" <- ์ถ์ฒ : https://haerinn.tistory.com/106
์ฐธ๊ณ ๋ก got ๋ช ๋ น์ด๊ฐ ์ ํตํ๋ gdb๋ ์๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ objdump -R <์คํํ์ผ์ด๋ฆ> ๋ช ๋ น์ด๋ก got๋ฅผ ์ถ์ถํ ์ ์๋ค.
์์คํ ํดํน ๊ด์ ์์ ๋ณด๋ฉด, PLT๊ฐ GOT์ ๊ฐ์ ์ฐธ์กฐํ ๋ ๋ฑํ ์ด๋ ํ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์, GOT์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฎ์ด์ฐ๋ฉด ํด์ปค๊ฐ ์ํ๋ ๊ณณ์ผ๋ก ์ ํํ ์ ์๋ค. ์ด๋ GOT Overwrite๋ผ๊ณ ํ๊ณ ์ด๋ ROP ์๋ฆฌ์ฆ 4ํ์์ ๋ค๋ฃฌ๋ค
์ด๋ ๊ฒ ํจ์๊ฐ ํธ์ถ๋ ๋๊น์ง ํจ์ ์ฃผ์ ๋ฑํ ์ ๊ตฌํ๊ณ ํธ์ถ๋์ ๋ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ Lazy Binding์ด๋ผ๊ณ ํ๋ค.
Lazy Binding์ ๊ฒฝ์ฐ ์คํ ์ค์ GOT์ ์ ๊ทผํ์ฌ ์ฐ๊ธฐ ๋๋ฌธ์ ๊ทธ ์์ ๋ค์ด์๋ ๊ฐ์ด ๋ฐ๋๋ค. ๋ฐ๋ผ์ ์คํ ์ค GOT์ '์ฐ๊ธฐ ๊ถํ'์ด ๋ค์ด์์ผ๋ฏ๋ก ๋ณด์์ ์ทจ์ฝํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ์ด๋ Partial RELRO์ ํด๋นํ๋๋ฐ ์ด๋ ๋ค์์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
ํํธ Now binding์ ํ๋ก๊ทธ๋จ ์์๋จ๊ณ์์(์ปดํ์ผ ๊ณผ์ ๋ง๊ณ !) ์ด๋ฏธ GOT์๋ค ๋ค ๊ฐ์ ์ ์ด๋๋ ๋ฐฉ์์ด์ด์ ํจ์ํธ์ถ์์ ๋ฑํ ๋ค๋ฅธ ์์ ์ด ํ์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ GOT์ ๋ค์ด์๋ ์ ๋ค์ ๋ค ๊ณ ์ ๋์ด์๋ค. ๋ฐ๋ผ์ GOT์ ์ฐ๊ธฐ ๊ถํ์ด ์์ด์ GOT Overwrite์ด ๋ถ๊ฐ๋ฅํ๋ค!! ์ด๊ฒ์ด Full RELRO์ ํด๋นํ๋ค.
Full RELRO
๊ทธ๋ ๋ค๋ฉด Full RELRO๊ฐ ์ ์ฉ๋๋ฉด ํดํน์ ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๊น? ๋ ์๋๋ค.. ์ฐ๋ฆฌ์ ํด์ปค๋ค์ ๋ฐ์ดํฐ์ธ๊ทธ๋จผํธ์ ๋ overwriteํ ์ ์๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฐพ์๋๋ค(์ง๋ ใทใท) ๊ทธ ์ค ํ๋๊ฐ ํ (Hook)์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ๋ค์ด์๋ ๋ณ์์ด๋ค. ํ overwrite ์ ๋ํด์๋ ๋ค์์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
์ด์ธ์๋ ์๊ฒ์์ ํ๋ฉด์ FULL RELRO๊ฐ ์ ์ฉ๋์ด์์ ๋ ์๋ ๋ฐฉ๋ฒ๋ฑ์ ์ด์ฉํ ์ ์์๋ค
- hook overwrite (glibc 2.34๋ถํฐ ์ ๊ฑฐ)
- rtld overwrite
- system plt(ํน์ onegadget)์์๋ธ ํ rop ๋ฑ..
์ฐ ํจ์์ฃผ์๋ libc์์ ์ใทใ !
๋ค์ ๊ธ
[ROP ์๋ฆฌ์ฆ (3)] Return to Library ๊ฐ๋ ๋ฐ ์ค์ต
์ฐธ๊ณ ํ ๋งํ ์ข์ ๊ธ๋ค
https://dreamhack.io/lecture/courses/66
https://haerinn.tistory.com/106#2.%20%EC%A0%95%EB%A6%AC
https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/
https://shayete.tistory.com/entry/6-Return-Oriented-Programming
'Linux Exploitation > Fundamentals' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Pwnable] PIE (0) | 2023.05.15 |
---|---|
[gdb] ๋ก์ปฌ/์๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค๋ฅธ ๊ฒฝ์ฐ (0) | 2023.04.28 |
[ROP ์๋ฆฌ์ฆ (3)] ๋๋ฆผํต(Dreamhack) - Return to Library ๊ฐ๋ ๋ฐ ์ค์ต (1) | 2023.04.18 |
[BOF] Stack Buffer Overflow (์คํ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ), BOF ๊ธฐ์ด ๋ฐ ์ค์ต (2) | 2023.03.29 |
[Shell Code] ์ ธ์ฝ๋ ๊ฐ๋ ๋ฐ ORW ์ฝ๋ ์์ฑ์ ํตํ ์ค์ต (0) | 2023.03.26 |