쿠키의 개념과 역할
쿠키는 웹사이트가 사용자의 브라우저에 저장하는 작은 데이터 조각으로, 사용자의 상태를 유지하거나 사용자의 행동을 추적하는 데 사용됩니다. 예를 들어, 로그인 상태 유지, 장바구니 정보 저장, 사용자 맞춤형 광고 제공 등에 활용됩니다.
쿠키의 유형
1. 퍼스트파티 쿠키 (First-party Cookie)
• 정의: 사용자가 방문한 웹사이트(예: example.com)가 직접 설정한 쿠키입니다.
• 용도: 주로 사용자의 로그인 상태 유지, 개인 설정 저장 등에 사용됩니다.
• 특징: 방문 중인 웹사이트에서만 접근할 수 있습니다.
2. 서드파티 쿠키 (Third-party Cookie)
• 정의: 사용자가 방문한 웹사이트와는 다른 도메인(예: adtracking.com)에서 설정한 쿠키입니다.
• 용도: 주로 광고 추적, 사용자 행동 분석 등에 사용됩니다.
• 특징: 여러 웹사이트에 걸쳐 사용자를 추적할 수 있습니다.
서드파티 쿠키의 동작 과정
예제 시나리오:
1. 사용자가 a.com을 방문
2. a.com에는 광고 서비스 b.com의 광고 배너(이미지, 스크립트, iframe 등)가 포함됨
3. 브라우저가 b.com의 리소스를 요청하면서, b.com이 Set-Cookie 헤더를 통해 쿠키를 설정
4. 이후 사용자가 c.com을 방문했을 때, c.com에도 b.com의 광고가 포함되어 있다면,
- 브라우저는 b.com의 쿠키를 전송하여 사용자의 이전 행동을 추적 가능
5. b.com은 쿠키를 기반으로 사용자가 a.com과 c.com을 방문했다는 정보를 알게 되고,
- 맞춤형 광고를 제공할 수 있음
쿠키 사용의 기준: Domain + Path
• 웹 브라우저가 쿠키를 웹 서버에게 전송하는 기준: 해당 쿠키를 어떤 요청에 보낼지 결정합니다.
• 모든 쿠키에는 도메인과 경로(Path)가 연결되어 있습니다:
• 예) 웹 브라우저 내 저장되어있는 쿠키 리스트
• 1번 쿠키: h1 = w1 (Domain: a.com, Path: /)
• 2번 쿠키: h2 = w2 (Domain: a.com, Path: /user)
• 3번 쿠키: h3 = w3 (Domain: b.com, Path: /hello)
• 4번 쿠키: h4 = w4 (Domain: c.com, Path: /world)
• 예) 위 리스트 기반으로 아래 웹 서버에 대한 요청에 따라 전송되는 쿠키 예:
• 웹 브라우저에서 a.com/user/name 호출 시 1번 쿠키 + 2번 쿠키 전송
• 웹 브라우저에서 a.com/ 호출 시 1번 쿠키 전송
• 웹 브라우저에서 b.com/hello 호출 시 3번 쿠키 전송
• 웹 브라우저에서 c.com/ 호출 시 어떤 쿠키도 전송하지 않음
쿠키의 보안 설정
1. SameSite 속성
• SameSite=None: 쿠키가 서드파티 요청에도 포함될 수 있습니다. 이를 사용할 경우 Secure 속성도 함께 설정되어야 합니다.
• SameSite=Lax: 기본값으로, 퍼스트파티 요청과 일부 서드파티 요청(GET 요청 등)에 쿠키가 포함됩니다.
• SameSite=Strict: 쿠키가 퍼스트파티 요청에만 포함됩니다. 사용자가 웹사이트에 직접 방문한 경우에만 쿠키가 전송되며, 다른 웹사이트에서 요청할 때는 쿠키가 전송되지 않습니다.
2. Cross-site vs. Same-site
• Cross-site: 쿠키가 다른 도메인 간의 요청에서 사용될 수 있음을 의미합니다. 예를 들어, example.com에서 adtracking.com으로 요청이 있을 때, Cross-site 쿠키가 사용됩니다.
• Same-site: 동일한 도메인 내에서만 사용될 수 있는 쿠키를 의미합니다. 예를 들어, example.com 도메인에서 사용자가 다른 페이지(example.com/home에서 example.com/profile 등)로 이동할 때, Same-site 쿠키는 계속 전송되고 사용할 수 있습니다. 하지만, 이 쿠키는 다른 도메인(예: anotherdomain.com)으로 이동할 때는 전송되지 않습니다. 이를 통해 웹사이트 간의 쿠키 전송을 제한하고, 보안을 강화할 수 있습니다. (서드파티 쿠키가 전송되는 것을 막는다.)
3. HttpOnly 속성
• 정의: 이 속성을 사용하면 자바스크립트에서 쿠키에 접근할 수 없습니다.
- JavaScript에서 document.cookie로 접근 불가능!
• 역할: XSS(Cross-Site Scripting) 공격을 방지하는 데 사용됩니다.
4. Secure 속성
• 정의: 이 속성을 사용하면 HTTPS 연결을 통해서만 쿠키가 전송됩니다.
• 역할: 네트워크 전송 중 쿠키가 탈취되는 것을 방지합니다.
CSRF (Cross-Site Request Forgery)
CSRF(Cross-Site Request Forgery)는 사용자가 특정 웹사이트에 로그인된 상태에서, 공격자가 사용자의 권한을 악용하여 원하지 않는 요청을 서버에 보내도록 만드는 공격입니다.
예시:
1. 상황 설정:
• 사용자가 bank.com이라는 은행 웹사이트에 로그인하여, 잔액 조회나 이체 같은 작업을 수행할 수 있습니다. 로그인된 상태에서 사용자에게는 bank.com의 세션 쿠키가 브라우저에 저장되어 있습니다.
2. 공격자 계획:
• 공격자는 evil.com이라는 악성 웹사이트를 운영하고 있으며, bank.com에 로그인된 사용자를 대상으로 공격을 계획하고 있습니다. 공격자는 사용자의 은행 계좌에서 돈을 다른 계좌로 이체시키려 합니다.
3. 공격 실행:
• 공격자는 evil.com에 악성 스크립트나 이미지 태그를 포함한 웹 페이지를 만듭니다. 이 페이지는 사용자가 방문할 때 자동으로 bank.com에 특정 요청을 보내도록 설정되어 있습니다.
• 예를 들어, .<img src="http://bank.com/transfer?amount=1000&toAccount=12345" />와 같은 코드를 삽입할 수 있습니다. 이 코드는 사용자가 evil.com을 방문할 때, 자동으로 bank.com에 돈을 이체하는 요청을 보내도록 합니다.
4. CSRF 발생:
• 사용자가 로그인된 상태에서 evil.com을 방문하면, 브라우저는 해당 페이지에 있는 악성 요청을 실행하게 됩니다.
• 브라우저는 bank.com에 이미 로그인된 상태이므로, 자동으로 bank.com의 세션 쿠키를 포함하여 요청을 보냅니다.
• bank.com 서버는 이 요청이 사용자의 의도된 요청이라고 판단하고, 정상적으로 이체를 처리합니다. 결과적으로, 사용자는 의도치 않게 자신의 계좌에서 돈을 이체하게 됩니다.
1. 작동 방식:
• 공격자는 사용자가 이미 로그인된 상태에서 악성 링크 또는 스크립트를 통해 사용자의 쿠키와 세션을 이용하여 원하지 않는 요청을 서버에 보냅니다.
• 서버는 사용자가 이미 인증된 상태라고 판단하고, 이 요청을 정상적으로 처리합니다.
2. 대응 방법:
• SameSite 쿠키: 쿠키의 SameSite 속성을 사용하여 CSRF 공격을 예방할 수 있습니다. SameSite=Strict나 SameSite=Lax를 사용하면, 다른 도메인에서 온 요청에는 쿠키가 전송되지 않기 때문에 CSRF 공격을 방지할 수 있습니다.
• CSRF 토큰: 서버는 폼 제출이나 중요한 요청에 대해 고유한 CSRF 토큰을 생성하고, 이 토큰이 요청과 함께 전송될 때만 요청을 처리합니다. 토큰이 없거나 일치하지 않으면 요청을 거부합니다.
쿠키의 보안 중요성
쿠키는 로그인 상태 유지, 사용자 추적 등 중요한 역할을 하지만, 브라우저에 저장되기 때문에 탈취될 위험이 있습니다. 쿠키가 탈취되면, 공격자는 사용자가 아닌 척하며 해당 사용자의 계정에 접근할 수 있습니다. 따라서, 쿠키의 보안을 강화하기 위해 SameSite 속성, Secure 속성, HttpOnly 속성, CSRF 방어 등이 중요합니다.
요약
• 쿠키는 웹사이트와 사용자 간의 상태를 유지하거나 추적하기 위해 사용됩니다. 퍼스트파티 쿠키와 서드파티 쿠키가 있으며, SameSite 속성을 통해 쿠키의 보안을 강화할 수 있습니다.
• CSRF 공격은 이러한 쿠키를 악용하여 사용자의 권한을 도용할 수 있으며, 이를 방지하기 위한 다양한 보안 메커니즘이 존재합니다.
'컴퓨터네트워크' 카테고리의 다른 글
[Network] HTTPS의 동작 원리 (0) | 2025.01.10 |
---|---|
쿠키와 캐시의 차이점 (0) | 2024.08.24 |
[Network] Web and HTTP (0) | 2023.09.14 |
[Network]principles of network (0) | 2023.09.07 |
[Network]protocol layer, service models (0) | 2023.09.06 |