Home Cookie Security
Post
Cancel

Cookie Security

드림핵 강의를 통해 Cookie의 보안설정을 알아봅시다.


아래와 같이 Cookie가 설정되었을 때 어떻게 되는지 알아봅시다.

1
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Path=<cookie-path>;

Domain => 특정 도메인에서만 해당 쿠키를 사용할 수 있음 Path => 특정 경로에서만 쿠키를 사용할 수 있습니다.

예를 들어, Path=/glasses 으로 설정되어있을 때 /user에서는 쿠키의 정보를 가져올 수 없습니다.

Subdomain 관리의 중요성

서브도메인 사용시 쿠키의 domain 설정을 하지 않은 경우 모든 서브도메인에서 동일한 쿠키가 사용됩니다.

Cookie Domaindreamhack.iotest.dreamhack.iodebug.dreamhack.io
.dreamhack.ioOOO
test.dreamhack.ioXOX
debug.dreamhack.ioXXO

예를 들어, mail.glasses.com, auth.glasses.com, book.glasses.com 등의 서브도메인에 있을때 하나의 서브 도메인에서 취약점을 통해 쿠키 탈취가 가능한경우 탈취한 쿠키를 이용하여 다른 서비스에 접근이 가능합니다.

HttpOnly

HttpOnly 설정시 Javascript의 document.cookie 등을 통해 쿠키에 접근할 수 없으며, HTTP 요청일때만 사용됩니다.

XSS 취약점을 통해 document.cookie에 접근할 수가 없다는 뜻입니다.

다만 HTTP 요청을 전송하여 원하는 정보를 획득하거나, 해당 쿠키 사용자의 권한으로 로직을 수행하는등의 공격은 가능합니다.

[예시 코드]

1
2
3
4
5
6
var xhr = new XMLHttpRequest();
xhr.open("GET", "/api/v1/user/detail/", true);
xhr.onload = function () {
        console.log(xhr.responseText);
};
xhr.send(null);

Secure

Secure 속성은 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 쿠키를 전송합니다.

http:// -> 쿠키 전송 X https:// -> 쿠키 전송 O

SameSite Cookie는 Cross-Site 요청에 대한 쿠키 전송 여부를 설정하여 사용자의 Privacy를 보호하고, CSRF 공격을 방어하는 쿠키의 속성입니다.

Cross-Site CSRF 형태

쿠키는 third-party cookies 전송이 가능합니다.

예를 들어 glasses.com 에서 dreamhack.io에 요청시 쿠키도 함께 전송됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<img src='https://dreamhack.io/path?key=value'>
<script src='https://dreamhack.io/path?key=value'></script>
<link href="https://dreamhack.io/path?key=value" rel="stylesheet">

  <form id="csrf-form" action="https://dreamhack.io/path" method="POST">
    <input type="text" name="key" value="value">
</form>
<script>
window.onload = function(){
    var csrfform = document.getElementById("csrf-form");
    csrfform.submit();
}
</script>

Samesite Cookie는 동일한 사이트에 대한 요청 시에만 쿠키를 사용하는 설정

samesite cookie 속성설명
NoneSamesite Cookie를 적용하지 않음
LAX특정 상황에서만 사용.(Default)
Strict동일한 사이트에서만 사용

Chorme 80버전 부터 Samesite 속성이 없으면 기본적으로 LAX를 설정

None 설정을 하기 위해허는 해당 쿠키에 Secure 옵션이 설정되어 있어야합니다.

Cross-site에서 전송할 수 있는 상황

Request TypeSample CodeCookie Sent
Link<a href="..."></a>None, Lax
Prerender<link rel="prerender" href="..."/>None, Lax
Form GET<form action="..."method="GET"></form>None, Lax
Form POST<form action="..." method="POST"></form>None
iframe<iframe src="..."></iframe>None
img<img src="...">None