9.2. ÆÞ

ÆÞ ÇÁ·Î±×·¡¸ÓµéÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º°ú °ü·ÃµÈ ¸¹Àº ¹®Á¦Á¡µéÀ» ¼³¸íÇÏ´Â perlsec(1) ¸Ç ÆäÀÌÁö¸¦ ¿ì¼± Àоî¾ß ÇÑ´Ù. ƯÈ÷ perlsec(1) Àº ´ëºÎºÐÀÇ º¸¾ÈÀûÀÎ ÆÞ ÇÁ·Î±×·¥µéÀÌ »ç¿ëÇØ¾ß ÇÏ´Â "taint" ¸ðµå¸¦ ¼³¸íÇϰí ÀÖ´Ù. Taint ¸ðµå´Â real °ú effective »ç¿ëÀÚ ¶Ç´Â ±×·ì ID °¡ ´Ù¸£¸é ÀÚµ¿ÀûÀ¸·Î Çã°¡µÇ¸ç ¶ÇÇÑ -T Ä¿¸Çµå ¶óÀÎ Ç÷¡±×¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù (CGI ½ºÅ©¸³Æ®¿Í °°ÀÌ ¾î¶² ´©±¸°¡¸¦ ´ë½ÅÇØ ÀÛµ¿½ÃŲ´Ù¸é À̸¦ ÃßÈÄ¿¡ »ç¿ëÇØ¶ó). Taint ¸ðµå´Â °æ·Î µð·ºÅ丮µéÀÌ others °¡ write Çã°¡±ÇÀÌ ¾øÀ½À» È®ÀÎÇϱâ À§ÇØ À̵éÀÇ °Ë»ç¿Í °°Àº ´Ù¾çÇÑ °Ë»çµéÀ» ÄÒ´Ù.

Taint ¸ðµåÀÇ °¡Àå ¸í¹éÇÑ ¿µÇâÀº ÇÁ·Î±×·¥ ¿ÜºÎÀÇ ¾î¶² ¹«¾ð°¡¿¡ ¿ì¿¬È÷ ¿µÇâÀ» ³¢Ä¥ ¼öÀÖ´Â ÇÁ·Î±×·¥ ¿ÜºÎ·ÎºÎÅÍ ÆÄ»ýµÈ µ¥ÀÌŸ¸¦ »ç¿ëÇÏÁö ¸øÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. Taint ¸ðµå¿¡¼­ ¸ðµç ¿ÜºÎ·ÎºÎÅÍ ¾òÀº ÀÔ·ÂÀº "tainted" ·Î Ç¥½ÃµÇ¸ç ÀÌ¿¡´Â Ä¿¸Çµå ¶óÀÎ Àμö, ȯ°æ º¯¼ö, ·ÎÄÉÀÏ Á¤º¸ (perllocale(1) À» º¸¶ó), ¾î¶² ½Ã½ºÅÛ È£ÃâÀÇ °á°ú (readdir, readlink, getpw* È£ÃâÀÇ gecos Çʵå) ¿Í ¸ðµç ÆÄÀÏ ÀԷµéÀÌ ÀÖ´Ù. Tainted µ¥ÀÌŸ´Â ¼­ºê ½©À» È£ÃâÇÏ´Â ¸ðµç ¸í·É ¶Ç´Â ÆÄÀÏ, µð·ºÅ丮 ¶Ç´Â ÇÁ·Î¼¼½º¸¦ º¯°æÇÏ´Â ¸ðµç ¸í·É¿¡¼­ Á÷Á¢Àû ¶Ç´Â °£Á¢ÀûÀ¸·Î »ç¿ëµÇÁö ¸øÇÒ ¼ö ÀÖ´Ù. ÇѰ¡Áö Áß¿äÇÑ ¿¹¿Üµµ Àִµ¥ Àμö ¸ñ·ÏÀ» system ¶Ç´Â exec ¿¡ °Ç³×ÁØ °æ¿ì ±× ¸ñ·ÏÀÇ ¿ä¼ÒµéÀº tainedness ¿¡ NOT À¸·Î üũµÈ´Ù. µû¶ó¼­ taint ¸ðµå¿¡¼­ system ¶Ç´Â exec ¿¡ ƯÈ÷ ÁÖÀÇÇØ¶ó.

