'cooxie'에 해당되는 글 1건

  1. 2010.04.27 [Web Security] 쿠키란 무엇인가?

1. 개 요
웹 응용 프로그램에서 흔히 사용되는 쿠키(Cookie)란 무엇이며, 쿠키의 취약점을 이용한 웹해킹 기법에 대하여 알아본다.

2. 쿠키란?
wikipedia에서는 쿠키를 아래와 같이 정의하고 있다.
 쿠키(cookie)란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버에서 인터넷 사용자의 컴퓨터에 설치하는 작은 기록 정보 파일을 일컫는다. 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히며 그리고 수시로 새로운 정보로 바뀐다. 이 수단은 넷스케이프의 프로그램 개발자였던 루 몬툴리(Lou Montulli)가 고안한 뒤로 오늘날 많은 서버 및 웹사이트들이 브라우저의 신속성을 위해 즐겨 쓰고 있다.

즉, 쿠키는 서버와 클라이언트 간에 어떠한 정보를 유지해 웹 페이지를 더욱 동적으로 이용할 수 있는 것이다. 이렇듯 쿠키를 이용하여 웹 페이지에 접속할 때 쿠키를 가지고 사용자의 정보를 유지하는 매개체가 되는 것이다.

쿠키는 접속한 클라이언트의 하드디스크에 정보를 저장해두고 다음 번에 접속했을 때 이 저장된 쿠키 정보를 가지고 그 사용자를 식별할 수 있는 것이다. 쿠키의 저장 경로는 C:\Document and Settings\로그인 된 유저아이디\Cookies에 저장된다. 클라이언트에 받아서 저장할 수 있는 총 쿠키의 개수는 300개까지 이고 쿠키 하나의 최대 사이즈는 4KB이다. 그리고 한 개의 서버나 도메인당 최고 20개의 쿠키를 보낼 수 있다.
<클라이언트에 저장된 쿠키의 모습>

3. 왜 쿠키를 사용할까?
HTTP 프로토콜은 stateless protocol이다. 즉 비연결지향형 프로토콜로 한 클라이언트의 요청을 처리한 후 연결을 끊기 때문에 동일한 클라이언트로부터 요청이 들어온다고 해도 같은 클라이언트로부터 발생한 요청이라는 사실을 알 수 없다. 따라서 쿠키라는 매개체를 이용하여 필요한 정보를 쿠키에 저장해 두고 이 웹서버(HTTP server)에 정보를 전송할 때 쿠키 값을 같이 전달해서 웹서버로 하여금 클라이언트를 인식할 수 있게 하는 것이다. 대표적인 사용예로 팝업창의 "오늘하루 동안 열지않기" 기능이나, 사이트 방문시 "x 번째 방문입니다." 등의 문구를 띄워주는 것도 쿠키를 이용하여 이전의 접속 정보를 기록하기 때문에 가능하다.

4. 쿠키의 문제점?
기본적으로 HTTP 프로토콜은 암호화되어 통신하지 않는다. 따라서 스니핑(sniffing) 툴을 이용하여 쉽게 그 내용을 옅볼수 있다. 그 내용중에는 쿠키 정보도 포함되며 만약 어떤 사이트에서 쿠키 데이터에 사용자 아이디 같은 정보를 저장하고 그 정보를 이용하여 로그인 된 사용자 아이디를 식별한다면 변조 툴을 이용하여 쉽게 웹서버를 속일 수 있을 것이다. 실제로 Cooxie 툴을 이용하여 쿠키 값의 변조가 가능하며, 클라이언트에 저장되는 쿠키 값이 노출되거나 쿠키 값에 민감한 정보가 저장될 경우 변조를 통하여 쉽게 권한 획득이 가능하다.

