CSRF 공격 이해: 과정, 위험, 방어 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
웹 개발자 및 보안 전문가 (중간 난이도)
핵심 요약
- CSRF 공격은 사용자의 인증된 세션을 악용해 비인가한 요청을 수행하는 웹 보안 취약점으로,
session_id
쿠키를 자동으로 포함하는 브라우저의 특성에 의존한다. - 방어 방법으로는
CSRF 토큰
,SameSite 쿠키
,Referer/Origin 검증
,차단 인증
이 사용되며,Django
,Spring
,Laravel
등 현대 웹 프레임워크에 내장된 보호 기능을 활용해야 한다. - 실무 권장사항:
GET
메서드는 민감한 요청에 사용하지 않도록 하고,SameSite=Strict
또는Lax
를 적용하여 교차 사이트 요청의 위험을 최소화해야 한다.
섹션별 세부 요약
1. CSRF 공격의 작동 원리
- 사용자가
A.com
(예: 은행)에 로그인한 후, 브라우저는session_id
쿠키를 저장한다. - 사용자가 악의적인 사이트
B.com
에 유도되고, 이 사이트는 자동 제출 폼을 통해A.com
으로 요청을 보낸다. - 브라우저는
session_id
쿠키를 자동으로 포함하여 요청을 전송하고,A.com
은 요청을 사용자 본인으로 인식해 실행한다. - 결과적으로 계좌 이체, 비밀번호 변경, 데이터 삭제 등의 심각한 피해가 발생할 수 있다.
2. CSRF 공격의 위험
- 금융 손실: 비인가된 이체 또는 결제.
- 계정 유출: 비밀번호 변경 또는 설정 수정.
- 데이터 조작: 사용자 데이터 삭제 또는 수정.
- 웹사이트 신뢰도 하락: 의도치 않은 액션 수행으로 사용자 신뢰 저하.
3. CSRF 방어 전략
- CSRF 토큰:
- 각 요청에 유일한
token
을 포함시키고, 서버에서 검증하여 악의적인 요청을 차단. - 예:
- SameSite 쿠키:
SameSite=Strict
또는Lax
설정으로, 교차 사이트 요청 시 쿠키 포함을 제한.- 예:
Set-Cookie: session_id=xyz123; SameSite=Strict
- Referer/Origin 검증:
- 요청의
Referer
또는Origin
헤더가A.com
에서 오는지 확인. - 추가 인증:
- 고위험 액션 (예: 이체)에는 재입력 비밀번호 또는 CAPTCHA를 요구.
결론
- CSRF 토큰과 SameSite 쿠키를 반드시 사용하고,
GET
메서드는 민감한 요청에 적용하지 않도록 한다. - OWASP ZAP 또는 Burp Suite를 활용한 정기적인 취약점 스캔과 사용자에게 피싱 위험 경고를 제공하는 것이 중요하다.