SameSite
Spring Security에서 SameSite 속성: 악용 방지에 대한 역할
SameSite
속성은 웹 애플리케이션에서 쿠키의 보안을 강화하기 위해 사용하는 중요한 메커니즘입니다. 주로 CSRF(Cross-Site Request Forgery)와 같은 공격을 방지하는 데 활용됩니다. Spring Security는 SameSite
쿠키 속성을 지원하며, 이를 통해 보안성을 높일 수 있습니다.
1. SameSite란?
SameSite
는 쿠키가 어떤 조건에서 클라이언트(브라우저)에 의해 전송되는지 제어하는 HTTP 쿠키 속성입니다. 브라우저가 쿠키를 제3자 요청(다른 도메인에서의 요청)에서 전송할지 여부를 결정하는 데 사용됩니다.
1.1. 주요 목적
CSRF와 같은 공격을 방지.
쿠키가 불필요하게 제3자 요청에 포함되지 않도록 제한.
2. SameSite 속성 값의 종류
Strict
쿠키는 동일한 도메인의 요청에서만 전송됩니다.
제3자 요청(다른 도메인에서의 요청)에서는 쿠키가 전송되지 않음.
가장 안전하지만, 사용자 경험(UX)을 제한할 수 있음.
사용 사례: 보안이 최우선인 애플리케이션(예: 뱅킹, 금융 서비스).
예시:
Lax
(기본값)쿠키는 동일한 도메인뿐만 아니라, GET 요청 또는 탭/북마크에서 직접 액세스한 경우에도 전송됩니다.
CSRF 공격 방지와 사용자 경험 간의 균형을 유지.
사용 사례: 대부분의 애플리케이션에서 적합.
예시:
None
쿠키가 모든 요청(동일 도메인 및 제3자 도메인)에서 전송됩니다.
하지만 Secure 속성이 필요하며, HTTPS 연결에서만 작동.
사용 사례: 제3자 통합이 필요한 애플리케이션(예: 소셜 로그인, 광고 네트워크).
예시:
3. SameSite의 보안 역할
3.1. CSRF 방지
CSRF 공격은 사용자가 인증된 상태에서 악의적인 요청을 실행하게 하는 공격입니다.
SameSite=Strict
또는SameSite=Lax
는 쿠키가 제3자 요청에서 전송되지 않도록 하여 CSRF 공격을 차단.
CSRF 공격 시나리오
공격자가 피해자에게 악성 링크를 포함한 이메일을 보냄.
피해자가 클릭하면 요청이 피해자의 브라우저에서 실행되고, 인증 쿠키가 포함됨.
서버는 이 요청을 신뢰하고 작업을 수행.
SameSite를 사용하면, 이 요청에서 인증 쿠키가 전송되지 않으므로 공격이 차단.
3.2. 사용자 추적 방지
SameSite
속성은 쿠키가 제3자 요청에서 전송되지 않도록 제한하여 사용자가 다른 사이트에서 추적되는 것을 방지.
4. Spring Security에서 SameSite 적용
Spring Security 5.5+ 버전부터는 SameSite 쿠키 속성을 지원하며, 이를 사용하여 보안을 강화할 수 있습니다.
4.1. 기본 설정
Spring Security는 기본적으로 SameSite=Lax
로 설정됩니다.
위 설정은 CSRF 쿠키를 생성할 때, SameSite 속성을 Lax
로 설정합니다.
4.2. Custom SameSite 설정
Spring Security에서 SameSite 속성을 명시적으로 설정하려면 다음과 같이 커스터마이징할 수 있습니다:
Custom Cookie 설정 예제
4.3. Secure와 SameSite 속성 병합
SameSite=None
을 사용하는 경우, 반드시 Secure 속성을 활성화해야 합니다. HTTPS를 통해 쿠키를 안전하게 전송할 수 있도록 보장합니다.
5. 브라우저와의 호환성
일부 오래된 브라우저(특히 구형 모바일 브라우저)에서는
SameSite=None
이 제대로 동작하지 않을 수 있습니다.호환성을 유지하려면 브라우저 감지를 통해 조건부로 SameSite 속성을 설정하거나 최신 브라우저 사용을 권장합니다.
6. 실제 사례: SameSite 속성의 보안 효과
6.1. 피싱 방지 사례
시나리오:
사용자가 피싱 사이트에서 악성 요청을 실행하려 함.
공격자가 피해자의 인증 쿠키를 사용해 서버에 요청을 전송.
SameSite 적용 효과:
서버는 요청이 제3자 도메인에서 왔음을 감지하고, 인증 쿠키를 전송하지 않음.
결과적으로 공격이 차단.
6.2. CSRF 공격 방지 사례
시나리오:
CSRF 공격으로 사용자의 계정을 통해 금전적 손실 발생.
SameSite 적용 효과:
요청에 인증 쿠키가 포함되지 않아 서버가 요청을 처리하지 않음.
CSRF 방어의 기본 보호막으로 작용.
7. 결론
SameSite
속성은 Spring Security와 같은 보안 프레임워크에서 CSRF 및 사용자 데이터 보호를 강화하는 데 중요한 역할을 합니다. 적절한 SameSite
설정은 웹 애플리케이션의 보안성을 크게 높일 수 있습니다.
추천 설정:
민감한 애플리케이션:
SameSite=Strict
.일반적인 사용자 경험과 보안을 균형 있게 유지:
SameSite=Lax
.제3자 통합이 필요한 경우:
SameSite=None
과Secure
조합.
Last updated