본문 바로가기
COMPUTER SCIENCE/Network

[Network Security] CSRF(Cross Site Request Forgery)

by 민트맛녹차 2022. 5. 15.

CSRF

Cross-Site Request Forgery(CSRF)는 웹 어플리케이션 취약점 중 하나로 사이트 간 요청을 위조해 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 요청하게 하는 공격기법이다.

 

공격자는 피싱으로 유저의 권한을 도용해 사이트에 요청을 보낸다. 유저가 현재 사이트에 인증된 상태, 즉 로그인 상태에서 요청을 받으면 사이트는 유저가 보낸 요청인지 공격자가 권한을 도용해 보낸 요청인지 구분할 수 없다. 따라서 사이트는 공격자가 원하는 요청을 수행하게 된다.

피해자 유저가 개인 계정이라면 개인정보를 변경하거나 금전적 피해 등을 주지만, 피해 유저가 관리자 계정이라면 웹 어플리케이션 전체에 큰 피해를 끼칠 수 있다.

 

실습

CSRF 실습을 위해 우선 mutillidae 에 회원 가입하여 test 라는 username 으로 로그인한다. http://10.0.2.4/mutillidae/index.php?page=add-to-your-blog.php의 입력창에 hihi 를 입력 후 BurpSuite 의 Proxy 를 켜 요청을 intercept 하였다. 해당 요청을 보면 csrf-token, blog_entry, add-to-your-blog-php-submit-button 값에 의해 blog 글이 생성된 것을 알 수 있다.

csrf 공격을 위해 csrf-token, add-to-your-blog-php-submit-button 의 값을 동일하게 설정하고 본문 내용이 들어가는 blog_entry 에는 내가 원하는 값을 입력하여 index.html 을 생성한다. 유저가 index.html 에 들어간다면 http://10.0.2.4/mutillidae/index.php?page=add-to-your-blog.php로 미리 설정해둔 값들을 post 하게 될 것이다.

메일 등으로 피싱하여 웹 어플리케이션에 로그인 된 유저가 index.html 을 클릭하게 된다면 사이트는 로그인 된 유저가 index.html 에 입력된 내용을 수행한 것으로 착각하여 해당 요청을 수행한다. 위의 사진을 보면 유저가 의도하지 않은 요청이 수행된 것을 알 수 있다.

 

방어 기법

CSRF 공격의 대표적인 방어 기법으로 Referrer 검증과 Security Token(CSRF Token) 사용 등이 있다.

Referrer 검증은 백엔드에서 요청의 referrer 를 확인하여 도메인이 일치하는 지 검증하는 방법이다. 일반적으로 referrer 검증만으로 대부분의 CSRF 공격을 방어할 수 있고 세밀한 도메인 단위 검증을 통해서 XSS 취약점에 의한 CSRF 공격도 방어할 수 있다.

Security Token 사용은 사용자의 세션에 토큰을 저장하고 요청마다 해당 토큰을 포함시켜, 백엔드에서 요청과 세션의 토큰 값이 일치하는지 검증하는 방법이다. 도메인 내에 XSS 취약점이 있다면 CSRF 공격에 취약해진다

 

 

참조
CSRF(교차 사이트 요청 위조) | 오와스 재단 (owasp.org)
https://youtu.be/atNmPzdvPD4
https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95

댓글