5Àå. ¹öÆÛ¿À¹öÇ÷οì ÇÇÇϱâ

 

An enemy will overrun the land; he will pull down your strongholds and plunder your fortresses.

 Amos 3:11 (NIV)
Â÷·Ê
5.1. C/C++ ¿¡¼­ÀÇ À§Çè
5.2. C/C++ ¿¡¼­ÀÇ ¶óÀ̺귯¸® ¼Ö·ç¼Ç
5.2.1. Ç¥ÁØ C ¶óÀ̺귯¸® ¼Ö·ç¼Ç
5.2.2. Á¤Àû ¹× µ¿Àû ÇÒ´ç ¹öÆÛ
5.2.3. strlcpy and strlcat
5.2.4. libmib
5.2.5. C++ std::string class
5.2.6. Libsafe
5.2.7. ´Ù¸¥ ¶óÀ̺귯¸®
5.3. C/C++ ¿¡¼­ÀÇ ÄÄÆÄÀÏ ¼Ö·ç¼Ç
5.4. ´Ù¸¥ ¾ð¾î

±ØÈ÷ °øÅëÀûÀÎ º¸¾È °áÇÔÀº "¹öÆÛ ¿À¹öÇ÷οì" ¿¡ ´ëÇÑ Ãë¾à¼ºÀÌ´Ù. ¹öÆÛ ¿À¹öÇ÷οì´Â "¹öÆÛ ¿À¹ö·±" À̶ó°íµµ Çϴµ¥ "stack smashing" °ú "heap smashing" °ø°ÝÀ» Æ÷ÇÔÇÏ¿© ¸¹Àº Á¾·ùÀÇ ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀÌ ÀÖ´Ù. ±â¼úÀûÀ¸·Î ¹öÆÛ ¿À¹öÇ÷οì´Â ÇÁ·Î±×·¥ÀÇ ³»ºÎÀûÀÎ ±¸Çö°ú °ü·ÃµÈ ¹®Á¦ÀÌÁö¸¸ ÀúÀÚ°¡ À̸¦ µ¶ÀÚÀûÀÎ Àå¿¡¼­ ´Ù·ê¸¸Å­ ³Î¸® ¾Ë·ÁÁø ½É°¢ÇÑ ¹®Á¦ÀÌ´Ù. ÀÌ ÁÖÁ¦°¡ ¾ó¸¶³ª Áß¿äÇÑ Áö¿¡ ´ëÇØ ÀÌÇØ½Ã۱â À§ÇØ CERT ¿¡¼­´Â 1998 ³â¿¡´Â 13 °³ ±Ç°í¾È Áß 9°³ ¹× 1999 ³â¿¡´Â Àû¾îµµ Àý¹ÝÀÇ ±Ç°í¾È¿¡ ¹öÆÛ ¿À¹öÇ÷ο츦 Æ÷ÇÔÇß´Ù. ¹ö±×Æ®·¢¿¡ ´ëÇÑ 1999 ³âÀÇ ºñ°ø½ÄÀû Á¶»ç´Â ´ë·« ÀÀ´äÀÚÀÇ 2/3 °¡ ¹öÆÛ ¿À¹öÇ÷ο찡 ½Ã½ºÅÛ º¸¾ÈÀ» Ãë¾àÇÏ°Ô ÇÏ´Â ÁÖµÈ ¿äÀÎÀÌ¿´´Ù°í ´À²¼À½À» ¹ß°ßÇß´Ù (³ª¸ÓÁö ÀÀ´äÀÚ´Â ¿À¼³Á¤À» ÁÖµÈ ¿äÀÎÀ¸·Î ½Äº°ÇÏ¿´´Ù) [Cowan 1999]. ÀÌ´Â Àß ¾Ë·ÁÁø ¿À·¡µÈ ¹®Á¦·Î ¾ÆÁ÷²¯ °è¼ÓÇØ¼­ ¹®Á¦·Î ´ëµÎµÇ°í ÀÖ´Ù [McGraw 2000].

