Notice
Recent Posts
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Hacking Arts

๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๊ธฐ๋ฒ• ๋ณธ๋ฌธ

System/ETC

๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๊ธฐ๋ฒ•

Rakehell 2015. 12. 3. 01:55

๐ŸƒŸ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๋ž€?


โžฃ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๋ชจ๋“  ์šด์˜ ์ฒด์ œ์—์„œ ์ค‘์š”ํ•œ ์Ÿ์  ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

     ์šด์˜ ์ฒด์ œ์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋˜์ง€ ์•Š์€ ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ์˜ ์ฃผ๋œ ๋ชฉ์ ์ด๋‹ค.

     ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ฒ„๊ทธ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋™์ž‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์„ ์˜ˆ๋ฐฉํ•˜๋ฉฐ, ์•…์„ฑ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ—ˆ๊ฐ€๋˜์ง€ ์•Š์€ ์ ‘๊ทผ๊ถŒํ•œ์„ ๊ฐ–๊ณ ,

     ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค€๋‹ค.



๐Ÿ‚ก 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 ๊ฐ€ ์ ์šฉ๋œ ์ƒํƒœ์—์„œ๋Š” ์‹คํ–‰ ๊ถŒํ•œ์ด ์—†์œผ๋ฏ€๋กœ, ์‰˜์ฝ”๋“œ๊ฐ€ ์žˆ์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒ๋˜๊ณ  ์ข…๋ฃŒ๋œ๋‹ค.



์ถœ์ฒ˜ 

http://blog.naver.com/harin_luna/220461273873

'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