본문 바로가기
컴퓨터네트워크

[Network]쿠키(Cookie)

by goblin- 2024. 8. 22.

쿠키의 개념과 역할

 

쿠키는 웹사이트가 사용자의 브라우저에 저장하는 작은 데이터 조각으로, 사용자의 상태를 유지하거나 사용자의 행동을 추적하는 데 사용됩니다. 예를 들어, 로그인 상태 유지, 장바구니 정보 저장, 사용자 맞춤형 광고 제공 등에 활용됩니다.

 

쿠키의 유형

 

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.comSet-Cookie 헤더를 통해 쿠키를 설정

4. 이후 사용자가 c.com을 방문했을 때, c.com에도 b.com의 광고가 포함되어 있다면,

  - 브라우저는 b.com의 쿠키를 전송하여 사용자의 이전 행동을 추적 가능

5. b.com은 쿠키를 기반으로 사용자가 a.comc.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=StrictSameSite=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