티스토리 뷰

이글은 https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95의 내용을 기반으로 번역했습니다.

1. Same Site?

SameSite는 브라우저가 사이트 간 요청과 함께 쿠키를 보내지 못하게한다.

주요 목표는 출처 간 정보 유출의 위험을 완화하는 것이다.

또한 크로스 사이트 요청 위조 공격(CSRF공격)에 대한 보호 기능도 제공한다.

플래그의 가능한 값은 Lax 또는 Strict이다.

2. 사용 예시

만약 인터넷 뱅킹을 사용하고 있는데 해당 사이트 거래 양식이 사이트 간 요청 위조 취약점에 취약한 것으로 가정한다.

인터넷 뱅킹 사용자(피해자)가 로그인(인증)이 되어 세션쿠키가 생성되어있다.

이때 공격자가 이메일, 트위터, 페이스북 같은 곳 csrf 링크 또는 폼전송을 하는 글을 게시하였다.

Same Site 기능을 사용하지 않을경우 인터넷 뱅킹 사용자(피해자)가 공격자의 csrf공격 링크를 클릭한다면

인터넷 뱅킹의 세션 쿠키가 같이 전송되어 인터넷 뱅킹에 의도하지 않은 요청(공격)을 할 수 있다.

여기서 브라우저가 세션 쿠키를 전송하지 않게 하는 정책이 바로 SameSite이다.

SameSite = Strict 인 경우 브라우저는 일반적으로 쿠키를 추가하지 않습니다.

SameSite = Lax 인 경우 사용자가 최상위 URL을 클릭하면 브라우저가 쿠키를 전송합니다.

만약 첫번째 사이트(http://www.dambut.ch/)에서 쿠키를 생성하고

두번째 사이트(https://www.glocken-emil.ch/)에서 첫번째 사이트로 이미지와 같은 URL요청을 하면 Cookie를 같이 보내준다.
(csrf공격 원리와 같음)

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

3. 크롬으로 테스트 (현재는 동작하지 않으나 개념만 이해하면 됨)

3.1. 첫번째 사이트 방문

첫번째 사이트(http://www.dambut.ch/)를 방문하면 Apahce 서버의 mod_headers를 사용해 4개의 다른 쿠키를 설정한다.

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

크롬의 개발자도구의 Application 탭을보면 아래와 같이 쿠키가 설정된다.

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

Cookie MyBamBut without SameSite attribute (as it was the last 10 years)
Cookie MyBamButNone with SameSite=None
Cookie MyBamButStrict with SameSite=Strict
Cookie MyBamButLax with SameSite=Lax

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

두번째 페이지(https://www.glocken-emil.ch/)에는 첫번째 최상위 URL을 가리키는 a 태그와 이미지태그가 있다.

이미지태그의 경로에는 이미지가 존재하지 않지만 실제 요청은 진행된다.

3.3. 두번째 사이트 방문 후 쿠키 확인

첫번째 사이트 진입 및 쿠키 생성 후 두번째 패이지를 진입한다.

여기서 a태그를 클릭하지 않고 브라우저 로딩 상태에서 개발자도구를 확인한다.

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

위와같이 img태그의 경우 브라우저 로딩과 동시에 첫번째 사이트에 요청하므로 위와같이 개발자도구 → Network탭에 요청 헤더가 표시된다.

위의 이미지를 확인해보면 쿠키 전송시 The SameSite=Strict와 SameSite=Lax로 설정된 쿠키는 전송되지 않는것을 확인 할 수있다.

이로써 csrf 공격을 막을 수 있다.

3.4. 두번째 사이트에서 첫번째 사이트로 이동하는 a태그 클릭시 쿠키 확인

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

두번째 사이트에서 첫번째 사이트로 가는 링크(PrintHeaders 링크)를 클릭하여 이동 후 헤더를 확인한다.

https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95

SameSite=None과 SameSite=Lax쿠키는 전송된것이 확인되고 SameSite=Strict는 전송되지 않음을 확인 할 수 있다.

4. 결론

Same Site 속성은 사이트간 요청 위조를 막을 수 있게 도움을 준다.

Strict로 설정하면 쿠키를 생성했던 사이트와 요청하는 사이트가 다를경우 브라우저측에서 쿠키를 전송하지 않으며 이로인해 CSRF를 확실하게 막을 수 있다.

하지만 소셜 미디어 플랫폼 또는 다른 회사 웹 사이트로 연결되는 회사 위키 페이지가있는 경우

위와같이 Strict로 설정한다면 세션쿠키가 공유되지 않기 때문에 위키 포털을 사용할 때마다 다시 인증해야하는 불편이 생기는 단점이 생기기 때문에 고려해서 사용해야한다.

5. 요청 타입 별 Same Site 쿠키 전송 여부

댓글