µð¹ö±ë ´ëÈ»óÀÚ¸¦ ÅëÇØ¼ ¸Þ¸ð¸® ¿À·ù ÆÇº°Çϱâ
2006-07-13 ½Å¿µÁø
1. Introduction
Ȱ¼ºÈµÈ ÇÁ·Î±×·¥°ü·Ã Áú´ä °Ô½ÃÆÇÀ» º¸¸é ¹Ýº¹ÀûÀ¸·Î ´Ã ¿Ã¶ó¿À´Â Áú¹®ÁßÀÇ Çϳª°¡ ¸Þ¸ð¸® ¿À·ù¿¡ °üÇÑ °ÍÀÌ´Ù. ½Ç¹«¿¡ »ç¿ëµÇ´Â ´ëºÎºÐÀÇ »ó¿ë ÇÁ·Î±×·¥µéµµ Æ÷ÀÎÅÍ/¸Þ¸ð¸® °ü·Ã ÄÚµåµéÀÌ ÇÁ·Î±×·¥ÀÇ Àüü ¿À·ùÀÇ 90% ÀÌ»óÀ» Â÷ÁöÇÑ´Ù°í ÇØµµ °ú¾ðÀÌ ¾Æ´Ï´Ù. ½Ç¹« ÇÁ·Î±×·¥ÀÌ ÀÌ Á¤µµ´Ï óÀ½ ÀÛ¼ºÇÏ´Â »ç¶÷µéÀÌ Æ÷ÀÎÅÍ ¿À·ù¸¦ ÇÇÇÑ´Ù´Â °ÍÀº ±×¾ß¸»·Î Èûµé´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¿À·ù »óȲÀ» º¸°í ´ëóÇÏ´Â ¹æ¹ýÀ» ¸ð¸£±â ¶§¹®¿¡ ´õ¿í ³Ã³ÇÑ °æ¿ì°¡ ¸¹´Ù. ¾Æ¸¶µµ ±×·¡¼ Áú´ä °Ô½ÃÆÇ¿¡´Â ±×·¸°Ô³ª ÀÚÁÖ ¶á±Ý¾ø´Â Áú¹®µéÀÌ ¸¹ÀÌ ¿Ã¶ó¿À´Â °ÍÀ¸·Î º¸ÀδÙ.
ÀÌ ¹®¼´Â ¿À·ù°¡ ³ª´Â Äڵ带 »ìÆìº¸°í, ÇØ´ç Äڵ尡 ½ÇÇàµÉ ¶§ ¹ß»ýÇÏ´Â ¿À·ù¸¦ ¾Ë¾Æ º½À¸·Î½á ÃßÈÄ¿¡ µ¿ÀÏÇÑ ¿¡·¯°¡ ³ °æ¿ì¿¡ Á» ´õ »¡¸® µð¹ö±ë ÇÒ ¼ö ÀÖ´Â ´É·Â ¹è¾ç¿¡ ±× ¸ñÀûÀÌ ÀÖ´Ù ÇϰڴÙ... ¤¾¤¾¤¾~ ±×·³ Áö±ÝºÎÅÍ Ã³À½ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ºÐµéÀÌ ÀÚÁÖ Á¢ÇÏ´Â ¸Þ¸ð¸® ¿À·ù »óȲ¿¡ ´ëÇØ¼ »ìÆìº¸µµ·Ï ÇÏÀÚ~
2. Heap overrun
ù ¹øÂ°´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ³Ñ¾î¼ ¿À¹ö¶óÀÌÆ® ÇÑ °æ¿ìÀÌ´Ù. ´ÙÀ½°ú °°Àº Äڵ带 »ý°¢ÇÒ ¼ö ÀÖ´Ù.
º¸¸é 100°³¸¦ ÇÒ´çÇÏ°í ³ª¼´Â stupid_func¿¡¼ 200°³¸¦ ÃʱâÈ ÇØ¹ö¸®°í ÀÖ´Ù. ÇÒ´çµÈ °Í º¸´Ù ´õ ¸¹ÀÌ ½á¼ ¿À¹ö¶óÀÌÆ® µÇ ¹ö¸° °ÍÀÌ´Ù. µð¹ö±× ÁßÀ̶ó¸é ¾Æ·¡¿Í °°Àº ASSERT Áø´Ü ¿À·ù¸¦ ¸¸³¯ ¼ö ÀÖ´Ù.

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

4. More...
¾Æ·¡´Â À§ÀÇ °Í°ú À¯»çÇÑ ¿À·ù°¡ ³¯ ¼ö ÀÖ´Â ´õ ¸¹Àº »óȲµéÀ» Á¤¸®ÇØ º¸¾Ò´Ù. ´Ã Ç×»ó Æ÷ÀÎÅ͸¦ ´Ù·ê¶§¿¡´Â ¾Æ·¡¿Í °°Àº Á¡°Ë ¸ñ·ÏÀ» ¸Ó¸´¼ÓÀ¸·Î »ý°¢ÇÏ´Â °ÍÀ» °ÔÀ»¸® ÇÏÁö ¸»¾Æ¾ß ÇÒ °ÍÀÌ´Ù.
malloc/free¿Í new/delete¸¦ È¥¿ëÇØ¼ »ç¿ëÇÏ´Â °æ¿ì. mallocÀ¸·Î ÇÒ´çÇØ¼ delete·Î Áö¿ì´Â °æ¿ì µîÀÌ ÇØ´çÇÑ´Ù.
delete/delete [] È¥¿ë. delete´Â ´ÜÀÏ ¿ø¼Ò »èÁ¦¿¡, delete []Àº ¹è¿ ¿ø¼Ò »èÁ¦¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ µÑÀ» À߸ø »ç¿ëÇØ¼´Â ¾ÈµÈ´Ù.
ÇÒ´çµÈ Æ÷ÀÎÅÍ °ª º¯°æ. 100¹øÁö¿¡ ÇÒ´ç¹Þ¾Æ ³õ°í, delete³ª free½Ã¿¡ 200¹øÁö¸¦ ÀÔ·ÂÇÏ´Â °æ¿ì´Ù. ÀÌ·± °æ¿ì´Â ´ëºÎºÐ ÇÒ´ç ¹ÞÀº Æ÷ÀÎÅ͸¦ for·çÇÁµî¿¡ »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÑ´Ù. ÇÒ´ç¹ÞÀº Æ÷ÀÎÅÍ´Â Àý´ë·Î °ªÀ» º¯°æÇؼ´Â ¾ÈµÈ´Ù. °ªÀ» º¯°æÇÏ°í ½ÍÀ¸¸é º¹»çÇØ¼ Àӽà º¯¼ö·Î Âü°íÇϵµ·Ï ÇÑ´Ù.
5. Conclusion
C++À» »ç¿ëÇÑ´Ù¸é µÇµµ·Ï ³¯(Raw) Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù°í ÇÑ´Ù. ±×¸®°í ³¯(Raw) Æ÷ÀÎÅ͸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é ±× ³ðÀÌ »ç¿ëµÇ´Â ÄÚµå ÁÖÀ§´Â Ç×»ó °¨½ÃÇϵµ·Ï ÇÏÀÚ!