5.3. C/C++ ¿¡¼­ÀÇ ÄÄÆÄÀÏ ¼Ö·ç¼Ç

¿ÏÀüÈ÷ ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº °æ°è °Ë»ç¸¦ ÇÏ´Â ÄÄÆÄÀÏ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù ([Sitaker 1999] ¸¦ ÂüÁ¶Çضó). ÀúÀÚ ÀÇ°ßÀ¸·Î´Â ÀÌ·¯ÇÑ µµ±¸´Â ´Ù¼öÀÇ º¸È£ °èÃþ¸¦ °®´Â °æ¿ì ¸Å¿ì À¯¿ëÇÏÁö¸¸ À¯ÀÏÇÑ º¸È£Ã¥À¸·Î ÀÌ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀº Çö¸íÇÏÁö ¾Ê´Ù. ÀÌ¿¡ ´ëÇؼ­´Â Àû¾îµµ µÎ°¡Áö ÀÌÀ¯°¡ ÀÖ´Ù. ¿ì¼± ´ëºÎºÐÀÇ ÀÌ·¯ÇÑ µµ±¸µéÀº ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ºÎºÐÀûÀÎ º¸È£¸¸À» Á¦°øÇÑ´Ù (¿ÏÀüÇÑ º¸È£´Â ÀϹÝÀûÀ¸·Î 12-30 ¹è Á¤µµ ´À¸®´Ù); C ¿Í C++ Àº ´Ü¼øÈ÷ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£Çϵµ·Ï ¼³°èµÇÁö ¾Ê¾Ò´Ù. µÎ¹ø° ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥¿¡ ´ëÇØ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ À§ÇØ ¾î¶² µµ±¸°¡ »ç¿ëµÉ °ÍÀ̶ó´Â °ÍÀ» È®½ÅÇÒ ¼ö ¾ø´Ù; ÁÖ¾îÁø ½Ã½ºÅÛ¿¡ ´ëÇؼ­ ``Åë»óÀûÀÎ" ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °©Àڱ⠺¸¾È °áÇÔÀ» Á¦°øÇÒ ¼öµµ ÀÖ´Ù.

°¡Àå À¯¿ëÇÑ µµ±¸ÁßÀÇ Çϳª´Â Ç¥ÁØ GNU C ÄÄÆÄÀÏ·¯ gcc ¸¦ ¼öÁ¤ÇÑ "StackGuard" ÀÌ´Ù. StackGuard ´Â ``canary" ¶ó°í ºÒ¸®´Â ``guard" °ªÀ» ¹Ýȯ ÁÖ¼Ò ¾Õ¿¡ Ãß°¡ÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù; ¹öÆÛ ¿ÀÆÛÇ÷ο찡 ¹Ýȯ ÁÖ¼Ò¸¦ °ãÃľ²¸é canary °ªÀÌ º¯°æµÇ¾î ½Ã½ºÅÛÀº À̸¦ »ç¿ëÇϱâ Àü¿¡ À̸¦ ŽÁöÇÑ´Ù. ÀÌ´Â ¸Å¿ì À¯ÀÍÇÏÁö¸¸ ´Ù¸¥ °ªÀ» °ãÃľ²´Â ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀ» ¿¹¹æÇÏÁö´Â ¸øÇÑ´Ù. canary ¸¦ ``PointGuard" ¶ó°í ºÒ¸®´Â ´Ù¸¥ µ¥ÀÌŸ ¾ÆÀÌÅÛ¿¡ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï StackGuard ¸¦ È®ÀåÇÑ ÀÛ¾÷ÀÌ ÀÖ´Ù. PointGuard ´Â ÀÚµ¿ÀûÀ¸·Î ƯÁ¤ °ªÀ» º¸È£ÇÒ °ÍÀÌ´Ù (¿¹, ÇÔ¼ö Æ÷ÀÎÅÍ ¹× longjump ¹öÆÛ). ±×·¯³ª PointGuard ¸¦ »ç¿ëÇؼ­ ´Ù¸¥ º¯¼ö ŸÀÔÀ» º¸È£Çϱâ À§Çؼ­´Â ƯÁ¤ ÇÁ·Î±×·¡¸ÓÀÇ ÁßÀ縦 ÇÊ¿ä·Î ÇÑ´Ù (ÇÁ·Î±×·¡¸Ó´Â canary ¸¦ ÀÌ¿ëÇØ ¾î¶² µ¥ÀÌŸ °ªÀÌ º¸È£µÇ¾î¾ß ÇÏ´Â Áö¸¦ ½Äº°ÇØ¾ß ÇÑ´Ù). ÀÌ´Â À¯ÀÍÇÒ ¼ö ÀÖÁö¸¸ º¸È£°¡ ÇÊ¿äÇÏ´Ù°í (±×·¯³ª ¾î¶µç º¸È£°¡ ÇÊ¿äÇÑ) »ý°¢ÇÏÁö ¸øÇß´ø µ¥ÀÌŸ °ª¿¡ ´ëÇÑ º¸È£¸¦ ¿ì¿¬È÷ »ý·«ÇϱⰡ ½±´Ù . StackGuard, PointGuard ¹× ´Ù¸¥ ´ë¾È¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Cowan [1999] ¸¦ ÂüÁ¶Çضó.

