CSRF (Cross-Site Request Forgery)
사용자가 인증된 상태임을 악용하여 공격자가 원하는 요청을 사용자의 권한으로 수행하도록 만드는 공격입니다.
주로 로그인된 세션 쿠키를 활용하여 공격이 이루어집니다.
CSRF 공격 흐름
CSRF 공격이 성공하기 위해서는 사용자가 공격자가 작성한 악성 스크립트를 실행해야 합니다.
이를 위해 공격자는 사용자게에 메일을 보내거나 게시판에 글을 작성하는 등의 방법을 사용하여 사용자가 이를 조회하도록 유도합니다.
예시를 들어 설명한 공격 흐름은 다음과 같습니다.
0. 가정
- back.com 이라는 사이트에 사용자가 로그인 되어 있습니다.
- 사용자는 로그인 쿠키를 통해 인증된 상태입니다.
- back.com 사이트는 송금 기능이 있으며, 송금과정에서 계좌 비밀번호나 otp 등 추가적인 인증을 하지않기에 CSRF 취약점이 존재 합니다.
- back.com 사이트의 송금 기능은 다음과 같은 GET 요청을 통해 이루어집니다.
https://bank.com/transfer?amount=n&to=user
1. 공격자가 back.com 의 게시판에 악성 스크립트를 작성
- 공격자가 이용자의 자금을 탈취하기 위해 CSRF 공격을 실행하고자 합니다.
- 마침 back.com에 게시판 기능이 있어 이를 활용해봅니다.
- 게시판에 다음과 같은 HTML을 삽입하여 공격을 시도합니다.
<img src="https://bank.com/transfer?amount=10000&to=attacker" />
2. 사용자가 로그인된 상태에서 게시판에 공격자가 작성한 글을 클릭합니다.
3. 공격자가 작성해둔 악성 스크립트의 <img> 태그로 인하여 자동으로 GET 요청이 back.com으로 전송됩니다.
4. GET 요청이 전송될 때 사용자의 로그인 쿠키가 함께 전송되어, 유효한 요청으로 처리됩니다.
5. 사용자의 자금이 공격자에게 송금됩니다.
CSRF의 특징
- 공격 조건 : 사용자가 세션 쿠키를 통해 인증된 상태여야 합니다.
- 전송 방식 : GET 방식과 POST 방식을 모두 사용 가능합니다.
- 공격 효과 : 의도치 않은 송금, 게시물 작성, 비밀번호 변경 등 사용자의 중요한 요청이 의도치 않게 실행 됩니다.
XSS와의 차이점
- CSRF는 XSS와 종종 헷갈리는 공격입니다.
- 하지만 두 공격 방식은 전제 조건도 다르고, 공격방식도 다릅니다.
| 항목 | CSRF (Cross-Site Reauest Forgery) | XSS (Cross-Site Scripting) |
| 의미 | 사이트 간 요청 위조 | 사이트에 악성 스크립트를 삽입하여 실행 |
| 공격 목표 | 사용자의 인증정보를 이용하여 원치 않은 요청 수행 | 악성 스크립트를 실행시켜 사용자의 데이터를 탈취하거나 세션을 가로챔. |
| 공격 방식 | 사용자의 브라우저가 자동으로 요청을 보내도록 유도 | 공격자가 악성 스크립트를 삽입하여 해당 페이지에서 실행되게 유도. |
| 공격 전제 조건 | 사용자가 로그인 상태 (세션이 유지되는 상태)여야 함 | 입력 필터링이 취약한 (XSS 취약점이있는) 웹 페이지여야 함. |
| 피해자의 행위 | 피해자가 의심없이 공격자의 페이지에 접속하거나 게시판의 글을 열람 |
피해자가 스크립트가 삽입된 페이지를 열람 |
| 공격자의 의도 | 피해자의 권한으로 위조된 요청을 전송 | 피해자의 브라우저에서 임의의 스크립트를 실행 |
| 피해 예시 | 자동 송금, 게시글 작성, 비밀번호 변경 등 | 쿠키 탈취, DOM 변조 등 |
'보안 > 이론 정리' 카테고리의 다른 글
| 웹 해킹 - Error Based SQL Injection (0) | 2025.07.08 |
|---|---|
| HTTP 요청의 구조와 헤더의 역할 (0) | 2025.07.07 |
| 웹 해킹 - Command Injection (0) | 2025.04.30 |
| 웹 해킹 - SQL Injection (0) | 2025.04.29 |
| 웹 해킹 - XSS (0) | 2025.04.15 |