¹öÆÛ ¿À¹öÇ÷οì´Â º¸Åë ¹®ÀÚµéÀÇ ¹®ÀÚ¿­ÀÎ ÀÏ·ÃÀÇ °ªµéÀ» °íÁ¤µÈ ±æÀ̸¦ °®´Â ¹öÆÛ¿¡ ÀÛ¼ºÇϰí Àû¾îµµ ÇÑ °ªÀ» ¹öÆÛÀÇ °æ°è ¿ÜºÎ (º¸Åë ¹öÆÛ °æ°è¸¦ ³Ñ¾î¼±´Ù) ¿¡ ÀÛ¼ºÇÒ ¶§ ÀϾ´Ù. ¹öÆÛ ¿À¹öÇ÷οì´Â »ç¿ëÀڷκÎÅÍÀÇ ÀÔ·ÂÀ» ¹öÆÛ³»·Î ÀоîµéÀÏ ¶§ ÀϾ ¼ö ÀÖÁö¸¸ ¶ÇÇÑ ÇÁ·Î±×·¥³»¿¡¼­ ´Ù¸¥ Á¾·ùÀÇ ÇÁ·Î¼¼½Ì µ¿¾È¿¡ ÀϾ ¼öµµ ÀÖ´Ù.

º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¹öÆÛ ¿À¹öÇ÷ο츦 Çã¿ëÇÑ´Ù¸é ÀÌ´Â ´ë°³ °ø°ÝÀÚ¿¡ ÀÇÇØ ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ¹öÆÛ°¡ Áö¿ªÀûÀÎ C º¯¼ö¶ó¸é ¿À¹öÇ÷οì´Â ÇÔ¼ö·Î ÇÏ¿©±Ý °ø°ÝÀÚ°¡ ¼±ÅÃÇÑ Äڵ带 ½ÇÇà½Ã۵µ·Ï Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯Á¤ º¯ÇüÀ» ´ë°³ "stack smashing" °ø°ÝÀ̶ó°í ÇÑ´Ù. Èü¿¡¼­ ¹öÆÛ´Â ´õ¿í ÁÁÁö ¾ÊÀºµ¥ °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥³»ÀÇ ´Ù¸¥ º¯¼ö¸¦ Á¦¾îÇϱâ À§ÇØ ¿À¹öÇÃ·Î¿ì µîÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» Áöµµ ¸ð¸¥´Ù. ´õ¿í ¼¼ºÎÀûÀÎ »çÇ×Àº Aleph1 [1996], Mudge[1995] ¶Ç´Â Nathan P. Smith ÀÇ "Stack Smashing Security Vulnerabilities" À¥»çÀÌÆ® http://destroy.net/machines/security/ ¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.

´ëºÎºÐÀÇ »óÀ§ ¼öÁØ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ÀÚµ¿ÀûÀ¸·Î ¹è¿­ÀÇ Å©±â¸¦ Á¶Á¤Çϰųª (¿¹, ÆÞ) ¶Ç´Â º¸Åë ¹öÆÛ ¿À¹öÇ÷ο츦 ŽÁöÇØ¼­ ¿¹¹æÇϱ⠶§¹®¿¡ (¿¹, Ada95) º»ÁúÀûÀ¸·Î ÀÌ ¹®Á¦´Â ¾ø´Ù.±×·¯³ª C ¾ð¾î´Â ÀÌ ¹®Á¦¿¡ ´ëÇØ ¾î¶°ÇÑ º¸È£µµ Á¦°øÇÏÁö ¾ÊÀ¸¸ç C++ µµ ¶ÇÇÑ ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ½±°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. ¾î¼Àºí·¯µµ ¶ÇÇÑ ¾î¶°ÇÑ º¸È£µµ Á¦°øÇÏÁö ¾Ê´Âµ¥ º¸Åë ÀÌ·¯ÇÑ º¸È£¸¦ Á¦°øÇÏ´Â ¾î¶² ¾ð¾î (¿¹, Ada ¿Í ÆÄ½ºÄ®) µéÀº ÀÌ º¸È£ ±â´ÉÀ» ¼º´ÉÀûÀÎ Ãø¸é¿¡¼­ ±ÝÁöÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºµÈ´Ù ÇÏ´õ¶óµµ ¸¹Àº ¶óÀ̺귯¸® ·çƾÀº C ¶Ç´Â C++ ·Î ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç °á°úÀûÀ¸·Î ÀÌ ·çƾÀ» È£ÃâÇÏ´Â glue Äڵ嵵 ¸¶Âù°¡ÁöÀε¥ µû¶ó¼­ ¿øÇÏ´Â ¸¸Å­ ´Ù¸¥ ¾ð¾îµéÀº ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ¿ÏÀüÇÑ º¸È£¸¦ Á¦°øÇÏÁö´Â ¾Ê´Â´Ù.