SSRF란?
브라우저가 변조된 요청을 보내는 CSRF와 다르게, 웹 서비스의 권한으로 서버가 의도하지 않은 경로에 변조된 네트워크 요청을 보내게 만드는 취약점이다.
기본 공격 개념
외부망 DMZ에 노출된 웹 애플리케이션 API 서버와 내부의 마이크로 서비스 간 통신 시 사용자의 입력 값에 개발자가 의도하지 않은 요청이 전송되면 웹 서비스의 권한으로 변조된 요청을 보낼 수 있다.
발생 원인 — 신뢰의 전이
핵심 원리는 ‘신뢰의 전이(Trust Delegation)’ 이다.
- 외부 방화벽은 외부 사용자의 접근을 엄격히 차단
- 내부 네트워크에 있는 서버들끼리는 서로를 신뢰 → 보안 검사를 느슨하게 처리
- 공격자는 이 신뢰 관계를 악용해 외부에서 접근 불가능한 내부 자원을 서버가 대신 호출하게 만든다
공격자 ──── HTTP Request ────► 외부 웹서버 (DMZ)
│
내부 신뢰 관계 악용
│
▼
내부 서비스 (Internal API, DB, Cloud Metadata 등)
마이크로서비스 (MSA)와 SSRF
마이크로서비스 아키텍처는 소규모의 독립적인 서비스들이 잘 정의된 API를 통해 통신하는 방식이다. 각 서비스는 내부 네트워크에서 서로를 신뢰하므로, SSRF 취약점이 발생하면 공격자는 내부 서비스 전체에 접근할 수 있다.
주요 공격 시나리오
1. 내부 네트워크 스캐닝
http://internal.service/admin
http://192.168.1.1/
http://localhost:8080/actuator
2. 클라우드 메타데이터 탈취
# AWS EC2
http://169.254.169.254/latest/meta-data/iam/security-credentials/
# GCP
http://metadata.google.internal/computeMetadata/v1/
# Azure
http://169.254.169.254/metadata/instance?api-version=2021-02-01
3. 내부 파일 읽기
file:///etc/passwd
file:///proc/self/environ
필터 우회 기법
| 우회 방법 | 예시 |
|---|---|
| IP 10진수 변환 | http://2130706433/ (= 127.0.0.1) |
| IP 8진수 | http://0177.0.0.1/ |
| IPv6 | http://[::1]/ |
| DNS 리바인딩 | 공격자 도메인이 내부 IP로 resolve |
| URL 인코딩 | http://127.0.0.%31/ |
| 리다이렉트 | 공격자 서버에서 내부 URL로 302 리다이렉트 |
방어 방법
- 사용자 입력 URL 화이트리스트 검증
- 내부 IP 대역 블랙리스트 적용 (
127.0.0.1,10.x.x.x,172.16.x.x,192.168.x.x) - DNS resolution 후 IP 재검증 (DNS 리바인딩 방어)
- 응답 내용 필터링