FOCUS 4 크로스사이트스크립팅 (XSS) 공격종류및대응방법 FOCUS 성윤기 과거 10년전에비해사이버공격의방법은지능적이고, 미치는범위는급격히확대되고있다. 단일취약점에대한스크립트키디수준의공격에서, 이제조직화된범죄단체또는국가가후원하는조직에서서버뿐만아니라클라이언트취약점, 스피어피싱공격등여러취약점공격을자동화하는악성코드를배포하여대규모감염을유도하는공격등다양한플랫폼을대상으로복합적인형태의공격을통해사이버공격자가원하는중요정보나금전을훔치는공격으로발전하고있다. 이중크로스사이트스크립팅취약점은취약한웹사이트에악성스크립트를포함할수있는손쉬운방법중하나로공격자들이가장많이선호하는방식중하나이다. XSS 취약점은 OWASP Top 10 2013 에도여전히 3번째높은위험으로매겨져있으며, 취약점분포도도 매우광범위 한수준으로본취약점은조직의정보자산을보호하는데가장큰위험중하나라고할수있다. 그래서본문서에서는크로스사이트스크립트취약점, 공격방법및근본적으로해결할수있는방안에대해서살펴본다. Ⅰ. 개요 1. 사이버공격동향 2. HTTP 프로토콜 Ⅱ. XSS 취약점및공격 1. XSS 취약점및현황 2. XSS 공격종류 3. XSS 공격피해 Ⅲ. XSS 취약점예방기술 1. 입 출력값검증및무효화 2. 보안라이브러리 3. 브라우저확장프로그램 Ⅳ. 결론 한국인터넷진흥원종합상황대응팀책임연구원 (yune@kisa.or.kr) Internet & Security Focus 2013 11 월호 69
FOCUS Ⅰ. 개요 1. 사이버공격동향과거 10년전에비해사이버공격의방법은광범위하고지능적이며, 미치는범위는급격히확대되고있다. 과거개별시스템에존재하는취약점에대한스크립트키디정도의공격에서, 이제조직화된범죄단체또는국가가후원하는조직에서서버뿐만아니라클라이언트프로그램취약점, 스피어피싱 (Spear phishing) 1) 기법등복합적인공격방법을이용하여사이버공격자가원하는중요정보나금전을훔치는공격으로발전하고있다. 조직에서는내부시스템에대한비인가접속시도및공격을차단하기위해다양한보안솔루션을구축함에따라, 공격자는내부사용자의합법적인인터넷사용을악용하는방식으로공격방법을변경하였다. 즉사용자가정상적으로웹사이트를접속할때또는이메일을읽을때공격자가여기에악성스크립트를포함하여개인의 PC를감염시키고, 조직내부시스템에침투하여원하는정보를탈취해가고있다. 공격자는자동화공격악성코드를배포하여많은수의서버를동시에감염시키고, 하나의시스템에취약점이발견되면이를이용해서다른시스템으로 2차공격하는등취약점을이용하여넓은범위와빠른속도로피해가확산될수있다. 35% 30% 25% 20% 15% 10% 5% 0% 3% 1% 2% 1% 2% IE 취약점 PDF 화일한글화일 MS 문서 Java 취약점 1% abobe 취약점 30% 웹사이트 주요전파경로 분포 웹사이트 286 건 (30%) IE 취약점 25 건 (3%) PDF 파일 7건 (1%) 한글파일 16 건 (2%) MS 문서 10 건 (1%) Adobe 취약점 8건 (1%) [ 그림 1] 악성코드주요전파경로별분류 주 : 위표에언급된수치는 3,693 개악성코드에대한자체분석결과로타기관및업체의내용과다를수있음 출처 : 한국인터넷진흥원수집 PC 악성코드분석동향 ( 12.1 ~ 13.3) 1) 스피어피싱 (Spear phishing) : 모르는사람에게무작위로피싱이메일을보내는것이아니라특정조직을공격하기 위해공격대상조직의중요시스템및정보와관련있는특정인을대상으로피싱이메일을보내는방식 70 Internet & Security Focus 2013 11 월호
[ 그림 1] 과같이 2012 년 1 월에서 2013 년 3 월까지의한국인터넷진흥원에서분석한악성코드 배포방식을조사한결과웹사이트를통해이용자에게전파된경우가전체의 30% 로대부분을 차지하고있는것으로나타났다. 나머지악성문서를통한배포가 4%, IE 및어도비등 FOCUS 애플리케이션소프트웨어를통한배포가 4% 로나타났다. 즉웹사이트의취약점을이용한악성코드배포가여전히인터넷이용자에게큰위협요인이되고있다. 본문서에서는이러한합법적인인터넷서비스인웹과이메일서비스를통해사용자와조직내부공격에사용할수있는웹기반취약점중하나인크로스사이트스크립팅 (XSS) 의문제점과해결책을다룬다. XSS 취약점은 2013 년에 OWASP 2) 국제웹보안표준기구에서발표한 OWASP Top 10 2013 에도 3번째높은위험으로평가되었으며 ( OWASP Top 10 2010 에서는 2번째높은위험 ), 취약점분포도는 매우광범위 한수준으로, 이취약점으로인해다양한위험이발생하고있다고할수있다. 최근에이슈가되고있는지능적위협 (APT) 및워터링홀 3) 유형의공격에서도 XSS 취약점과사회공학적기법을결합하여공격한다. XSS 취약점을이용한공격은탐지도어려울뿐만아니라, 공격이성공하는경우조직내부의 PC를해킹하여내부시스템까지접근할수있는위험이있다. 그래서본문서에서는이러한 XSS 위험을효과적으로줄이고, 이를활용한지능적사이버공격을예방하기위해 XSS 취약점의원인, 공격방법및근본적인해결책에대해서고찰한다. 2. HTTP 프로토콜 XSS 공격은웹응용에존재하는취약점을기반으로웹서버와클라이언트간통신방식인 HTTP 4) 프로토콜동작과정중에발생한다. HTTP 프로토콜이란웹서버와클라이언트간서버에저장된웹문서 ( 일반적으로 HTML 5), 스크립트, 이미지 (.gif,.jpeg) 등을클라이언트로전달하기위한표준규약 (RFC 6) 2616) 이다. 먼저클라이언트 ( 브라우저 ) 는서버로헤더정보를포함하여관련정보를요청 (request) 하면, 웹서버는클라이언트의요청을분석하여요청한자원데이터및헤더를포함하여클라이언트로응답 (Response) 을보낸다. 2) OWASP(Open Web Application Security Project) : 웹응용및소프트웨어보안문제를해결하기위해전세계전문가들로구성된비영리재단. 3년에 1회 OWASP Top 10 이라는웹응용취약점위험에대해서발표한다. 3) 워터링홀공격 : 공격대상조직의특징을빅데이터로조사하여구성원들이많이방문하는웹사이트에공격코드를삽입하여, 공격대상조직을감염시키고침투하는방법 4) HTTP(HyperText Transfer Protocol) : 인터넷으로서버와브라우저간 HTML 문서를송수신할수있도록요청 (request)/ 응답 (response) 통신규약 5) HTML(HyperTest Markup Language) : 웹문서를작성하기위한문법언어. 가장큰특징은문서에링크를포함하여문서간연결및이동을보장한다. 6) RFC(Request for Comments) : IETF(Internet Engineering Task Force) 에서제정한인터넷통신을위한표준을정의한문서명 Internet & Security Focus 2013 11 월호 71
FOCUS 1 GET /www.server.com/ HTTP/1.1 2 ACCEPT_ENCODING: gzip,deflate,sdch 3 CONNECTION: keep-alive 4 ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 5 ACCEPT_CHARSET: windows-949,utf-8;q=0.7,*;q=0.3 6 USER_AGENT: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 7 ACCEPT_LANGUAGE: ko-kr,ko;q=0.8,en-us;q=0.6,en;q=0.4 8 HOST: www.server.com 9 Cookie2: $Version=1; Skin=new; [ 그림 2] HTTP 요청헤더양식 [ 그림 2] 와 [ 그림 3] 는브라우저에서서버 (www.server.com) 을접속할때발생한요청헤더및응답헤더를보여준다. 브라우저가서버의데이터를요청하고, 서버는응답시헤더의뒤에는 www.server.com 의첫페이지 HTML 데이터가브라우저로전달되며, 브라우저가이를해석하여사용자에게보여준다. HTTP 프로토콜의요청및응답프로토콜필드의자세한사항은 RFC 2616 에정의되어있다. 1 HTTP/1.1 200 OK 2 Date: Fri, 08 Jul 2013 00:59:41 GMT 3 Server: Apache/2.2.4 (Unix) PHP/5.2.0 4 X-Powered-By: PHP/5.2.0 5 Expires: Mon, 26 Jul 2013 05:00:00 GMT 6 Last-Modified: Fri, 08 Jul 2013 00:59:41 GMT 7 Cache-Control: no-store, no-cache, must-revalidate 8 Content-Length: 102 9 Keep-Alive: timeout=15, max=100 10 Connection: Keep-Alive 11 Content-Type: text/html 12 Set-Cookie2: UserID=JohnDoe; Max-Age=3600; Version=1 [ 그림 3] HTTP 응답헤더양식 72 Internet & Security Focus 2013 11 월호
XSS 공격은브라우저로전달되는데이터에악성스크립트가포함되어개인의브라우저에서 실행되면서해킹을하는것이며, 이공격용악성스크립트는공격자가웹서버에구현된웹 애플리케이션의 XSS 취약점을이용하여서버측또는 URL 에미리삽입을해놓은것이다. FOCUS Ⅱ. XSS 취약점및공격 1. XSS 취약점및현황웹애플리케이션보안연구재단인 OWASP 에따르면 크로스사이트스크립팅 (XSS) 는애플리케이션에서브라우저로전송하는페이지에서사용자가입력하는데이터를검증하지않거나, 출력시위험데이터를무효화시키지않을때발생한다 라고정의되어있다. 즉공격자가의도적으로브라우저에서실행될수있는악성스크립트를웹서버에입력또는이것을출력시위험한문자를중성화시키지않고처리하는애플리케이션의개발과정에서발생한다. XSS는일반적으로자바스크립트에서발생하지만, VB 스크립트, ActiveX 등클라이언트에서실행되는동적데이터를생성하는모든언어에서발생이가능하다. 전세계시스템공격방법통계에서도 XSS는 3위 SQL 7) 인젝션 (17%) 에이어 4위 (6.2%) 를차지하는등여전히맹위를떨치고있다 ( 출처 : The Web Application Security Consortium). 뿐만아니라 2011 년에발표된 SANS/CWE 가장위험한 25 大소프트웨어오류 8) 에서 4번째로높은위험 ( 위험도 77.7 점기록 ) 으로기록되고있다. 이와같이 XSS 취약점은비교적쉽게공격할수있으며웹애플리케이션개발시제거되지않아매우광범위하게분포되고있다고할수있다. 그래서이취약점을이용한악성스크립트배포및이를통한악성코드배포및클라이언트프로그램해킹등현재도개인및조직의보안에큰위협이되고있다. 7) SQL(Structured Query Language) : 관계형데이터베이스관리시스템 (DBMS) 의데이터를관리하기위해설계된프로그래밍언어 8) 보안연구소인 SANS 연구소와취약점데이터베이스목록인 CWE 가소프트웨어프로그래밍과정에서가장많이존재하는취약한요소를정의한문서 Internet & Security Focus 2013 11 월호 73
FOCUS 2. XSS 공격종류그렇다면공격자가어떻게 XSS 취약점을이용하여공격하는지알아보자. XSS 취약점을이용한공격방법은 3가지로분류된다. 하나는접속자가많은웹사이트를대상으로공격자가 XSS 취약점이있는웹서버에공격용스크립트를입력시켜놓으면, 방문자가악성스크립트가삽입되어있는페이지를읽는순간방문자의브라우저를공격하는방식이며 ( 저장 XSS 공격 ), 또하나는반사 XSS 공격으로악성스크립트가포함된 URL을사용자가클릭하도록유도하여 URL 을클릭하면클라이언트를공격하는것이고 ( 반사 XSS 공격 ), 마지막으로 DOM 환경에서악성 URL 을통해사용자의브라우저를공격하는것이다 (DOM 기반 XSS 공격 ). 1) 저장 XSS 공격저장 XSS 공격은 [ 그림 4] 와같이웹애플리케이션취약점이있는웹서버에악성스크립트를영구적으로저장해놓는방법이다. 이때웹사이트의게시판, 사용자프로필및코멘트필드등에악성스크립트를삽입해놓으면, 사용자가사이트를방문하여저장되어있는페이지에정보를요청할때, 서버는악성스크립트를사용자에게전달하여사용자브라우저에서스크립트가실행되면서공격한다. [ 그림 4] 저장 XSS 공격방법 74 Internet & Security Focus 2013 11 월호
가장일반적인방법은게시판같은곳에 HTML 문서에 <script> 를이용하여이스크립트태그안에악성스크립트를저장하는방식이다. 즉텍스트만표시되도록설계된어떤게시판에 <script> 악성스크립트 </script> 과같은태그를포함한다. 이경우에게시판에는태그가나타나지않으며사용자는확인할수가없다. [ 그림 5] 는브라우저의쿠키값을보여주는간단한스크립트이며, 어떤웹페이지에 <script>alert(document.cookie)</script> 가포함되어있는어떤페이지를사용자가읽을때마다, 브라우저는이스크립트를실행하면서쿠키값을보여주게된다. 공격자는 alert(document.cookie) 스크립트대신정교한공격용코드를포함하여다양한공격을수행할수있다. FOCUS <script>alert(document.cookie)</script> [ 그림 5] XSS 용자바스크립트 저장 XSS 는공격자입장에서사용자들이많이방문하는사이트가공격대상으로가장적합한곳이다. 즉유명온라인게시판, 웹기반이메일및사용자프로필등에악성스크립트를포함하면, 다른방문자들이해당페이지를읽어보는즉시악성스크립트가브라우저에서실행되면서감염되므로효과적이다. 2) 반사 XSS 공격반사식 XSS 공격은웹애플리케이션의지정된변수를이용할때발생하는취약점을이용하는것으로, 검색결과, 에러메시지등서버가외부에서입력받은값을받아브라우저에게응답할때전송하는과정에서입력되는변수의위험한문자를사용자에게그대로돌려주면서발생한다. 일반적으로서버에검색내용을입력하면, 검색결과가있는경우에는결과값을사용자에게전달하지만, [ 그림 6] 과같이서버에서정확한결과가없는경우서버는브라우저에입력한값을 [ 그림 7] 과같이그대로 HTML 문서에포함하여응답한다. 이경우 HTML 페이지에포함된악성스크립트가브라우저에서실행이된다. http://www.server.com/search/?q=<script>alert(document.cookie)</script>&x=0&y=0 [ 그림 6] 반사 XSS 공격용 URL Internet & Security Focus 2013 11 월호 75
FOCUS <html> <body> <div id="pagetitletxt"> <h2><span class="highlight">search Results</span><br /> Search: "<script>alert(document.cookie)</script>"</h2> </body> </html> [ 그림 7] 서버가반사한 HTML 데이터 즉사용자가서버로입력한값을, 서버는요청한사용자의브라우저로악성스크립트를반사시킨다. 반사 XSS 공격은주로사용자에게악성 URL을배포하여사용자가클릭하도록유도하여클릭한사용자를바로공격한다. 즉사용자는악성스크립트가포함된링크를클릭한순간바로악성스크립트가사용자의브라우저에서실행된다. 반사 XSS 공격은이메일메세지또는다른웹사이트와같이다양한경로로피해자시스템에게전달된다. 일반적인반사 XSS 공격단계는다음과같다. 1) 공격자는먼저 A사이트에 XSS 취약점이있는것을발견한다. 2) 민감한정보를획득할수있는공격용악성 URL 을생성한다. 3) 공격자는이 URL 을이메일메시지에포함하여배포한다. 4) 피해자가 URL 을클릭하면, 바로공격스크립트가피해자로반사되어 A 사이트에관련된민감한정보 (ID/ 패스워드, 세션정보 ) 를공격자에게전송한다. [ 그림 8] 반사 XSS 공격방법 76 Internet & Security Focus 2013 11 월호
3) DOM 기반 XSS 공격 DOM(Document Object Model) 이란 W3C 표준으로 HTML 및 XML 문서에접근방법을표준으로정의하는문서객체모델이다. W3C 9) 에서는 DOM 을 프로그램및스크립트가문서의컨텐츠, 구조및형식을동적으로접근및업데이트할수있도록하는언어중립적인인터페이스이다 라고정의되어있다. DOM은 HTML 문서를계층적으로보면서컨텐츠를동적으로변경할수있다. DOM 기반 XSS 공격은 2005 년에처음으로아밋클라인 (Amit Klein) 이관련취약점논문을발표하면서알려졌다. 피해자의브라우저가 HTML 페이지를구문분석할때마다공격스크립트가 DOM 생성의일부로실행되면서공격한다. 페이지자체는변하지않으나, 페이지에포함되어있는브라우저측코드가 DOM 환경에서악성코드로실행된다. 앞에서다룬저장 XSS 및반사 XSS 공격의악성페이로드가서버측애플리케이션취약점으로인해, 응답페이지에악성스크립트가포함되어브라우저로전달되면서공격하는것인반면, DOM 기반 XSS 는서버와관계없이브라우저에서발생하는것이차이점이다. FOCUS [ 그림 9] DOM 기반 XSS 공격방법 9) W3C : World Wide Consortium 으로웹의창시자팀버너스리가웹표준을제정하기위해만들비영리재단 Internet & Security Focus 2013 11 월호 77
FOCUS 일반적으로 DOM 기반 XSS 취약점있는브라우저를대상으로조작된 URL 을이메일을통해 사용자에게전송하면, 피해자는이 URL 링크를클릭하는순간공격피해를입게된다. <HTML> <TITLE>Welcome!</TITLE> Hi <script> var pos=document.url.indexof("name=")+5; document.write(document.url.substring(pos,document.url.length)); </script> <br> Welcome to our system This demo borrowed from http://www.webappsec.org/projects/articles/071105.shtml </HTML> [ 그림 10] DOM 스크립트 [ 그림 10] 과같이개발된 DOM 페이지의 name 변수에아래와같이변수를입력하면 (http:// www.server.com/page.html?name=david) 정상적으로동작한다. 하지만, DOM 기반 XSS 공격을위해서 [ 그림 11] 와같이입력을하면, 브라우저에서 <script> 의내용이실행되게된다. http://www.server.com/page.html?name=<script>alert(document.cookie)</script> [ 그림 11] DOM 기반 XSS 공격 URL 아래 [ 그림 12] 는 DOM 기반 XSS 공격을예방기법을회피하기위한방법으로브라우저에서 # 문자뒤에있는값을서버로전송하지않는것을이용하지만, 브라우저에서는동일하게 실행이된다. 78 Internet & Security Focus 2013 11 월호
http://server/page.html?name=david#<script>alert(document.cookie)</script> FOCUS [ 그림 12] DOM 기반 XSS 공격예방우회 URL 3. XSS 공격의피해 본고에서언급한 <script>alert(document.cookie)</script> 스크립트는쿠키값을출력하는 악성스크립트이지만, 본스크립트대신다양한공격용코드로대체하면쿠키정보및세션정보 획득, 클라이언트프로그램해킹등다양한방법으로클라이언트시스템을공격할수있다. 1) 쿠키정보 / 세션 ID 획득쿠키란웹서버가 HTTP 헤더중 Set-Cookie 필드로브라우저에게보내는 4KB 이하의작은텍스트파일이며, 사용자가웹사이트를이용하는동안사용자브라우저에저장된다. 사용자가웹사이트의페이지를클릭할때마다브라우저는웹서버에게사용자의상태를다시알려준다. 사용자상태를기록하기위해쿠키값에로그인, 버튼클릭등에대한정보를저장한다. 세션쿠키는사용자가웹사이트를읽거나방문하는동안에만임시로메모리에존재하는쿠키이다. 쿠키생성시쿠키만료시기또는유효성기간이설정되어있지않은경우에세션쿠키가만들어진다. 브라우저에서는사용자가브라우저를종료하면세션쿠키를삭제한다. 웹애플리케이션이세션 ID를쿠키에포함하는경우 XSS 공격을통해, 클라이언트의합법적인세션 ID를획득하여불법적으로정상사용자로가장할수있다. 2) 시스템관리자권한획득 XSS 취약점을이용하여사용자브라우저취약점을공격하여 PC를완전히통제할수도있다. 공격자는 XSS 취약점있는웹서버에다양한악성데이터를포함시켜놓은후, 사용자의브라우저가악성데이터를실행하는경우자신의브라우저있는제로데이취약점또는패치되지않은취약점을공격하는공격코드가실행되면서사용자시스템을완전히통제할수있다. 회사등조직의개인의 PC가해킹되는경우, 조직의내부시스템으로이동하여내부의중요정보를탈취하는공격으로이어질수있다. Internet & Security Focus 2013 11 월호 79
FOCUS 3) 악성코드다운로드 XSS 공격은악성스크립트자체로만으로는악성프로그램을다운로드할수없지만, 사용자가악성스크립트가있는 URL 을클릭하도록유도하여악성프로그램을다운로드받는사이트로리다이렉트 (redirect) 하거나, 트로이목마프로그램을다운로드하여설치할수있다. Ⅲ. XSS 취약점예방기술 XSS 취약점은쉽게악용될수있으며, 공격효과도커공격자들이자주이용하는기술이다. 많은조직에서 XSS 공격을대응하기위해웹방화벽 (WAF) 을도입하여방어를하고있으나, 대부분의웹방화벽은시그너쳐기반의 XSS 공격만을탐지하고있다. 하지만특정문자열을탐지하는기술은쉽게우회가가능하여방어가효과적이지는못하다. 또한웹애플리케이션개발자는 <script> 태그등브라우저에서실행되는위험한문자를중성화하여 XSS 취약점을예방하고있다. 하지만웹개발자들이일일이수동적으로위험한문자를필터링및인코딩하는것은현실적으로불가능하며, 취약점이잔존하게된다. 이러한방식으로인해중소및대형웹사이트등에서 XSS 취약점이지속적으로발견되고있다. 1. 입 출력값검증및무효화 XSS 취약점을근본적으로제거하기위해서는스크립트등해킹에사용될수있는코딩에사용되는입력및출력값에대해서검증하고무효화시켜야한다. 입력값에대한유효성검사는데이터가입력되기전에가능하면, 입력데이터에대한길이, 문자, 형식및사업적규칙유효성을검사해야한다. 출력값을무효화하기위해서는 XSS 공격은기본적으로 <script> 태그를사용하기때문에 XSS 공격을차단하기위해태그문자 (<, >) 등위험한문자입력시문자참조 (HTML entity) 로필터링하고, 서버에서브라우저로전송시문자를인코딩하는것이다. HTML 문자참조란 ASCII 문자 10) 를동일한의미의 HTML 문자로변경하는과정이다. 예를들어, 문자 < 는동일한의미의 10) ASCII(American Standard Code for Information Interchange) 문자는컴퓨터에서사용되는문자의코딩값이다. 80 Internet & Security Focus 2013 11 월호
HTML < 로변경한다. HTML 엔터티는대부분의인터프리터 ( 특히, 브라우저 ) 에서특수한의미를가지지않으며, 단순한문자로처리된다. 이렇게인코딩하면사용자는 <script> 가 <script> 로보이지만 HTML 문서에서는 <script> 로나타나서브라우저에서일반문자로인식하고스크립트로해석되어실행되지는않는다. FOCUS ASCII 문자 참조문자 ASCI 문자 참조문자 & & " " < < ' ' > > / / ( ( ) ) [ 그림 13] 위험문자인코딩 [ 그림 13] 은 HTML 문서에서악성스크립트에포함되어브라우저에서실행될수있는문자와대체문자를정리한것이다. 악성스크립트는많은 HTML 태그안에포함을할수있으므로반드시 [ 그림 13] 에있는위험문자의경우출력값을이스케이핑해야한다. CSS 의 DIV 엘리먼트에다음과같이악성자바스크립트를숨길수있다. <DIV STYLE="background-image: url(javascript:alert(document.cookie))"> 그래서 HTML 속성 (attributes) 에들어가는값도 &#xhh (HH 는 16진수값 ) 으로반드시인코딩해야한다. 아이프레임의경우다음과같이악성 URL 을포함시켜악성자바스크립트가포함된페이지를사용자가읽으면서브라우저를공격할수있다. <iframe src=" 악성 URL" width="0" height="0" frameborder="0"></iframe> [ 그림 14] 는악성스크립트등악성데이터를포함되어브라우저를공격할수있는다양한방법의 HTML 태그를정리해놓은것이다. 여기에있는 악성데이터. 악성 URL 및 악성 HTML 악성자바스크립트등이포함이될수있는곳이다. 즉웹애플리케이션개발자들은웹문서를코딩시 [ 그림 14] 에있는태그에포함될악성데이터에대해서반드시입 출력값을검증해야한다. Internet & Security Focus 2013 11 월호 81
FOCUS 데이터형식콘텍스트코딩예방어책 String( 문자열 ) HTML Body <span> 악성데이터 </span> HTML Entity 인코딩 String( 문자열 ) 안전한 HTML Attributes String( 문자열 ) GET 파라미터 String( 문자열 ) String( 문자열 ) String( 문자열 ) SRC 또는 HREF 속성에악성 URL CSS 값 자바스크립트변수 <input type="text" name="fname" value=" 악성데이터 "> <a href="/site/search?value= 악성데이터 ">clickme</a> <a href=" 악성 URL">clickme</a> <iframesrc=" 악성 URL" /> < d i v s t y l e = " w i d t h : 악성데이터 ;">Selection</div> <script>var currentvalue=' 악성데이터 ';</ script> <script> 함수 (' 악성데이터 ');</script> HTML HTML Body <div> 악성 HTML</div> String( 문자열 ) DOM XSS <script>document.write(" 악성입력값 : " + document.location.hash);<script/> HTML Entity 인코딩 악성데이터를화이트리스트방식또는안전한속성에만위치 background, id 및 name 과같은안전하지않은속성을철저히검증 URL 인코딩 입력값정규화 URL 검증 URL 안전성확인 화이트리스트된 http 및 https URL 만허용 ( 새로운창을열기위해자바스크립트프로토콜사용금지 ) 속성인코더사용 엄격하게구조적검증 CSS 16진수인코딩 CSS 기능설계강화 자바스크립트변수를문자화 자바스크립트헥스인코딩 자바스크립트 16진수인코딩 자바스크립트유니코드인코딩 백슬래쉬 (\", \' 또는 \\) 사용금지 HTML 검증 (JSoup, AntiSamy, HTML Sanitizer) DOM 기반 XSS 예방 [ 그림 14] XSS 예방기법 하지만애플리케이션개발자가많은태그의입력문자를검증하기위해코딩시일일이작업하는것은많은노력과자원이소모된다. 또한인코딩방식을통해방어기술을무력화할수있으므로애플리케이션개발자직접모두처리하는것은근본적으로불가능하다. 그래서입 출력값을자동적으로검증해주는라이브러리를사용하면좀더효과적으로대응할수있다. 82 Internet & Security Focus 2013 11 월호
2. 보안라이브러리 FOCUS 1) AntiXSS AntiXSS 라이브러리는마이크로소프트사에서개발한공개용 XSS 취약점예방라이브러리이다. AntiXSS 라이브러리는 ASP.net 애플리케이션개발환경에서사용되며, 현재 ASP.net 4.5 이후버전에만사용이가능하다. 이라이브러리는입력값을검증하여서버로악성스크립트로입력되지못하는기능과위험한문자를인코딩하는함수를제공한다. [ 그림 15] 은 AntiXSS 에서제공하는위험한데이터를출력시인코딩해주는메소드이다. 메소드사용처코딩예 HtmlEncode HtmlAttrEncode UrlQueryEncode JavaScriptEncode XmlEncode XmlAttrEncode GetSafeHtml 신뢰할수없는데이터가 HTML 바디부분에출력되는경우 HTML 속성 (attributes) 에신뢰할수없는데이터를추가해야하는경우 URL 내에쿼리문자열값에신뢰할수없는데이터를추가해야하는경우 신뢰할수없는데이터를자바스크립트변수에지정할경우 XML 데이터부분에신뢰할수없는데이터를출력하는경우 XML 속성값에신뢰할수없는데이터를추가해야하는경우 HTML 바디에신뢰할수없는 HTML 을출력하는경우 <span>[ 악성데이터 ]</span> <p>hello [ 악성데이터 ]</p> <input type="text" name="fname" value="[ 악성데이터 ]"> <p id="[ 악성데이터 ]"></p> <a href="/site/search?value=[ 악성데이터 ]"> clickme</a> JavaScriptEncode <script>var currentvalue='[ 악성데이터 ]';</script> <script>somefunction('[ 악성데이터 ]');</script> <name>[ 악성데이터 ]</name> <name firstname="[ 악성데이터 ]"></name> <div>[ 악성 HTML]</div> [ 그림 15] AntiXSS 의 XSS 예방인코딩메소드 2) OWASP ESAPI 라이브러리 OWASP 는포괄적인애플리케이션보안을위해웹응용취약점을대응할수있는오픈소스 ESAPI 라이브러리를개발하여제공하고있다. ESAPI 에는총 14개의 API 가있으며, 이중 XSS 취약점을예방하기위해 API 는 validator 와 encoder 가있다. validator 는입력값을필터링하는기능을하고있으며, encoder 는출력값을인코딩및디코딩기능을가지고있다. 이라이브러리는자바, PHP,.NET, ASP, 자바스크립트및파이썬등다양한애플리케이션개발언어를지원하고있다. Internet & Security Focus 2013 11 월호 83
FOCUS 3. 브라우저확장프로그램애플리케이션개발시이용하는라이브러리이외에도사용자가 XSS 공격을예방할수있는프로그램도있다. NoScript 는파이어폭스등모질라기반의브라우저에서실행되는오픈소스확장프로그램으로, 화이트리스트기반으로신뢰된사이트의자바스크립트, 플래쉬, 실버라이트및액티브 X 등동적스크립트만브라우저에서실행하도록하여 XSS 공격을예방할수있다. Ⅳ. 결론 본문서에서는많은웹사이트에서발견되고있고, 활발하게공격에이용되는 XSS 취약점, 공격방법및취약점제거방법에대해서살펴보았다. XSS 취약점은문제가되고있는악성 URL 배포를통해 PC를해킹하는데자주사용될뿐만아니라, 피싱문제, 인증데이터획득등으로사용자및조직에심각한위험을초래할수있다. 개발단계에서 XSS 취약점을제거하지않고서는다양한 XSS 형태의공격과우회공격을방어하기는힘들다. XSS 취약점을근본적으로해결하기위해서는애플리케이션개발단계에서위험한데이터입 출력을검증하고인코딩하는방법을선택해야한다. 또한각조직에서는 XSS 취약점을효과적으로제거하기위해웹애플리케이션및소프트웨어개발시공개된다양한오픈소스라이브러리를조직에맞게사용하여 XSS 취약점을근본적으로제거하는노력과투자가필요하다. 참고문헌 심재홍, 금융소비자를위협하는악성코드위협사례분석, 인터넷시큐리티포커스 5월호, 한국인터넷진흥원 2013. 5월 OWASP Top 10 2013 가장심각한웹애플리케이션보안위험 10가지, OWASP 재단, 2013 년 8월웹해킹사고통계, The Web Application Security Consortium, 2013 년 11월 SANS 연구소 /MITRE, SANS/CWE 가장위험한 25 大소프트웨어오류, 2010 년 6월 OWASP 재단, XSS (Cross Site Scripting) Prevention Cheat Sheet 마이크로소프트, Anti-Cross Site Scripting Library V4.2, 마이크로소프트 OWASP 재단, OWASP Enterprise Security API 84 Internet & Security Focus 2013 11 월호