CSRF란...

SaGo_MunGcci·2022년 8월 12일
0

스프링

목록 보기
19/31
post-thumbnail

Definition Access

  • 스프링 시큐리티를 공부하다가 cors,csrf,xss 필터를 적용해야된다는 부분이 있어서 순차적으로 공부하고 각각 정리를 했다.

  • CSRF에 대해서 공부한 것을 정리한다.



Mechanism

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

  • 유명 경매 사이트인 옥션에서 발생한 개인정보 유출 사건에서 사용된 공격 방식 중 하나다.

  • 사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면,

  • 사이트간 요청 위조는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다.

  • 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.

옥션 해킹 사건

<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0">

  1. 옥션 관리자 중 한명이 관리 권한을 가지고 회사내에서 작업을 하던 중 메일을 조회한다. (로그인이 이미 되어있다고 가정하면 관리자로서의 유효한 쿠키를 갖고있음)

  2. 해커는 위와 같이 태그가 들어간 코드가 담긴 이메일을 보낸다. 관리자는 이미지 크기가 0이므로 전혀 알지 못한다.

  3. 피해자가 이메일을 열어볼 때, 이미지 파일을 받아오기 위해 URL이 열린다.
    해커가 원하는 대로 관리자의 계정이 id와 pw 모두 admin인 계정으로 변경된다.

방어 방법

1. Referrer 검증

request header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단.
일반적으로 이 방법만으로도 대부분 방어가 가능할 수 있다.
옥션이 아닌 개인 이메일에서 요청이 들어오는 것처럼,
같은 도메인 상에서 요청이 들어오지 않는다면 차단하도록 하는 것이다.

2. CSRF Token 사용

랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여 서버단에서 검증하는 방법.

// 로그인시, 또는 작업화면 요청시 CSRF 토큰을 생성하여 세션에 저장한다. 
session.setAttribute("CSRF_TOKEN",UUID.randomUUID().toString()); 

// 요청 페이지에 CSRF 토큰을 셋팅하여 전송한다 
<input type="hidden" name="_csrf" value="${CSRF_TOKEN}" />

3. CAPTCHA 사용

요즘은 거의 모든 웹사이트에서 캡차를 이용하는 것 같은데 캡차이미지상의 숫자/문자가 아니라면 해당 요청을 거부하는 것이다.

이 외에도 form 태그를 입력할 시 GET방식을 지양하고 POST방식을 쓰도록 하는 것은 기본이라고 할 수 있다.



Retrospection

  • 아 저 단순한 코드하나가 세상을 뒤흔들 줄이야...

  • 정말 네트워크 혹은 인터넷으로 하나가 되는 세상이지만, 저런 방법으로 단순하게 생각하면 진짜 단순한 방법으로 옥션이라는 서비스를 해킹할 줄이야....

  • CSRF,XSS를 공부하면서 항상 보안에도 신경써야 되겠다는 생각을 많이 하게 되었다. 프로그래밍을 하면서도 여러 사이트들을 인증해서 접속 할 수 밖에 없는데(대표적으로 AWS, naver) 언저부턴가 인증수단이 더 깐깐해졌고 2차인증이라는 개념도 생겼다.

  • 프로그래밍 공부를 하기 전에는 귀찮았는데 이제 공부하고 나니까 귀찮은것이 아니라 반드시 해야되는 필수였다는 것을 알게되었고 더 나아가서 당연한 일임을 알게되었다. 나의 개인정보는 내가 지켜야하고 내가 지킬 수 있는한 최대한 노력을 해야 되는 것이었다.

  • 나중에 여러 서버나 라이브러리, 등을 사용할텐데 더나아가서 도메인이나, 웹호스팅같은 곳에서도 나의 개인정보를 이용해서 사용할텐데 이때도 최대한 보안을 지킬 수 있을 만큼 지켜야겠다는 생각을 했다.



profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글