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