9.3. ÆÄÀ̽ã

¸ðµç ¾ð¾î¿¡¼­¿Í °°ÀÌ ¹Ýµå½Ã ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ ÀԷ¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ¾øµµ·Ï µ¥ÀÌŸ°¡ ÇÁ·Î±×·¥ÀÇ ÇÑ ºÎºÐÀ¸·Î ½ÇÇàµÇµµ·Ï ÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡ ÁÖÀÇÇØ¶ó. ÀÌ ÇÔ¼ö·Î´Â exec(), eval() °ú exefile() ÀÌ ÀÖ´Ù (¼ÖÁ÷È÷ compile() ¿¡ ´ëÇÑ ¸ðµç È£ÃâÀ» °Ë»çÇØ¾ß ÇÑ´Ù). ¶ÇÇÑ input() ¹®µµ ¿¹±âÄ¡ ¾Ê°Ô À§ÇèÇÏ´Ù [Watters 1996, 150].

±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚ¿¡ ÀÇÇØ È£ÃâµÉ ¼ö ÀÖ´Â ±ÇÇÑÀ» °®´Â ÆÄÀ̽ã ÇÁ·Î±×·¥µéÀº (¿¹, setuid/setgid ÇÁ·Î±×·¥) "user (»ç¿ëÀÚ)" ¸ðµâÀ» import ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. »ç¿ëÀÚ ¸ðµâÀº pthonrc.py ÆÄÀÏÀÌ ÀÐÇôÁ® ½ÇÇàµÇ°Ô ÇÑ´Ù. ÀÌ ÆÄÀÏÀÌ ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ Á¦¾îÇÒ ¼ö Àֱ⠶§¹®¿¡ »ç¿ëÀÚ ¸ðµâÀ» import ÇÏ´Â °ÍÀº °ø°ÝÀÚ¿¡°Ô ½Å·ÚµÈ ÇÁ·Î±×·¥ÀÌ ÀÓÀÇÀÇ Äڵ带 ½ÇÇà½Ã۵µ·Ï ÇÒ ¼ö ÀÖ´Ù.

ÆÄÀ̽ãÀº RExec Ŭ·¡½º¸¦ ÅëÇØ ``Á¦ÇÑµÈ ½ÇÇà (Restricted Execution)" À» Áö¿øÇÑ´Ù. ÀÌ´Â º»·¡ ¾ÖÇø´°ú ¸ð¹ÙÀÏ Äڵ带 ½ÇÇà½Ã۱â À§ÇÑ °ÍÀ̾úÁö¸¸ Äڵ尡 ¿ÜºÎÀûÀ¸·Î Á¦°øµÇÁö ¾ÊÀ» ¶§ Á¶Â÷µµ ÇÁ·Î±×·¥³»ÀÇ ±ÇÇÑÀ» Á¦ÇÑÇϱâ À§ÇØ ¶ÇÇÑ »ç¿ëµÉ ¼ö ÀÖ´Ù. µðÆúÆ®·Î Á¦ÇÑµÈ ½ÇÇà ȯ°æÀº ÆÄÀÏ Àбâ (¾²±â°¡ ¾Æ´Ñ) ¸¦ Çã¿ëÇÏÁö¸¸ ³×Æ®¿öÅ© Á¢±Ù ¶Ç´Â GUI »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¿¬»êÀ» Æ÷ÇÔÇÏÁö´Â ¾Ê´Â´Ù. ÀÌ·¯ÇÑ µðÆúÆ®´Â º¯°æµÉ ¼ö Àִµ¥ Á¦ÇÑµÈ È¯°æ¿¡¼­ ÇãÁ¡ (loophole) »ý¼º¿¡ ÁÖÀÇÇØ¶ó. ƯÈ÷ »ç¿ëÀÚ¿¡°Ô Á¦ÇѾøÀÌ Å¬·¡½º¿¡ ¼Ó¼ºÀ» Ãß°¡Çϵµ·Ï Çã¿ëÇÏ´Â °ÍÀº ÆÄÀ̽㠱¸ÇöÀÌ ¸¹Àº ¼û°ÜÁø ¸Þ½îµå¸¦ È£ÃâÇϱ⠶§¹®¿¡ ȯ°æÀ» ±ú¶ß¸± ¼ö ÀÖ´Â ¸ðµç Á¾·ùÀÇ ¹æ¹ýÀ» Çã¿ëÇÑ´Ù. µðÆúÆ®·Î ´ëºÎºÐÀÇ ÆÄÀ̽㠰´Ã¼´Â ÂüÁ¶¿¡ ÀÇÇØ Àü´ÞµÊÀ» ÁÖ¸ñÇØ¶ó; °¡º¯°ª¿¡ ´ëÇÑ ÂüÁ¶¸¦ Á¦ÇÑµÈ ÇÁ·Î±×·¥ÀÇ È¯°æ³»¿¡ »ðÀÔÇÑ´Ù¸é Á¦ÇÑµÈ ÇÁ·Î±×·¥Àº Á¦ÇÑµÈ È¯°æ ¿ÜºÎ¿¡¼­ º¸ÀÏ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î °´Ã¼¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ °¡º¯°ª¿¡ ´ëÇÑ Á¢±ÙÀ» Çã¿ëÇÏ·Á¸é ¸¹Àº °æ¿ì °¡º¯°ªÀ» º¹»çÇϰųª ´Ù¸¥ °´Ã¼¿¡ ´ëÇÑ Á¦ÇÑµÈ Á¢±ÙÀ» Áö¿øÇÏ´Â Bation ¸ðµâÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Kuchling [2000] À» º¸¶ó. ÀúÀÚ´Â Á¦ÇÑµÈ ½ÇÇà ´É·ÂÀÌ ¼öÇàÇÏ´Â °¨»çÀÇ ¾ç¿¡ È®½ÅÀÌ ¾øÀ¸¸ç µû¶ó¼­ ÇÁ·Î±×·¡¸ÓµéÀº ÁÖÀÇÇØ¶ó.