Web Proxy 와 Paros, Odysseus 사용법 By poc@securityproof.net
차례 1. web proxy 란무엇인가? 2. Paros 소개 2-1. 설치및기본설정 2-2. Paros 의기능 2-3. Paros 를이용한웹해킹의예 3. Odysseus 3-1. 설치및기본사용방법 3-2. Odysseus 를이용한웹해킹의예
1. web proxy란무엇인가? 이글에서는해킹과보안의관점에서웹프록시프로그램들을소개할것이다. 소개할프로그램은 Paros 1 와 Odysseus 2 이며, 이미많이들사용하고있지만아직정확한사용법을알지못해그기능을제대로활용하지못하고있는경우도있다. Paros는기능의다양성때문에, Odysseus는사용의용이성때문에선택하였으며, 둘다오픈프로그램이라는장점이있다. 일반적으로웹클라이언트 ( 보통 IE나 Fire Fox와같은웹브라우저 ) 는 POST나 GET 등의방식을통해데이터를웹서버로보내며 (request), 웹서버는클라이언트의요청을처리하여그결과를웹클라이언트로보내준다 (response). 이때웹클라이언트에서데이터를보내면그데이터는특별한수정없이웹서버로보내진다. 웹서버에서처리한결과를클라이언트에보낼때도마찬가지다. Web client Web server (request) Web client Web server (response) 우리가지금다루려고하는웹프록시는웹클라이언트와웹서버사이에위치한다. 웹프록시가 중간에위치하여웹클라이언트에서보내지는데이터를웹프록시가받아웹서버로중개한다. 웹 서버에서웹클라이언트로보낸데이터도마찬가지로웹프록시를거치게된다. Web client Web proxy 프로그램 Web server Web client Web proxy 프로그램 Web server 웹프록시프로그램을해킹과보안의관점에서다루는것은웹프록시프로그램에서웹서버로보내지는데이터를수정하여보낼수있기때문이다. 정상적인상태에서는데이터릴레이과정에서데이터를수정할수없다. 그러나웹프록시프로그램을사용하면웹서버로데이터가전달되기전에웹클라이언트를이용해보내진데이터를수정할수있고, 수정된데이터를서버에전달하게된다. 1 http://www.parosproxy.org 2 http://www.bindshell.net/tools/odysseus
이는보안의입장에서보면큰문제가아닐수없다. 웹프록시를이용하여웹클라이언트에서전달된 데이터를웹서버로보내지기전에수정하는한가지예를들어보자. Hackthissite 3 의웹해킹레벨 10 문제를보자. 이문제는인증우회관련문제이며, 웹프록시를이용해풀수있는문제이다. *************************************************************************** *************************************************************************** 이문제는 cookie 를조작하는문제이다. 여기서는 Odysseus 를사용할것이다. 자세한사용법은나중 에설명할것이다. 먼저 submit 버튼을누르면다음과같은창이뜬다. 3 http://www.hackthissite.org/
위의결과는웹클라이언트에웹서버로보낸데이터이다. 이데이터를웹프록시가중간에서임시로받은것이다. 이데이터를수정없이웹서버로보낼수도있지만해커는데이터의조작을위해웹서버로보내질데이터를수정할수있다. 웹서버로보내질데이터중에서는인증관련내용이나오는데, Cookie: level11_authorized=no; 이부분을다음과같이 Cookie: level11_authorized=yes; 로수정하여웹서버로보낸다. 그러면레벨11로로그인하게되는것이다. 그리고 Ok 버튼을눌러데이터를서버로보낸다. 데이터가서버에보내지면다음과같이성공했다는 메시지가떤다. 웹프록시프로그램을이용하면쇼핑몰가격조작등다양한웹해킹이가능하다. 이글은웹해킹을직접다루는것이아니라웹프록시프로그램을소개하는것이주목적이다. 따라서여기서위의문제풀이과정을자세하게설명하지는않을것이다. 그리고알아본 hackthissite의문제는아주기본적인수준의문제라서별도의설명이필요하지않을것이다. 중요한것은웹프록시프로그램을이용해웹서버로전달되는인증관련정보등을포함하여각종 데이터를수정및조작할수있다는것이다.
2. Paros 소개 Paros는웹어플리케이션의보안을점검하기위해사용하는웹프록시툴이다. 무료로사용할있으며, Java로만들어졌다. 그래서 Paros를제대로사용하기위해서는 Jave JRE 또는 JDK 1.4.2 또는그이상버전이설치되어있어야한다. Paros를이용하여쿠키와 form field를포함하여서버와클라이언트사이의 HTTP와 HTTPS 데이터를가로챌수있고, 수정될수있다. 2-1. 설치및기본설정 1. Java Run Time Enviroment (JRE) 최신버전이설치되어있는지확인한다. 설치되어있지 않다면 http://java.sun.com/javase/downloads/index.jsp 로가서다운받아설치한다. 2. Paros 를 http://www.parosproxy.org/download.shtml 에서다운받아설치한다. 3. Windows용의경우설치프로그램의명령을따른다. 설치가완료되면바탕화면에 shortcut가생성된다. UNIX 또는다른플랫폼의경우새로운디렉토리에압축을풀고,.jar 파일을클릭하거나명령프롬프트에 'javaw -jar paros.jar' 를타이핑하여실행한다. 개인 Unix 사용자의경우 root만사용할수있도록퍼미션을조정한다. 4. 이제 Paros를설정해야한다. Paros는두개의포트를사용한다. 프록시연결을위해서 8080을, 내부 SSL 핸들링을위해서 8443을사용한다. 그래서 Paros를사용할때는이두포트가다른어플리케이션에의해사용되지않도록해야한다. 물론 "Tools" 의 "Options" 태그를누른후 Local proxy 섹션의 Port(eg 8080) 부분을눌러기본포트를변경할수있다.
5. IE 와같은웹브라우저를열고, LAN 설정을다음과같이한다. 8443 포트는 Paros 그자체에의해사용되는것이며, 웹브라우저가사용할것은아니다. 그래서이부분에대해서는신경쓸필요가없다. 웹브라우저의 LAN 설정을이렇게설정하는것은번거로울수있다. 그래서이번거로움을피하기위해사용할수있는툴이있다. 그툴은 Cooxie 툴바이다. Cooxie toolbar는 http://www.diodia.com/cooxietoolbar.htm에서다운받을수있다. Cooxie 툴바를설치하면웹브라우저에다음과같이표시된다. 이를잘이용하면웹브라우저의 LAN 설정을이용할필요가없다. 다음은 Cooxie Toolbar 를이용한 프록시서버를위한포트설정과정이다. 먼저다음 Cooxie 부분을클릭한다.
클릭하면 Proxy Servers 를클릭한다. 그럼다음과같은화면이나타난다. 여기서 Add 를클릭한후다음과같이설정한후 OK 를클릭한다. Local proxy 섹션의 Port 를 8080 에서다른것으로수정하였다면그번호를입력하면된다. 설정을하면다음과같이나온다.
그런후체크한부분에서 Proxy: 127.0.0.1:8080 를선택한다. Proxy:(none) 상태는웹프록시 프로그램을사용하지않는경우이다. 6. 만약 PC 가방화벽이면에서실행되고있어서사전에정의된프록시를거쳐인터넷에접근할수 있다면 Paros 에서프록시설정을변경할필요가없다. 이것은 4 번단계에서이미살펴본것이다. 이제설치및기본설정이모두끝났다. 2-2. Paros 의기능 Spider 기능 Spider는웹사이트를크롤링 (crawling, crawl이란단어는 천천히움직이다 4 라는뜻을가지고있는데, 여기서는타깃이되고있는사이트를전체를조사하며다니는것을의미한다 ) 해서가능한많은 URL 링크를수집하는것이다. 이기능을이용하면직접확인하기전짧은시간내에웹 4 Oxford Quick Reference Dictionary
사이트의링크계층구조를더잘이해할수있다. 그러나이글을작성하고있는현재버전 3.2.13 에서는 Spider 기능을제대로사용할수가없었다. 아직베타단계에서벗어나지못한것같다. Spider 에는다음과같은기능이있다 * 주어진 URL 에기반을둔 HTTP 와 HTTPS 웹사이트를크롤링 * cookie 지원 * Option 탭의 ProxyChain 필더에설정되어있는 proxy chaining 지원 (Skip 필더는 spider 기능에아무런영향을미치지않음 ) * 최근스캐닝에대해해당웹사이트의계층구조에자동으로 URL 링크를추가 그러나단순한 spider 기능이기때문에다음과같은한계가있다 : * 유효하지않은인증으로 SSL이지원되는웹사이트는크롤링이안된다. * 멀티쓰레드기능이지원되지않는다. * HTML에 malformed URL은인식될수없다. 또한자바스크립트로생성된 URL은이 spider 기능을이용해서찾을수없다. 하지만이런 URL은수작업으로통해서찾아내고, 계층구조에추가하면된다. Scanner 기능 scanner 기능은웹사이트계층구조에기반을둔서버를스캐닝하는것으로써, 서버설정에문제가있는지여부를점검할수있다. 이기능이 Paros에추가된것은일반적인웹스캐너들의크롤링엔진으로는어떤 URL 경로들의경우발견하거나점검할수없다는것이밝혀졌기때문이다. 예를들어, 어떤 URL 링크들은유효한로그온후에만볼수있다. 자동웹스캐너는경로들을찾아내지못하거나서버정보를노출시킬수있는백업파일 (.bak) 들이존재하는지여부를체크할수없을지도모른다. 이기능을사용하기위해웹사이트를먼저탐색할필요가있다. 어떤웹사이트에로그온하고탐색을한후웹사이트계층구조가자동적으로 Paros에의해만들어질것이다. 그런다음다음과같은것을할수있다 : * 만약계층구조에있는모든웹사이트들을스캐닝하고자한다면 Anaylse 의 "Scan All" 를클릭 * 계층구조트리의한웹사이트를스캐닝하고자원한다면 tree panel 에있는그사이트를오른쪽 마우스를클릭한후 "Scan selected Node" 를클릭 현재 Paros 는다음과같은점검기능을가지고있다 : * HTTP PUT 허용여부 PUT 옵션이서버디렉토리에서가능한지점검
* Directory index가능여부 서버디렉토리들을브라우징가능한지점검 * 오래된파일존재여부 쓸모없는파일들이존재하는지점검 * Cross-site scripting XSS이 request 파라미터에허용되어있는지점검 * websphere 서버에디폴트파일들존재여부 - websphere 서버에디폴트파일들이존재하는지점검 위의모든점검기능은웹사이트계층구조트리에있는 URL 에기초를두고있다. 이것은스캐너가 각 URL 에대해각각의취약점에대해점검한다는것을의미한다. 이것은웹사이트의계층구조에 대한고려가없는 blink scanning 과비교되는점이기도하다. Filter 기능 filter 기능을사용하는것은다음과같은목적이있다 : * HTTP 메시지에미리정의된패턴들을탐지하고알려주며, 그래서모든 HTTP 메시지를 trap 할 필요가없고, 원하는패턴만찾아보면된다. * 흥미로운부분의정보, 예를들어 cookie 의정보를로깅한다. Filter 가서버와 Paros 사이를오가는각 HTTP(S) 메시지를가로채어분석하기때문에모든필터 기능을활성화시키는것은 proxy 의속도를떨어뜨릴수있다. 그래서필요한필터기능만켜두는 것이좋다.( 기본적으로 LogCookie 필터가활성화되어있다.) 현재 Paros 는다음과같은 filter 기능을가지고있다 : * LogCookie: 브라우저에서서버로보내진모든받아들인쿠키들을로깅 * LogGetQuery: 브라우저에서보내진모든 HTTP(S) 의 GET 질의를로깅한다. get.xls 라는로그파일이 Paros 프로그램디렉토리에저장된다. * LogPostQuery: 브라우저에서보내진모든 HTTP(S) 의 POST 질의를로깅한다. post.xls 라는로그파일이 Paros 프로그램디렉토리에저장된다. * CookieDetectFilter: HTTP response의 Set-Cookie 시도를알리고, 수정할수있게한다. * IfModifiedSinceFilter: HTTP request의 'If Modified Since' & 'If None Match' 헤더필더들을제거한다. 이것은 HTTP 304 not modified 대신 HTTP 200 OK response를저장하는데사용될수있다. HTTP request 와 response Trapping 기능 Paros 는 HTTP(S) request/response 들을 trap( trap 이란단어는덫으로가두는것을의미하는데,
여기서는웹클라이언트가웹서버로보낸데이터를임시로 가두고 데이터수정을가능하게해준다는의미가있다.) 하여직접수정할수있다. Paros를통해전달되는모든 HTTP와 HTTPS 데이터는 trap되어수정될수있다. 이기능은웹해킹에서아주중요한부분이다. Paros를이용해데이터를조작하여웹서버에보낼수있다. 이와같은기능을 Odysseus를이용해 hackthissite의웹해킹문제를풀어본것을통해이미알아보았지만, Paros의이기능에대해서는뒤에서별도로살펴볼것이다. 1. Trap Request "Trap" 의 "Trap Request" 체크박스에체크를하면모든 request들은 trap된다. Header/Body의텍스트부분의내용을수정할수있으며, 그런다음 Continue 버튼을클릭한다. "Tabular View" 버튼이있는데, 이버튼은 "Trap Request" 에체크가되어있을경우에만사용될수있다. 그리고 Body 텍스트부분에텍스트가있는데, 이것은편집을쉽게하기위해 HTTP POST request를테이블 form으로변환하기위해사용된다. 파라미터들을수정한후에는 "Original View" 버튼을클릭하여업데이트된 request로이전스크린으로돌아갈수있다. 2. Trap Response "Trap" 탭의 "Trap Response" 를체크하면모든 response가 trap된다. Header/Body 텍스트부분의내용을수정할수있으며, "Continue" 버튼을클릭하여더실행한다. 여기서 "Tabular View" 버튼은소용없다. "Tabular View" 는 HTTP(S) POST 요청을 trap할때만유용하다. 기타다른기능들 앞에서언급된주기능들이외에도, Paros 에는몇가지기능들이있다 : * 클라이언트인증지원 - 어떤웹어플리케이션들은클라이언트인증을요구한다. 많은 man-in-themiddle 프록시들은이런상황에서는작동할수없다. 왜냐하면 handshaking 또는로그온을위한인증을저장할수없기때문이다. 필요한클라이언트인증정보를 handshaking 또는로그온바로직전에 Paros로가져옴으로써클라이언트인증을요구하는웹어플리케이션들의 HTTP 데이터를가로채수정할수있다. 이기능을사용하기위해 Tools -> Options -> Certificate 순으로이동하여 User Client Certificate 부분을체크한다. * 이동중인 HTTP request 와 response 를로깅한다. Response 시간도역시기록된다. * Base64, SHA1 및 MD5 를포함하여다른인코딩 / 해쉬포맷으로데이터를변환한다. 이기능은웹 보안을위해점점많은사이트들이웹방화벽을도입하여특정공격문자열에대한필터링을하고
있는상황에서유용한기능이다. 예를들어, 공격에사용되는특정태그를인코딩하여사용하며기본적인필터링의경우우회할수있게된다. 또한로깅과정에서이루어지는특정 signature 분석및탐지를우회하여웹방화벽같은것을무력화시킬수있다. 물론이를위해다른제3의인코딩 / 디코딩툴을사용해도상관없지만, 필요한기능이가까이에있다는것은좋은일이다. 보안의입장에서는인코딩된문자열까지도탐지하여필터링할수있어야한다. 이기능을사용하기위해서는 Tools -> Encoder/Hash를클릭하면변환을위한별도의창이떤다. 이것을이용하면우리가자주사용하는암호인코딩 / 디코딩을할수있다. 이상에서 Paros의다양한기능을살펴보았다. 앞에서설명된것을그냥눈으로머리로받아들이지말고직접테스트해보는것이이해를위해가장좋다. 모든기능에대해테스트를하면서도불법적인행위를하지않기위해워게임사이트를대상으로테스트를해보는것은좋은생각이다. 보안전문가들은보안을목적으로자신이관리하는사이트를테스트할수있을것이다. 앞에서는웹프록시프로그램 Odysseus 를이용한인증우회방법을간단하게알아보았는데, 이제 Paros 를이용해데이터를조작하는방법에대해알아보도록하겠다. 테스트는워게임사이트인 hackthissite 에서실시되었다. 2-3. Paros 를이용한웹해킹의예 다음은 hackthissite 의 Realistic Missions 레벨 1 문제이다. 이런종류의문제는실제웹해킹에서인 증우회와더불어웹프록시프로그램이가장많이사용되는분야중의하나일것이다. ***************************************************************************
*************************************************************************** 이문제는현재꼴찌인 Raging Inferno의순위를투표를통해 1위로올리는것이다. 정상적인경우라면한번밖에투표를할수없고, 투표시점수도 1점밖에줄수없다. 그러나웹프록시를거치면투표할수있는점수가 1점에국한되지않는다. 웹클라이언트에서는직접데이터를조작할수없지만웹프록시프로그램에서는데이터를조작할수있기때문이다. 먼저 Paros를실행하면다음과같이원래의데이터값 2.3141751857359가 trap 되어있다. 이문제의미션은 Raging Inferno 의순위를 1 위로만드는것이다. 현재 1 위의값은 Imposing Republic 의 23.107846155906 이다. 그렇다면 Raging Inferno 의값을 Imposing Republic 의값보다많 게만들면된다. Trap 된 Raging Inferno 의값을다음과같이 24.3141751857359 로수정하였다.
그런다음 Continue 버튼을클릭하면수정된값이서버로전달된다. 조작된값에대한점검정책이 없는서버의경우조작된값을그대로받아들이게된다. 그결과를보면다음과같다.
Raging Inferno 의값이 24.3141751857359 로수정되었고, 미션에성공했다. 이과정을다음과같이간 단하게도식화할수있다. 먼저웹프록시를사용하지않을경우에는다음과같이 1이더해진값이전달된다. Web client Web server 2.3141751857359 3.3141751857359 ( 원래의값 ) ( 서버에전달된값 ) 그러나웹프록시의 trap 기능을이용해원래의데이터를가둔후그값을수정하여서버로 post 하면 다음과같이값이전달된다. Web client Web proxy 프로그램 Web server 2.3141751857359 24.3141751857359로수정 24.3141751857359 ( 원래의값 ) ( 수정된값 ) ( 최종전달된값 ) 좀더정확하게순서를말하면다음과같다. 1 최초의값 2.3141751857359 2 웹클라이언트에서 vote! 버튼을클릭하면 2.3141751857359이서버로 post됨 3 웹프록시에서 2.3141751857359을 trap함 4 웹프록시에서 trap된값 2.3141751857359을 24.3141751857359로수정 5 서버로수정된값 24.3141751857359을서버로전달 6 미션완료 3. Odysseus 소개 Odysseus 를소개하는것은앞에서말했지만사용의용이성때문이다. 최근에는 Telemachus 와함께 사용할수있게되었다. Paros 처럼다양한기능은없지만로그인우회및데이터조작등에사용될수 있다. Odysseus 는별도의랜설정없이바로사용가능하다는장점이있다.
3-1. 설치및기본사용방법 1. Odysseus 를 http://www.bindshell.net/tools/odysseus 에서다운받아설치한다. 설치과정에서 특별하게어려운부분은전혀없다. 2. Odysseus 를실행한다. 실행을한후오른쪽하단에있는 Odysseus 를오른쪽마우스클릭한다. 3. 기본적인설정상태에서 Odysseus 를사용하려면, IE Proxy Setting 중에서 None 과 Odysseus 중에서 Odysseus 를설정한다. 4. 다시오른쪽하단에있는 Odysseus 를오른쪽마우스클릭한다. 5. Interceptor 를체크한다. 그러면 Odysseus 를사용할준비가된것이며, Telemachus 5 를실행하여 같이사용하면된다. 준비가되었다면 Odysseus 의색깔이녹색으로변한다. 6. 그러나기본설정이외의기능을사용하기위해서는 Configuration 을클릭한다. General 부분은 다음과같다. 5 http://www.bindshell.net/tools/telemachus
기본적으로는 Smart Interception 은체크가되어있지않지만, 전체기능을다사용하기위해 여기서는체크한다. Logging 부분에서몇가지선택할 Level이있다. 디폴트는 Debug이다. Insane 옵션은소켓커뮤니케이션문제를디버깅하기위해주로사용되며, 모든소켓 stream으로부터오는데이터를로깅한다. Diabolical 옵션은 OpenSSL locking call을디버깅하는데사용된다. 이레벨은목적에따라선택하여사용하면되는데, 일반적으로웹해킹에서는디폴트상태인 Debug를사용하면된다. Proxy Agent 부분에서는 Odysseus 가사용하는포트를설정할수있는데, 기본포트는 50000 번이 다. 다른부분은특별히사용할것이없다. 다음부분은 Extension Filters인데, 여기서는필터링할파일의확장자를지정할수있다. Exclude 는배제하기위한것이며, Include는포함시키기위한것이다. Include 부분에파일확장자를추가하기위해서는 Enable include list 부분을체크한후다음과같이파일을추가한다. 그런다음 Add를클릭하면된다.
다음으로설정할부분은 Site Filters 인데, 이부분에별도로추가할필요는없을것이다. 필터링없 이전체사이트를점검하는것이중요하기때문이다. 3-2. Odysseus를이용한웹해킹의예 Odysseus의사용법은앞에서 Paros를이용해풀었던 hackthissite의 Realistic Missions 레벨 1 문제풀이를통해설명하고자한다. 문제에대한설명은이미앞에서했으므로여기서는문제자체에대한설명은없이문제풀이과정을그대로보여주는방식을선택하도록하겠다. 웹클라이언트에서데이터를 post하고, 그런다음웹프록시프로그램을거친후, 웹서버로데이터가전달되는과정은앞에서 Paros를이용해문제를풀었던 6단계와동일하다. 먼저문제풀이사이트로가서로그인을하고, 문제풀이페이지로이동한다. 그런다음 Odysseus를실행한다. 여기서 Odysseus의설정은모든부분이디폴트상태로설정된상태이다. IE Proxy Setting 부분에서 Odysseus를선택하고, 다시 Interceptor를체크한다. 이제 Odysseus를사용할준비가되었다.
이제 Raging Inferno 부분에서 vote! 를클릭한다. 그러면다음과같이 Odysseus 의창이뜬다. 여기서 vote 부분의값 1 을 24 로다음과같이수정한다. 24 로수정하는이유는 Paros 설명부분에서 설명하였다. 그런다음 OK 를클릭하면조작된데이터가서버로전달된다.
서버에서조작된값을보내면다음과같이성공했다는메시지를볼수있다. Paros를이용하던 Odysseus를이용하던그과정은같다. 두프로그램의기능에서차이가있지만핵심기능에서는별차이가없다. 자신에게편하고, 상황에맞는프로그램을선택하여사용하면된다. 그리고웹프록시프로그램에는이두개이외에도더있다. 따라서자신에게가장필요한웹프록시프로그램을선택하는것은자신의취향과상황에달려있는셈이다.