javascript

쿠키 보안

jeeyong 2007. 12. 6. 16:13

㈜안랩코코넛 선임컨설턴트 이호선
hosik@coconut.co.kr


인터넷의 사용 인구가 계속 증가하는 추세에서 월드와이드웹은 중요한 요소를 차지하고 있다. 특히 전자상거래, 인터넷뱅킹, 커뮤니티, 포럼 등과 사용자 인증을 요하는 월드와이드웹의 비율도 계속하여 높아지고 있다. 월드와이드웹을 구성하는 프로토콜인 HTTP는 세션을 유지하지 않는 프로토콜이기 때문에 인증된 정보를 세션으로서 유지하기 위해 쿠키의 개념이 도입되었다. 본 문서에서는 이러한 쿠키에 대해서 알아보고 보안상 위협 요소, 그리고 그에 대한 대응책에 대하여 알아보기로 한다.



Cookie는 사용자가 방문한 웹 사이트에서 추후에 어떤 용도로든 사용하기 위해서 사용자의 하드디스크에 남기는 정보를 의미한다. 예를 들어 사용자가 특정 팝업창에 대해 "더 이상 띄우지 않음", "오늘은 띄우지 않음" 등과 같은 체크 박스를 선택할 경우 다음부터 해당 사이트에 방문할 때 더 이상 그런 팝업창이 나타나지 않게 되는데 이는 Cookie 정보가 사용자의 PC에 저장되어 있기 때문이다. 엄밀히 말하자면 이런 Cookie는 Persistent Cookie라고 불리우며 메모리 공간에 상주하여 브라우저 관련 프로세스가 실행되고 있을 때까지만 유효한 Cookie 정보도 있는데 이를 Non-Persistent Cookie 혹은 Session Cookie라고 부른다.




Cookie의 종류에는 Persistent Cookie와 Session Cookie(Non-Persistent Cookie)가 있다. 이 두 개를 비교하면 다음과 같다.

비교 항목 Persistent Cookie Session Cookie
저장 위치 디스크매체(text 파일) 브라우저가 사용하는 메모리 공간
초기 접속 시 전송 여부 초기 접속 시 전송 서버로부터의 Set-Cookie로 할당되어야 메모리 공간에 나타나므로 초기 접속 시 전송되지 않음
Cookie의 만료 시기 Cookie 항목에 대해 설정된 expiration date가 지난 경우, 사용자가 Cookie를 삭제한 경우 사용자가 브라우저를 종료한 경우, 서버가 Set-Cookie로 Cookie 항목의 내용을 클리어한 경우
주요 용도 사용자가 사이트 재방문 시 속성(팝업창 제한, ID, Password 등)을 기억하기 위함 사용자가 사이트 접속 시 인증 정보를 유지하기 위함




클라이언트가 웹서버에 접속할 때 Cookie가 어떤 식으로 교환되는지 살펴보기로 하자.
우선 클라이언트가 해당 서버에 대한 Persistent Cookie를 저장하고 있다면 저장하고 있는 Cookie 정보가 만료되었는지 여부를 확인하여 만료되지 않았다면 해당 Cookie 정보를 보낸다. 이 정보는 Request Header에 포함되어 전달된다.


그림 1 초기 접속 시 Request Header에 포함된 Cookie 정보

서버는 클라이언트가 보낸 Cookie 정보를 해석한다. 또한 서버에서 클라이언트에 대해 추가적인 쿠키 정보를 셋팅할 필요가 있을 때는 응답 메시지에 Set-Cookie 정보로 보낸다.

그림 2 서버의 Response Header에 포함된 Set-Cookie

클라이언트는 해당 Cookie 정보를 받아들이거나 무시할 수 있지만 특별한 브라우저 설정을 하지 않았고 Set-Cookie가 규약을 만족한다면 받아들이는 것이 기본이다. 다음에 해당 웹서버로 클라이언트가 요청을 하게 될 경우 앞서 보냈던 쿠키 정보에 Set-Cookie에 의해 새로이 추가된 쿠키 정보를 포함하여 보낸다.

그림 3 Set-Cookie 설정 이후 Request Header에 포함된 Cookie 정보

