9.8. PHP

SecureReality ´Â "A Study in Scarlet - Exploiting Common Vulnerabilities in PHP" ¶ó´Â ¸Å¿ì Èï¹Ì·Î¿î ³í¹®À» ¹ßÇ¥ÇÏ¿´´Ù [Clowes 2001]. ÀÌ ³í¹®Àº PHP, ƯÈ÷ PHP 4.1.0 ÀÌÀü ¹öÀü¿¡¼­ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ À־ ´Ù¼ÒÀÇ ¹®Á¦µéÀ» ³íÀÇÇϰí ÀÖ´Ù. Clowes ´Â ``µðÆúÆ® PHP ¼³Á¤¿¡¼­ º¸¾ÈÀûÀÎ PHP ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ´Â °ÍÀº °¢ÀÚ ³ë·ÂÇÑ´Ù°í ÇÏ´õ¶óµµ ¸Å¿ì ¾î·Æ´Ù" °í °á·ÐÁö¾ú´Ù.

¸ðµç ¾ð¾î¿¡ º¸¾È ¹®Á¦°¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ PHP ¿¡´Â PHP ¸¦ ´ëºÎºÐÀÇ ¾ð¾îµéº¸´Ù ºñº¸¾ÈÀûÀÌ°Ô ÇÏ´Â ÇѰ¡Áö Ưº°ÇÑ ¹®Á¦°¡ ÀÖ´Ù; ÀÌ´Â µ¥ÀÌŸ¸¦ À̸§°ø°£¿¡ ÀûÀçÇÏ´Â ¹æ½ÄÀÌ´Ù. µðÆúÆ®·Î PHP (¹öÀü 4.1.0 ÀÌÇÏ) ¿¡¼­´Â À¥À» ÅëÇØ PHP ·Î º¸³»Áö´Â ¸ðµç ȯ°æ º¯¼ö ¹× °ªÀÌ ÀϹÝÀûÀÎ º¯¼öµéÀÌ ÀûÀçµÇ´Â µ¿ÀÏÇÑ À̸§°ø°£ (Àü¿ªº¯¼ö) ³»·Î ÀÚµ¿ÀûÀ¸·Î ÀûÀçµÈ´Ù - µû¶ó¼­ °ø°ÝÀÚ´Â ÀÓÀÇÀÇ º¯¼ö¿¡ ÀÓÀÇÀÇ °ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç PHP ÇÁ·Î±×·¥ÀÌ ¸í½ÃÀûÀ¸·Î Àç¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ °ªÀÌ À¯ÁöµÈ´Ù. °Ô´Ù°¡ PHP ´Â óÀ½ ¿äûµÉ ¶§ µðÆúÆ® °ªÀ» °®´Â º¯¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇϴµ¥ µû¶ó¼­ PHP ÇÁ·Î±×·¥ÀÌ º¯¼ö¸¦ ÃʱâÈ­ÇÏÁö ¾Ê´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. º¯¼ö ¼³Á¤À» ÇÏÁö ¾Ê´Â °æ¿ì PHP °¡ À̸¦ º¸°íÇÒ ¼ö´Â ÀÖÁö¸¸ µðÆúÆ®·Î ±×·¸°Ô ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù - ÀÌ´Â ´Ü¼øÈ÷ ¿¡·¯ º¸°í·Î ÀÌ·¯ÇÑ ¿¡·¯¸¦ ¾ß±âÇÏ´Â ¿¹¿ÜÀûÀÎ ¹æ½ÄÀ» ¹ß°ßÇÑ °ø°ÝÀÚ¸¦ ¸·Áö ¸øÇÒ °ÍÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ µðÆúÆ®·Î PHP ´Â ÇÁ·Î±×·¥ÀÌ °ø°ÝÀÚ¸¦ ¹«½ÃÇϱâ À§ÇØ Æ¯º°È÷ ÁÖÀǸ¦ ÇÏÁö ¾Ê´Â´Ù¸é °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥³»ÀÇ ¸ðµç º¯¼ö °ªÀ» ¿ÏÀüÈ÷ Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÏ´Ü °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥À» Á¦¾îÇÏ°Ô µÈ´Ù¸é ÀÌ·¯ÇÑ º¯¼ö¸¦ Àç¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼­ °¢ÀÚ ¾î¶² º¯¼ö(¸íÈ®ÇÏÁø ¾ÊÁö¸¸ Àû¾îµµ ÇѰ³ÀÇ º¯¼ö) ¸¦ Àç¼³Á¤ÇÏÁö ¸øÇÑ´Ù¸é PHP ÇÁ·Î±×·¥À» Ãë¾àÇÏ°Ô ¸¸µé ¼öµµ ÀÖ´Ù.

¿¹¸¦ µé¾î ´ÙÀ½ PHP ÇÁ·Î±×·¥ (Clowes ·ÎºÎÅÍÀÇ ¿¹Á¦) Àº ÆÐ½º¿öµå¸¦ ¾Ë°í ÀÖ´Â »ç¶÷µé¿¡°Ô ´ÜÁö ¾î¶² Áß¿äÇÑ Á¤º¸¸¦ ¾òµµ·Ï ÇÏÁö¸¸ °ø°ÝÀÚ´Â ±× »ç¶÷µéÀÇ À¥ ºê¶ó¿ìÀú¿¡ ``auth" ¸¦ ¼³Á¤ÇØ Àΰ¡ °Ë»ç¸¦ ÆÄ±«ÇÒ ¼ö ÀÖ´Ù:

 <?php
  if ($pass == "hello")
   $auth = 1;
  ...
  if ($auth == 1)
   echo "some important information";
 ?>

