반응형
**CSRF(Cross-Site Request Forgery)**를 실무 관점에서 정리해줄게.
역시 원리 → 예시 → 공격 목표 → WAF/개발 방어까지 포함했어.
🔥 1. CSRF(Cross-Site Request Forgery) 개념
정의:
CSRF는 사용자가 로그인한 상태를 이용해, 공격자가 몰래 의도하지 않은 요청을 서버에 보내도록 하는 공격이야.
쉽게 말하면:
- 사용자는 정상적으로 사이트에 로그인 되어 있음
- 공격자는 사용자가 모르는 사이 권한 있는 요청을 서버에 보내게 함
- 공격자는 서버가 요청을 정상 사용자로 인식하게 만듦
🔹 2. CSRF 공격 원리
[사용자 브라우저] 로그인 상태 유지 → [악성 사이트 방문] → [자동 전송된 요청] → [타겟 서버에서 실행]
- 로그인 쿠키나 세션 토큰을 사용
- 사용자가 버튼 클릭 안 해도 요청 발생 가능
예:
- 사용자가 은행 로그인 상태로 공격자 페이지 방문 → 몰래 송금 요청 전송
🔹 3. CSRF 공격 예시
1) HTML Form 자동 전송
<form action="https://bank.com/transfer" method="POST" id="csrfForm"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="toAccount" value="attacker"> </form> <script> document.getElementById('csrfForm').submit(); </script>
2) Image 태그 요청 방식(GET)
<img src="https://bank.com/transfer?amount=1000&toAccount=attacker" />
3) Link 클릭 유도
<a href="https://bank.com/transfer?amount=1000&toAccount=attacker">Click here!</a>
➡️ 사용자는 아무런 의심 없이 클릭하거나 방문만 해도 서버에서 요청 실행
🔹 4. 공격 목표
- 계정 권한을 이용한 송금, 포인트 이동
- 비밀번호 변경
- 개인정보 수정
- 관리자 권한 악용
🔹 5. WAF / 보안관제 대응
- CSRF 토큰 검증
- 요청 시 서버가 랜덤 토큰 발급
- 모든 상태 변경 요청에 토큰 포함
- 공격자가 토큰 모르면 요청 거부
- Referer / Origin 체크
- 요청 헤더의 출처 검증
- 외부 사이트에서 오는 요청 차단
- SameSite Cookie
- SameSite=Lax|Strict 설정
- 외부 사이트에서 쿠키 자동 전송 방지
- WAF 탐지
- 상태 변경 요청 POST/PUT/DELETE 패턴 감시
- 외부 출처 Referer 없는 요청 탐지
- 반복 공격 IP 차단
🔹 6. 개발 단계 방어
- CSRF Token 사용: 각 세션별 랜덤 값
- Hidden Form + Token 검증
- GET 요청은 상태 변경 금지
- SPA / API: CORS + 토큰 기반 인증
# Flask CSRF 예시 from flask_wtf.csrf import CSRFProtect csrf = CSRFProtect(app)
🎯 한 문장 요약
CSRF = 공격자가 사용자의 로그인 세션을 이용해 사용자가 의도하지 않은 요청을 서버로 보내게 만드는 공격이며, CSRF 토큰, Referer 체크, SameSite 쿠키 설정으로 방어 가능하다.
반응형
'2. 보안 > 2. 보안 관제' 카테고리의 다른 글
| [보안_GPT] File Upload Vulnerability 이란? (0) | 2025.11.14 |
|---|---|
| [보안_GPT] Command Injection 이란? (0) | 2025.11.14 |
| [보안_GPT] 크로스 사이트 스크립트(XSS)란? (0) | 2025.11.14 |
| [보안_GPT] SQL Injection이란? (0) | 2025.11.14 |
| [보안_GPT] 보안 관제란? (0) | 2025.11.14 |