-
CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (1) - CSRF 공격이란 무엇인가Back End/보안 2023. 4. 23. 21:07
해당 포스팅 시리즈는 현재 목차 2번까지 작성되었습니다.
목차
1. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (1) - CSRF 공격이란 무엇인가
2. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (2) - 가상의 브라우저에 대한 CSRF 공격, 서버의 책임과 브라우저의 책임
3. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (3) - CSRF 공격을 직접 시도해보자 (Safari 브라우저)
4. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (4) - SOP, CORS, Browser, Third-Party Cookie, SameSite)5. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (5) - CSRF 공격을 방어해보자 (SSR Application)
6. CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (6) - CSRF 공격을 방어해보자 (CSR Application)
서론
CSRF 관련으로 검색해보면 틀린 정보가 많다.
CSRF Token이 대표적인 방어기법으로 언급되는데, CSRF 토큰이 보통 HTML 이나 API 로 열려있기에 CSRF 토큰을 획득하고 요청을 보내면 되지 않나? 왜 방어가 된다고들 말하는거지? 라는 의문을 한번쯤 가져보았을 것이다.
CSRF 란 개념을 처음 접하는 입장으로서는 되게 혼란스러울 수 밖에 없기에 이 글이 누군가에게 가뭄의 단비같은 존재가 되었으면 한다.
CSRF 을 재현하면서 검증까지 직접해보았으니 믿을만한 정보라 자신한다. (브라우저가 너무 발전해서 재현이 고달팠다.. 🫠)
CSRF 의 정의
CSRF 의 정의 부터 제대로 짚고 넘어갈 필요가 있다.
Cross-Site Request Forgery 라는 용어 그대로, 다른 사이트에서 Reqeust 를 도용 및 위조한다는 뜻이다.
그림을 그려보자면 아래와 같다.
1. Ping9 라는 사용자는 본인의 컴퓨터에서 브라우저를 키고
www.target.com
에 로그인을 한다.2. Ping9 라는 사용자는 동일한 브라우저로
www.attacker.com
에 접속한다.3. Ping9 라는 사용자는
www.attacker.com
에서 `Get Free Boucher about $500` 라는 버튼을 클릭한다.4. `Get Free Boucher about $500` 라는 버튼에는
www.target.com
에 POST 요청을 보내는 스크립트가 작성되어 있으며,브라우저는
www.target.com
에 대한 요청이기에www.target.com
의 Cookie 를 브라우저의 Local Storage 에서 찾아 HTTP 요청에 추가하여 전송한다. (접속만 해도 요청이 날라가도록 작성할 수도 있다)다른사이트(www.attacker.com) 에서 발생한 요청이 `www.target.com`의 Credentials(Cookie 와 같은) 을 도용한다고 하여 Cross-Site Request Forgery 라는 단어가 생겨나게 된 것이다.
그러니까 흔히 CSRF 공격에 대해 잘못 알려진 정보들 (같은 사이트 내에서 XSS 공격) 은 다른 사이트가 아니기에 CSRF 공격이 아니며, CSRF 공격이 아니기에 CSRF 토큰으로 방어할 수 없다.
자바스크립트로 CSRF 토큰을 획득 후 POST/PUT/UPDATE 요청에 포함시키면 그만인 것이다.
CSRF 방어기법은 오직 CSRF 공격을 방어하는데에 초점이 맞춰져 있을 뿐이다.
728x90'Back End > 보안' 카테고리의 다른 글
CSRF(Cross-Site Request Forgery) 개념부터 재현, 방어까지 (2) - 가상의 브라우저에 대한 CSRF 공격, 서버의 책임과 브라우저의 책임 (1) 2023.04.23 [보안] SQL Injection 대표예제와 원리 (0) 2023.02.13 [보안] Spring 에서 SQL Injection 방어 그리고 원리 (feat. Prepared Statement, JPA, MyBatis) (0) 2023.02.13 [XSS] HTML Escape Characters 리스트 (1) 2022.12.19 [AWS] AWS WAF 오탐 예외처리 (AWS WAF False Positive Mitigation) (0) 2022.12.17