반응형


SSRF(Server-side request forgery)는 한 줄로 말하면:
공격자가 서버로 하여금
원래 접근 못 해야 하는 내부 주소나 시스템에
대신 요청하게 만드는 공격
이다.
핵심 아이디어
엄청 중요.
SSRF는:
"공격자가 직접 요청하는 게 아니라,
서버를 이용해서 요청"
하는 공격이다.
가장 쉬운 예시
예를 들어 서버에:
이미지 URL 가져오기 기능
있다고 하자.
정상 사용
사용자 입력:
https://example.com/image.jpg
서버 코드
new URL(userInput).openConnection()
서버가 대신 요청해서 이미지 다운로드.
정상.
그런데 공격자가 입력
http://127.0.0.1:8080/admin
결과
서버가 자기 자신(Localhost)에 요청.
즉:
외부에서는 못 들어가는 내부 API 접근 가능
해질 수 있다.
왜 위험하냐?
서버는 보통:
내부망 접근 권한
을 가지고 있기 때문.
즉 SSRF는
"서버를 프록시처럼 악용"
하는 공격.
대표 공격 대상
1. localhost
127.0.0.1
localhost
2. 내부망
예:
10.x.x.x
172.16.x.x
192.168.x.x
3. 클라우드 Metadata 서버
엄청 중요.
특히:
- Amazon Web Services
- Google Cloud
AWS 대표 주소
http://169.254.169.254
왜 위험?
여기서:
IAM 임시 자격증명
획득 가능할 수 있었다.
실제 역사적 대형 사고 많음
SSRF로:
- AWS Key 탈취
- 내부망 스캔
- Kubernetes 접근
사고 다수 발생.
공격 흐름 예시
STEP 1
공격자가 URL 입력 가능 기능 찾음.
예:
- 이미지 가져오기
- 웹훅
- PDF 생성
- URL Preview
STEP 2
내부 주소 입력.
http://localhost:8080/admin
STEP 3
서버가 대신 요청.
STEP 4
공격자가 응답 확인 가능하면:
내부 데이터 탈취
가능.
Blind SSRF도 존재
응답 직접 안 보여도:
요청 성공 여부
시간 차이
DNS 로그
등으로 공격 가능.
SSRF가 무서운 이유
외부 공격자가:
내부망 우회 진입
가능해질 수 있음.
즉 서버가 방화벽 우회 통로가 됨.
특히 클라우드에서 위험
예전 AWS Metadata v1은:
GET 요청만으로 credential 조회 가능
했다.
그래서 현재는 IMDSv2 도입
추가 토큰 필요.
SSRF 방어 핵심
1. 사용자 URL 직접 요청 최소화
가능하면:
외부 URL fetch 기능 자체 제한
2. 화이트리스트
예:
allowedDomains.contains(host)
즉 허용 도메인만 접근.
3. 내부 IP 차단
엄청 중요.
차단 대상
| 대역 | 의미 |
| 127.0.0.1 | localhost |
| 10.x.x.x | 내부망 |
| 172.16~31.x.x | 내부망 |
| 192.168.x.x | 내부망 |
| 169.254.169.254 | cloud metadata |
4. DNS Rebinding 주의
도메인 검사 후:
DNS가 내부IP로 바뀌는 공격
가능.
그래서 최종 IP도 검사 필요.
5. Redirect 제한
예:
외부 URL
↓ redirect
내부망
공격 가능.
따라서 redirect follow 제한 중요.
6. 아웃바운드 방화벽
서버 자체가:
내부망 외 요청 제한
하도록 구성.
실무에서 SSRF 잘 터지는 기능
| 기능 | 위험 |
| 이미지 URL 업로드 | 높음 |
| URL Preview | 높음 |
| 웹훅 | 높음 |
| PDF 렌더링 | 높음 |
| Open Graph 수집 | 높음 |
Kubernetes에서도 위험
SSRF로:
- kube-api
- etcd
- 내부 admin panel
접근 가능 사례 존재.
핵심 한 줄
SSRF는:
사용자가 입력한 URL을 서버가 대신 요청하는 기능을 악용해,
외부에서는 접근할 수 없는 내부망·localhost·클라우드 메타데이터 서버 등에
서버를 통해 접근하게 만드는 공격
이다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| Secret 관리 (0) | 2026.05.20 |
|---|---|
| Clickjacking (0) | 2026.05.19 |
| CORS (0) | 2026.05.19 |
| SameSite Cookie (0) | 2026.05.19 |
| CSP (0) | 2026.05.19 |
댓글