CSRF(Cross-Site Request Forgery) 공격은 사용자가 신뢰하는 웹 애플리케이션에 대해 공격자가 의도치 않은 악성 요청을 실행하도록 유도하는 웹 보안 취약점입니다. 주로 사용자가 인증된 상태에서, 공격자가 사용자의 권한을 악용하여 피해를 발생시키는 것이 목적입니다.
2. CSRF 공격의 동작 방식
사용자가 신뢰할 수 있는 웹 애플리케이션에 로그인하여 세션 쿠키를 보유하고 있는 상태.
공격자가 악성 웹사이트(혹은 이메일, 링크)를 만들어 사용자를 유도.
사용자가 해당 악성 링크를 클릭하면, 사용자의 브라우저는 현재 보유한 세션 쿠키를 사용해 신뢰할 수 있는 웹 애플리케이션으로 요청을 보냄.
이 요청은 사용자 의도와 무관하게 실행되며, 공격자는 사용자의 권한으로 악의적인 작업을 수행함.
3. CSRF 공격의 예시
은행 웹사이트에서 사용자가 로그인한 상태.
공격자가 다음과 같은 요청을 포함한 링크를 악성 웹사이트에 삽입:
사용자가 악성 웹사이트를 방문하면 요청이 자동 실행되어 공격자의 계좌로 돈이 이체됨.
공격자가 사용자의 계정을 비활성화하거나 중요한 설정을 변경하도록 함.
4. CSRF 공격의 특징
사용자가 인증된 상태에서 실행되므로 공격이 성공할 가능성이 높음.
피해자는 요청을 자신이 보낸 것으로 인식하기 어렵다.
5. CSRF 방어 방법
CSRF 토큰 사용
서버는 요청마다 고유한 CSRF 토큰을 생성하고 이를 클라이언트에 전달.
클라이언트는 요청 시 이 토큰을 함께 전송하고, 서버는 토큰을 검증하여 요청의 유효성을 확인.
Referer 헤더 확인
요청의 Referer 헤더를 확인하여 요청이 신뢰할 수 있는 출처에서 왔는지 검증.
SameSite 쿠키 설정
세션 쿠키를 SameSite 속성으로 설정하여 다른 도메인에서 요청 시 쿠키가 자동으로 전송되지 않도록 방지.
사용자 인증 재확인
민감한 작업(예: 계좌 이체, 비밀번호 변경) 시 추가 인증(예: 비밀번호 입력)을 요구.
CORS 정책
신뢰할 수 있는 출처에서만 요청을 처리하도록 서버를 설정.
6. CSRF와 XSS의 차이
CSRF: 사용자가 신뢰하는 웹 애플리케이션에서 공격자가 요청을 조작.
XSS: 웹 애플리케이션이 공격자의 악성 스크립트를 실행.
CSRF는 사용자 세션을 악용하고, XSS는 웹사이트의 스크립트 실행을 노리는 공격이라는 점에서 차이가 있습니다.