5. 실제 쿠키 변조 예
예제를 이용하여 쿠키 변조를 통한 웹해킹의 예를 살펴보자. 예제는 OWASP(
http://www.owasp.org/index.php/Main_Page)에서 제공하는 webgoat 문제 중 Session Management Flaws의 Spoof an Authentication Cookie 문제를 살펴보자.
webgoat 설치 후 webgoat.bat(80 port) 또는 webgoat_8080.bat(8080 port) 를 실행한 후 브라우져를 이용하여
http://localhost/WebGoat/attack으로 접속한다. 자세한 접속방법은 webgoat 설치 디렉토리의 readme.txt 문서를 참조한다.
문제에 명시된 대로 webgoat / webgoat 계정과 aspect / aspect 계정으로 접속한 뒤 Cooxie 툴을 이용하여 로그인시 사용자 호스트에 저장되는 쿠키값을 비교해 보자.

webgoat 계정으로 로그인 시 AuthCookie에 "65432ubphcfx" 값이 저장되며, aspect 계정으로 로그인 시 AuthCookie에 "65432udfqtb" 값이 저장되는 것을 볼 수 있다. 65432 값은 동일하므로 그 뒤의 값을 이용하여 사용자를 구분하는 것을 알 수 있다. 이제 획득한 쿠키값을 기반으로 사용자 구분 방식을 추론해야 한다.

먼저 사용자 별로 생성되는 쿠키 값을 보면
- webgoat    -->   ubphcfx
- aspect      -->    udfqtb
로 생성되는 것을 알 수 있으며, 사용자 계정과 생성되는 쿠키의 문자의 개수가 동일하다는 것을 알 수 있다. 두 계정 모두 "t"로 끝난다는 점을 이용하여 반대로 문자를 읽어들여 쿠키를 생성한다고 가정하고 서로의 연관 관계를 추론해 보자.
①번의 경우 webgoat을 반대로 한 taogbew를 획득한 쿠키 값과 비교한 것이며, ②번의 경우 aspect를 반대로 한 tcepsa를 획득한 쿠키 값과 비교한 것이다. 위의 표에서 알 수 있듯이 쿠키값은 한 문자씩 밀려서 생성된다는 것을 알 수 있다. 이를 표로 정리하면 아래와 같다.
위의 예는 상당한 간단한 쿠키 생성 방법이지만 실제로는 이런 방식으로 쿠키를 사용하면 절대로 안되겠다.
문제에서 요구하는 것은 alice계정으로 권한을 변경하라는 것이다. alice 계정으로 로그인 시 생성되는 쿠키 값을 추론해 보면
alice --> ecila --> fdjmb 인것을 알 수 있다. webgoat이나 aspect 계정으로 로그인 후 Cooxie 툴바를 이용하여 쿠키 값을 변경해 보자.

위와 같이 alice 계정으로 변경이 되면서 문제가 해결되는 것을 볼 수 있다.

6. 결 론
쿠키에 대한 개요와 실제 쿠키를 이용한 해킹에 대해서 간략하게 알아보았다. 실제 쿠키 값은 예제와는 달리 복잡한 알고리즘에 의해서 생성이된다.(물론 그렇지 않은 사이트도 있을 것이다) 쿠키 값은 민감한 정보를 저장하므로 매우 중요하게 다루어져야 하며 생성시부터 보안을 고려하여 생성되어야 한다.

- 참고자료 : 와우스토리 두번째 이야기 The WOWHACKER RELOAD, 쿠키 스니핑 / 스푸핑
                                                                                                    +---------------------------------+
                                                                                                    | Infinite Flow..                              |

                                                                                                    | mail : geekspark@gmail.com         |
                                                                                                    | Blog :
http://sinun.tistory.com       |
                                                                                                    | twitter : @unpacker                      |
                                                                                                    | CISSP                                        |
                                                                                                    +----------------------------------+
저작자 표시 비영리 변경 금지
신고

'0x05 Security > Web Security' 카테고리의 다른 글

[Web Security] 쿠키란 무엇인가?  (0) 2010.04.27
세션에 대한 정리  (0) 2009.11.20
Posted by By. PHR34K