CSRF 공격 정리

2023. 5. 26. 11:57해킹/CSRF

면접에서 CSRF와 XSS의 차이점을 물어본다고 한다.

CSRF는 CROSS SITE REQUEST FORGERY.

해커가 사용자가 모르게 요청을 위조해서 사용자의 권한 - 세션을 이용해서 어떤 작업을 수행하는것.

XSS는 CROSS SITE SCRIPTING.

해커가 악성 스크립트를 삽입해서 서버가 클라이언트에게 악성 스크립트를 전달해줌.

클라이언트 측에서 악성 스크립트 실행. -> 피싱,채굴,키로깅,세션 탈취 등 다양한 공격이 가능

즉 악성 스크립트를 삽입해서 클라이언트를 공격하는 기법.

 

 

한번 그림을 그려보았다.

 

이 두 공격을 합치면 해커가 악성 스크립트를 삽입해서 사용자의 요청을 위조하는 공격이 된다.

둘이 같이 연계해서 하는 공격은 더욱 효과적이다.

 

CSRF 는 모든 요청에서 일어날 수 있다.

다만 요청의 중요도에 따라서 취약점 기준이 다르다.

 

게시판 글을 보는 요청을 위조하는것과

사용자 비밀번호 번경, 게시글 작성 등을 위조하는것은 위험도가 다르기 때문.

 

요청을 위조하는 공격이기 때문에

요청 방식에 따라서 공격 방식도 달라진다.

 

GET 방식의 요청은 파라미터를 변경해서 링크를 뿌리면 된다.

 

하지만 POST 방식의 요청은 링크에 파라미터가 없으니 XSS와 공격을 연계해야 한다.

 

세션을 탈취하기 위해 같은 도메인에서 XSS취약점을 찾고 form 태그를 삽입해서 POST 방식으로 요청한다.

 

CSRF 공격 대응 방안

 

1. Referer 

Referer는 어디서 요청이 왔는지 보여주는 헤더이다.

만약 비밀번호를 변경하기 위해서는 Mypage에서 변경을 눌러서만 변경이 가능한데

Referer을 보니 게시판에서 갑자기 비밀번호를 바꾸는 요청을 한다면..

그것은 CSRF 공격으로 간주하고 차단하면 된다.

 

하지만 이것도 취약점이 존재한다.

보통 CSRF 공격은 XSS와 연계한다. 

XSS 공격으로 Meta 태그에 noreferer 을 하면 우회가 가능하다. 

 

즉 XSS취약점이 없으면 괜찮으나 XSS취약점이 있으면 이 방법만으로 안전하지 않다.

 

2.CSRF 토큰 

서버측에서 중요한 요청이 있는곳에

CSRF 토큰을 발행해주고 사용자가 요청할 때 진짜 사용자가 요청했는지 토큰을 보고 감별하는것.

하지만 CSRF 토큰을 input 태그에 넣으니까 XSS 공격으로 토큰을 알아낼 수 있다.

 

필드에 토큰을 넣지 말고 세션에만 남기면 안됨 ? -> XX 애초에 공격이 세션을 이용하는 공격이라서 추가적인 인증을 위해 토큰을 발행해서 클라이언트에 보내는것.

 

3.capcha 

capcha는 무분별한 요청을 막기 위해서 탄생한것이다.

CSRF 공격도 어느정도 막을 수 있으나 클라이언트 측 코드라서 완벽히 막을 수 없다.

 

이러한 이유로 이 방법은 100% 신뢰할 수 없는 대응 기법이다.

 

따라서 중요한 요청을 수행할때는 추가적인 인증 정보가 있어야한다.

그것만이 대응 방안이다.

 

비밀번호를 변경할 때, 세션과 변경 할 새로운 비밀번호를 받는것으로 끝이 아니라

원래 쓰던 비밀번호를 받아서 추가 인증을 해 준다.

 

그러면 해커는 사용자가 원래 쓰던 비밀번호를 모르기 때문에 요청을 위조하기 힘들다.

 

아니면 요즘 많이 사용되는 전화번호 인증, PASS 인증같은것을 사용하면 된다.

 

하지만 인증을 너무 많이 해 버리면 사용자는 불편함을 느낄것이다. 따라서 정리한 대응 방법중에

중요도에 따라 적절하게 인증을 수행하면 될 것 이다.