ÀúÀÚ¿Í ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ¯º°È÷ À§ÇèÇÑ ¹®Á¦¿¡ ´ëÇØ Ǫ³äÇØ¿ÔÁö¸¸ ÀÌ´Â PHP °¡ ³Î¸® »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ Ưº°ÇÑ ¹®Á¦ÀÌ´Ù. °á±¹ »ç¿ëÇϱ⠽±´Ù°í ¾Ë·ÁÁø ¾ð¾î´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼ºÀ» ´õ¿í ½±°ÔÇÑ´Ù. PHP ¿¡¼­ ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇÔÀ¸·Î½á ÀÌ·¯ÇÑ À߸øµÈ Ư¡À» ±ÝÁöÇÏ´Â °ÍÀº °¡´ÉÇÏÁö¸¸ µðÆúÆ®·Î 4.1.0 ÀÌ»óÀÇ PHP ¹öÀüÀº À̸¦ ``on" À¸·Î ¼³Á¤Çϸç 4.1.0 ÀÌÀü PHP ¹öÀüÀº register_globals ¸¦ off ¼³Á¤ÇÏ´Â °æ¿ì ´õ¿í »ç¿ëÇÏ±â ¾î·Æ´Ù. PHP °³¹ßÀÚµéÀº 4.1.0 ¹öÀü ¹ßÇ¥¿¡¼­ ``´ÙÀ½ semi-major ¹öÀü¿¡¼­´Â PHP ÀÇ ½Å±Ô ¼³Ä¡½Ã µðÆúÆ®·Î register_globals ¸¦ off ·Î ¼³Á¤ÇÒ °ÍÀÌ´Ù" ¶ó°í °øÇ¥Çß´Ù.

``register_globals" °¡ ``on" À¸·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì Áß¿äÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇØ PHP ´Â À§ÇèÇÏ´Ù - ºñº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ³Ê¹«³ªµµ ½±´Ù. ±×·¯³ª ``register_globals" °¡ ÀÏ´Ü ``off" ·Î ¼³Á¤µÈ´Ù¸é PHP ´Â ÇÕ´çÇÑ °³¹ß ¾ð¾îÀÌ´Ù.

º¸¾ÈÀûÀÎ µðÆúÆ®´Â ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇØ¾ß ÇÏ¸ç ¶ÇÇÑ »ç¿ëÀÚµéÀÌ ¿ÜºÎ Ãâó·ÎºÎÅÍ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ÀÔ·ÂÀ» ÁöÁ¤Çϰí Á¦ÇÑÇÏ´Â °ÍÀ» ´õ¿í ½±°Ô ÇÏ´Â ¸î¸î ÇÔ¼ö¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡¿Í °°Àº À¥ ¼­¹öµéÀº ÀÌ·¯ÇÑ º¸¾ÈÀûÀÎ PHP ¼³Ä¡¸¦ °³º°ÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚµéÀÌ ¹Þ¾ÆµéÀÌ±æ ¿øÇÏ´Â ÀÔ·Â º¯¼ö¸¦ ¿­°ÅÇϱ⠽±°Ô ÇÏ´Â ·çƾµéÀÌ PHP ¶óÀ̺귯¸®¿¡ ³õÀÏ ¼öµµ ÀÖ´Ù; ¸î¸î ÇÔ¼öµéÀº ÀÌ·¯ÇÑ º¯¼öµéÀÌ °¡Á®¾ßÇÏ´Â ÆÐÅÏ ¹×/¶Ç´Â ¿ä±¸µÇ´Â º¯¼ö ŸÀÔÀ» °Ë»çÇØ¾ß ÇÑ´Ù. ÀúÀÚ ÀǰßÀ¸·Î´Â PHP (register_globals °¡ on À¸·Î ¼³Á¤) ´Â ÇöÀç ÈǸ¢ÇÑ º¸¾ÈÀûÀÎ À¥ °³¹ß ¾ð¾î´Â ¾Æ´Ï´Ù. ±×·¯³ª ÇÕ´çÇÑ °³¹ß ¾ð¾î·Î »ç¿ëµÇµµ·Ï ½±°Ô ¼öÁ¤µÉ ¼ö ÀÖ´Ù.

PHP ¸¦ »ç¿ëÇϱâ·Î ÇÑ °æ¿ì ´ÙÀ½Àº ¾ó¸¶°£ÀÇ ÀúÀÚÀÇ Ãæ°íÀÌ´Ù (ÀÌ·¯ÇÑ Ãæ°í Áß ¸¹Àº ºÎºÐÀº Clowes °¡ Á¦±âÇÑ ¹®Á¦¿¡ ´ëóÇϱâ À§ÇÑ ¹æ¹ý¿¡ ±âÃÊÇÑ´Ù):