CSRF


CSRF(Cross Site Request Forgery)란 직역을 해보면 사이트 간 요청 위조를 말한다. 웹 애플리케이션 취약점 중 하나로 공격자가 희생자의 권한을 도용하여 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 실행하게 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법을 의미한다. CSRF 공격을 이용하여 

공격자가 희생자의 계정으로 다수의 방문자가 있는 사이트에 광고성 혹은 유해한 게시글을 업로드하는 것도 가능해진다. 공격의 난이도가 높지 않아 널리 사용되는 방법 중 하나이며 실제로 2008년에 발생한 옥션의 개인정보 유출 사건에서도 관리자 계정을 탈취하는데 이 방법이 사용되었다. 

 

CSRF의 원리


위의 그림은 CSRF 공격의 일련의 과정을 그림으로 간단하게 나타낸 것이다.

 

  1. 공격자가 희생자에게 애플리케이션 서버에 비정상적인 request를 전송하는 소스코드 또는 URL이 담긴 이메일을 전송하거나 게시판의 게시물에 삽입하여 게시물을 작성하는 등 희생자가 공격자가 의도한 행동을 하도록 한다.
  2. 공격 대상 애플리케이션에 로그인이 되어 있거나 session등에 권한이 저장되어 있는 유저는 이를 실행하게 되면서 공격자가 의도한 POST, PUT, DELETE 등의 method를 실행하게 된다.
  3. 이를 통해 애플리케이션에 치명적인 손상을 주게 되며, 위 그림과 같은 경우는 CSRF공격을 통해 유저의 cookie, session 정보를 탈취당한 것이라고 볼 수 있을 것이다.

 

CSRF의 대비책


○Referrer 검증

Referrer이란 링크를 통해서 각각의 site로 방문 시 남는 흔적을 말하며, 사이트 방문객이 어떤 경로로 자신의 사이트에 방문했는지 알아볼 때 유용하게 사용된다. 이러한 Request Header에 있는 요청을 한 페이지의 정보가 담긴 Referrer 속성을 검증하여 차단하는 방법이다. 검증을 하여 같은 도메인 상에서 들어온 요청이 아닌 경우에는 차단을 하여 방어를 하게 된다. 일반적으로 해당 방법으로도 어느 정도 방어가 가능하다.

 

○Token 검증

무작위 한 난수 값을 생성하여 사용자의 세션에 저장하여 모든 요청에 대하여 서버 쪽에서 검증하는 방법이다. 요청을 받을 때마다 백엔드에서는 사용자의 세션에 저장되어 있는 토큰 값과 요청 파라미터에서 전달되는 토큰 값이 같은지를 검증하여 다른 경우는 차단을 하여 방어를 하게 된다.

 

○Double Submit Cookie

Token 검증의 한 종류로 세션을 사용할 수 없는 환경에서 사용할 수 있는 방법이다. 웹브라우저의 Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방어 기법이다. 스크립트 단에서 모든 요청 시 난수 값을 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터(혹은 헤더)에도 저장하여 서버로 전송한다. 서버단에서 쿠키의 토큰 값과 파라미터의 토큰 값이 일치하는지 검증을 진행하여 일치하면 서버는 정당한 요청으로 받아들이고, 그렇지 않으면 요청을 거부하게 되면서 방어가 이루어지게 된다.

 

'보안' 카테고리의 다른 글

SQL Injection  (0) 2022.01.26

+ Recent posts