jhhan의 블로그

CSRF 본문

보안관련

CSRF

jhhan000 2020. 3. 3. 13:49

CSRF(XSRF)에 대해 알아보겠습니다.

Cross-Site Request Forgery ; 사이트 간 요청 위조

특징

  • 웹사이트 취약점 공격의 하나로
  • 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격입니다.
  • 희생자의 권한으로 희생자가 모르게 공격자의 의도대로 요청을 수행하도록 합니다.
  • 희생자의 권한에 따라 위험성이 달라집니다.
  • http통신의 stateless특성을 이용한 것으로, 쿠키정보만 이용해서 사용자의 의도하지 않은 공격이 가능합니다.
  • 예전 옥션에서 발생한 개인정보유출사건에 사용된 공격방식이기도 합니다.

ex)어떤 웹사이트에 로그인한 상태

    "https://xxxx.com/logout" 같은 url을 클릭 시 실제 사용자는 의도하지 않은 로그아웃을 요청합니다.

    예시로는 로그아웃을 들었지만, 다른 호출을 할 수도 있기 때문에 보안상 위험합니다.

 

공격과정 예시(또 다른 예시) - 위키피디아의 예시를 참고했습니다.

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0

  1. 이용자가 웹사이트에 로그인하여 정상적인 쿠키를 발급받습니다.
  2. 공격자는 공격용 링크를 이용자에게 이메일, 게시판 같은 경로로 전달합니다.
  3. 공격용 html 페이지로 이미지 태그를 갖습니다.
    • <img src="https://travel.service.com/travel_update?.src=Korea&dst=Hell">
    • 해당 링크는 출발지와 도착지를 등록하는 링크이고, 그 중에서 도착지를 변경하는 링크입니다.
  4. 이용자가 공격용 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 URL을 엽니다.
  5. 그 후 출발지와 도착지가 등록되면서 공격이 완료됩니다.
  6. 해당 서비스 페이지는 등록과정에 대해 쿠키를 통한 본인확인만 하므로 공격자가 정상적으로 이용자의 수정을 할 수 있습니다.

 

방어방법

1. Referrer 검증

  • Request Header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단하는 방식입니다.
  • 일반적으로 이 방법을 통해 대부분의 CSRF 공격을 방어할 수 있습니다.(지금은 어떤지는 모르겠네요..)
  • 같은 도메인 상에서 요청이 들어오지 않으면 차단합니다.

2. Security Token 사용

  • csrf token이라고도 한다.
  • 사용자 세션에 임의의 난수값을 저장하고
  • 사용자의 요청마다 해당 난수값을 포함시켜 전송합니다.
  • BackEnd에서는 요청을 받을 때마다 세션에 저장된 토큰값과 요청 파라미터에 전달되는 토큰값이 일치하는지 검증하는 방법입니다.

3. Double Submit Cookie 검증

  • Security Token 검증의 한 종류로
  • 세션을 사용할 수 없는 환경에서 사용이 가능한 방법입니다.
  • Javascript에서는 타 도메인의 쿠키값 확인/수정 을 못한다는 것을 이용한 방어기법입니다.
  • 스크립트 단에서 요청 -> 난수 값 생성해서 쿠키에 저장, 동일한 난수 값을 요청 파라미터에 저장하여 서버에 전송을 하면
  • 서버단에서는 쿠키의 토큰과 파라미터의 토큰값이 일치하는지만 검사합니다.
  • 서버에 따로 쿠키값을 저장하지 않기 때문에 세션을 이용한 검증보다 개발공수가 적은 편입니다.

 

참조 & 참고

https://sj602.github.io/2018/07/14/what-is-CSRF/

https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95

 

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

Spring Security(2)  (0) 2020.04.23
Spring - Security  (0) 2020.02.28