|
The "Venetian" exploit Creating Arbitrary Shellcode In Unicode Expanded Strings The "Venetian" exploit Chris Anley (chris@nextgenss.com) 8th January 2002 www.ngssoftware.com [°³¿ä] ÀÌ ¹®¼´Â "shellcode"
ŸÀÔÀÇ º¸¾È °áÁ¡À» ¸·±âÀ§ÇÑ º¸È£ ¸ÞÄ¿´ÏÁò °³¹ß¿¡ Ã¥ÀÓÀ» °¡Áø º¸¾È°èÀÇ ÀϺκÐÀ» À§ÇÑ °ÍÀÌ´Ù.; À¯´ÏÄÚµå ¹öÆÛ¿À¹öÇ÷ο찡 ÀͽºÇ÷ÎÀÕ
µÉ ¼ö ¾ø´Â °ÍÀ¸·Î ÀνÄÇÏ´Â °ÍÀ» ±ú¶ß¸®°í ±×°ÍÀ¸·Î ÀÎÇÑ ÀϹÝÀûÀÎ ³×Æ®¿öÅ© º¸¾È »óŸ¦ °³¼±½ÃŰ·Á´Â Àǵµ·Î ÀÛ¼ºÇÑ °ÍÀÌ´Ù. »ç½Ç»ó ÀÓÀÇÀû Äڵ尡 ½ÇÇà °¡´ÉÇÒ ¶§ ¸î¸îÀÇ ¿À¹öÇ÷ο쳪 Æ÷¸Ë½ºÆ®¸µ ¹ö±×ÀÇ Á¾·ù´Â "denial of
service" °ø°ÝÀ¸·Î ºÐ·ùµÇ´Â °æ¿ì°¡ Àִµ¥ ÀÌ ¹®¼´Â ÀÌ·± ¿À¹öÇ÷οìÀÇ
ºÎ·ù¿¡ °üÇØ ´Ù·é´Ù. ÀÌ ¹®¼´Â, ÀÎÅÚ x86 ÇÁ·Î¼¼¼¿¡¼, "Unicode" ½ºÆ®¸µÀÌ ÀÖ´Â °÷¿¡¼ ¹öÆÛ
¿À¹öÇ÷ο찡 ¹ß»ý ÇÒ ¶§ ÀÛÀº ¿ë·®ÀÇ ÀÓÀÇÀû ÄÚµå·Î ½ÇÇàÀ» ÇØ ³¾ ¼ö ÀÖ´Â ±â¼ú(º£³×Ä¡¾Æ½Ä ÀͽºÇ÷ÎÀÕ-Venetian Exploit)À» ¼Ò°³ ÇÑ´Ù. ÀÌ·± °æ¿ì´Â À©µµ¿ì
½Ã½ºÅÛ¿¡¼ °øÅëÀûÀ̳ª ÀÌ ±â¼úÀº ƯÁ¤ ¿î¿µÃ¼Á¦¿¡ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Ï´Ù. [¼Ò°³] À©µµ¿ì Ç÷§Æû¿¡¼´Â ¿À¹ö ÇÃ·Î¿ì µÇ±â ÀÌÀü¿¡ À¯´ÏÄÚµå·Î ÄÁ¹öÆ®
µÈ ½ºÆ®¸µ¿¡¼ ¿À¹öÇ÷ο찡 ¹ß°ßµÇ´Â °æ¿ì°¡ ÀÖ´Ù. ¿äûµÉ ½ºÆ®¸µ(submitted
string)ÀÇ °¢ ¹ÙÀÌÆ® »çÀ̸¶´Ù ³Î ¹ÙÀÌÆ®¸¦ »ðÀÔÇÏ¿© ½©Äڵ带 ¸¸µé¸é¼ ºÎÅÍ "ÀͽºÇ÷ÎÀÕ" ÀÛ¼ºÀÌ º¹ÀâÇÏ´Ù. ¿¹¸¦µé¾î AAAA ´Â 00 41 00 41
00 41 00 41 ÀÌ µÈ´Ù. ÀϹÝÀûÀ¸·Î ¸Å¹ø ±³´ëÇÏ´Â ¹ÙÀÌÆ®°¡ Á¦·ÎÀÎ »óȲ¿¡¼ ÀǹÌÀÖ´Â ½©Äڵ带 ÀÛ¼ºÇϱâ¶õ ¸Å¿ì ¾î·Æ´Ù°í ¿©°ÜÁø´Ù. ÀÌ ¹®¼´Â Ãâ·Â°¡´ÉÇÑ ASCII ¹®ÀÚ¸¸À¸·Î ÀͽºÇ÷ÎÀÕ Äڵ带 ¸¸µå´Â "bridge building" ¹æ¹ý°ú
´Ù¸£Áö ¾ÊÀº ±â¼úÀ» »ç¿ëÇÏ¿© ÀÌ ¹®Á¦¸¦ ¾î¶»°Ô ±Øº¹ÇÒ ¼ö ÀÖ´ÂÁö ¼³¸íÇÑ´Ù. [°¡Á¤] ÀÌ ±â¼úÀ» À¯¿ëÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº »óŸ¦ À¯ÁöÇØ¾ß ÇÑ´Ù: 1) ´ë»ó ÇÁ·Î±×·¥ÀÇ ½ÇÇà °æ·Î¸¦ À¯´ÏÄÚµå ¹öÆÛ·Î ¸®´ÙÀÌ·ºÆ® ½Ãų ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±×¸®°í ¾î´À ÇÑÂÊÀÌ¶óµµ °¡´ÉÇØ¾ß ÇÔ: 2) eax, ebx, ecx, edx,
esp, ebp or esi ·¹Áö½ºÅÍ Áß Çϳª´Â À¯´ÏÄÚµå ¹öÆÛÀÇ ¾Ë·ÁÁø ¿ÀÇÁ¼ÂÀ» °¡¸®ÄÑ¾ß ÇÑ´Ù. ¶Ç´Â 3) ¿ì¸®ÀÇ ¹öÆÛ ¸Þ¸ð¸®¿¡ Á¤È®ÇÑ ÁÖ¼Ò¸¦ ¾Ë°Å³ª ÁöÁ¤ÇÒ ¼ö ÀÖ¾î¾ß
ÇÑ´Ù. [º£³×Ä¡¾Æ½Ä ÀͽºÇ÷ÎÀÕ] "Unicode" ¹öÆÛ´Â º£³×Ä¡¾Æ½Ä ºí¶óÀεå¿Í ºñ½ÁÇÏ´Ù: ¿ì¸®°¡ ÄÁÆ®·Ñ ÇÏ´Â "solid" ¹ÙÀÌÆ®µé°ú ±× °£°Ý¸¶´Ù ¹Ýº¹Àû Á¦·ÎµéÀÇ
"gap"ÀÌ ÀÖ´Ù. ¾ÕÀ¸·Î ´Ù·ê ±â¼úÀº ¹öÆÛÀÇ ´õ ¾Æ·¡ÂÊ gapµé¿¡ ¼±ÅÃµÈ ¹ÙÀÌÆ®µéÀ»
³¢¿ö³Ö±â À§Èù ¹öÆÛ ½ÃÀÛÁ¡¿¡¼ "solid" ¹ÙÀÌÆ®¸¦ »ç¿ëÇÏ´Â °Í°ú ºí¶óÀε带 "´ÝÀ½"À¸·Î¼, ÀͽºÇ÷ÎÀÕÀÇ payload °¡ µÉ ÀÛÀº ¿ë·®ÀÇ ½©Äڵ带 ¸¸µå´Â °Í¿¡ ´ëÇØ ´Ù·é´Ù. ¿ì¸®´Â À̰ÍÀ» Çϱâ À§ÇØ ¸Þ¸ð¸® ¼öÁ¤À» À§ÇÑ Æ¯Á¤ÇÑ ¹æ¹ýÀ¸·Î ¹Ýº¹Àû Á¦·Î¸¦ Æ÷ÇÔ½ÃÄÑ ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÏ´Â °Í¿¡ ´ëÇØ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÎÅÚ ÇÁ·Î¼¼¼¿¡¼ÀÇ instructionÀº º¯¼ö ±æÀ̸¦ °¡Áø´Ù. °¢ ¹ÙÀÌÆ®¸¶´Ù Á¦·Î¸¦ °¡Áö°í ÀÖ¾î¾ß ÇϹǷÎ, ¿ì¸®´Â ÀνºÆ®·°¼Ç ¹Ù¿î´õ¸®¿¡ ¶È¹Ù·Î ¸ÂÃç Á¤·ÄµÇ´Â °ÍÀ» È®½ÇÈ÷ Çϱâ
À§ÇØ °°Àº ÀǹÌÀÇ ÀνºÆ®·°¼ÇÀ» ¼öÇàÇÏ´Â "nop"À» ¿ì¸®ÀÇ Äڵ忡 »ðÀÔÇÒ °ÍÀÌ´Ù. (ÀÌ nop ÀνºÆ®·°¼ÇÀº ¿ì¸® Äڵ忡¼ ¾Æ¹«·± °á°ú¸¦
ÃÊ·¡ÇÏÁö ¾ÊÁö¸¸ Äڵ忡 ä¿ï ¼ö ÀÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.) 00·Î ½ÃÀÛÇÏ´Â ÀνºÆ®·°¼ÇÀº, ¿ì¸®¿¡°Ô Ưº°È÷ À¯¿ëÇÏÁö ¾ÊÁö¸¸, ¸ðµÎ "add" ¸í·ÉÀÌ´Ù. ÀϹÝÀûÀ¸·Î non-zero ¹ÙÀÌÆ®·Î ½ÃÀÛÇÏ´Â ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. µû¶ó¼ ¿ì¸®°¡ Äڵ带 ÀÛ¼ºÇÒ ¶§ ´ÙÀ½ ¼öÇàÇØ¾ß ÇÒ ÀνºÆ®·°¼ÇÀÌ 00·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù¸é "ÀçÁ¤·Ä" µÈ ´ÙÀ½°ú °°Àº ƯÁ¤ÇÑ Çü½ÄÀÇ instructionµéÀ»
»ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯¸é ¿ì¸®´Â ´ÙÀ½ ÀνºÆ®·°¼ÇÀ¸·Î Á»
´õ Èï¹Ì·Î¿î °ÍÀ» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. 00 6D 00:add byte ptr [ebp],ch À̰ÍÀº ¾²±â °¡´ÉÇÑ ¾î¶² °÷À» Æ÷ÀÎÆ® Çϰí ÀÖ´Ù´Â °ÍÀ» ³ªÅ¸³»°í ÀÖ´Ù. ±×¸®°í
±×°÷Àº "ÀͽºÇ÷ÎÀÕ"ÀÇ ¸ñÀû°ú´Â »ó°ü ¾øÀ¸¹Ç·Î °ü½É°¡Áú Çʿ䰡 ¾ø´Ù. ¸¸¾à ±×·¸Áö ¾ÊÀº °æ¿ì¶ó¸é, ´ÙÀ½°ú °°ÀÌ ´Ù¸¥ ·¹Áö½ºÅ͵éÀ» »ç¿ëÇÏ¸é µÈ´Ù. 00 6E 00:add byte ptr [esi],ch 00 6F 00:add byte ptr [edi],ch 00 70 00:add byte ptr [eax],dh 00 71 00:add byte ptr [ecx],dh 00 72 00:add byte ptr [edx],dh 00 73 00:add byte ptr [ebx],dh ¸¸¾à ¸ðµç ·¹Áö½ºÅ͵éÀÌ ¿ì¸®°¡ ¾ÈÀüÇÏ°Ô µ¤¾î¾µ ¼ö ÀÖ´Â °÷À¸·Î Æ÷ÀÎÆ®Çϰí ÀÖÁö ¾Ê´Ù¸é constant Æ÷ÀÎÅÍ °ªÀ» ´ÙÀ½°ú °°Àº ÀνºÆ®·°¼ÇÀ¸·Î eax¿¡
ÇÒ´çÇÏ¸é µÈ´Ù. 6A 00:push 0 58 :pop eax (eax¿¡ "0"À» ÇÒ´çÇÔ), ±×´ÙÀ½ °°Àº ¶æÀÇ Á¤·Ä ÀνºÆ®·°¼ÇÀÎ "nop"·Î eax ·¹Áö½ºÅͰ¡ ¾ÈÀüÇÏ°Ô µ¤¾î¾µ ¼ö ÀÖ´Â ¸Þ¸ð¸® À§Ä¡·Î Æ÷ÀÎÆ®
µÉ ¶§ ±îÁö, ¾Æ·¡ ¼³¸í ÇÒ "add"¿Í "sub"¸¦ ÇØ³ª°£´Ù. À§ »óÅ¿¡¼, ¿ì¸®´Â ¿ì¸®ÀÇ À¯´ÏÄÚµå ¹öÆÛ·Î Æ÷ÀÎÆ®ÇÏ´Â ·¹Áö½ºÅ͸¦ °¡Áö°Ô µÈ´Ù. ´ÙÀ½ ¿ì¸®°¡ ÇØ¾ß ÇÒ ÀÏÀº ¿ì¸®ÀÇ ¹öÆÛ ³»¿¡ Àִ ƯÁ¤ÇÑ Æ÷ÀÎÆ® ¾Æ·¡ÀÇ ¸ðµç
00 ¹ÙÀÌÆ®¿¡ ´ÙÀ½°ú °°ÀÌ "set" À» ÇÏ´Â °ÍÀÌ´Ù. 80 00 75:add byte ptr [eax],75h ... ±×´ÙÀ½ eax¸¦ µÎ¹ø inc(Áõ°¡) ½Ã۰í... 40 :inc eax 00 6D 00 :add byte
ptr [ebp],ch 40 :inc eax ±×¸®°í ´ÙÀ½ 00 ¹ÙÀÌÆ®¸¦ ¼¼ÆÃÇϸé
µÈ´Ù. À̰ÍÀº ¿ì¸®ÀÇ ½©ÄÚµåÀÇ ¸¶Áö¸· ¾ÕºÎºÐÀÇ ¹öÆÛ¿¡
À§Ä¡Çϰí ÀÖ´Â ÀÓÀÇÀû ¹ÙÀÌÆ®µé·Î ³¡³ª°Ô µÉ °ÍÀÌ´Ù. ±×·¯¸é ±× ¹öÆÛ´Â ´ÙÀ½°ú °°ÀÌ ³õÀÌ°Ô µÈ´Ù. 0x00000000 ... [ alternate-zero byte setting code ] [ arbitrary bytes of shellcode ] ... 0xffffffff ¹°·Ð, ù¹øÂ°·Î ÇØ¾ß
ÇÏ´Â ÀÏÀº ÀÓÀÇÀû ¹ÙÀÌÆ®¸¦ ¾²·Á°í ÇÏ´Â ¹öÆÛÀÇ ºÎºÐÀ» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ȹµæÇÏ´Â °ÍÀÌ´Ù. ÀÌ°É Çϱâ À§ÇØ, ¿ì¸®ÀÇ ½©Äڵ带
°¡¸®Å°°í ÀÖ´Â ·¹Áö½ºÅÍÀÇ °ª°ú eax ·¹Áö½ºÅÍÀÇ °ªÀ»
±³È¯ÇØ¾ß Çϴµ¥, 1 ¹ÙÀÌÆ®·Î °¡´ÉÇÑ "xchg" ÀνºÆ®·°¼ÇÀ» »ç¿ë ÇÒ °ÍÀÌ´Ù. ´ÙÀ½ ÁßÀÇ Çϳª°¡ µÉ °ÍÀÌ´Ù: 93:xchg eax,ebx 91:xchg eax,ecx 92:xchg eax,edx 94:xchg eax,esp 95:xchg eax,ebp 96:xchg eax,esi 97:xchg eax,edi ±×¸®°í ¿ì¸®´Â "add"¿Í "sub"¸¦ »ç¿ëÇÏ¿© eax °ªÀ» ¹Ù²ã¾ß Çϴµ¥, ¿ì¸®
¹öÆÛÀÇ "ÀÓÀÇÀû ¹ÙÀÌÆ®" ºÎºÐÀ» °¡¸®Å°±â
À§ÇÔÀÌ´Ù. 05 00 75 00 4C: add eax,4C007500h 2D 00 75 00 4C: sub eax,4C007500h "add"¿Í
"sub" ¿ÀÆÛ·¹À̼ÇÀ» ¹Ýº¹ÇØ ³ª°¡´Â °ÍÀÌ ÇÊ¿äÇѵ¥ 256ÀÇ ¹è¼ö¸¦ ´õÇÒ
¶§ ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù. add eax,4C007500h sub eax,4C007400h ±×¸®°í À§¿¡ ¼³¸íÇÑ ´ë·Î ´õÇϰí Áõ°¡½ÃÄÑ ³ª°£´Ù. "¹ÙÀÌÆ® ¼¼ÆÃ"µÈ Äڵ带 ÅëÇØ ÀÓÀÇÀû ÄÚµå·Î ½ÇÇàµÈ´Ù´Â »ç½Ç¿¡ µû¶ó
¿ì¸®ÀÇ ÀÓÀÇÀû ÄÚµå´Â ÀÌÁ¦ ½ÇÇà °¡´É ÇØ Áö°Ô µÈ´Ù. ¸¸¾à ÃʱâÈµÈ Æ÷ÀÎÅÍ ¿ÀÇÁ¼ÂÀ» ¶È¹Ù·Î ¾Ë°í ÀÖ´Ù¸é
¿ì¸®ÀÇ ÀÓÀÇÀû ÄÚµå·Î ½ÇÇàÀ» °è¼Ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. [¹®Á¦] ù¹øÂ°·Î ¸¸¾à ´ë»ó ÇÁ·Î±×·¥ÀÌ
high bit filter¸¦ º¸À¯Çϰí ÀÖ´Ù¸é, ÀÌ´Ï¼È Æ÷ÀÎÅ͸¦ "xchg" ÇØ¾ß ÇÒ Çʿ䰡 ÀÖ°í ¿ÉÄڵ尡 0x7fº¸´Ù ³ô°Ô ¿ä±¸ÇϹǷΠÀÌ ±â¼úÀº ¸Å¿ì ¾î·Á¿î °ÍÀε¥, 'push'¿Í 'pop' ÀνºÆ®·°¼ÇÀ¸·Î
µ¿ÀÏÇÏ°Ô ¸¸µé ¼ö ÀÖÀ»Áö ¸ô¶óµµ ¸¸µé±â¿¡´Â ¾î·Æ´Ù. Å©±â ¶ÇÇÑ ¹®Á¦´Ù, ´ÜÀÏ 00 ¹ÙÀÌÆ®°¡
´ÙÀ½°ú °°ÀÌ ¼¼ÆÃ µÇ´Â ÀνºÆ®·°¼Ç ½ÃÄö½º°¡ ÀÖ´Ù: 40 :inc eax 00 6D 00:add byte ptr [ebp],ch 40 :inc eax 00 6D 00:add byte ptr [ebp],ch 80 00 75:add byte ptr [eax],75h 00 6D 00:add byte ptr [ebp],ch ±×·¡¼ 2°³ÀÇ ÀÓÀÇÀû Äڵ带 ¼¼ÆÃÇϱâ
À§ÇØ 14¹ÙÀÌÆ®ÀÇ Äڵ尡 ÀÖ¾î¾ß ÇÑ´Ù. (¿ì¸®´Â Çϳª¸¦ ÀÚÀ¯·Ó°Ô
°¡Áø´Ù. ±× Çϳª´Â ÀÌ¹Ì ¹®Àھȿ¡ ÀÖ´Â °ÍÀÌ´Ù.) ¿ì¸®°¡ ¼¼ÆÃÇÒ ¼ö ÀÖ´Â 1024
¹ÙÀÌÆ®ÀÇ ¹öÆÛ¸¦ ÀǹÌÇÏ´Â °ÍÀÌ°í ±×·¯¸é ÀͽºÇ÷ÎÀÕ ÄÚµåÀÇ ÃÖ´ë Å©±â °ªÀº (1024*2)/14=146 ¹ÙÀÌÆ®°¡ µÉ °ÍÀÌ´Ù. (À¯´ÏÄÚµå ¹®ÀÚ°¡ 2¹ÙÀÌÆ®À̹ǷÎ) ±×·¡µµ ÀÓÀÇÀû ¸í·ÉÀ» ½ÇÇà ½ÃÄÑ ÇØ·Ó°Ô Çϱ⿡´Â ÃæºÐÇÏ´Ù. Ä¡¹ÐÇÏ°Ô ÀÌ ±â¼úÀ» »ç¿ëÇϸé ÀÓÀÇÀû ½©Äڵ带 ¸¸µå´Âµ¥ ÇÊ¿äÇÑ ÄÚµåÀÇ
Å©±â¸¦ ÁÙÀÌ´Â °ÍÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù. ÄÁÅØ½ºÆ®¿¡ À̰ÍÀ» ³õÀ» ¶§´Â ¸®¹ö½º ½©À» ÀÏÀ¸Å°´Â ÄÚµå´Â
170 ¹ÙÀÌÆ®º¸´Ù ÀÛ°Ô ¸Â¾Æ ¶³¾îÁø´Ù. ÀÌ ±â¼úÀº µû¶ó¼
"wild" ÇÑ °÷¿¡ ³ª°¡ À¯´ÏÄÚµå ¿À¹öÇ÷οì ÀͽºÇ÷ÎÀÕÀ» ÀÛ¼ºÇϴµ¥ ÃæºÐÇÒ °ÍÀÌ´Ù. [°á·Ð] ÀÌ ¹®¼¿¡¼ ¼³¸íÇÑ "º£³×Ä¡¾Æ½Ä" ÀͽºÇ÷ÎÀÕ ±â¼úÀº ´Ù¼Ò º¹ÀâÇÏ°Ô ÀͽºÇ÷ÎÀÕÀ» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ´Ù. ÇÏÁö¸¸ À̰ÍÀº À©µµ¿ì ¿î¿µÃ¼Á¦ ÆÐ¹Ð¸®±º¿¡ ²Ï °øÅëÀûÀ¸·Î ³ªÅ¸³ª´Â »óȲ¿¡ ´ëÇØ ´Ù·ç°í ÀÖ´Ù. ÀͽºÇ÷ÎÀÕ ÇÒ ¼ö ¾ø´Â °ÍÀº À§ÇèÇÒ ¼ö ÀÖ´Ù´Â ¿À¹öÇ÷οìµéÀ» ±âÃÊ·ÎÇÏ¿© À¯´ÏÄڵ带 ´Ù·ç´Â ¹æ¹ýÀÌ Á¦´ë·Î Àü´ÞµÇ¾úÀ¸¸é
ÇÑ´Ù. ÇÁ·Î±×·¥ÀÇ ½ÇÇà °æ·Î¸¦ ¹Ù²Ü ¼ö ¸¸ ÀÖÀ¸¸é ±×°ÍÀ¸·Î ¾ðÁ¦³ª ÀÓÀÇÀû ÄÚµåÀÇ ½ÇÇàÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» ¸í½ÉÇØ¶ó. |