여기서 웹서버가 브라우저에 보내는 Set-Cookie를 좀 더 상세히 보자. Set-Cookie는 다음과 같은 정보가 포함될 수 있다.
필드 설명
NAME=VALUE (Required) 쿠키 변수 이름과 쿠키 변수 값을 지정한다. 앞서 예제의 경우에는 login_id가 NAME, hosik이 VALUE가 된다.
Comment=Comment (Optional) Cookie에는 개인 정보가 포함되는 경우가 있다. 따라서 해당 Cookie가 어떤 용도로 사용되는 Cookie인지 사용자에게 알리기 위한 용도로 Comment를 추가한다. 사용자는 Comment 정보로 판단하여 해당 Cookie를 허용할지 않을지 여부를 결정할 수 있다.
Domain=Domain (Optional) Cookie 정보가 유효한 도메인을 말한다. 어떤 사이트의 경우에는 하나의 인증 받은 정보를 다른 URL에서도 사용해야 하는 경우가 있다. 예를 들어 www.coconut.co.kr을 통해 인증 받았지만 file.coconut.co.kr이라는 URL에도 같은 정보가 유지되어야 하는 경우이다. 이런 경우 Domain=.coconut.co.kr이라는 정보를 추가로 쓰게 되며 Domain 값으로는 반드시 '.' 문자가 선행되어야 한다. (ex. Domain=file.coconut.co.kr (X), Domain=.coconut.co.kr (O))
Path=path (Optional) 어떤 경로에 해당 Cookie가 적용될지를 의미한다. Path=/ 라고 한다면 모든 경로에 적용되며 Path=/download/ 라고 한다면 /download/ 이하의 경로에 적용된다.
Max-Age=delta-seconds (Optional) Cookie의 lifetime을 의미하며 delta-seconds가 경과하면 클라이언트는 Cookie를 버려야 한다. 해당 값은 0 이상으로 셋팅될 수 있으며 0으로 셋팅된 것은 해당 쿠키값이 바로 버려져야 한다는 것을 의미한다.
Secure (Optional) 해당 Cookie는 secure channel로 전송되어야만 함을 의미한다.
Version=Version (Required ) Version은 10진수의 정수로 표현될 수 있다. Cookie의 버전을 의미하며 Version=1로 표현된다.

브라우저에 전송된 Set-Cookie가 악의적인 경우에 대처하기 위해 브라우저는 다음과 같은 경우 쿠키 정보를 거부할 수 있다.

- Domain 값이 '.'으로 시작되지 않는 경우
- 요청한 호스트 정보와 Domain의 값이 무관한 경우
- 요청한 호스트가 FQDN(IP 주소 형태가 아님)의 형태를 가질 때 요청한 호스트의 FQDN에서 Domain 값을 제외한 나머지, 즉 호스트명이 '.'을 하나 이상 포함하는 경우 (예를 들면 다음과 같음)
요청한 호스트의 FQDN이 www.coconut.co.kr인데 Domain 값이 .co.kr 혹은 .kr인 경우




Cookie(엄밀히 Persistent Cookie) 파일이 저장되는 위치, 그리고 저장 방식은 웹 브라우저 종류와 버전에 따라 상이하다. 예를 들어 Netscape Navigator 4.x 버전은 User Preference 폴더에 cookies.txt라는 파일 하나로 저장하였으며 Opera 4.x 버전은 cookies4.dat라는 파일로서 Opera 디렉토리에 저장한다. 국내에서 가장 많은 유저가 사용하는 인터넷익스플로러의 경우는 도메인마다 파일 하나로서 저장한다. 또한 저장되는 위치는 Windows 버전에 따라 다를 수 있다. 따라서 Cookie 파일을 찾기 위해서는 '파일 찾기'등의 검색 툴을 이용하여 검색어로서 'Cookie'를 입력하여 로컬하드디스크를 확인해보는 것이 쉽다.

이중 윈도우에 저장된 인터넷익스플로러의 Cookie 파일의 예를 보자. 다음은 로컬하드디스크에저장된 hosik@google[1].txt의 내용을 메모장으로 열어 본 경우이다.


PREF
ID=e86917dffe2b57c6:TB=2:TM=1154070164:LM=1161827593:DV=AA:S=R4sPp
GRTj7axz2nH
google.com/
1536
2618878336
32111634
2149319072
29816993
*

여기서 PREF는 Cookie의 Name이며 , ID=e86917dffe2b57c6.. (생략) .. S=R4sPpGRTj7axz2nH 는 Cookie의 Value, google.com/는 Cookie가 사용되는 Domain과 Path를 의미하며 1536은 해당 Cookie가 Secure하지 않음을 의미한다. 이렇게 Cookie 파일 그 자체로서 내용을 분석하는 것은 까다로운 문제이다. IECookieView라는 툴을 이용하면 다음과 같이 저장된 Cookie 내용들을 쉽게 열람하고 분석할 수 있다.



그림 4 IECookieView를 이용한 Cookie 정보 열람

여기까지 HTTP Session인 쿠키에 대하여 알아보았다.
12월호에서는 이러한 쿠키에 대한 취약성은 무엇이 있는지 그리고 어떤 공격기법들이 있는지에 대하여 알아보도록 하겠으며, 이에 대한 대응 방법도 같이 알아 보도록 하겠다.
<AhnLab coconut> -