사이트 간 요청 위조 (Cross-Site Request Forgery)
쉽게 풀면
은행 창구 직원이 고객의 얼굴만 보고 신원을 확인한 뒤 어떤 서류든 받아 처리해준다고 가정할 때, 누군가 그 고객의 이름을 도용한 가짜 서류를 몰래 끼워 넣어 처리시키는 상황과 비슷합니다. 사용자가 어떤 웹사이트에 로그인된 상태로 다른 악성 웹페이지를 열람하면, 그 페이지가 사용자 모르게 로그인된 사이트로 요청을 보내게 만듭니다. 웹사이트는 이 요청이 사용자의 로그인 정보(쿠키 등)를 가지고 있으므로 정상 요청으로 착각해 처리해 버립니다. 그 결과 사용자의 의도와 무관하게 비밀번호 변경, 송금, 게시글 작성 같은 행위가 실행될 수 있습니다. 흔히 CSRF라고 줄여 부릅니다.
왜 중요한가
CSRF는 사용자의 인증 정보를 훔치지 않고도 로그인 상태를 악용한다는 점에서 웹 애플리케이션 보안 연구에서 오래도록 다루어진 주요 취약점 유형입니다. 실제 서비스에서 금전적 피해나 계정 설정 변경으로 이어질 수 있어, 이를 방지하는 토큰 기반 검증 기법과 웹 표준 차원의 대응이 지속적으로 연구되고 있습니다.
논문에서는 이렇게 쓰입니다
웹 개발 프레임워크가 CSRF 공격을 막기 위해 사용하는 검증 토큰의 구현 방식을 실제로 점검한 연구입니다.
브라우저의 쿠키 정책 변화가 CSRF 공격 방어에 미치는 영향을 실증적으로 분석한 사례입니다.
조금 더 깊게 보면
대표적인 방어 기법으로는 요청마다 예측 불가능한 값을 포함시켜 검증하는 CSRF 토큰, 쿠키가 다른 사이트발 요청에 자동으로 포함되지 않도록 제한하는 SameSite 쿠키 속성, 요청의 출처를 확인하는 Origin/Referer 검사 등이 있습니다. 이러한 기법들은 각각 장단점이 있어 여러 방법을 함께 적용하는 것이 일반적으로 권장됩니다.
주의할 점
CSRF는 크로스 사이트 스크립팅(XSS)과 혼동되기 쉬우나 서로 다른 개념입니다. XSS는 악성 스크립트를 실행시키는 공격이고, CSRF는 사용자의 인증 상태를 이용해 원치 않는 요청을 대신 보내게 만드는 공격입니다. 다만 XSS가 존재하면 CSRF 방어 토큰까지 탈취될 수 있어 두 취약점이 함께 다루어지는 경우도 많습니다.