CSRF(Cross Site Request Forgery)란?
: 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격이다.
이 공격도 sql injection과 xss와 마찬가지로 주요정보통신기반시설 기술적 취약점 분석·평가 방법 상세가이드에서 찾아볼 수 있다.
CSRF 취약점 확인
CSRF는 임의의 요청을 하게 만드는 공격이므로 모든 요청에서 일어날 수 있다. 다만 요청 보내는 곳을 싹다 취약점으로 취급하지는 않는다. 주로 공격자가 요청을 임의로 만들 수 있고, 이것이 위험도가 크면 취약점으로 잡는다.
예를 들어 비밀번호 변경 요청 URL이 https://hackker.com/pwchange.php?newpw=1234&pw_conf=1234 의 형태로 파라미터에 새로 설정한 비밀번호(newpw)와 비밀번호 재확인(pw_conf)만 있다면 공격자가 충분히 위조할 수 있다.
하지만 https://hackker.com/pwchange.php?newpw=1234&pw_conf=1234&old_pw=asdfasdf 의 형태로 파라미터에 현재 비밀번호(old_pw)가 포함되어 있다면 공격자는 피해자의 기존 비밀번호를 알 수 없으니 요청을 조작하기가 힘들 것이다. 이런 경우에는 취약점이 있다고 판단하지 않는다.
즉, 공격자가 예측할 수 있는 파라미터만 존재해야하며, 사용자의 인증정보가 포함되면 취약점으로 잡기 어렵다.
(실제로 비밀번호같은 중요한 정보는 POST 방식으로 넘어가지면 설명의 편의를 위해,,)
CSRF? XSS?
csrf 공격을 찾아보면 xss 취약점을 이용해서 설명하는 경우가 많아서 처음 csrf를 공부하면 xss와 뭐가 다른지 헷갈리는 경우가 많다.
정리해보면
XSS는 클라이언트 측 스크립트를 삽입해서 브라우저에서 실행되게 하는 공격이고,
CSRF는 피해자가 서버로 임의의 요청을 하게 만드는 공격이다.
그냥 별개의 공격이다.
그렇다면 왜 csrf에서 xss 취약점을 사용하는 걸까?
=> 이유는 csrf는 xss를 만나면 파급력이 커지기 때문이다.
csrf의 공격 형태는
1. 요청 URL을 피해자가 클릭하게 만드는 경우 (GET 방식)
2. xss 취약점이 존재하는 곳에 요청을 보내는 스크립트를 작성하는 경우 (POST 방식)
이렇게 두 가지가 있다. 보통 POST 방식을 사용하는 경우는 개인정보 변경 같이 중요하고 노출되면 위험한 파라미터가 전송될 때이다. 두 번째 방식의 위험도가 더 높다.
그래서 보통 XSS를 이용해서 form 태그로 POST 요청을 보내는 공격을 수행한다.
+) xss와 csrf의 차이점을 찾아보면 xss는 공격 대상이 클라이언트고, csrf는 서버라고 정리되어 있는 경우가 많은데 엄밀히 말하면 아니다.
예를 들어 csrf 공격으로 사용자의 비밀번호를 공격자가 의도한 비밀번호로 변경 요청하는 스크립트를 게시글에 삽입했다고 하자. 사용자가 게시글에 접근해서 요청이 전송된다면 피해자는 서버뿐 아니라 클라이언트도 포함인 것이다.
공격 위치만 xss는 사용자의 웹 브라우저, csrf는 웹 서버인 것이다.
'웹 해킹 > CSRF' 카테고리의 다른 글
CSRF 대응방안 3가지 (0) | 2024.02.13 |
---|