[CSRF] CSRF (Cross Site Request Forgery )

CHIKA·2024년 7월 9일

CSRF (Cross Site Request Forgery, 사이트 간 요청 위조)

웹 보안 취약점 중 하나로, 공격자가 의도한 행위를 피해자의 의지와 상관없이 서버로 요청하게 만드는 취약점이다.

CSRF 동작원리

  1. 공격자는 피해자가 방문할 수 있는 웹페이지에 악성코드를 삽입함.
  2. 피해자가 악성코드가 삽입된 웹페이지에 방문함.
  3. 피해자의 의도와는 상관없이 공격자가 의도한 비밀번호 변경, 게시물 작성 등등 의 요청이 전송됨.

CSRF VS XSS

둘 다 클라이언트 공격이지만
XSS는 클라이언트 측 스크립트 삽입 공격,
CSRF는 서버로 요청을 보내게 만드는 공격이다.
시너지가 좋아 같이 연계하는 경우가 많다.

CSRF 공격 대응방안.

GET Method 대신 POST Method로 바꾸면 CSRF에 대응 할 수 있을까?
아니다. CSRF 취약점의 핵심 이유는 인증 정보가 없어 인증을 위조한게 문제가 되는 것이다.

1. 인증정보 추가

비밀번호를 변경하려면 기존 비밀번호를 입력하게 하거나 2차로 인증하게 만든다.

2. referrer 체크

허용할 referrer 리스트를 만들어 두고 해당 페이지에서 요청이 들어온 것이 아니라면 접근을 막는다. 하지만 확장성은 좀 떨어질 수 있다.

3. CSRF token 사용

CSRF는 인증 정보가 없어서 발생하는 취약점이니 인증 정보를 따로 입력하지 않아도 인증되게 만든 랜덤한 토큰이다.
예를 들어 사용자가 마이페이지에서 비밀번호를 변경하고자 한다면 마이페이지에 접속할 때 CSRF토큰을 발행하고 변경 요청을 보낼 때 CSRF 토큰을 포함시킴으로써 사용자임을 인증하는 것이다.

<form>
<input>
<input type = "hidden" name="csrf_token" value= "fdsagsag(랜덤값)">
</form>

하지만 CSRF 토큰을 탈취할 수 있기 때문에 이 점에 주의하여야 한다.

4. CAPTCHA 사용

자동화된 프로그램이 아닌 실제 사용자가 요청을 제출하고 있는지 확인한다.

참고자료
https://www.bugbountyclub.com/pentestgym/view/47

0개의 댓글