µð¹ö±ë ´ëÈ­»óÀÚ¸¦ ÅëÇØ¼­ ¸Þ¸ð¸® ¿À·ù ÆÇº°Çϱâ

2006-07-13 ½Å¿µÁø

1. Introduction

Ȱ¼ºÈ­µÈ ÇÁ·Î±×·¥°ü·Ã Áú´ä °Ô½ÃÆÇÀ» º¸¸é ¹Ýº¹ÀûÀ¸·Î ´Ã ¿Ã¶ó¿À´Â Áú¹®ÁßÀÇ Çϳª°¡ ¸Þ¸ð¸® ¿À·ù¿¡ °üÇÑ °ÍÀÌ´Ù. ½Ç¹«¿¡ »ç¿ëµÇ´Â ´ëºÎºÐÀÇ »ó¿ë ÇÁ·Î±×·¥µéµµ Æ÷ÀÎÅÍ/¸Þ¸ð¸® °ü·Ã ÄÚµåµéÀÌ ÇÁ·Î±×·¥ÀÇ Àüü ¿À·ùÀÇ 90% ÀÌ»óÀ» Â÷ÁöÇÑ´Ù°í ÇØµµ °ú¾ðÀÌ ¾Æ´Ï´Ù. ½Ç¹« ÇÁ·Î±×·¥ÀÌ ÀÌ Á¤µµ´Ï óÀ½ ÀÛ¼ºÇÏ´Â »ç¶÷µéÀÌ Æ÷ÀÎÅÍ ¿À·ù¸¦ ÇÇÇÑ´Ù´Â °ÍÀº ±×¾ß¸»·Î Èûµé´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¿À·ù »óȲÀ» º¸°í ´ëóÇÏ´Â ¹æ¹ýÀ» ¸ð¸£±â ¶§¹®¿¡ ´õ¿í ³­Ã³ÇÑ °æ¿ì°¡ ¸¹´Ù. ¾Æ¸¶µµ ±×·¡¼­ Áú´ä °Ô½ÃÆÇ¿¡´Â ±×·¸°Ô³ª ÀÚÁÖ ¶á±Ý¾ø´Â Áú¹®µéÀÌ ¸¹ÀÌ ¿Ã¶ó¿À´Â °ÍÀ¸·Î º¸ÀδÙ.

ÀÌ ¹®¼­´Â ¿À·ù°¡ ³ª´Â Äڵ带 »ìÆìº¸°í, ÇØ´ç Äڵ尡 ½ÇÇàµÉ ¶§ ¹ß»ýÇÏ´Â ¿À·ù¸¦ ¾Ë¾Æ º½À¸·Î½á ÃßÈÄ¿¡ µ¿ÀÏÇÑ ¿¡·¯°¡ ³­ °æ¿ì¿¡ Á» ´õ »¡¸® µð¹ö±ë ÇÒ ¼ö ÀÖ´Â ´É·Â ¹è¾ç¿¡ ±× ¸ñÀûÀÌ ÀÖ´Ù ÇϰڴÙ... ¤¾¤¾¤¾~ ±×·³ Áö±ÝºÎÅÍ Ã³À½ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ºÐµéÀÌ ÀÚÁÖ Á¢ÇÏ´Â ¸Þ¸ð¸® ¿À·ù »óȲ¿¡ ´ëÇØ¼­ »ìÆìº¸µµ·Ï ÇÏÀÚ~

2. Heap overrun

ù ¹øÂ°´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ³Ñ¾î¼­ ¿À¹ö¶óÀÌÆ® ÇÑ °æ¿ìÀÌ´Ù. ´ÙÀ½°ú °°Àº Äڵ带 »ý°¢ÇÒ ¼ö ÀÖ´Ù.

º¸¸é 100°³¸¦ ÇÒ´çÇÏ°í ³ª¼­´Â stupid_func¿¡¼­ 200°³¸¦ ÃʱâÈ­ ÇØ¹ö¸®°í ÀÖ´Ù. ÇÒ´çµÈ °Í º¸´Ù ´õ ¸¹ÀÌ ½á¼­ ¿À¹ö¶óÀÌÆ® µÇ ¹ö¸° °ÍÀÌ´Ù. µð¹ö±× ÁßÀ̶ó¸é ¾Æ·¡¿Í °°Àº ASSERT Áø´Ü ¿À·ù¸¦ ¸¸³¯ ¼ö ÀÖ´Ù.

3. Heap header overwrite

µÎ¹øÂ°·Î ÇÒ´çµÈ ¸Þ¸ð¸® ÀÌÀü ¿µ¿ªÀ» °ãÃľ²´Â °æ¿ìÀÌ´Ù. ´ÙÀ½°ú °°Àº Äڵ带 »ý°¢ÇÒ ¼ö ÀÖ´Ù.

º¸¸é ÇÒ´çÀÌ ½ÃÀÛµÈ ÁÖ¼Ò ÀÌÀü(ar-100)¿¡¼­ ºÎÅÍ °ªÀ» ä¿ì±â ¶§¹®¿¡ ¶óÀ̺귯¸®¿¡¼­ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â °ü¸® Çì´õ ºÎºÐÀ» ÃʱâÈ­ ½Ãų ¼ö ÀÖ´Ù. µð¹ö±× ÁßÀ̶ó¸é ¾Æ·¡¿Í °°Àº ASSERT Áø´Ü ¿À·ù¸¦ ¸¸³¯ ¼ö ÀÖ´Ù.

4. More...

¾Æ·¡´Â À§ÀÇ °Í°ú À¯»çÇÑ ¿À·ù°¡ ³¯ ¼ö ÀÖ´Â ´õ ¸¹Àº »óȲµéÀ» Á¤¸®ÇØ º¸¾Ò´Ù. ´Ã Ç×»ó Æ÷ÀÎÅ͸¦ ´Ù·ê¶§¿¡´Â ¾Æ·¡¿Í °°Àº Á¡°Ë ¸ñ·ÏÀ» ¸Ó¸´¼ÓÀ¸·Î »ý°¢ÇÏ´Â °ÍÀ» °ÔÀ»¸® ÇÏÁö ¸»¾Æ¾ß ÇÒ °ÍÀÌ´Ù.

5. Conclusion

C++À» »ç¿ëÇÑ´Ù¸é µÇµµ·Ï ³¯(Raw) Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù°í ÇÑ´Ù. ±×¸®°í ³¯(Raw) Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é ±× ³ðÀÌ »ç¿ëµÇ´Â ÄÚµå ÁÖÀ§´Â Ç×»ó °¨½ÃÇϵµ·Ï ÇÏÀÚ!