'Apache
Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL Injection Ãë¾à¼º'¿¡ °üÇÑ ÇÙ½É Á¤¸®
by
Beist Security Study Group
(http://beist.org)
Members of Beist Research Group : beist and anonymous people
Members of Beist Study Group : beist,
dars21, obhacker, passion, p-jackpot, jacaranda, cina, algot23
¿ä¾à: º» ¹®¼´Â [À̽ÂÁø, ¡®Apache Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL
Injection Ãë¾à¼º¡¯, 2003] ¹®¼¿¡¼ Á¦½ÃÇÑ ±â¹ýÀ» Beist Security Study Group¿¡¼ ÇÙ½É ³»¿ë¸¸
°£Ãß·Á Á¤¸®ÇÑ ¹®¼ÀÌ´Ù. ÀϹÝÀûÀ¸·Î magic_quotes_gpc ¼³Á¤ÀÌ onÀ¸·Î µÇ¾î
Àִ ȯ°æ¿¡¼± SQL Injection °ø°ÝÀ» ÇϱⰡ Èûµé´Ù°í »ý°¢µÇ´Âµ¥ À¥ ÇÁ·Î±×·¥¿¡¼ Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì SQL
InjectionÀ» ¼º°øÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀÌ ÀÖ´Ù. º» ¹®¼´Â ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇØ¼
´Ù·ç°í ÀÖ´Ù.
1. °³¿ä
´ëºÎºÐ À¥ ÇÁ·Î±×·¥Àº ÇØ´ç ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÏ´Â Á¤º¸¸¦ À¯¿¬ÇÏ°í Æí¸®ÇÏ°Ô °ü¸®Çϱâ À§ÇØ µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿ÇÏ¿©
µ¿ÀÛÇÑ´Ù. µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿À» Çϱâ À§Çؼ À¥ ÇÁ·Î±×·¥Àº
Parameter¸¦ ÅëÇØ µ¥ÀÌÅͺ£À̽º¿¡ º¸³¾ µ¥ÀÌÅ͸¦ ÁöÁ¤ÇÑ´Ù. À̶§ µ¥ÀÌÅͺ£À̽º·Î
³Ñ¾î°¡´Â Parameter¸¦ ¾ÇÀÇÀûÀ¸·Î Á¶ÀÛÇÏ¿© ½Ã½ºÅÛ¿¡¼ ºÎ´çÇÑ Á¤º¸³ª ±ÇÇÑÀ» ȹµæÇÏ´Â °ø°Ý ±â¹ýÀ» SQL InjectionÀ̶ó ÇÑ´Ù.
[À̽ÂÁø, ¡®Apache Environment¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÒ ¼ö ÀÖ´Â SQL
Injection Ãë¾à¼º¡¯, 2003] ¹®¼¿¡¼´Â À¥ ÇÁ·Î±×·¥À»
ÀÛ¼ºÇÒ ¶§ Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì ÀϾ ¼ö ÀÖ´Â SQL Injection ±â¹ý¿¡ ´ëÇØ¼ Á¦½ÃÇÏ¿´´Ù. ³»¿ëÀ» °£´ÜÈ÷
»ìÆìº¸¸é ±âÁ¸ À¥ ÇÁ·Î±×·¥À» °ø°ÝÇÒ °æ¿ì magic_quotes_gpc
ÀÇ Á¦ÇÑ ¶§¹®¿¡ SQL Injection °ø°ÝÀ» ¼öÇàÇϱâ Èûµç °æ¿ì°¡ Á¾Á¾ ÀÖ¾ú´Âµ¥
À§ ¹®¼¿¡¼´Â Apache Environment¸¦ À߸ø »ç¿ëÇÒ °æ¿ì À̸¦ ¿ìȸÇÏ¿© °ø°ÝÇÒ ¼ö ÀÖ´Â
¹æ¹ý¿¡ ´ëÇØ¼ ³ªÅ¸³»¾ú´Ù.
º» ¹®¼´Â À§ ¹®¼¸¦ ¹ÙÅÁÀ¸·Î Beist
Security Study Group¿¡¼ ÇÙ½ÉÀûÀÎ ³»¿ë¸¸ °£·«ÇÏ°Ô Á¤¸® ¿ä¾àÇÑ ¹®¼ÀÌ´Ù. ¶ÇÇÑ
º» ¹®¼´Â SQL Injection °ø°Ý ±â¹ý¿¡ °üÇÑ ±âÃÊ Áö½Ä ¼³¸íÀº »ý·«ÇÏ¿´´Ù.. ÀÌ¿¡ °üÇÑ Áö½ÄÀº ÀÎÅͳݿ¡¼ ½±°Ô ¹®¼·Î Á¢ÇÒ ¼ö ÀÖ´Ù.
2. ±â¼úÀûÀÎ ³»¿ë
¸ÕÀú magic_quotes_gpc
°¡ ¹«¾ùÀÎÁö °£·«È÷ ¾Ë¾Æº¸°Ú´Ù. ÇØ´ç ¿É¼Ç¿¡ °ü·ÃµÈ
PHP ¿É¼Ç Á¤º¸¸¦ ÀοëÇϸé,
--Àοë--
magic_quotes_gpc boolean
GPC (Get/Post/ÄíŰ)
ÀÛµ¿ÀÇ magic_quotes »óŸ¦
¼³Á¤ÇÕ´Ï´Ù. magic_quotes°¡ onÀ̸é, ¸ðµç ' (ÀÛÀº
µû¿ÈÇ¥), " (Å« µû¿ÈÇ¥), \ (¹é½½·¡½¬), NULÀº ÀÚµ¿ÀûÀ¸·Î ¹é½½·¡½¬·Î À̽ºÄÉÀÌÇÁµË´Ï´Ù.
Âü°í: magic_quotes_sybase
Áö½Ã¾îµµ ONÀ̸é magic_quotes_gpc°¡
¿ÏÀüÈ÷ ±³Ã¼µË´Ï´Ù. µÎ Áö½Ã¾î¸¦ ¸ðµÎ Ȱ¼ºÈÇϸé ÀÛÀº µûÀ½Ç¥´Â ''·Î À̽ºÄÉÀÌÇÁÇÕ´Ï´Ù. Å«
µû¿ÈÇ¥, ¹é½½·¡½¬,
NULÀº °ÇµéÀÌÁö ¾Ê°í, À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê½À´Ï´Ù.
--Àοë--
Áï, °á·ÐÀ» ³»¸®¸é PHP ¼³Á¤¿¡¼ magic_quotes_gpc°¡ onÀ¸·Î µÇ¾îÀÖÀ» ¶§ SQL Injection ±â¹ýÀ» »ç¿ëÇϱⰡ
Á» ´õ ¾î·Á¿öÁø´Ù. ¿Ö³ÄÇϸé SQL Injection °ø°ÝÀÇ
ÇÙ½ÉÀÌ µÇ´Â ÀÛÀº µû¿ÈÇ¥, Å« µû¿ÈÇ¥ µîÀÌ À̽ºÄÉÀÌÇÁ ó¸®µÇ¾î °ø°Ý¿¡ ÀÌ¿ëÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.
º» ¹®¼´Â magic_quote_gpc
¿É¼ÇÀÌ onÀ¸·Î µÇ¾îÀÖÀ» ¶§, ÀÌ ¿É¼Ç ÀÚü¸¦
¿ìȸÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¼³¸íÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª ƯÁ¤ À¥ ÇÁ·Î±×·¥ÀÇ °æ¿ì Apache Environment º¯¼ö¸¦ Á÷Á¢ÀûÀ¸·Î °¡Á®¿Í »ç¿ëÇÏ´Â °æ¿ì°¡ Àִµ¥, À̶§ Ãë¾à¼ºÀÌ ¹ß»ýÇÒ ¼ö ÀÖ°í, ÀÌ¿¡ °üÇØ¼ ÃÊÁ¡À» ¸ÂÃá´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.
env_test.php
<?
echo "HTTP_USER_AGENT : \t\t$HTTP_USER_AGENT\n";
echo "getenv(\"HTTP_USER_AGENT\")
: \t" . getenv("HTTP_USER_AGENT") . "\n";
?>
À§ÀÇ php ÄÚµå´Â env_test.php ¿¡ Á¢±ÙÇÑ »ç¿ëÀÚÀÇ À¥ ºê¶ó¿ìÀú Á¤º¸¿¡
´ëÇØ¼ 2°¡Áö ÇüÅ·ΠÃâ·ÂÇØÁØ´Ù. ù°´Â $HTTP_USER_AGENT º¯¼öÀ̰í, µÑ°´Â Apache À¥ ¼¹ö·ÎºÎÅÍ ¹°·Á ¹ÞÀº ȯ°æ º¯¼ö
HTTP_USER_AGENT¸¦ getenv() ÇÔ¼ö·Î
°¡Á®¿Í Ãâ·ÂÇØÁØ´Ù. ´ÙÀ½°ú °°Àº HTTP ¿äûÀ» º¸³»¼
°á°ú¸¦ º¸°Ú´Ù.
[beist@localhost
beist]$ telnet beist.org 80
Trying 222.239.227.44...
Connected to beist.org (222.239.227.44).
Escape character is '^]'.
GET /env_test.php
HTTP/1.1
User-Agent: test
Host: beist.org
HTTP/1.1 200 OK
Date: Sun, 20 Nov 2005 07:58:39 GMT
Server: Apache/2.0.50 (Fedora)
X-Powered-By: PHP/4.3.8
Content-Length: 59
Connection: close
Content-Type: text/html; charset=euc-kr
HTTP_USER_AGENT :
test
getenv("HTTP_USER_AGENT") : test
User-Agent ºÎºÐ¿¡
test¸¦ ÀÔ·ÂÇÑ °á°ú, env_test.php ¿¡¼
°¢°¢ µ¿ÀÏÇÑ °á°ú¸¦ Ãâ·ÂÇØÁÖ¾ú´Ù. ´ÙÀ½Àº User-Agent¿¡ Escape ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ °á°úÀÌ´Ù.
[beist@localhost
beist]$ telnet beist.org 80
Trying 222.239.227.44...
Connected to beist.org (222.239.227.44).
Escape character is '^]'.
GET /env_test.php
HTTP/1.1
User-Agent: test'hack
Host: beist.org
HTTP/1.1 200 OK
Date: Sun, 20 Nov 2005 08:00:10 GMT
Server: Apache/2.0.50 (Fedora)
X-Powered-By: PHP/4.3.8
Content-Length: 70
Connection: close
Content-Type: text/html; charset=euc-kr
HTTP_USER_AGENT :
test\'hack
getenv("HTTP_USER_AGENT") : test'hack
À̽ºÄÉÀÌÇÁ ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© º¸³½ °á°ú ¼·Î ´Ù¸¥ Ãâ·ÂÀ» º¸¿©ÁÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¿øÀÎÀ» »ìÆìº¸¸é, getenv()¸¦
ÀÌ¿ëÇÏ¿© °¡Á®¿Â ȯ°æ º¯¼ö´Â PHP°¡ ¾Æ´Ñ À¥ ¼¹ö¿¡¼ ÀúÀåÇϰí Àִ ȯ°æ º¯¼öÀÌ´Ù. Áï, PHP¿¡¼ ¾î¶°ÇÑ Ã³¸® °úÁ¤À» °ÅÄ¡±â ÀÌÀüÀÇ º¯¼öÀÌ´Ù. ±×·¯¹Ç·Î »ç¿ëÀÚ°¡ º¸³½ µ¥ÀÌÅÍ´Â ¼ø¼öÇÑ ÇüÅ·ΠÀ¥ ¼¹öÀÇ È¯°æ º¯¼ö¿¡ º¸°üµÇ¾î
ÀÖ´Ù. ¹Ý¸é¿¡ $HTTP_USER_AGENT´Â PHP¿¡¼ ¸¸µé¾î³½ °ÍÀ¸·Î, À¥ ¼¹ö°¡ °®°í ÀÖ´Â
HTTP_USER_AGENT º¯¼ö °ªÀ» °¡Á®¿Í °¡°øÇÑ (¿©±â¼´Â À̽ºÄÉÀÌÇÁ 󸮸¦ °¡°ø
°úÁ¤ÀÇ ÇÑ ¿¹¶ó°í º¼ ¼ö ÀÖ´Ù.) °ÍÀÌ´Ù.
¸¸¾à À§ÀÇ »ç·Êó·³ À¥ ÇÁ·Î±×·¥¿¡¼ getenv()
ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ƯÁ¤ ȯ°æ º¯¼ö¸¦ °¡Á®¿Ã °æ¿ì À̽ºÄÉÀÌÇÁ 󸮰¡ µÇÁö ¾ÊÀ¸¹Ç·Î ÇØÄ¿ ÀÔÀå¿¡¼´Â
SQL Injection °ø°Ý¿¡ À¯¿ëÇÏ°Ô ¾Ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °ø°Ý ±â¹ýÀº GETÀ̳ª POSTµîÀ¸·Î Àü´ÞµÇ´Â Parameter¸¦ Á¶ÀÛÇÒ ¼ø ¾ø±â ¶§¹®¿¡ °ø°Ý¿¡ ÇѰ谡 ÀÖÀ» ¼öµµ ÀÖ´Ù.
(´ëºÎºÐÀÇ Parameter°¡ GET, POST·Î
Àü´ÞµÇ±â ¶§¹®ÀÌ´Ù.) ±×·¯³ª ½ÇÁ¦·Î À̸¦ ÀÌ¿ëÇÑ °ø°Ý ±â¹ýÀÌ ÀûÁö ¾Ê°Ô ÀáÀçÇϰí ÀÖ´Ù°í »ý°¢µÈ´Ù. ÀǿܷΠÀ¥ ÇÁ·Î±×·¥¿¡¼ getenv()
ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ȯ°æ º¯¼ö¸¦ °¡Á®¿À´Â °æ¿ì°¡ ¸¹ÀÌ Á¸ÀçÇϱ⠶§¹®ÀÌ´Ù.
Ãë¾à ÀáÀç °¡´É¼ºÀ» °¡Áø ȯ°æ º¯¼ö¸¦ ¿¹¸¦ µé¾î
HTTP_X_FORWARDED_FOR³ª HTTP_USER_AGENT¸¦ º¼ ¼ö ÀÖ´Ù. ÀÌ È¯°æ º¯¼ö´Â »ç¿ëÀÚ°¡ ¸¶À½´ë·Î Á¶ÀÛÇÒ ¼ö ÀÖ´Â º¯¼öÀε¥ À̸¦ ¾Ç¿ëÇÒ °æ¿ì SQL Injection °ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀÌ Á¸ÀçÇÑ´Ù. ¹°·Ð
À̿ܿ¡µµ getenv()¸¦ ÀÌ¿ëÇÏ¿© °¡Á®¿À´Â ¸ðµç
ȯ°æ º¯¼öµµ ÁÖ¸ñÇØ¾ß ÇÑ´Ù.
3. ¸¶Ä¡´Â ¸»
º» ¹®¼¿¡¼´Â ÇÙ½É ¿ø¸®¿¡ ´ëÇØ¼¸¸ ¾Ë¾Æº¸¾ÒÁö¸¸ SQL Injection¿¡
´ëÇÑ Áö½ÄÀÌ ÀÖ´Ù¸é À̸¦ ÀÀ¿ëÇÏ±â ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù. SQL InjectionÀº ¾ÆÁ÷±îÁöµµ ÁÖ¿ä
À¥ ÇØÅ· ±â¹ý Áß¿¡ Çϳª·Î ÀÎ½ÄµÉ Á¤µµ·Î ¸¹ÀÌ »ç¿ëµÇ±â ¶§¹®¿¡ ÀÌ ºÎºÐ¿¡ ´ëÇØ¼ °¢º°ÇÑ ÁÖÀǰ¡ ÇÊ¿äÇÏ´Ù. ´ëºÎºÐ
ÇØÅ· ±â¹ýÀÇ ±â¼úÀûÀÎ ÃÖÁ¾ ¸ñÇ¥´Â ShellÀ» ȹµæÇÏ´Â °ÍÀÌÁö¸¸ À¥ ÇØÅ·ÀÇ Æ¯¼º »ó ÀÛÁö¸¸ ºÎ´çÇÑ
±ÇÇÑÀ¸·Îµµ À¥ »çÀÌÆ®¿¡ Ä¡¸íÀûÀÎ ÇÇÇØ¸¦ ÀÔÈú ¼öµµ Àֱ⠶§¹®¿¡ ´õ¿í ÁÖÀǰ¡ ¿ä±¸µÈ´Ù.
ÀÌ¿ÜÀÇ ¿¬±¸·Î, magic_quotes_gpc¿¡¼ GPC°¡ GET, POST, COOKIE¸¦ ³ªÅ¸³»±â ¶§¹®¿¡, HEAD µîÀÇ Method·Î ¿äûÇÒ °æ¿ì¿£ À̽ºÄÉÀÌÇÁ°¡ ¾î¶»°Ô
󸮵ÉÁö »ìÆìº¸¾Ò´Âµ¥ ³»ºÎÀûÀ¸·Î´Â °°Àº Method·Î Ãë±ÞÇϱ⠶§¹®¿¡ ´Ù¸¥ HTTP Method·Î º¸³»´õ¶óµµ À̽ºÄÉÀÌÇÁ 󸮰¡ µÇ¹Ç·Î ¾È½ÉÇØµµ µÈ´Ù.
(¶ÇÇÑ ¾Õ¿¡¼
HTTP_X_FORWARDED_FOR¸¦ ¿¹·Î µé¾ú´Âµ¥, º» ¹®¼¿Í Á÷Á¢ÀûÀ¸·Î °ü·ÃÀº
¾øÁö¸¸ ÀÌ¿¡ ´ëÇØ¼ ÇѰ¡Áö ´õ ÷ºÎÇÏÀÚ¸é, ´ëºÎºÐ À¥ ÇÁ·Î±×·¥Àº ÀÌ º¯¼ö °ªÀ» ½Å·ÚÇÏ´Â °æÇâÀÌ ÀÖ´Ù. À̰ÍÀº »ç¿ëÀÚÀÇ ÁÖ¼Ò¸¦ ³ªÅ¸³»´Â °ªÀε¥, REMOTE_ADDR º¯¼ö
°ª°ú´Â ´Þ¸® »ç¿ëÀÚ°¡ Á÷Á¢ÀûÀ¸·Î Á¶ÀÛÇÒ ¼ö Àֱ⠶§¹®¿¡ °¡±ÞÀûÀÌ¸é »ç¿ëÀ» ÇÇÇÏ°í ±»ÀÌ »ç¿ëÀ» ÇÑ´Ù¸é ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇÑ ÈÄ »ç¿ëÇØ¾ß ÇÑ´Ù.)
|