WebKnight 를이용한 SQL Injection 공격차단 KISA는본문서에서언급한 WebKnight 및해당도구개발사인 AQTRONIX와어떠한관계도없으며, 국내웹해킹피해예방을위해공개웹방화벽인 WebKnight를보안참고용으로소개합니다. 2006. 02. 10 본보고서의전부나일부를인용시반드시 [ 자료 : 한국정보보호진흥원 (KISA)] 룰명시하여주시기바랍니다. - 1 -
1. 개요 단순홈페이지해킹이아닌홈페이지방문자들의정보를빼내금전적인이득을취하고자하는홈페이지해킹이심각한수준에달하고있다. 이는해킹당한업체가피해기관이되기도하지만해당웹사이트를신뢰하고방문하는수많은네티즌들을감염시키는공격사이트이기도하여조치가시급하다. 최근윈도우즈웹서버를대상으로발생되고있는해킹은대부분 SQL Injection 공격이그원인이다. SQL Injection 취약점은게시판, 공지사항등에서 URL 인자에대한입력값을검증하지않음으로해서공격이발생되는웹개발과정에서의오류라고할수있다. 대형포털, 뉴스사이트등수많은국내사이트들이공격을당해웹방문자들을감염시키고있지만, 이러한악성코드유포지로이용되고있는사이트들은취약점이있음을알고있지만제대로조치를하지못해수차례다시해킹을당하는경우를많이볼수있다. 의분석에의하면국내악성코드경유지또는유포지사이트중약 30% 가량이 2회이상재차해킹을당하고있는것으로나타났다. 이는 SQL Injection 취약점자체가웹프로그램의소스코드를수정해야만근본적으로해결될수있는문제이지만운영중인웹서버의프로그램수정이쉽지않기때문이다. 웹시스템구축이후문제점을수정하기보다는설계 개발단계에서보안을고려하여개발되는것이바람직하다. 에서는홈페이지개발시고려하여야하는보안사항과웹언어별사례를제공하고있으므로이를참고하여개발하기바란다. o 홈페이지개발보안가이드다운로드 : http://www.kisa.or.kr/news/2005/announce_20050427_submit.html 향후, 에서는 SQL Injection 공격, 업로드 / 다운로드공격, XSS 공격등대표적인웹공격에대비할수있는표준웹애플리케이션보안템플릿도제공할계획이다. 하지만, 이미구축되어있는웹사이트들은대부분보안을고려하여개발되지않았으며, 이를단기간에수정하는것도쉽지는않아많은국내웹사이트들이재차해킹을당하고있다. 따라서, 근본적인대책인웹소스수정이어려울경우, Secure하지못한웹서버를보완할수있는추가적인방안이필요하다. MS사에서는 IIS 웹서버의보안성을강화시켜주기위해 IISLockdown, URLScan 등과같이도구를제공해주고있다. IISLockdown은웹서버를보호하기위한과정을대부분자동화할수있는도구로서버의용도에따라유형별로다양한보안기능을해제하거나보호할수있는사용자템플릿을제공해준다. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/html/secmod113.asp URLScan은웹사이트관리자가서버에서처리가능한웹요청을제한할수있는 ISAPI(Internet Server Application Program Interface) 필터로써특정웹요청을제한하여잠재적으로유해한웹요청이서버에도달하기이전에차단함으로써공격을예방한다. - 2 -
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secmod/html/secmod114.asp http://www.microsoft.com/technet/security/tools/urlscan.mspx 하지만, 아쉽게도 IISLockdown이나 URLScan도 DB Query 문장을필터링하지는못하여최근발생되고있는 SQL Injection 공격을차단할수는없다. 최근웹공격이심각한수준에이르러국내 외상용웹방화벽들도많이출시되었다. 다양하고정교한웹공격을기존의네트워크방화벽이나침입탐지시스템가방어하는데한계가있다. 웹방화벽은 SQL Injection 등웹공격에특화된보안솔루션이므로웹방화벽의도입도검토할필요가있다. 그러나, 기업에서경제적인문제로인해상용웹방화벽도입이어려운경우가많으므로본고에서는공개웹방화벽인 WebKnight를통해 SQL Injection 등웹공격에대해방어하는방안을살펴보고자한다. WebKnight는 GNU 공개라이센스원칙을따르는공개소프트웨어로써모든기업이나개인이자유로이사용할수있다. 하지만, 대부분의공개소프트웨어와마찬가지로 WebKnight도상용웹방화벽에비해인터페이스나메뉴얼등사용자편의성이부족하고, 지속적인유지보수도어렵다는단점이있다. WebKnight도 2003년 11월에 v1.3 버전이릴리즈된후업데이트가없다. 그러나, 이도구는 SQL Injection을포함한다양한웹공격에대해차단할수있는프레임을제공해주고있고, 현재많이사용되고있는 IIS5, IIS6에서도아무런문제없이운영이가능하여최근의웹공격차단에상당히많은도움을줄수있다. 물론, WebKnight의잘못된설정은정상적인웹요청까지차단할수있으므로충분한커스트마이징과정은웹서버관리자의몫임을명심하여야할것이다. 본고에서는 WebKnight의주요기능을살펴보고설치및커스트마이징방법을소개하고, 실제공격을얼마나잘차단하는지테스트한결과를소개한다. 2. WebKnight 개요 WebKnight는 AQTRONIX사 (http://www.aqtronix.com/) 에서개발한 IIS 웹서버에설치할수있는공개용웹방화벽이다. WebKnight는 ISAPI 필터형태로동작하며, IIS 서버앞단에위치하여웹서버로전달되기이전에 IIS 웹서버로들어온모든웹요청에대해웹서버관리자가설정한필터룰에따라검증을하고 SQL Injection 공격등특정웹요청을사전에차단함으로써웹서버를안전하게지켜준다. 이러한룰은정기적인업데이트가필요한공격패턴 DB에의존하지않고 SQL Injection, 디렉토리 traversal, 문자인코딩공격등과같이각공격의특징적인키워드를이용한보안필터사용으로패턴업데이트를최소화하고있다. 이러한방법은알려진공격뿐만아니라알려지지않은공격으로부터도웹서버를보호할수있다. 또한, WebKnight는 ISAPI 필터이기때문에다른방화벽이나 IDS에비해웹서버와밀접하게동작할수있어많은이점이있다. MS의 URLScan과마찬가지로 ISAPI 필터로써 inetinfo.exe 안에서동 - 3 -
작하므로오버헤드가심하지않다. 해킹당한한웹사이트에 WebKnight를적용하여테스트한결과안정적인웹서버운영으로인해웹서버속도가오히려빨라진것을느낄수있었다. 하지만다량의웹트래픽이발생되는사이트에서는사전에충분한검증을거친후에적용할필요는있다. 다음은 WebKnight 의주요특징이다 (http://www.aqtronix.com/?pageid=99 참조 ). o 낮은보유비용 (Total Cost of Ownership) WebKnight는윈도우즈인스톨러패키지와원격설치스크립트로설치가능해사내에서쉽게 WebKnight를채택할수있다. 또한 WebKnight 설정을바꾸기위해그래픽사용자인턴페이스를제공한다. o 운영중업데이트가능일부설정의변경을제외하고대부분의설정변경은웹서버의재가동을요구하지않아, 웹사용자들에대한어떠한서비스장애없이설정을변경할수있다. 성능상의이유로매 1분마다이러한변경을탐지하여적용한다. o SSL 보호 (protection) 다른전통적인방화벽과는달리 WebKnight는 ISAPI 형태로 IIS의일부로동작하므로 HTTPS 상의암호화된세션들도모니터링및차단할수있다. o Logging 기본적으로차단된모든요청에대해로그를남기고, 로깅전용모드로운영할경우추가적으로모든허용된요청에대해서도로그를남길수있다. 로깅전용모드는공격을차단하지는않고로그파일에서공격사실을조사하는데도움을줄수있다. o HTTP Error Logging WebKnight는웹서버로부터 HTTP 에러들을로그할수있도록설정할수있다. 이방법으로 404 Not Found' 와같은일반적인에러나 500 Server Error' 와같이보다심각한로그들도기록할수있다. 에러로그를이용하여공격을탐지하거나깨진링크를발견하거나잘못된설정도쉽게발견할수도있다. o 웹기반애플리케이션과의호환성 WebKnight는 Frontpage Extensions, WebDAV, Flash, Cold Fusion, Outlook Web Access, SharePoint 등과도호환이잘이루어진다. 3. WebKnight 설치및제거 가. WebKnight 설치 WebKnight는윈도우즈인스톨러를이용한설치, install.vbs 스크립트를이용한설치, 수동설치등 3가지방법으로설치할수있다. - 4 -
웹호스팅서버등하나의웹서버내에다수개의사이트가운영되는경우웹서버전체에필터를적용 ( 글로벌필터 ) 할수도있으며, 개별웹사이트별로서로다른룰에의해필터를적용 ( 사이트필터 ) 할수도있다. 윈도우즈인스톨러와 install.vbs 스크립트를이용한설치시에는기본적으로글로벌필터가적용되는데설치과정은다음과같다. 1 아래 URL 에서 WebKnight 1.3(2003.11.10 릴리즈 ) 을다운로드받는다. http://www.aqtronix.com/downloads/webknight/2004.02.01/webknight.zip 2 압축을해제하면아래와같은폴더와파일이생성된다. 3 Setup 폴더로이동하여설치방법을선택할수있다. 4 WebKnight.msi 파일을더블클릭하여윈도우즈인스톨러를동작시켜 WebKnight를설치할수도있고, install.vbs 스크립트를더블클릭하여설치할수도있다.( 삭제시에는 uninstall.vbs 파일실행 ) 다음그림은 IIS 6.0 에서 WebKnight.msi 파일실행하여윈도우즈인스톨러에의해설치되는화면이다. - 5 -
5 라이센스동의후설치타입선택화면이나타나는데, 일반적으로 Typical" 을선택한다. 6 이후자동설치과정이진행되며설치가완료되면다음과같은메시지가나타난다. 7 기본적으로 C:\\Program Files\AQTRONIX\WebKnight 폴더에설치가완료된다. 이폴더내에필터역할을하는 DLL파일 (WebKnight.dll) 과향후커스트마이징을위해필요한설정실행파일 (Config.exe), 로그파일 (IIS 재가동후생성 ) 등이위치하고있으므로이폴더의위치를기억할필요가있다. 8 IIS 웹서버를재가동한다. 9 IIS 웹서버를재가동후에정상적으로설치가완료되었을경우다음과같이웹사이트동록정보의 ISAPI 필터 에다음과같이 WebKnight 필터가정상적으로적용이된것을확인할수있다. - 6 -
위과정을통해 WebKnight의설치는간단히수행할수있다. 만일다수개의웹사이트가운영되어각사이트마다필터링룰을달리적용하거나자동설치가어려운경우다음과같이수동으로설치할수있다. 글로벌필터로수동설치 1 압축해제후생성되는 Setup 폴더를 C:\Program Files\AQTRONIX WebKnight와같은서버내의로컬폴더를생성하고여기에복사한다. 2 인터넷정보서비스를연다. 3 서버이름 ( 사이트이름이아님 ) 에서우측마우스를클릭하여 등록정보 를선택한다. 4 마스터속성리스트에서 WWW 서비스 를선택하고, 편집 버튼을누른다. 5 ISAPI 필터 탭을선택하고 추가 버튼을클릭한다. 6 필터등록정보 가나타나면필터이름과실행파일경로를입력한다. ( 예를들어, 필터이름 : WebKnight, 실행파일경로 : C:\Program Files\AQTRONIX WebKnight\WebKnight.dll) 7 "OK" 버튼을누르고대화상자를빠져나간다. 8 IIS를재가동한다. 사이트필터로수동설치 1 압축해제후생성되는 Setup 폴더를 C:\Program Files\AQTRONIX WebKnight\W3SVC1 과 같은서버내의로컬폴더를생성하여여기에복사한다.( 단, 각 WebKnight 설치를위한 unique한폴더를가져야한다.) 2 인터넷정보서비스를연다. 3 사이트이름 ( 서버이름이아님 ) 에서우측마우스를클릭하여 등록정보 를선택한다. 4 ISAPI 필터 탭을선택하고 추가 버튼을클릭한다. 5 필터등록정보 가나타나면필터이름과실행파일경로를입력한다. ( 예를들어, 필터이름 : WebKnight, 실행파일경로 : C:\Program Files\AQTRONIX WebKnight\W3SVC1\WebKnight.dll) 6 "OK" 버튼을누르고대화상자를빠져나간다. - 7 -
7 Setup 폴더아래의 config.exe 파일을실행해서 Global Filter Capabilities" 섹션에서 Is Installed As Global Filter 의체크를해제한다. 8 IIS 를재가동한다. IIS 6.0에서 WebKnight 구동시주의사항 1 글로벌필터로구동하기위해서는 IIS 5.0 격리모드 로 IIS를구동하여야한다. IIS 6.0은기본적으로 작업자프로세스모드 로구동이되고있는데 IIS 5.0 격리모드 로변경할경우에는동일환경의테스트서버에서사전에검증을거치는것이바람직하다. 왜냐하면만약해당사이트가 IIS 5.0에는없는 IIS 6.0의새로운기능을사용하고있을경우해당기능과관련된프로그램들이정상적으로동작하지않거나오류를발생시킬수있기때문이다. 또한, IIS 5.0 격리모드 로의변경은 IIS의재시작을필요로한다. 2 IIS 6.0에서 작업자프로세스모드 " 로계속구동하고각프로세스별로 unique한로그가필요한경우에는 config.exe를실행하여다음과같이설정한다. - Global Filter Capabilities 섹션에서 Is Installed As Global Filter 을체크하지않는다. - Logging" 섹션에서 Per Process Logging 을체크한다. - NETWORK SERVICE 계정이 WebKnight 폴더와하위폴더들의퍼미션을바꾸었는지확인한다. 나. WebKnight 제거 만일 WebKnight를제거하고자할경우다음과같은 3가지방법중하나를선택하여 WebKnight를제거한후 IIS를재가동한다. - 8 -
1 윈도우즈인스톨러를이용한자동제거 (WebKnight.msi 실행 ) 디폴트경로에설치되어있는경우 C:\Program Files\AQTRONIX WebKnight\ WebKnight.msi 를실행하면오른쪽그림과같이 Modify", "Repair", "Remove" 화면이나타나는데, 이중 Remove" 를선택하면자동으로 WebKnight가제거된다. 2 스크립트를이용한자동제거 (uninstall.vbs 실행 ) 디폴트경로에설치되어있는경우 C:\Program Files\AQTRONIX WebKnight\uninstall.vbs를실행하면자동으로 WebKnight가제거된다. 3 수동제거수동설치과정과마찬가지로인터넷정보서비스를열고글로벌필터또는사이트필터에따라서버이름또는사이트이름을선택한후우측마우스를클릭하여 등록정보 편집 ISAPI 필터 탭을선택하여 WebKnight 항목을선택한후 제거 버턴을누른다. 상기와같이 WebKnight 를제거한후변경사항을반영하기위해서는 IIS 를재가동하여야한다. - 9 -
4. 설정커스트마이징 WebKnight는 SQL Injection 공격차단, 허용하지않는파일또는확장자에대한접속차단등웹공격에대해대단히다양한차단기능을제공해주고있다. 또한기본적으로이러한차단기능이설정되어설치와동시에적용이되는데이차단기능이정상적인웹접속을차단할수도있다. 따라서설치이후자신의웹사이트환경에맞게적절하게커스트마이징하는과정을반드시거쳐야한다. 실제설치보다는커스트마이징에많은노력과시간을들여야만한다. 설정과정을통해오히려웹공격의다양한패턴을익힐수있는기회도될수있을것이다. 먼저, WebKnight 설치이후해당웹사이트에방문해서정상적으로웹요청및응답이이루어지는지확인을하고, 접속이차단될경우 WebKnight의로그를참조하여어떠한룰에의해요청이차단되었는지찾아이룰을수정하여야한다. 디폴트설치시로그파일의위치와설정프로그램은다음과같다. o 로그파일 : C:\Program Files\AQTRONIX WebKnight\LogFiles\YYMMDD.log o 설정프로그램 : C:\Program Files\AQTRONIX WebKnight\config.exe WebKnight 설치후웹접속시다음과같은경고화면이뜰수있다. 이화면은 WebKnight 에서필터룰에의해차단을시킨후웹접속자에게보내는기본경고화면이다. 정상적인웹요청을했는데도불구하고이와같이차단된다면로그파일을열어 BLOCKED" 메시지를확인하고어느룰에서차단되었는지찾아설정파일에서이를해제하여야한다. 디폴트설치의경우 - 10 -
WebKnight의로그파일은설치후 IIS 웹서버를재가동하게되면 C:\Program Files\AQTRONIX WebKnight\LogFiles 폴더가생성되고그하위에일자별로로그파일이생성된다. 기본적인로그파일의각필드는다음과같다. Time ; Site Instance ; Event ; Client IP ; Username ; Additional info about request(event specific) 정상적인웹접속이차단되어로그파일을분석해보니다음과같은로그가남았다. 05:57:42 ; W3SVC31 ; OnPreprocHeaders ; xxx.xxx.207.85 ; ; GET ; /admin/img/deffortune.jpg ; BLOCKED: '/admin' not allowed in URL ; HTTP/1.1 ; ASPSESSIONIDAQDBDDAD=NACAJJBAPJACHHPHNIPGDKCH 위의로그를보면 "/admin" 폴드에대한접속을허용하지않도록 WebKnight 룰이설정되어있는데, /admin/img/deffortune.jpg 파일에접속하고자하여웹접속이차단된것을알수있다. 이는홈페이지초기화면구성시 /admin 폴드에서그림파일을가져오도록설계되어있어발생되었는데, 일반사용자들이접근하는화면에 /admin 폴드의컨텐츠를포함하지않도록변경할필요가있다. 또는, WebKnight의설정을변경하여 /admin 폴더에의접속을허용할경우접속이차단되는상황을막을수있다. 이처럼로그파일을통한커스트마이징과정은현재의웹서버설계상의문제도파악하여개선하도록도와줄수도있다. 다음 FAQ에는 WebKnight의설치와환경설정, 로그파일분석시자주발생될수있는문제와궁금증에대해질의 응답식으로정리되어있으므로참고하기바란다. http://www.aqtronix.com/?pageid=114 로그파일해석시기본설정의로그시간대는 GMT/UTC로한국시간대인 GMT+09 보다 9시간늦으므로로그분석시이를감안하여야한다.( 설정에서 USE GMT 를체크하지않음으로시스템시간과동기화시킬수있다.) 설정변경은 config.exe 파일을실행하여 GUI 인터페이스를통해설정할수있다. - 11 -
config.exe 를통해 WebKnight 의다양한필터링기능을설정할수있는데다음과같은설정을할수있다. 설치경험을통해환경설정과정에서웹서버관리자가유심히확인해야되는부분에대해 확인사항 에의견을넣었으니참고하기바란다. 구분기능확인사항 Scanning Engine 암호화포트 (HTTPS), 비암호화포트 (HTTP) 에대한모니터링기능설정 공격발생시 WebKnight 가어떻게행동할지를결정하며, Incident Response 기본적으로경고화면인 nohack.htm으로 redirect하고웹 Handling 요청을차단하지만, 차단하지않고로그만남기게할수도있음 Logging Request Limits URL Scanning Mapped Path Requested File Headers Methods USE GMT 항목로깅여부, 로그시간대, 로그항목 ( 클라이언트 IP, 사용 disable 권고 ( 시스템자명등 ) 등을설정시간사용 ) 컨텐츠길이, URL 길이, 쿼리스트링길이등을제한 URL Encoding 공격차단, 상위패스 (..) 차단, URL 백슬 URL Denied 래쉬 (\) 차단, URL 인코딩 (%) 차단, 특정 URL 스트링 Sequences 항목확차단등 URL 입력모니터링및차단인필요 Allowed Paths 에서경로에상위패스, 백슬래쉬 (\) 등차단및로컬파일시웹컨텐츠가있는위스템의허용하는경로정의치확인및지정필요 차단시킬파일목록과차단 허용할파일확장자정의 서버헤더정보변경, 특정헤더차단등설정 허용또는차단할 Method를결정 ( 예 : GET, HEAD, POST은허용하고 DELETE, PUT 등은차단 ) 정상적인요청이차단될수있으므로반드시확인필요 - 12 -
특정 query 스트링 (xp_cmdshell, cmd.exe 등 ) 차단, Querystring query 스트링에서 SQL Injection 차단등설정 Global Filter 글로벌필터적용여부, 특정헤더스트링 (xp_cmdshell, Capabilities cmd.exe 등 ) 차단등결정공격에이용될수있는수십개의키워드가정의 SQL Injection 공격에이용되는키워드정의 ( ; select SQL Injection 되어있으나확장저장프 insert xp_ 등 ) 로시져의사용유무등을고려하여추가 / 삭제필요기본적으로모두사 Web Applications WebDAV, IISADMPWD 등웹애플리케이션의허용유무결정용하지않는것으로설정되어있음 위대부분의설정변경사항은 IIS의재가동없이바로적용이되지만일부항목은재가동을하여야만적용이되는것도있으므로 IIS의재가동여부를확인할필요가있다. 만일설정을잘못변경하여다시디폴트설정으로바꾸기위해서는 WebKnight.xml 파일을삭제한후에웹서버를재시작하면된다 ( 디폴트상태의 WebKnight.xml 파일이새로생성됨 ). 5. 모의공격및공격차단확인 WebKnight의커스트마이징으로정상적으로설치가완료가되었을경우웹공격이정상적으로차단되고있는지확인해볼필요가있다. 다음그림은 WebKnight 설치이전에해당웹서버가 SQL Injection 공격에취약하여공격툴에의해 DB 접근이가능하고 DB 계정및테이블이노출되고있는화면이다. - 13 -
하지만, WebKnight의설치이후동일한공격툴을이용하여테스트한결과공격은실패하였으며, 웹서버의 WebKnight 로그파일에공격차단로그가남았다. 06:13:40 ; W3SVC31 ; OnPreprocHeaders ; xxx.xxx.151.24 ; ; GET ; /west/newsvieww.asp ; id=37'%20and%20user%2bchar(124)=0%20and%20''=' ; BLOCKED: possible SQL injection in querystring ; HTTP/1.1 ; ASPSESSIONIDAQDBDDAD=EDIAJJBAFOHJCEKKEMBNCEJD 06:13:40 ; W3SVC31 ; OnPreprocHeaders ;xxx.xxx.151.24 ; ; GET ; /west/newsvieww.asp ; id=37%25'%20and%20user%2bchar(124)=0%20and%20'%25'=' ; BLOCKED: possible SQL injection in querystring ; HTTP/1.1 ; ASPSESSIONIDAQDBDDAD=EDIAJJBAFOHJCEKKEMBNCEJD SQL Injection 공격이외에도취약한 CGI 공격, 디렉토리 traversal 공격등다양한웹공격이차단되는것을확인할수있었다. WebKnight가정상적으로공격을차단하고있음을확인하면운영에들어가는데, 운영하는과정에서도주기적인 WebKnight의로그확인이필요하다. 로그확인을통해어떠한공격시도가일어나고있는지확인하고적절한대응을하여야한다. 지금까지공개웹방화벽인 WebKnight를이용한 SQL Injection 차단방안에대해소개하였다. WebKnight를실제운용되고있는취약한웹서버에적용시켜본결과훌륭한공격차단효과를확인할수있었는데, 상용웹보안도구의도입이여의치않은중소규모의웹사이트에서적용하기에적절할것으로보여진다. 웹보안의기본은안전하게코딩된웹프로그램에있음을명심하여야할것이다. 홈페이지개발보안가이드, 표준웹애플리케이션보안템플릿등을참고하여웹애플리케이션설계단계에서부터안전하게개발하는것이가장우선시되어야할것이고, 부가적인보안조치로 WebKnight를활용하기바란다. - 14 -