네이버플래시애플리케이션 XSS 취약점분석보고서 작성일 2013/04/24 작성자 카이스트시스템보안연구실 홍현욱 (karmatia@kaist.ac.kr) 최현우 (zemisolsol@kaist.ac.kr) 김용대 (yongdaek@kaist.ac.kr) 요약 플래시애플리케이션은보고서작성일을기준으로전체웹사이트의 19.5% 가사용하고있으며 [5] 이러한플래시애플리케이션을작동시켜주는플래시플레이어는웹브라우저에기본적으로설치되어있거나웹브라우저에서웹사이트를이용하는사용자들에게자동으로설치하도록유도한다. 따라서웹사이트에서서비스되고있는플래시애플리케이션은대부분의사용자들에게작동된다. KAIST 시스템보안연구실에서는플래시애플리케이션의 XSS 취약점에대하여연구를수행하였으며, 그결과네이버에서서비스하고있는플래시애플리케이션중 XSS 공격에취약한플래시애플리케이션을발견하였다. 이러한플래시애플리케이션은외부로부터입력되는입력값을검증없이사용하고있었으며, 공격자는이를이용하여공격스크립트를입력하여 XSS 공격을시도할수있다. 이공격으로공격자는사용자세션탈취, 광고사이트나성인사이트로이동, 악성코드설치등다양한공격을할수있게된다. 본보고서에서는네이버에서서비스하고있는플래시애플리케이션중 XSS 공격에취약한플래시애플리케이션에대한상세분석내용과더불어실제발생가능한공격시나리오를제시하였다. 공격시나리오에서도확인할수있듯이이러한플래시애플리케이션을이용한 XSS 공격은기존의 XSS 공격과달리하이퍼링크 (a태그) 를사용할수있는모든곳에서공격이가능하기때문에그파급력또한클것으로예상된다. 예를들어보인 XSS 공격에취약한플래시애플리케이션은네이버에서서비스되고있는플래시애플리케이션의일부분을대상으로하여찾아낸것이며실제로는 XSS 공격에취약한플래시애플리케이션이더많이존재한다. 이러한플래시애플리케이션을검색하여 XSS 공격에취약하지않도록수정되어야할것이다. 2013 년 04 월 24 일 1
설명 Description 상세정보 네이버에서운영하는서비스중하나인쥬니어네이버 ( 이하쥬니버 ) 에서는쥬니버서비스와 관련하여도움을주기위한 [ 그림 1] 과같은플래시애플리케이션이서비스되고있다.[2] [ 그림 1] 쥬니어네이버에서서비스중인쥬니버도우미플래시애플리케이션 해당플래시애플리케이션을마우스로클릭하게되면 [ 그림 2] 와같이쥬니버도우미웹사이 트로이동하게된다. [ 그림 2] 쥬니버도우미플래시애플리케이션클릭후이동한사이트 2013 년 04 월 24 일 2
이것은 [ 그림 1] 에서서비스되고있는쥬니버도우미플래시애플리케이션내부의 ActionScript(2.0 Ver.) 에의해쥬니버도우미웹사이트로이동하게된것이다. [ 그림 1] 의웹사이트에서서비스되고있는쥬니버도우미플래시의경우해당웹사이트소스코드를살펴보면 [ 그림 3] 과같이서비스되고있음을알수있다. [ 그림 3] 쥬니버도우미플래시애플리케이션이웹사이트에서서비스되고있는형태 [ 그림 3] 의소스코드에서쥬니버도우미플래시애플리케이션의링크주소는 http://flash.jr.naver.com/help/right_gameland.swf 이며이플래시애플리케이션이사용하는파라미터는 linkaddr=http%3a%2f%2fhelp.jr.naver.com%2frenew%2fexselffaqs_simp.asp%3f category_id%3dcate20051123000036 와 target=_blank 임을알수있다. 여기서파라미터 linkaddr의값은실제로쥬니버도우미플래시애플리케이션을실행하였을때이동하였던웹사이트이다. 해당플래시애플리케이션의동작을자세히알기위해플래시애플리케이션파일 ( 이하 swf 파일 ) 을 decompile하여 ActionScript를분석하였다. decompile을위한 decompiler는 Trillix사의 Flash Decompiler 5를사용하였다.[3] decompile 후플래시애플리케이션의동작과관련된 ActionScript 코드는 [ 그림 4] 와같다. [ 그림 4] swf 파일 decompile 결과 [ 그림 4] 에서확인할수있듯이쥬니버도우미플래시애플리케이션은 geturl 함수를이용하고있음을알수있다. geturl 함수는특정 URL의문서를임의의윈도우로로드하거나정의된 URL의다른응용프로그램에변수를전달한다. 또한 swf 파일 ( 플래시애플리케이션 ) 및포함하는웹페이지가로컬에서신뢰할수있는보안샌드박스에있는경우 javascript를실행할수있다.[4] 여기서 URL은앞서살펴보았던파라미터 linkaddr의값인쥬니버도우미웹사이트이며파라미터 target의값인 _blank 는새로운창에서해당 URL을로드하게함을 2013 년 04 월 24 일 3
알수있다. 하지만각파라미터값은 ActionScript 내부의값이아닌외부의입력값이사용되고있으며이는임의의사용자에의해바뀔수있다. [ 그림 5] 는쥬니버도우미플래시애플리케이션의파라미터값을사용자임의로바꾸어입력한다음크롬웹브라우저에서실행한결과이다. [ 그림 5] 플래시애플리케이션에임의의입력값을입력후실행 앞서살펴보았듯이 geturl 함수는자바스크립트를실행할수있고, geturl 함수의파라미터입력값은외부에서입력할수있다. 따라서파라미터 linkaddr의값을 javascript:alert( xss ) 로설정하여 ( http://flash.jr.naver.com/help/right_gameland.swf?linkaddr=javascript:alert('xss') ) 플래시애플리케이션을작동시켜 [ 그림 5] 와같은결과를얻을수있었다. 이러한취약점은플래시애플리케이션에서사용하는입력값을사용자가임의로입력을할수있다는점에서발생한다. 이로인해, 공격자는 XSS 공격을시도할수있고이공격으로공격자는사용자세션탈취, 광고사이트나성인사이트로이동, 악성코드설치등다양한공격을할수있게된다. 2013 년 04 월 24 일 4
공격시나리오해당공격시나리오는 XSS 공격으로가능한여러가지시나리오중일반적이며파급력이큰 사용자쿠키탈취를통한사용자세션획득 을진행한다. 공격은다음과같은과정으로진행된다. 1) 자동화툴을이용한취약한플래시애플리케이션검색 2) 공격자스크립트가입력된플래시애플리케이션 URL을사용자들이많이접근할수있는곳에업로드 3) 사용자들로부터플래시애플리케이션작동유도, 쿠키탈취 4) 탈취한쿠키로사용자세션획득 시나리오테스트환경 사용자 (Victim) 웹브라우저 : Chrome 26.0.1410.64 ( 작성일기준최신버전 ) 시나리오세부내용 1) 자동화툴을이용한취약한플래시애플리케이션검색 FlashOver[1] 에서는 XSS에취약한플래시애플리케이션을찾기위해 altavista와같은검색엔진을이용하여검색엔진에서제공해주는 swf 파일을 decompile하여사용자입력값이 geturl과같은함수에입력될수있는지분석한다. 이와비슷한방법으로실제서비스중인사이트 (http://www.naver.com) 를크롤링하여 swf 파일을찾아이파일의 action tag를파싱하여사용자입력값이 geturl과같은자바스크립트가실행될수있는함수에입력될수있는지분석한다. 이러한방법으로 [ 그림 1] 에서서비스되고있는쥬니버도우미플래시애플리케이션을찾아낼수있었다. 해당플래시애플리케이션의위치는다음과같다. - http://flash.jr.naver.com/help/right_gameland.swf - http://flash.jr.naver.com/help/right_farm.swf 2) 공격자스크립트가입력된플래시애플리케이션의 URL을사용자들이많이접근할수있는곳에업로드사용자의세션을획득하기위해서는로그인된사용자의쿠키가필요하므로로그인한사용자들만접근할수있는카페나블로그에플래시애플리케이션 URL을업로드하는것이공격에효과적일수있다. [ 그림 6] 은공격자가블로그에공격자의스크립트가입력된플래시애플리케이션을입력하는모습이다. 카페나블로그에서는 XSS 공격을막기위해자체적으로필터링루틴을거치게되어있지만하이퍼링크를사용하기위한 a태그는허용하게되어있다. 이를통해공격자는공격스크립트가입력된플래시애플리케이션의 URL을업로드할수있다. 사용자가클릭하기전보이는링크의내용은공격자가임의로정할수있기때문에공격자입장에서사용자를속이기는더욱쉽다. [ 그림 7] 은블로그에플래시애플리케이션의 URL이등록된모습이다. 2013 년 04 월 24 일 5
[ 그림 6] 공격스크립트가입력된플래시애플리케이션 URL 업로드 [ 그림 7] 플래시애플리케이션 URL 을사용자에게노출 이렇게사용자들에게 URL 을노출하여사용자들로하여금공격스크립트가입력된플래시애 플리케이션을작동시키도록유도한다. 3) 사용자들로부터플래시애플리케이션작동유도, 쿠키탈취 앞서공격자가노출시켜놓은 URL 을사용자가클릭하게되면 [ 그림 8] 과같이플래시애플 리케이션이웹브라우저에로딩된다. [ 그림 8] 웹브라우저에로딩된플래시애플리케이션 2013 년 04 월 24 일 6
해당플래시애플리케이션은네이버도메인 (flash.jr.naver.com) 에서서비스되기때문에사용자입장에서는의심을하지않으며공격자입장에서는네이버에사용되는사용자의쿠키를탈취할수있다. 이플래시애플리케이션을클릭하여작동시키면사용자의쿠키는공격자의서버에전송되게된다. [ 그림 9] 는공격자의서버에전송된사용자의쿠키를보여준다. [ 그림 9] 공격자의서버에전송된사용자의쿠키내용 4) 탈취한쿠키로사용자세션획득탈취한쿠키를 paros 등의웹프록시툴을이용하여네이버에접속을시도한다. [ 그림 10] 은탈취한쿠키를이용하여사용자의세션을획득한화면이다. [ 그림 10] 탈취한쿠키를이용하여사용자의세션획득 2013 년 04 월 24 일 7
획득한사용자의세션으로메일을제외한대부분의서비스 ( 카페, 블로그, N 드라이브등 ) 를 이용할수있음을확인하였다. 해결방안 1) 사용자의외부입력값확인해당취약점은자바스크립트가실행될수있는함수 (geturl 등 ) 에사용자의외부입력값이검증없이쓰일수있다는점에서발생하였다. 이는플래시애플리케이션개발단계에서이러한 XSS 공격에대한고려가되지않아발생하는문제이다. 따라서플래시애플리케이션을개발할시에는되도록이면외부입력값을받아서처리하지않도록개발을진행하고, 필요에따라외부입력값을받아처리해야한다면반드시외부입력값검증루틴을거쳐서입력값을사용하도록한다. 2) 외부입력값감싸기해당공격은공격자가입력할수있는외부입력값부분이웹소스에노출되어있어공격자입장에서취약한플래시애플리케이션을찾기쉽다. 따라서외부입력값부분이노출되어있는플래시애플리케이션의경우아래와같이로딩해주는부분을따로만들어주면외부입력값부분이웹소스에서노출되지않게된다. 하지만이러한방법도플래시애플리케이션을디컴파일하여소스를분석하게되면취약점이노출될수있으며해당소스코드를난독화하더라도공격자에의해난독화가해제될수있으므로완벽한해결방법은아니다. Security.allowDomain("*"); var request:urlrequest = new URLRequest("http://flash.jr.naver.com/help/right_gameland.swf?linkAd dr=http%3a%2f%2fhelp.jr.naver.com%2frenew%2fexselffaqs_simp.asp%3fcategory_id%3dcate20 051123000036&target=_blank"); var loader:loader = new Loader(); loader.load(request); addchild(loader); 3) httponly cookie 사용 cookie의속성을 httponly로설정하면스크립트 (javascript:document.cookie) 에의해쿠키가노출되는것을막을수있으며다른포탈사이트이 DAUM은이를적용하고있다. 하지만이것은자바스크립트에의한 1차적인쿠키노출을막을수있을뿐이지 MS silverlight, Adobe Flash, Java applet 등을이용한방법으로우회가가능하다. 또한 XSS 공격은쿠키탈취뿐만아니라성인 / 광고사이트로이동, 악성코드설치등여러공격이가능하고이러한공격들은이방법으로막을수없다. 본보고서에서예를들어보인 XSS 공격에취약한플래시애플리케이션은네이버에서서비스되고있는플래시애플리케이션의일부분을대상으로하여찾아낸것이며실제로는 XSS 공격에취약한플래시애플리케이션이더많이존재한다. 또한외부에위치한플래시애플리케이션을네이버에서서비스하는경우도많은데이경우네이버쿠키탈취가가능하지는않지만여전히 XSS 공격에취약한경우도많다. 이러한플래시애플리케이션들은수정되어야할것이다. 2013 년 04 월 24 일 8
참고문헌 [1] Van Acker, Steven and Nikiforakis, Nick and Desmet, Lieven and Joosen, Wouter and Piessens, Frank. FlashOver: Automated discovery of cross-site scripting vulnerabilities in rich internet applications. In Proceedings of the 7th ACM Symposium on Information, Computer and Communications Security, 2012 [2] http://farm.jr.naver.com, http://game.jr.naver.com/game/?mode=cloth [3] Flash Decompiler 5 Trillix, http://www.flash-decompiler.com/ [4] http://help.adobe.com/ko_kr/as2lcr/flash_10.0/help.html?content=00000569.html [5] http://w3techs.com/technologies/details/cp-flash/all/all 2013 년 04 월 24 일 9