Hacking Arts
๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๊ธฐ๋ฒ ๋ณธ๋ฌธ
๐ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋?
โฃ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ด๋ฉฐ, ๋ชจ๋ ์ด์ ์ฒด์ ์์ ์ค์ํ ์์ ์ฌํญ ์ค ํ๋์ด๋ค.
์ด์ ์ฒด์ ์์ ์คํํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ์์ ์๊ฒ ํ ๋น๋์ง ์์ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ์ฃผ๋ ๋ชฉ์ ์ด๋ค.
์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ๋ด์ ๋ฒ๊ทธ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋์์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ์๋ฐฉํ๋ฉฐ, ์ ์ฑ ์ํํธ์จ์ด๊ฐ ํ๊ฐ๋์ง ์์ ์ ๊ทผ๊ถํ์ ๊ฐ๊ณ ,
์์คํ ์ ์ํฅ์ ๋ผ์น๋ ๊ฒ์ ๋ง์์ค๋ค.
๐ก ASLR
โฃ Address Space Layout Randomization ์ ์ฝ์๋ก, ๋ฉ๋ชจ๋ฆฌ ์์ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด์ ์ฃผ์ ๊ณต๊ฐ ๋ฐฐ์น๋ฅผ ๋์ํ ์ํค๋ ๊ธฐ๋ฒ.
( ์คํ, ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ๋ฐ์ดํฐ ์์ญ ์ฃผ์๋ฑ์ ๋์ํ ์ํจ ์ฃผ์๋ก ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๋ฐฐ์นํ๋ ๊ฒ. )
*PIE ๊ฐ ๊ฑธ๋ ค์์ง ์์๋ binary ์์ญ์ด ์ ์ ์ด๋ฏ๋ก binary ์์ญ์ ์ด์ฉํด ์ฐํํ ์์๋ค. ์ฃผ๋ก *ROP๋ฅผ ์ฌ์ฉํ๋ค.
* PIE : Position Independent Executable ์ ์ฝ์๋ก, ๋ฐ์ด๋๋ฆฌ์ ์ ์ฉ๋๋ ASLR์ ์ผ์ปซ๋๋ค.
PIE๋ ๋ฐ์ด๋๋ฆฌ ์์ญ์ด ๋ฐฐ์น๋ ์ฃผ์๋ฅผ ์์๋ผ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ ์ทจ์ฝ์ ์ด ์กด์ฌํ ๊ฒฝ์ฐ ์ด๋ฅผ ์์์จ ํ ROP๋ก ์ต์คํ๋ก์์ด ๊ฐ๋ฅํ๋ค.
* ROP : Return Oriented Programming ์ ์ฝ์๋ก, ์ทจ์ฝํ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์๋ ๊ธฐ๊ณ์ด ์ฝ๋ ์น์ ( *Gadget ) ๋ค์ ์ด์ฉํ์ฌ,
BOF ๊ณต๊ฒฉ ์ ํน์ ๋ช ๋ น์ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ์ด๋ฌํ ROP๋ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๊ธฐ๋ฒ๋ค์ ์ฐํํ ์ ์๊ธฐ ๋๋ฌธ์
Fedora core 13( kernel 2.6.33.3-85 ) ์์ BOF ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค.
L ROP๋ RTL, Chaning RTL calls, GOT overwrite์ 3๊ฐ์ง ํน์ง์ ์ธ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
*Gadget : Gadget์ ํจ์ ๋์ ๊ธฐ์ ๋์ด ์๋ ret ๋ช ๋ น์ด๋ฅผ ํฌํจํ ์์ ๋ช๊ฐ์ง ๋ช ๋ น์ด๋ค์ ์งํฉ์ด๋ฉฐ,
์ด๋ฅผ ์ด์ฉํ์ฌ ๋จ ํ๋ฒ์ ์คํจ์์ด ํ๋ฒ์ ๊ณต๊ฒฉ์ ์ฑ๊ณต ํ ์ ์๋ค.
๐ข Stack canary
โฃ gcc 4.1 ๋ฒ์ ์ดํ๋ถํฐ๋ Stack Overflow๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด SSP (stack-smashing protector) ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค.
SSP๋ ํจ์ ์ง์ ์ ์คํ์ Return address ์ frame pointer ์ ๋ณด๋ฅผ ์ ์ฅํ ๋,
์ด ์ ๋ณด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ( Canary๋ผ๊ณ ๋ถ๋ฅด๋ ) ํน์ ํ ๊ฐ์ ๊ธฐ๋กํด๋๊ณ ํจ์์์ ๋ฐํํ ๋ ๊ธฐ๋ก๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์๋์ง ๊ฒ์ฌํ๋ค.
๋ง์ฝ ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ buffer overflow ๋ฑ์ ๊ณต๊ฒฉ์ ํตํด ์คํ ๋ด์ ์ ๋ณด๋ฅผ ๋ฎ์ด์ฐ๋ ค๋ฉด,
canary ๊ฐ์ ๋จผ์ ๋ฎ์ด์จ์ผ ํ๊ธฐ ๋๋ฌธ์, canary ๊ฐ๋ง ๋ณด๋ฉด ๊ณต๊ฒฉ์ด ์ผ์ด๋ฌ๋์ง ๋ณผ ์ ์๋ค.
Canary ๋ Window ์์์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฒ์ธ Stack Cookie ์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก,
Buffer ์ RET ์ฌ์ด์์ ์คํ์ BOF๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
๐ฃ NX ( DEP )
โฃ Non-eXecutable ์ ์ฝ์๋ก, ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณดํธ๋ฅผ ์ํด Stack ๊ณผ Heap ์์ ์ฝ๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋ง๋ ๊ธฐ๋ฒ.
write ๊ถํ๊ณผ execute ๊ถํ์ ๋์์ ๊ฐ์ง ์๋๋ก ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง์ ๊ถํ์ ์ค์ ํฉ๋๋ค.
๊ณต๊ฒฉ์๊ฐ BOF ๊ณต๊ฒฉ์ ์ผ์ผํค๋ฉด ์๋ ์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ์์ฝ๋๋ฅผ ๋ฃ๊ณ Return Address๋ฅผ ์์ฝ๋๋ฅผ ๊ฐ๋ฅดํค๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋๋ฐ,
DEP ๊ฐ ์ ์ฉ๋ ์ํ์์๋ ์คํ ๊ถํ์ด ์์ผ๋ฏ๋ก, ์์ฝ๋๊ฐ ์์ด๋ ํ๋ก๊ทธ๋จ์ ๋ํ ์์ธ ์ฒ๋ฆฌ๊ฐ ๋ฐ์๋๊ณ ์ข ๋ฃ๋๋ค.
์ถ์ฒ
'System > ETC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
linux-0.11 (0) | 2015.12.15 |
---|---|
VMware + ida remote debuging (0) | 2015.12.14 |
64๋นํธ calling convention + stack frame (0) | 2015.10.22 |
fork bomb (0) | 2015.10.22 |
How does the Linux boot process work? (0) | 2015.10.22 |