CSRF(Cross Site Request Forgery) : 사이트간 요청 위조
사용자가 자신도 모르게 공격자가 의도한 악의적인 행위를 서버로 요청하게 만드는 공격이다
CSRF는 주로 민감한 요청을 하는 모든 곳에서 일어날 수 있다!!
그리고 CSRF로 비밀번호를 변경하거나, 이메일 주소를 변경하거나, 관리자 계정을 등록할 수 있다
2008년 어떠한 온라인 쇼핑몰에서 개인정보 유출사건에 관리자 계정을 탈취하는데 사용된적이 있다
CSRF 공격 흐름
[1] 공격자는 게시물에 CSRF 공격 코드를 작성한다
[2] 웹 서버는 게시물을 DB에 저장한다
[3] 사용자는 공격게시판에 들어가거나([3-1]), 공격자가 사용자에게 공격 페이지 URL을 전달한다 ([3-2])
[4] 사용자가 공격자의 URL을 받아 접속한다, 그러면 웹 서버는 공격 코드를 응답해준다
[5] 공격자는 사용자의 계정을 탈취하여 요청하고 응답받아 로그인한다
XSS와 CSRF
CSRF가 XSS를 이용해서 공격을 할 수 있기 때문에 비슷하게 보일 수 있지만
사실 전혀! 완전! 다른 공격 기법이다!!
XSS : 클라이언트 측 코드를 삽입하여 클라이언트의 브라우저에서 실행하게 하는 공격
CSRF : 피해자가 자신도 모르게 서버로 임의의 요청을 하게 만드는 공격
CSRF는 권한에 관한 공격, XSS는 세션과 웹사이트 변조에 관한 공격이다
공격위치도 XSS는 사용자의 웹 브라우저에서 일어나고 CSRF는 웹 서버에서 일어난다
CSRF 공격 방법
[1] GET Method 방식
GET 메소드일 경우 URL을 수정해서 전달하면 된다
EX) http://www.test.com/userUpdate.php 라는 페이지가 있을 경우
http://www.test.com/userUpdate.php?userPw=1234를 전달하거나,
게시판에 이 URL을 들어갈 수 있게 하여 접속하면 사용자의 계정의 비밀번호를 수정하여 계정을 탈취 할 수 있게한다
[2] POST Method 방식
POST 메소드 방식일 경우 파라미터를 수정하기 위해서는 가장 먼저 XSS 취약점을 찾아야한다
XSS 취약점에 <form> 태그를 이용하여 파라미터를 수정한다
XSS 취약점 게시판에 코드를 삽입한다
// XSS 취약점에 삽입할 코드
<iframe style="display:none;" name="stealthFrame" ></iframe> // display:none으로 숨김
<form method="POST" action="http://www.test.com/userUpdate.php" target="stealthFrame">
<input type="hidden" name=userPw value="1234"/>
</form>
<script>
document.forms[0].submit();
</script>
작성한 게시판의 게시판에 들어올 수 있게 하거나 URL을 사용자에게 전달하여 탈취한다
[3] Referer Check
Referer : 사용자가 어떤 웹 사이트, 웹 페이지에서 요청이 왔는지 확인
Referer Check가 있는 페이지 같은 경우 우회하기 위해 <meta> 태그를 활용한다
<meta name="referer" content="no-referrer"> // Referer Check 우회
<iframe style="display:none;" name="stealthFrame" ></iframe>
<form method="POST" action="http://www.test.com/userUpdate.php" target="stealthFrame">
<input type="hidden" name=userPw value="1234"/>
</form>
<script>
document.forms[0].submit();
</script>
[4] CSRF Token
CSRF Token : 임의의 난수를 발생하여 파라미터로 전달하여 파라미터 수정을 함부로 못하게 막는다
CSRF Token 우회 방법은 XSS에서 세션을 탈취하는 방법으로 사용자가 URL에 접속하자마자 사용자의 CSRF Token을 탈취하고 바로 파라미터로 넣는 방법으로 우회한다
CSRF 대응 방안
[1] XSS 취약점 대응 : HTML 특수문자 HTML Entity치환, 화이트 리스트, 블랙 리스트 필터링
[2] POST 방식으로 작성 : GET 방식보다 POST 방식으로 페이지 작성
[3] Double Submit Cookie
[4] 추가 인증 방법 : 사용자의 기존 정보를 입력해야 변경될 수 있게 만들어 URL을 접속한다고 바로 바뀌지 않게 한다
'모의해킹 공부 > 총정리' 카테고리의 다른 글
XSS 정리 (0) | 2023.05.20 |
---|---|
SQL Injection 정리 (0) | 2023.05.06 |