Cookie & Session (쿠키와 세션)

Table of Contents

  1. Cookie & Session (쿠키와 세션)
    1. Cookie (쿠키)
    2. Session (세션)
    3. Attack Vector (여러 공격 백터들)
    4. Migration (해결책)

웹 해킹의 기본 요소인 쿠키 (Cookie) 와 세션 (Session)을 알아가보자 합니다. 두 요소는 웹사이트를 인증하는 역할을 하거나 유저의 정보를 서버로 전달하는 역할을 합니다.

  • HTTP 통신은 Connectionless 와 Stateless 로 이루어진 통신을 이야기 합니다. 그러므로 서버는 클라이언트를 통신마다 기억할 수 없습니다.

Connectionless: 네트워크 의존도가 낮고, 비용이 저렴하며, 데이터 전송 속도가 빠릅니다. Connection-Oriented: 데이터 통신기간중 네트워크 자원이 예약되고, 비용이 많아 소요되고, 데이터 전송 속도가 느리며, 전체 진행 프로세스 동안, 고정된 컨넥션이 성립하여야 합니다.

  • Cookie는 위 와 같은 이유로 HTTP 통신 상태를 유지하기 위해 만들어졌습니다.
  • 쿠키는 Key:Value로 이루어져 있습니다.
    • 서버에서 클라이언트에게 쿠키를 발급해주면,이 쿠키를 클라이언트가 HTTP Request를 할때 포함이 됩니다.
  • 쿠키가 중요한점으로는 다음과 같습니다.
    1. 정보의 저장 - 사용자의 정보를 일시적으로 저장합니다.
    2. 상태 정보 - 사용자의 유니크한 상태를 저장
  • 쿠키의 단점으로는다음과 같습니다.
    • 클라이언트 브라우저에 저장이되고 매번 HTTP Request마다 내장되어 서버로 보내집니다.
    • 클라이언트 브라우저에 저장이 되는 만큼 마음껏 수정이 가능합니다. 서버에서 아무런 확인을 안할경우, 다른유저 정보를 훔칠수 있다는 단점이 있습니다.

Session (세션)

  • 서버에서 Validation(확인)을 안할 경우, 공격자가 마음대로 쿠키값을 수정하여, 여러정보를 훔칠수 있습니다.
  • 웹서버에서는 Session 이라는것을 만들어 인증정보를 변경하는것을 막습니다.
  • Session은 서버에 인증정보를 저장하고 Key를 만들어 오로지 해당 세션에 맞는 사용자만 그 사용자만의 정보를 얻을수 있습니다. (sessionID)

Attack Vector (여러 공격 백터들)

  • 쿠키값이나 세션값이 디코딩이 가능한가?
  • 쿠키값이나 세션값이 없이 세션유지가 되는가?
  • 로그인 할때마다 쿠키값이나 세션값이 똑같이 유지가 되는가?
  • 쿠키값이나 세션값을 변조해서 다른유저의 세션을 가로챌수 있는가?
  • 쿠키 Security Header 값이 잘 적용 되어 있는가?

Migration (해결책)

Cookie Security Headers 를 셋업 합니다.

  1. SameSite - CSRF 공격을 방지하는데 도움을 줍니다.
    • SameSite=Lax: 지정이 되어있지 않다면 Lax가 기본값으로 세팅이 됩니다. 대부분의 크로스 사이트 요청에는 쿠키를 전송하지 않지만 사용자의 편의성을 위해 예외를 허용합니다.
      • 전송되는 경우: 링크를 클릭한 이동이나, <a> 태그를 통하여 이동
      • 전송되지 않는 경우: POST 요청, <img>, <script>, <iframe> 과 같은 임베디드 리소스 요청, XHR/FETCH 요청등이 있습니다.
    • SameSite=Strict - 가장 엄격한 설정입니다. 쿠키가 동일한 사이트 내에서 요청만 전송되도록 합니다. CSRF 공격에 가장 강력한 보호 제공이지만 사용자 경험에 불편을 일으킬수 있습니다. (다른 사이트에서 링크를 클릭하여 돌아오면 다시 로그인)
      • 전송되는 경우: 사용자가 현재 보고있는 웹페이지와 동일한 도메인의 요청
      • 전송되지 않는 경우: 모든 종류의 크로스 사이트 요청
    • SameSite=None - 모든 크로스 사이트 요청에 쿠키를 전송하도록 허용합니다. 반듯이 Secure 속성과 함께 사용되어야 합니다.
      • 전송되는 경우: 모든 크로스 사이트 요청 (임베디드 리소스, API 호출)
      • 적합한 경우: 서드파티 위젯, 광고추적, Single Sign-On 과 같은 명시적으로 크로스 사이트 쿠키 전송이 필요한 경우
  2. HttpOnly - 쿠키가 클라이언트 측 JavaScript (브라우저 스크립트)에 의해 접근이 되는것을 방지합니다.
    • HttpOnly로 설정된 쿠키는 document.cookie 와 같은 JavaScript API를 통해 읽거나 수정할수 없습니다. 오직 HTTP 요청을 통해서만 서버로 전송되고 서버에서만 설정할수 있습니다.
    • XSS 공격을 방지 합니다. 악의적인 스크립트가 웹페이지에 주입 되었을때, 해당 스크립트가 세션ID 와 같은 민감한 정보를 훔쳐가는것을 방지합니다.
  3. Secure - 쿠키가 HTTPS를 통해서만 전송되도록 합니다.
    • Secure 로 설정된 쿠키는 HTTP 연결을 통해서는 절대 전송되지 않습니다. 브라우저는 해당 쿠키를 암호화 되지 않는 HTTP 요청에 포함시키지 않습니다.
    • 웹사이트가 HTTPS를 사용하고 있는 경우에만 유효합니다. HTTPS를 사용하지 않는 웹사이트에서는 이속성을 설정해도 의미가 없습니다.

Back to top

Copyright © 2025 Amer1can0 본 블로그는 보안 관련 정보를 공유하는 것을 목적으로 합니다. 블로그에 게시된 내용을 악의적인 목적으로 사용하거나 타인에게 피해를 주는 행위는 엄격히 금지 됩니다. 이러한 모든 불법적 행위 및 그로 인해 발생하는 모든 책임은 전적으로 행위자 본인에게 있습니다. 블로그 운영자는 어떠한 책임도 지지 않음을 알려드립니다.