Info/개념 정리

[개념] CSRF란 무엇인가?

soohykeee 2023. 1. 18. 20:03
728x90

 

CSRF란 무엇인가?

CSRF는 Cross Site Request Forgery의 약자로, 사이트간 요청 위조를 말하는데 웹 취약점 공격 중 하나이다. 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위 (데이터 수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격이다. 

 


 

CSRF 동작 원리 및 순서

우선 CSRF에 당하는 조건은 아래와 같다.

  1. 사용자는 보안이 취약한 서버로부터 이미 로그인이 되어있는 상태여야 한다.
  2. 쿠키 기반의 서버 세션 정보를 획득할 수 있어야 한다.
  3. 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 한다.

만일 위의 조건들이 만족된다면 다음과 같은 순서로 CSRF 공격을 당할 수 있다.

  1. 사용자는 보안이 취약한 서버에 로그인한다.
  2. 서버에 저장된 세션 정보를 사용할 수 있는 Session ID가 사용자의 브라우저 쿠키에 저장된다.
  3. 공격자는 사용자가 악성 스크립트 페이지를 누르도록 유도한다.
    • 게시판이 있는 웹사이트에 악성 스크립트 게시글을 작성하여 클릭하도록 유도
    • 메일 등으로 악성 스크립트를 전달하여 클릭하도록 유도
  4. 사용자가 악성 스크립트가 작성된 페이지 접근 시, 웹 브라우저에 의해 쿠키에 저장된 Session ID와 함께 서버로 요청.
  5. 서버는 쿠키에 담긴 Session ID 를 통해 해당 요청이 인증된 사용자로부터 온 것으로 판단하고 처리

 

 

 

 


 

CSRF 대응방법들

CSRF에 대응하는 방법은 크게 3가지가 존재한다.

1. CAPTCHA 사용

CAPTCHA는 이미지를 보여주고, 그 이미지에 해당하는 그림, 문자, 숫자를 입력하도록하고 만일 아니라면 요청을 거부하기때문에, 효과적으로 CSRF의 공격을 방어할 수 있는 방법이다.

 

2. Referreer 검증법

요청이 들어올 때 request의 header에 담겨있는 referrer 값을 확인하여 같은 도메에서 보낸 요청인지 검증하여 차단하는 방법이다. 거의 대부분의 경우 해당 검증 방법을 사용하면 방어할 수 있다.

 

3.CSRF Token 사용

사용자의 세션에 임의의 값을 저장하여 모든 요청마다 그 값을 포함하여 전송한다. 요청이 들어올 때마다 백엔드에서 Session에 저장된 값과 요청으로 전송된 값이 일치하는지 검증하여 방어하는 방법이다.

 

 


 

 

참고:
https://tibetsandfox.tistory.com/11
https://devscb.tistory.com/123
https://sj602.github.io/2018/07/14/what-is-CSRF/

728x90