Q. ÃÖ±Ù ¹®Á¦°¡ µÇ°í ÀÖ´Â SQL ÀÎÁ§¼Ç °ø°Ý¿¡ ´ëÇÑ °¡Àå È¿°úÀûÀÎ ´ëÀÀ¹æ¹ý¿¡´Â ¾î¶² °ÍÀÌ ÀÖ³ª¿ä?
A-1. SQL ÀÎÁ§¼Ç(Injection)Àº µ¥ÀÌÅͺ£À̽º(DB)¿Í ¿¬µ¿µÈ À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼ ÀÔ·ÂµÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ À¯È¿¼º °ËÁõÀ» ÇÏÁö ¾ÊÀ» °æ¿ì, °ø°ÝÀÚ°¡ ÀÔ·Â Æû ¹× URL ÀԷ¶õ¿¡ SQL¹®À» »ðÀÔÇÏ¿© DB·ÎºÎÅÍ Á¤º¸¸¦ ¿¶÷Çϰųª Á¶ÀÛÇÒ ¼ö ÀÖ´Â º¸¾È Ãë¾àÁ¡À» ¸»ÇÕ´Ï´Ù.
Ãë¾àÇÑ À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼´Â »ç¿ëÀڷκÎÅÍ ÀÔ·ÂµÈ °ªÀ» ÇÊÅ͸µ °úÁ¤ ¾øÀÌ ³Ñ°Ü¹Þ¾Æ µ¿Àû Äõ¸®(Dynamic Query)¸¦ »ý¼ºÇÕ´Ï´Ù. ÀÌ´Â °³¹ßÀÚ°¡ ÀǵµÇÏÁö ¾ÊÀº Äõ¸®°¡ »ý¼ºµÇ¾î Á¤º¸ À¯Ãâ¿¡ ¾Ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌó·³, SQL ÀÎÁ§¼ÇÀº ÀԷ°ª °ËÁõ ÀýÂ÷ ¹®Á¦¿¡ ±âÀÎÇϹǷΠ°³¹ß´Ü°è¿¡¼ºÎÅÍ ¹Ýµå½Ã ¸ðµç ÀԷ°ª¿¡ ´ëÇÑ ÀûÀýÇÑ °ËÁõÀýÂ÷¸¦ ¼³°èÇÏ°í ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.
ÇàÁ¤ÀÚÄ¡ºÎ ¡®½ÃÅ¥¾îÄÚµù¡¯ °¡À̵å(2012³â 9¿ù ¹ß°£)¿¡ µû¸£¸é, SQL ÀÎÁ§¼ÇÀ» ¹æÁöÇϱâ À§ÇÑ ¾ÈÀüÇÑ ÄÚµù±â¹ýÀ¸·Î PreparedStatement Ŭ·¡½º¿Í ÇÏÀ§ ¸Þ¼Òµå executeQuery(), execute(), executeUpdate()¸¦ »ç¿ëÇÒ °ÍÀ» ±Ç°íÇÏ°í ÀÖ½À´Ï´Ù.
ÀÏ¹Ý ÁúÀǹ®(Statement)¸¦ »ç¿ëÇϸé, Äõ¸®ºÐ¼®¡æÃÖÀûÈ¡æ±ÇÇÑüũ¡æÄõ¸®½ÇÇà ´Ü°è¸¦ ¸Å¹ø °ÅÄ¡°Ô µÇ´Âµ¥, À̸¥¹Ù µ¿Àû Äõ¸®¸¦ »ý¼ºÇÏ°Ô µÇ¾î SQL ÀÎÁ§¼Ç¿¡ Ãë¾àÇÒ ¼ö ÀÖÁö¸¸, Prepared Statement¸¦ »ç¿ëÇÏ°Ô µÇ¸é, Äõ¸®ºÐ¼®¡æÃÖÀûȸ¦ 1¹ø¸¸ °ÅÄ¡¹Ç·Î, ¸Å¹ø ½ÇÇàµÉ ¶§¸¶´Ù ÀçÄÄÆÄÀÏÀÌ ÇÊ¿ä ¾ø°í(¼±)ÄÄÆÄÀÏµÈ »óÅ·Π¿©·¯ ¹ø ½ÇÇàµÉ ¼ö ÀÖÀ¸¹Ç·Î, ¿øõÀûÀ¸·Î Äõ¸® Á¶ÀÛÀ» ¹æÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.
±×·¯³ª ¿Ïº®ÇÏ°Ô Äڵ带 ÀÛ¼ºÇß´Ù ÇÏ´õ¶óµµ ÇØ´ç ¾îÇø®ÄÉÀ̼ǰú °ü·Ã¾ø´Â ¼µåÆÄƼ ¼ÒÇÁÆ®¿þ¾î¸¦ ÅëÇØ Ãë¾àÁ¡ÀÌ »ý±æ ¼ö ÀÖÀ¸¹Ç·Î ÁÖ±âÀûÀ¸·Î Ãë¾àÁ¡ Á¡°ËÀ» ÅëÇØ º¸¾È¹®Á¦µéÀ» Á¡°ËÇÏ°í Áø´ÜÇÏ´Â °úÁ¤ÀÌ ÇÊ¿äÇϸç, »õ·Î¿î Ãë¾àÁ¡ ¹ß°ß»çÇ׿¡ ´ëÇØ ½Å¼ÓÇÑ º¸¾ÈÁ¶Ä¡¸¦ ÅëÇØ À¥¼¹ö, SQL ¼¹ö º¸¾ÈÀ» °ÈÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.
(¹ÚÁ¤È¯ Çѱ¹ÀÎÅͳÝÁøÈï¿ø ÆÀÀå)
A-2. ÇöÀç ±â¾÷À̳ª ±â°üÀº SQL ÀÎÁ§¼Ç °ø°Ý¿¡ Å©°Ô 2°¡Áö·Î ´ëÀÀÇÏ°í ÀÖ½À´Ï´Ù. ù ¹ø°´Â º¸¾È ¼Ö·ç¼Ç(À¥ ¹æȺ® µî)À¸·Î ´ëÀÀÇÏ´Â ¹æ¹ýÀÌ°í µÎ ¹ø°´Â ½ÃÅ¥¾îÄÚµùÀ¸·Î ´ëÀÀÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ±â¾÷À̳ª ±â°üÀº À§ µÎ °¡Áö¸¦ ¸ðµÎ ´Ù Àû¿ëÇÑ °æ¿ì¿Í µÑ Áß Çϳª¸¸ Àû¿ëÇÏ´Â °æ¿ì·Î ³ª´µ´Âµ¥ º¸¾È ¼Ö·ç¼ÇÀ¸·Î ´ëÀÀÇÏ´Â °ÍÀº µðÆúÆ®·Î ·êÀ» ¼³Á¤ÇØ »ç¿ëÇÏ´Â °æ¿ì ¿ìȸ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ È¿°úÀûÀÎ ´ëÀÀÀÌ ¾Æ´Ï¸ç, °¡Àå È¿°úÀûÀÎ ´ëÀÀ¹æ¹ýÀº ¼Ò½ºÄÚµå´Ü¿¡¼ ½ÃÅ¥¾î ÄÚµùÀ» ÅëÇØ SQL ÀÎÁ§¼ÇÀ» ¹æ¾îÇÏ´Â °ÍÀÌ ¿øõÀûÀ¸·Î Â÷´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù.
Àüü ¼Ò½ºÄڵ忡¼ DB¿Í ¿¬µ¿µÈ ÆäÀÌÁö¸¦ ¸ñ·ÏÈÇÑ ÈÄ, DB Äõ¸®¹®¿¡ µé¾î°¡´Â ÀÔ·Â µ¥ÀÌÅÍ¿¡ ´ëÇØ °ËÁõÀ» ¼öÇàÇÏ´ÂÁö üũÇÏ°í SQL Äõ¸® ¹®(select, from, union, where, substr µî) ¹× Ư¼ö¹®ÀÚ(',--,/*)°¡ ÀÖÀ» °æ¿ì ÇÊÅ͸µ ¹× ġȯÇϵµ·Ï Àû¿ëÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº ´ëÀÀ¹æ¹ýÀÔ´Ï´Ù.
(¼Õ±âÁ¾ KISA Ãë¾àÁ¡ºÐ¼®ÆÀ ¼±ÀÓ¿¬±¸¿ø/skj@kisa.or.kr)
A-3. ÀϹÝÀûÀ¸·Î SQL ÀÎÁ§¼Ç Ãë¾àÁ¡Àº À¥»çÀÌÆ®°¡ µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿µÈ ±â´É ¼öÇà ½Ã »ç¿ëÀÚÀÇ ÀÔ·Â °ªÀ¸·Î Äõ¸® ¹®ÀÚ¿À» Àü¼ÛÇßÀ» ¶§ ¹ß»ýµÇ´Â ¿¡·¯³ª ºñÁ¤»óÀûÀÎ °á°ú¿¡ DBÁ¤º¸, ÀÎÁõÁ¤º¸ µî Áß¿äÁ¤º¸°¡ Æ÷ÇԵǰųª ÀÎÁõ¿ìȸ µîÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù°í ÆÇ´ÜÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± SQL Injection¿¡ ´ëÇÑ È¿°úÀûÀÎ ´ëÀÀ¹æ¹ýÀ¸·Î´Â ¡âµ¥ÀÌÅͺ£À̽º Äõ¸®¹®¿¡ »ç¿ëµÇ´Â ¹®ÀÚ¿ °ËÁõ ¡â»ç¿ëÀÚ ÀÔ·Â °ª ¹× ¼¹ö·Î Àü¼ÛµÇ´Â ÆĶó¹ÌÅÍ¿¡ ´ëÇÑ °ËÁõ ¡â¿¡·¯ÆäÀÌÁö¿¡ ´ëÇÑ ¿À·ùÁ¤º¸ ³ëÃâ È®ÀÎ ¡âDB Á¢±Ù±ÇÇÑ(¾îÇø®ÄÉÀÌ¼Ç Á¢±Ù) ÃÖ¼ÒÈ µîÀÇ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
(ÀÓµ¿Ã¶ ¿½ÉÈ÷Ä¿¹Â´ÏÄÉÀ̼ÇÁî ¸®½ºÅ©°ü¸®½Ç ´ë¸®/neo3712@keencomms.com)
A-4. Ãë¾àÁ¡ Áø´ÜÀ» ÅëÇÑ À¥»çÀÌÆ® Á¡°Ë, À¥ ¹æȺ® ¿î¿µ, ½ÃÅ¥¾îÄÚµù Àû¿ë µîÀÌ µÉ ¼ö ÀÖÀ¸¸ç, ÃÖ±Ù ÀÎÁ§¼Ç ÅøÀÌ ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÀ¸¹Ç·Î ÀÌ·¯ÇÑ ÆÐÅÏÀ» º¸¾È ½Ã½ºÅÛ¿¡¼ È®ÀÎÇÏ¿© Â÷´ÜÇÏ´Â °Íµµ ÇÊ¿äÇÕ´Ï´Ù.
(°Á¤ÈÆ 11¹ø°¡/jhkang@sk.com)
A-5. KISA¿¡¼ ¿î¿µÁßÀÎ ÀÎÅͳÝħÇØ´ëÀÀ¼¾ÅÍ(Krcert)¿¡ µû¸£¸é SQL ÀÎÁ§¼Ç¿¡ ´ëÇÑ ´ëÀÀ ¹æ¾ÈÀ» Á¦½ÃÇÏ°í ÀÖ½À´Ï´Ù.
ù ¹ø°·Î µ¿Àû SQL »ç¿ëÀ» Áö¾çÇÏ´Â °ÍÀÔ´Ï´Ù. µ¥ÀÌÅͺ£À̽º¿ÍÀÇ ¿¬µ¿ ºÎºÐ¿¡¼´Â µ¿Àû SQLÀ» ´õ ÀÌ»ó »ç¿ëÇÏÁö ¸»°í ÀúÀå ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý±îÁöµµ ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Â µ¿Àû SQL ¿Ï¼º ¹æ½ÄÀº º¯¼öÀÇ ÀԷ°ªÀ» ¿¬°á½ÃÄÑ SQL¹®À» ¿Ï¼º(Concatenation of SQL)½ÃÅ°´Â ÇüÅÂÀ̹ǷΠ°ø°ÝÀÚÀÇ SQL¹® ÁÖÀÔÀÌ ¸Å¿ì ¿ëÀÌÇÕ´Ï´Ù.
±×·¯³ª ÀúÀå ÇÁ·Î½ÃÀú¸¦ ÅëÇØ µ¥ÀÌÅͺ£À̽º ¿¬µ¿À» ±¸ÇöÇÑ´Ù¸é, ÀÌ¹Ì ÇÁ·Î½ÃÀú ³»ºÎ¿¡¼ ÀԷ°ª¿¡ ´ëÇÑ ÀÚ·áÇü °ËÁõÀÌ ÀÌ·ç¾îÁö¸ç, ÇØ´ç ÇÁ·Î½ÃÀúÀÇ ³»ºÎ¿¡¼¸¸ ¿µÇâÀ» ³¢Ä¡±â ¶§¹®¿¡ º¸¾È Ãø¸é¿¡¼µµ ´õ¿í ´õ ¾ÈÀüÇÏ°í, ¼º´ÉÀ̳ª À¯Áöº¸¼ö Ãø¸é¿¡¼µµ ´ë´ÜÈ÷ È¿°úÀûÀÔ´Ï´Ù.
µÎ ¹ø°·Î ¾ÈÀüÇÑ À¥»çÀÌÆ® ¼³°è¿Í ±¸ÇöÀÔ´Ï´Ù. SQL ÀÎÁ§¼Ç Ãë¾àÁ¡Àº ÀԷ°ª °ËÁõ ÀýÂ÷ ¹®Á¦¿¡ ±âÀÎÇϹǷÎ, °³¹ß´Ü°è¿¡¼ºÎÅÍ ¹Ýµå½Ã ¸ðµç ÀԷ°ª¿¡ ´ëÇØ ÀûÀýÇÑ °ËÁõÀýÂ÷¸¦ ¼³°èÇÏ°í ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. °£·«È÷ °ËÁõ°úÁ¤À» ¿ä¾àÇϸé, ÀԷ°ªÀÇ Å©±â¸¦ °Ë»çÇÏ°í Ư¼ö¹®ÀÚ°¡ ÀÖ´Â °æ¿ì À§ÇèÇÏÁö ¾ÊÀº ¹®ÀڷΠġȯÇÑ ÈÄ ÀԷ°ªÀÌ Çã¿ë¹üÀ§ ³»¿¡ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù.
¼¼ ¹ø°·Î ¿À·ù ³»¿ëÀÇ Ç¥½Ã¸¦ Â÷´ÜÇÏ´Â µî À¥¼¹ö º¸¾ÈÀ» °ÈÇÏ´Â °ÍÀÔ´Ï´Ù. SQL ÀÎÁ§¼Ç¿¡ ´ëÇÑ ±Ùº»ÀûÀÎ ¹®Á¦ ÇØ°áÀ» À§Çؼ´Â ÇÁ·Î±×·¥ º¸¿Ï Á¶Ä¡°¡ ¹Ýµå½Ã ÇÊ¿äÇÏÁö¸¸,À¥ ¼¹öÀÇ º¸¾È °È ¼³Á¤À» ÅëÇؼµµ º¸¿ÏÀûÀÎ È¿°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.
³× ¹ø°·Î À¥ ¹æȺ®ÀÇ È°¿ëÀÔ´Ï´Ù. À¥ º¸¾È Ãë¾àÁ¡ÀÇ ±Ùº»ÀûÀÎ ¹®Á¦ ÇØ°áÀ» À§Çؼ´Â ÇÁ·Î±×·¥ÀÇ º¸¿ÏÁ¶Ä¡°¡ ¹Ýµå½Ã ÇÊ¿äÇÏÁö¸¸ ¿î¿µ ÁßÀΠȨÆäÀÌÁö¿¡¼ ÇÁ·Î±×·¥ ¼öÁ¤À¸·Î ÀÎÇÑ ¹®Á¦µéµµ °ËÅäÇØ Á¶Ä¡ÇØ¾ß Çϱ⠶§¹®¿¡ ±× ½Ã°£ µ¿¾ÈÀº À¥¹æȺ®À̳ª ºÎ°¡ÀûÀÎ º¸¿ÏÁ¶Ä¡µéÀ» ÅëÇØ ½Ã°£À» È®º¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸¶Áö¸·À¸·Î À¥º¸¾È Ãë¾àÁ¡¿¡ ´ëÇÑ Á¡°ËÀÔ´Ï´Ù. ¼³°è¿Í ±¸Çö¿¡ ÀÖ¾î¼ ¾ÈÀüÇÑ °³¹ß ÀýÂ÷¿¡ µû¶ó °³¹ßµÆ´õ¶óµµ Á¸ÀçÇÒ ¼ö ÀÖ´Â º¸¾È ¹®Á¦µéÀ» Á¡°ËÇÏ°í Áø´ÜÇÏ´Â °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ƯÈ÷ SQL ÀÎÁ§¼ÇÀÇ °æ¿ì´Â ÇÁ·Î±×·¥ ¼Ò½º »ó¿¡¼ ÀԷ°ª °ËÁõÀÌ ÀûÀýÈ÷ ÀÌ·ç¾îÁ³´ÂÁö Á¡°Ë(White box test) ÇØ º¸°í À¥ Ãë¾àÁ¡ Á¡°Ë µµ±¸¸¦ º´ÇàÇÏ¿© Á¡°Ë(Black box test)ÇØ º»´Ù¸é ´õ¿í ´õ ¾ÈÀüÇÑ À¥ ¼ºñ½º ¿î¿µÀÌ µÉ °ÍÀÔ´Ï´Ù.
KrCERT/CC¿¡¼ Á¦°øÇÏ´Â ¿ø°Ý À¥ Ãë¾àÁ¡ Á¡°Ë ¼ºñ½º¸¦ ÀÌ¿ëÇϸé À¥ Ãë¾àÁ¡ ¿ø°Ý Á¡°Ë ¼ºñ½º¸¦ Á¦°ø¹ÞÀ» ¼ö ÀÖÀ¸¸ç, Á¡°Ë ½ÅûÀº ȨÆäÀÌÁö(http://webcheck.krcert.or.kr/)¿¡¼ Á¢¼ö ¹Þ°í ÀÖ½À´Ï´Ù. ´Ù¸¸, ºñ¿µ¸®´Üü³ª ¿µ¼¼±â¾÷ µî Á¤º¸º¸È£ Ãë¾à°èÃþÀ» ´ë»óÀ¸·Î Á¦°øÇϹǷΠ¼ºñ½º ´ë»ó¿¡ ÇØ´çÇÏ´Â °æ¿ì¿¡¸¸ ¼ºñ½º ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.
(È«Áؼ® Çѱ¹»ê¾÷±â¼úº¸È£Çùȸ °üÁ¦¿î¿µÆÀ ÆÀÀå/jun0817@kaits.or.kr)
[±èÅÂÇü ±âÀÚ(boan@boannews.com)]
<ÀúÀÛ±ÇÀÚ: º¸¾È´º½º(http://www.boannews.com/) ¹«´ÜÀüÀç-Àç¹èÆ÷±ÝÁö>