Tainted µ¥ÀÌŸ·ÎºÎÅÍ ÆÄ»ýµÈ ¸ðµç µ¥ÀÌŸ °ªµµ ¶ÇÇÑ tainted µÈ´Ù. ÇѰ¡Áö ¿¹¿Ü°¡ Àִµ¥ µ¥ÀÌŸ¸¦ untainting ÇÏ´Â ¹æ¹ýÀº tainted µ¥ÀÌŸ·ÎºÎÅÍ ¼­ºê ¹®ÀÚ¿­À» ÃßÃâÇÏ´Â °ÍÀÌ´Ù. ±×·¸Áö¸¸ ¸¶±¸ÀâÀÌ·Î ±×Àú ".*" ¸¦ ¼­ºê ¹®ÀÚ¿­·Î »ç¿ëÇÏÁö ¸¶¶ó ÀÌ´Â tainting ¸ÞÄ«´ÏÁòÀÇ º¸È£¸¦ ¹«³Ê¶ß¸± ¼öµµ ÀÖ´Ù. ´ë½Å ÇÁ·Î±×·¥ÀÌ Çã¿ëÇÏ´Â ``¾ÈÀüÇÑ" ÆÐÅÏÀ¸·Î È®ÀÎµÈ ÆÐÅϵ鸸À» ½Äº°Çϰí À̵éÀ» »ç¿ëÇØ "È®½ÇÇÑ" °ªµéÀ» ÃßÃâÇØ¶ó. °ªÀ» ÃßÃâÇÑ ÈÄ¶óµµ À̸¦ °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù (ƯÈ÷ ±æÀÌ¿¡ ´ëÇØ °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù).

open, glob ¿Í backtick ÇÔ¼öµéÀº ÆÄÀÏ À̸§ÀÇ ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀ» È®ÀåÇϱâ À§ÇØ ½©À» »ç¿ëÇϴµ¥ ÀÌ´Â º¸¾È ±¸¸ÛÀ» ¿­±â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµéÀ» ÀüÀûÀ¸·Î ÇÇÇϰųª perlsec(1) ¿¡ ±â¼úµÈ °Í°ú °°ÀÌ ±ÇÇÑÀÌ ÀûÀº sandbox ¿¡¼­ À̵éÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ backtick Àº system() È£ÃâÀ» »ç¿ëÇØ ÀçÀÛ¼ºµÇ¾î¾ß ÇÑ´Ù (¶Ç´Â ´õ¿í ÁÁÀº ¹æ¹ýÀ¸·Î´Â ¿ÏÀüÈ÷ ´õ¿í ¾ÈÀüÇÑ °ÍÀ¸·Î º¯°æµÇ¾î¾ß ÇÑ´Ù).

ÆÞÀÇ open() ÇÔ¼ö´Â ¼ÖÁ÷È÷ ´ëºÎºÐÀÇ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ ``³Ê¹«³ª ÀÌ»óÇÑ ¹æ½Ä" À¸·Î ÀÛµ¿Çϴµ¥ ÀÌ´Â ÅØ½ºÆ®°¡ ÁÖÀDZí°Ô ÇÊÅ͸µµÇÁö ¾Ê´Â´Ù¸é ¸¹Àº º¸¾È ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ÅØ½ºÆ®¸¦ ÇØ¼®ÇÑ´Ù. ÆÄÀÏ ¿ÀÇ ¶Ç´Â ·ÎÅ©ÇÏ´Â Äڵ带 ÀÛ¼ºÇϱâ Àü¿¡ perlopentut(1) ¸Ç ÆäÀÌÁö¸¦ ÂüÁ¶Çضó. ´ëºÎºÐÀÇ °æ¿ì sysopen() Àº ÆÄÀÏ ¿ÀÇ¿¡ ´õ¿í º¹ÀâÇÔ¿¡µµ ºÒ±¸ÇÏ°í ´õ¿í ¾ÈÀüÇÑ ¹æ¹ýÀ» Á¦°øÇϴµ¥ »õ·Î¿î ÆÞ 5.6 ¿¡´Â ¸Å¿ì º¹ÀâÇÑ sysopen() ±â´ÉÀ» ÇÊ¿ä·Î ÇÔÀÌ ¾øÀÌ ÀÌ»óÇÑ °Åµ¿À» ²ô±â À§ÇØ 3°³ÀÇ ¸Å°³º¯¼ö¸¦ °®´Â open() È£ÃâÀÌ Ãß°¡µÇ¾î ÀÖ´Ù..

ÆÞ ÇÁ·Î±×·¥Àº ÀáÀçÀûÀ¸·Î À§ÇèÇϰųª ¾µ¸ð¾ø´Â ¹®ÀåµéÀ» °æ°íÇÏ´Â °æ°í Ç÷¡±× (-w) ¸¦ ÄÑ¾ß ÇÑ´Ù.

Á¦ÇÑµÈ È¯°æ¿¡¼­ ÆÞ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼öµµ Àִµ¥ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Ç¥ÁØ ÆÞ ¹èÆ÷ÆÇ¿¡¼­ "Safe" ¸ðµâÀ» º¸¶ó. ÀúÀÚ´Â ÀÌ ¸ðµâÀÌ ¼öÇàÇÏ´Â °¨»çÀÇ ¾çÀ» ºÐ¸íÈ÷ ¸ð¸£´Âµ¥ µû¶ó¼­ º¸¾ÈÀ» À§ÇØ ÀÌ ¸ðµâÀ» ÁÖÀÇÇØ¼­ »ç¿ëÇØ¶ó. ¶ÇÇÑ "Penguin Model for Secure Distributed Internet Scripting" ¸¦ °íÂûÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ¹®¼­ ÀÛ¼º½ÃÁ¡¿¡¼­ ÄÚµå¿Í ¹®¼­°¡ µµ¿òÀÌ µÇÁö ¾Ê´Â °Í°°´Ù.