CSRF란?

사이트 간 요청 위조또는 크로스 사이트 요청 위조(Cross-site request forgery, CSRF, XSRF)는  웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

 

CSRF공격을 성공하려면 

  • 사용자가 로그인이 되어 있어야한다.
  • 사용자가 해커가 심어놓은 게시글이나 이미지를 클릭해야한다!

밑에 글을 보며 자세히 이해해보자!

 

 

 

CSRF의 공격순서

 

CSRF공격순서

  1. 먼저 해커가 보안이 취약한 웹사이트에 HTTP로 작성된 요청문을 게시글에 작성한다(사용자의 정보를 얻기위해 해당 게시글을 누르면 작성된 요청문이 실행되어 해커에게 정보가 날라감)
  2. xss와 마찬가지로 해커에게 정보가 날라가는 요청문이 DB에 저장되게 된다.
  3. 사용자가 게시판을 내려보다 해커가 심어놓은 해당 게시글을 클릭하게되면 해당 링크 또는 해당 게시글의 이미지를 클릭햇을때 해커가 작성한 HTTP요청을 사용자 본인의 권한으로 실행하게 된다 (이때 사용자가 로그인이 되어있어야함, 로그인이 되있는 상태에서 클릭시 해커가 심어놓은 HTTP요청을 사용자 본인의 요청으로 실행하게되고 해당 정보는 해커에게 넘어간다)

 

CSRF의 취약한지 판단하는 방법

위의 사진처럼 img src를 이용하여 유저를 강제 로그아웃(사용자에게 피해를 끼치는) 시키는 코드를 작성하고 임의의 유저가 해당 이미지를 클릭시 해당 요청이 실행된다면 csrf의 취약하다고 판단할 수 있다 (img는 기본적으로 get요청을 사용하기 때문에 위와 같은 코드가 가능함)

실제로 2008년 옥션에서 발생했던 관리자 계정 탈취 사건도 관리자가 admin 권한으로 로그인 한 상태에서 피싱 메일을 열람하였고 피싱 메일안에 숨겨진 CSRF코드가 실행되어 관리자 권한을 탈취하게 된 것이다.

 

 

 

그렇다면 CSRF의 대응 할 수 있는 방법!

1. Referrer 검증법

클라이언트가 서버로 데이터를 요청할때마다 request의 header에 담겨있는 referrer값을 확인하여 같은 도메인에서 보낸 요청인지를 확인하고 차단하는 방법이다.

하지만 동일 사이트 내에서 XSS 취약점이 발견된다면 이를 통하여 CSRF 공격을 실행할 수 있다는 점을 유의해야 하며 이는 페이지 단위까지 쪼개어서 도메인 검증을 하는것으로 페이지 간 CSRF 공격을 방어할 수 있다!

 

2. CSRF Token 사용

사용자의 세션에 임의의 값을 저장하여 모든 요청마다 그 값을 포함하여 전송한다.(세션로그인 방식)

그리고 요청이 들어올 때 마다 백엔드에서 세션에 저장된 값과 요청으로 전송된 값이 일치하는지 검증하여 방어하는 방법!

referrer 검증법과 같이 XSS를 통한 CSRF 공격에 취약하다는 특징이 있다!

 

 

XSS와 CSRF의 차이

- XSS는 사이트변조나 백도어를 통해 클라이언트에 대한 악성공격을 한다.

- CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버에 대한 악성공격을 한다.

 

 

 

 

참고사이트

https://tibetsandfox.tistory.com/11

 

CSRF(Cross Site Request Forgery)란?

CSRF란? CSRF는 Cross Site Request Forgery(사이트 간 요청 위조)의 줄임말로 웹 취약점 중 하나입니다. 공격자가 희생자의 권한을 도용하여 특정 웹 사이트의 기능을 실행하게 할 수 있으며 이는 희생자

tibetsandfox.tistory.com

https://crossjin.tistory.com/entry/CSRFCross-Site-Request-Forgery%EB%9E%80

 

CSRF(Cross Site Request Forgery)란?

CSRF를 직역해보면 "사이트 간 요청 위조"라는 뜻을 가지고 있다. 한 때 OWASP top 10에도 오른 적이 있을 만큼 대단히 위험도가 높은 것으로 평가되었던 공격이다. 그리고 시험공부를 할 때 여기저기

crossjin.tistory.com

 

'Web' 카테고리의 다른 글

Cookie/WebStorage (Local/Session Storage)차이  (0) 2021.08.03
Refresh/Access Token  (0) 2021.08.02
JWT  (0) 2021.08.02
XSS  (0) 2021.07.30
세션/쿠키  (0) 2021.07.28

+ Recent posts