[Web Hacking] DH ClientSide: CSRF

KyungH·2024년 3월 2일

DH Lecture - Web Hacking

목록 보기
7/17
post-thumbnail

DH Web Hacking

✏️ClientSide: CSRF

📌Cross Site Request Forgery (CSRF)

서명을 날조하거나, 서명된 문서를 위조할 수 있으면 무슨일이 일어날까?

전자인 서명을 날조하는 공격은 다른 챕터에서 다루었던 쿠키탈취에 대한 공격이며, 후자는 이번에 얘기할 교차 사이트 요청 위조 (CSRF) 공격이라 할 수 있다.

서명된 문서를 위조한다는 것은 이미 서명된 문서의 내용을 조작하는 것을 말한다.

CSRF는 이용자를 속여서, 의도치 않는 요청에 동의하게 하는 공격을 말한다. 그럴듯한 웹 페이지를 만들어서 이용자의 입력을 유도하고, 이용자가 값을 입력하면 이를 은행이나 중요 사이트로 전송하여 마치 이용자가 동의한 것 같은 요청을 발생시킨다.

이용자가 브라우저에 세션 쿠키를 저장하고 있었다면, 실제로 계좌 이체, 비밀번호 초기화 등 여러 작업이 이뤄질 수 있다.

웹 서비스는 쿠키 또는 세션을 사용해 이용자를 식별한다.
임의 이용자의 쿠키를 사용할 수 있다면, 이는 곧 임의 이용자의 권한으로 웹 서비스의 기능을 사용할 수 있다. 이렇게 임의 이용자의 권으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이 CSRF 이다.

📌CSRF의 동작

CSRF 공격을 성공시키기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야 한다. 공격자가 메일을 보내거나 게시판에 글을 작성해 이용자가 이를 조회하도록 유도해야하며, 이 악성 스크립트는 사용자의 브라우저에서 실행시켜 정보를 얻는 것이 아닌, 사용자의 권한으로 임의 주소에 HTTP 요청을 보내는 코드이다.

공격 스크립트는 HTML, Javascript를 통해 작성할 수 있다.
이미지를 불러오는 img 태그를 사용하거나, 웹 페이지에 입력된 양식을 전송하는 form 태그를 사용하는 방법이 있다. 이 태그들을 사용하여 HTTP 요처을 보내면 HTTP 헤더인 Cookie에 이용자의 인증 정보가 포함된다.

<img src='http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337' width=0px height=0px>

이미지의 크기를 조절하는 옵션을 활용하면 이용자에게 들키지않고 임의 페이지에 요청을 보낼 수 있다.

📌XSS와 CSRF의 차이

XSS와 CSRF는 스크립트를 웹 페이지에 작성하여 이용자가 그 스크립트가 포함된 페이지에 접속하도록 유도해야 한다는 공통점이 있다.

공격의 목적

두 개의 취약점은 공격에 있어 서로 다른 목적을 가진다.
XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로,
CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내는 것을 목적으로 하는 공격이다.

공격이 실행되는 위치

XSS와 CSRF의 가장 큰 차이점은 공격이 실행되는 위치이다.
XSS클라이언트 PC에서 실행되며,
CSRF는 위조된 요청을 서버에 보내, 그 서버에서 스크립트가 실행된다.

References

DreamHack 강의 - ClientSide: CSRF

0개의 댓글