Learning
토픽 198 / 210·애플리케이션 보안

CSRF (Cross-Site Request Forgery)

CSRF (Cross-Site Request Forgery)

인증된 사용자의 세션을 악용하여 사용자가 의도하지 않은 요청을 웹 애플리케이션에 강제로 전송시키는 공격

특징: 인증된 세션 악용(사용자 모르게), 사용자 권한으로 악의적 행위 수행, 서버 측 상태 변경 공격

구성요소: 피해자 세션(인증 상태), 악의적 요청(공격자가 조작한 요청), 취약한 앱(검증 미흡)

공격 시나리오 상세

  • 1) 피해자가 은행 사이트(bank.com)에 로그인 → 세션 쿠키 저장
  • 2) 공격자가 악성 페이지에 숨겨진 폼 삽입:
  • 3) 피해자가 로그인 상태에서 악성 페이지 방문
  • 4) 브라우저가 bank.com 쿠키를 자동 포함하여 송금 요청 전송
  • 5) 서버는 유효한 세션 쿠키 확인 → 정상 요청으로 처리 → 공격자에게 송금 완료

CSRF 토큰 동작원리

  • 서버가 폼 렌더링 시 랜덤 토큰 생성 → 세션에 저장 + 폼에 hidden 필드로 삽입
  • 요청 수신 시 폼의 토큰과 세션의 토큰 비교 → 불일치 시 거부
  • 공격자는 다른 도메인에서 토큰 값을 알 수 없음(Same-Origin Policy)
  • Double Submit Cookie: 쿠키+헤더에 동일 토큰 전송, 서버에서 두 값 비교

SameSite 쿠키 상세

  • SameSite=Strict: 크로스사이트 요청 시 쿠키 전송 완전 차단 (링크 클릭도 차단)
  • SameSite=Lax: GET 요청(링크 클릭/리다이렉트)은 허용, POST/PUT/DELETE는 차단 (기본값)
  • SameSite=None; Secure: 크로스사이트 허용(HTTPS 필수), 서드파티 쿠키 필요 시

대응: CSRF 토큰(Synchronizer Token Pattern/랜덤 토큰 검증), SameSite=Strict/Lax 쿠키(크로스사이트 쿠키 전송 차단), Referer/Origin 검증, 중요 작업 재인증

적용사례: 송금, 비밀번호 변경, 게시글 작성, 설정 변경

비교: CSRF(인증 세션 악용/서버 상태 변경) vs XSS(스크립트 주입/클라이언트 실행) vs Clickjacking(UI 속임수/클릭 유도)

연관: OWASP Top 10, WAF, 세션 관리, SameSite 쿠키