CSFR (Cross-Site Request Forgery)란?
웹 애플리케이션의 취약점 중 하나로, 공격자가 사용자를 속여 원치 않는 요청을
특정 웹 애플리케이션에 보내도록 만드는 공격입니다. 공격은 사용자의 인증 세션(쿠키, 토큰 등)을 악용해 사용자가
의도하지 않은 작업을 실행합니다
- 핵심: 사용자의 신뢰된 인증 세션을 악용하여, 사용자 몰래 원하지 않는 요청을 실행
XSS와의 차별점
|
CSRF |
XSS |
공격 목표 |
사용자의 신뢰를 악용해 서버에 원치 않는 요청을 보낸 |
사용자의 브라우저에 악성 스크립트를 실행 |
공격 방식 |
공격자가 의도한 요청을 사용자 인증 정보를 통해 실행 |
악성 코드를 삽입하여 사용자의 브라우저에서 실행 |
주요 대상 |
서버 (사용자) |
사용자 |
필요 조건 |
사용자가 로그인 상태 (세션 or 쿠키 활성화) |
사용자 입력을 제대로 검증하지 않는 취약점 |
CSRF가 발생하는 지점
- 로그인된 상태에서 요청을 처리하는 경우
- 사용자가 로그인한 상태에서 세션 기반 인증(쿠키 등)을 사용하는 경우, 공격자는 사용자의 인증 정보를 악용할 수 있습니다.
- 서버가 요청의 출처를 검증하지 않는 경우
- 서버가 요청의 Origin이나 Referer 헤더를 검증하지 않으면 공격자가 조작된 요청을 전송할 수 있습니다.
- 민감한 작업이 GET 요청으로 처리되는 경우
GET vs POST 요청의 차이점
GET |
POST |
요청 파라미터가 URL에 포함됨 |
요청 파라미터가 HTTP본문에 포함됨 |
쉽게 브라우저 주소창, 링크, 이미지 등을 이용 가능 |
자동으로 요청하려면 스크립트 또는 폼 조작 필요 |
URL을 조작해 간단히 공격 가능 |
폼 제출, 스크립트 등을 사용해야하므로 복잡함 |
CSRF + XSS 연계 공격 시나리오
- 공격자가 XSS 취약점을 이용하여 악성 스크립트를 삽입
- 예: 댓글 입력 창이나 검색창에 악성 스크립트를 삽입
- 피해자가 악성 페이지를 열면 스크립트가 자동 실행
- 브라우저에서 악성 스크립트가 실행되고, 피해자의 인증 세션 쿠키 또는 민감한 데이터가 공격자 서버로 전송됩니다
- 공격자가 인증 세션 또는 민감한 데이터를 활용
- 예: 피해자의 세션 쿠키를 탈취하여 피해자의 계정으로 서버 작업 수행
CSRF 방어 방법
- CSRF 토큰 사용
- 모든 민감한 요청에 대해 고유 토큰을 포함하도록 요구
- 서버는 요청 시 토큰을 확인하여 유효성을 검증
- 쿠키 SameSite 속성 설정
- SameSite 속성을 Strict 또는 Lax로 설정하여 다른 출처에서 쿠키가 전송되지 않도록 제한