사용자 몰래 실행되는 공격, CSRF(사이트 간 요청 위조)란?

로그인한 상태로 평소처럼 웹 서핑을 하던 중, 나도 모르게 내 SNS에 광고 글이 올라가거나 비밀번호가 변경되어 있다면 어떨까요? 이것은 단순한 해킹이 아니라 웹 애플리케이션의 취약점을 이용한 CSRF(Cross-Site Request Forgery) 공격의 전형적인 사례입니다.

목차

  1. CSRF(사이트 간 요청 위조)의 정의

  2. CSRF 공격이 발생하는 메커니즘

  3. XSS vs CSRF: 무엇이 다른가?

  4. 효과적인 CSRF 방어 기법

  5. 요약 및 결론


1. CSRF(사이트 간 요청 위조)의 정의

**CSRF(Cross-Site Request Forgery)**는 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.

  • 핵심 원리: 웹 브라우저가 특정 사이트에 요청을 보낼 때, 해당 사이트의 **쿠키(Cookie)**를 자동으로 함께 전송한다는 점을 악용합니다.

  • 전제 조건: 사용자가 공격 대상 사이트에 이미 로그인되어 있어 인증 세션이 유효한 상태여야 합니다.


2. CSRF 공격이 발생하는 메커니즘

공격은 대략 다음과 같은 순서로 진행됩니다.

  1. 로그인: 사용자가 보안이 취약한 A 은행 사이트에 로그인합니다. 브라우저에는 A 은행의 세션 쿠키가 저장됩니다.

  2. 유도: 공격자는 사용자에게 악성 스크립트가 포함된 이메일이나 게시글 링크를 클릭하도록 유도합니다.

  3. 위조 요청: 사용자가 링크를 클릭하는 순간, 브라우저는 A 은행 서버로 “공격자의 계좌로 100만 원 송금”이라는 요청을 보냅니다.

  4. 자동 인증: 이때 브라우저는 사용자의 A 은행 쿠키를 함께 보내고, 서버는 이를 정상적인 사용자의 요청으로 착각하여 실행합니다.


3. XSS vs CSRF: 무엇이 다른가?

두 공격은 이름이 비슷하여 자주 혼동되지만, 공격의 ‘목적’과 ‘대상’에서 큰 차이가 있습니다.

구분 XSS (Cross-Site Scripting) CSRF (Cross-Site Request Forgery)
공격 대상 사용자(브라우저) 서버(애플리케이션)
핵심 목적 사용자 쿠키 탈취 및 정보 탈취 사용자의 권한을 도용하여 특정 행위 실행
실행 위치 사용자의 브라우저 내에서 스크립트 실행 서버 측에서 요청이 실행됨
의존성 사이트의 스크립트 실행 취약점 필요 사용자의 로그인 세션(쿠키) 필요

4. 효과적인 CSRF 방어 기법

보안 전문가로서 권장하는 가장 강력한 방어 전략은 다음과 같습니다.

① CSRF 토큰 (CSRF Token) 사용

가장 보편적이고 확실한 방법입니다. 서버는 사용자 세션에 임의의 난수(Token)를 저장하고, 모든 상태 변경 요청(POST, PUT 등) 시 이 토큰을 함께 제출하도록 합니다. 서버는 제출된 토큰이 세션에 저장된 값과 일치하는지 확인합니다.

② SameSite 쿠키 설정

쿠키 설정 시 SameSite 속성을 추가하여 타 도메인에서의 쿠키 전송을 제한합니다.

  • Strict: 타 도메인에서의 모든 요청에 쿠키를 보내지 않음.

  • Lax: GET 요청 등 안전한 상황에서만 쿠키 전송 허용 (기본 권장값).

③ Referer 및 Origin 검증

서버 측에서 요청이 들어올 때, HTTP 헤더의 RefererOrigin 정보를 확인하여 승인된 도메인에서 온 요청인지 검증합니다.


5. 결론: 요약 및 제언

사용자 몰래 실행되는 공격, CSRF(사이트 간 요청 위조)란?

웹 보안은 사용자의 편리함과 안전함 사이의 균형을 맞추는 일입니다.

  1. 정의: 사용자의 권한을 이용해 서버에 가짜 요청을 보내는 공격입니다.

  2. 핵심: 사용자가 로그인된 상태에서 브라우저가 쿠키를 자동 전송하는 특징을 이용합니다.

  3. 해결: CSRF 토큰 도입과 SameSite 쿠키 설정을 통해 대부분의 위협을 차단할 수 있습니다.

[함께 읽어볼 만한 주제]

  • 현대적인 인증 방식: JWT(JSON Web Token)와 보안 이슈

  • 프론트엔드 보안의 기초: Content Security Policy(CSP) 적용하기

  • 안전한 API 설계를 위한 REST API 보안 체크리스트


전문가 코멘트: CSRF는 고전적인 공격이지만, 최근의 복잡한 웹 환경에서도 여전히 유효합니다. 특히 자산이나 개인정보를 다루는 서비스라면 반드시 CSRF 토큰을 적용하십시오.