IT/영어 공부노트
Cross Site Request Forgery : CSRF 정리 본문
CSRF(Cross Site Request Forgery)
이용자를 속여서, 의도치 않은 요청에 동의하게 하는 공격이다.
ex) 웹 페이지를 만들어 이용자의 입력을 유도해, 입력된 값을 은행 등의 사이트로 전송해 이용자가 동의한 것 같은 요청을 발생시킨다 ((비밀번호 바꾸기, 돈 송금, 이메일 주소 변경 등))
웹 서비스는 쿠키나 세션을 사용해 이용자를 식별한다.
임의 사용자의 쿠키를 사용할 수 있다? -> 임의 이용자의 권한으로 웹 서비스의 기능을 사용할 수 있다.
Cross Site Request Forgery 동작
CSRF 공격에 성공하려면, 공격자가 작성한 악성 스크립트(HTTP 요청을 보내는 코드)를 이용자가 실행해야 한다.
- 공격자가 이용자에게 메일을 보내기
- 게시판에 글을 작성해 이를 조회하도록 유도
공격 스크립트는 HTML 또는 Javascript를 통해 작성할 수 있다.
- HTML img 태그 공격 코드 예시
http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337' width=0px height=0px>
- Javascript 공격 코드 예시
/* 새 창 띄우기 */
window.open('http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337');
/* 현재 창 주소 옮기기 */
location.href = 'http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337';
location.replace('http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337');
1. 애플리케이션 내에 공격자가 공격을 유발해야 할만한 액션이 있어야 한다. (ex 암호변경)
2. HTTP 요청을 발행해야 하며 애플리케이션은 세션 쿠키에만 의존하여 요청한 사용자를 식별해야한다.
3. 공격자가 값을 결정하거나 추측할 수 없는 매개 변수가 포함되어 있지 않아야 한다. (ex 전 비밀번호 묻기)
CSRF 익스플로잇은 Burp Suite Professional 에 내장된 CSRF PoC 생성기를 사용해서 작성할 수 있다.
XSS와 CSRF의 차이
공통점 - 두 개의 취약점은 모두 클라이언트를 대상으로 하는 공격이며, 이용자가 악성 스크립트가 포함된 페이지에 접속하도록 유도해야 한다.
차이점 - 공격의 목적이 다르다. (XSS: 세션 및 쿠키 탈취, CSRF: 이용자가 임의 페이지에 HTTP 요청을 보내기)
참조
https://dreamhack.io/lecture/courses/172