CSRF

CSRF는 사용자가 자신의 의지와 무관하게 공격자가 의도한 행위(수정,삭제, 등록, 결제)등을 특정 웹사이트에 요청하게 만드는 공격이다.

CSRF 전제 조건

  • 사용자가 보안이 취약한 서버로부터 이미 인증 받은 상태여야한다.

  • 쿠키 기반으로 서버 세션 정보를 획득할 수 있어야 한다.

  • 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야한다. 예상치 못한 파라미터가 있으면 불가능하다.


CSRF 공격의 기본 동작

  1. 공격 대상자가 민감한 정보가 저장된 사이트에 로그인하고, 쿠키에 인증 정보가 저장된다.

  2. 공격 대상자가 공격자가 준비한 피싱 사이트등에 접속한다.

  3. 피싱 사이트에서는 대상 사이트에 대한 악의적인 요청을 자동으로 보낸다. a. 요청은 사용자의 브라우저를 통해 이루어진다. b. 사용자가 아직 로그인된 상태라면 인증 쿠키와 함께 전송되어 그대로 실행될 수 있다.

  4. 대상 사이트는 악의적인 요청을 정상적인 사용자의 요청으로 인식하고 처리한다.


공격을 방어하기 위한 방법

Referrer 검증

  • HTTP Referer 헤더는 요청이 시작된 웹페이지의 주소를 포함하므로, 이를 이용하여 요청이 정당한 소스에서 왔는지 확인할 수 있다.

  • 즉, 서버는 요청을 받을때 이 Refere헤더를 확인하고 요청이 자신의 사이트에서 시작된 것이라면 그 요청을 수락하고, 그렇지 않다면 거부한다.

주의사항 사용자의 프라이버시 : Referer헤더는 사용자의 브라우징 행동에 대한 정보를 공개하므로 프라이버시 문제가 될 수 있다. 헤더 조작 : 공격자는 HTTP헤더를 조작하여 Referer값을 변경할 수 있다.

SamSite 쿠키 속성

  • 이 속성은 브라우저가 쿠키를 같은 사이트 요청 시에만 보내도록 제한 하는 방식이다.

CSRF TOKEN 사용

  • 서버는 사용자 세션마다 무작위로 생성된 고유한 값을 CSRF토큰으로 사용자에게 제공한다. 사용자가 서버에 요청 보낼때 이 토큰을 포함하여 보내면, 서버는 이 토큰을 검증하여 요청이 정당한지 판단한다.

재 인증 요구

  • 사용자가의 중요한 동작을 실행하기 전에 비밀번호나 2단계 인증 등을 다시 요구함으로써, 사용자가 자신의 의지로 해당 동작을 실행하는 것인지 확인할 수 있다.

XSS와 CSRF에 대한 차이점

  • XSS는 사용자의 브라우저에서 실행되는 스크립트를 통해 공격이 이루어지는 반면

  • CSRF는 서버에 보내는 요청 자체를 조작하여 공격이 이루어진다.

  • XSS 공격은 성공하면 공격자는 희생자의 권한으로 사이트에 접근할 수 있는 반면 CSRF는 사용자가 이미 로그인한 상태에서 해당 사용자의 세션을 이용하여 공격이 이루어진다.

Last updated