°ü·Ã ¹®Á¦·Î½á ¸®´ª½º¿¡¼­´Â Ä¿³ÎÀ» ¼öÁ¤Çؼ­ ½ºÅà ¼¼±×¸ÕÆ®¸¦ ½ÇÇàºÒ°¡´ÉÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù; ÀÌ·¯ÇÑ ÆÐÄ¡°¡ Á¸ÀçÇÑ´Ù (Solar Designer ÀÇ ÆÐÄ¡¸¦ º¸¶ó http://www.openwall.com/linux/ ). ±×·¯³ª ÀÌ ¹®¼­ ÀÛ¼º ½ÃÁ¡¿¡¼­ ÀÌ´Â ¸®´ª½º Ä¿³Î³»·Î ±¸ÃàµÇÁö ¾Ê¾Ò´Ù. ÀÌ ±Ùº»Àû ÀÌÀ¯ÀÇ ÀϺκÐÀº ÀÌ°ÍÀÌ »ý°¢ÇÏ´Â °Í¸¸Å­ º¸È£¸¦ ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; °ø°ÝÀÚ°¡ °£´ÜÈ÷ ½Ã½ºÅÛÀ¸·Î ÇÏ¿©±Ý ÇÁ·Î±×·¥³» ´Ù¸¥ ``interesting" À§Ä¡¸¦ È£ÃâÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù (¿¹, ¶óÀ̺귯¸®, Èü ¶Ç´Â Á¤Àû µ¥ÀÌŸ ¼¼±×¸ÕÆ®³»). ¶ÇÇÑ ¶§¶§·Î ¸®´ª½º¿¡¼­´Â ¿¹¸¦ µé¾î ½Ã±×³Î ¹× GCC ``trampolines" ¸¦ ±¸ÇöÇϱâ À§ÇÑ °æ¿ì¿Í °°ÀÌ ½ºÅÿ¡ ½ÇÇà°¡´ÉÇÑ Äڵ尡 ÀÖ¾î¾ß ÇÑ´Ù. Solar Designer ÆÐÄ¡´Â ÀÌ·± °æ¿ì¸¦ ´Ù·çÁö¸¸ ÆÐÄ¡¸¦ º¹ÀâÇÏ°Ô ¸¸µç´Ù. °³ÀÎÀûÀ¸·Î ÀúÀÚ´Â ÀÌ°ÍÀÌ ¾î´ÀÁ¤µµ °ø°ÝÀ» ¾î·Æ°Ô ¸¸µé°í ±âÁ¸ÀÇ ´Ù¾çÇÑ °ø°Ýµé¿¡ ´ëÇØ º¸È£Çϱ⠶§¹®¿¡ ÁÖ¿ä ¸®´ª½º ¹èÆ÷ÆÇ¿¡ °áÇյǴ °ÍÀ» º¸°í ½Í´Ù. ±×·¯³ª ÀúÀÚ´Â ÀÌ°ÍÀÌ »ý°¢ÇÏ´Â °Í¸¸Å­ ¸¹Àº º¸È£¸¦ Ãß°¡ÇÏÁö ¸øÇÏ¸ç ºñ±³Àû ½±°Ô ¶Õ¾îÁú ¼ö ÀÖ´Ù´Â ¸®´©½º Åä¹ßÁî¿Í ´Ù¸¥ ÀÌ¿¡ µ¿ÀÇÇÑ´Ù. http://lwn.net/980806/a/linus-noexec.html ¿¡¼­ ÀÌ Áö¿øÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â ¸®´©½º Åä¹ßÁîÀÇ ¼³¸íÀ» ÀÐÀ» ¼ö ÀÖ´Ù.

¿ä¾àÇϸé ÀÚüÀûÀ¸·Î ¹öÆÛ ¿À¹öÇ÷ο츦 º¸È£ÇÏ´Â Á¤È®ÇÑ ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â µ¥ ¿ì¼±ÀûÀ¸·Î ÁßÁ¡À» µÎ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. µû¶ó¼­ ¿©·¯ºÐÀÌ À̸¦ ´Ù ÀÐÀº ÈÄ ¹Ýµå½Ã Ãß°¡ÀûÀÎ ¾ÈÀü¸ÁÀ¸·Î½á StackGuard ¿Í °°Àº ±â¹ý ¹× µµ±¸¸¦ »ç¿ëÇضó. ÄÚµå ÀÚü¿¡¼­ ¹öÆÛ ¿À¹öÇ÷ο츦 Á¦°ÅÇϱâ À§ÇØ ´õ¿í ´õ ÀÛ¾÷ÇÑ´Ù¸é º¸È£¸¦ À§ÇØ StackGuard °¡ È£ÃâµÉ "¾àÁ¡"Àº ¾øÀ» °ÍÀ̱⶧¹®¿¡ StackGuard ´Â ´õ¿í ´õ È¿°úÀûÀÏ °Í°°´Ù.