토픽 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 쿠키