728x90
SSRF (Server-Side Request Forgery)란?
SSRF는 서버 측에서 외부 또는 내부로 나가는 요청을 악용하는 취약점입니다.
즉, 공격자가 서버에 특정 URL이나 IP를 요청하도록 유도해 서버가 내부 네트워크, 관리자 서버, 로컬 리소스등에 요청을 보내게 만듭니다.
- 클라이언트 → 서버 → (내부/외부) 리소스
- 공격자는 서버를 프록시처럼 사용하여 직접 접근 불가능한 자원에 간접 접근.
주요 악용 사례:
- 내부 관리 페이지 접근 (localhost, 127.0.0.1)
- 메타데이터 서비스 접근 (예: AWS http://169.254.169.254)
- 사설 네트워크(10.x.x.x, 192.168.x.x 등)로의 접근
- Redis, Memcached 같은 비인가 서비스 접근
SSRF 공격 시나리오 예시
예시 1: 이미지 업로드 후 URL 검증
웹 애플리케이션에서 프로필 사진 URL을 입력받아 서버가 그 URL로 이미지를 가져오는 경우:
POST /upload
{
"image_url": "http://example.com/cat.jpg"
}
공격자는 이를 조작해:
http://localhost/admin
http://127.0.0.1:8000/private
http://169.254.169.254/latest/meta-data/iam/security-credentials
- 서버는 외부에서 차단된 자원에 접근하고, 내부 정보나 인증 토큰, 관리 패널 내용을 공격자에게 전달.
- 특히 AWS의 메타데이터 서비스는 SSRF의 주요 타겟으로, 접근 시 임시 자격 증명을 훔칠 수 있음.
예시 2: 오픈 리디렉션 또는 DNS Rebinding
공격자가 자신의 도메인을 example.attacker.com으로 입력 → 서버는 example.attacker.com의 IP를 외부로 보고 요청
하지만 해당 도메인이 내부 IP (예: 127.0.0.1)로 리졸빙되면 SSRF 우회.
예시 3: 포트 스캐닝
서버에서 특정 포트로 요청이 가능한 경우:
http://internal-service:8080
http://10.0.0.1:6379 (Redis)
공격자가 서버를 이용해 내부 네트워크의 열린 포트를 식별, 추가 공격을 준비.
SSRF 방어 기법
1. 요청 차단 / 화이트리스트 기반
- 외부 요청 필요 시 엄격한 화이트리스트 설정 (예: 신뢰할 수 있는 도메인만).
- 사설 IP, localhost, 메타데이터 주소 등은 블랙리스트로는 충분하지 않음 (우회 가능성이 높음).
2. IP/포트 검증
- 입력받은 URL을 파싱 후, 실제 요청 전 DNS를 재검사.
- 내부 IP (10.x.x.x, 172.16.x.x, 192.168.x.x, 127.0.0.1, ::1)나 메타데이터 IP는 요청하지 않도록 필터링.
- 잘못된 포트(예: 22, 3306, 6379 등)로의 요청 차단.
3. 서버 측 아웃바운드 요청 제한
- 방화벽에서 웹서버, 애플리케이션 서버의 아웃바운드 요청을 엄격히 제한.
- 필요 없는 외부/내부 요청은 네트워크 계층에서 차단.
4. 라이브러리 안전성 확인
- URL 요청 관련 라이브러리 (예: curl, requests)에서 자동 리디렉션 여부, file:// 같은 스킴 허용 여부 확인.
5. 메타데이터 서비스 보호
- 클라우드 환경(AWS, GCP, Azure)에서는 인스턴스 메타데이터 서비스에 접근하는 IP를 방어 (예: IAM Role 권한 최소화, 메타데이터 서비스 V2 사용).
6. 로깅 및 모니터링
- 서버가 의도치 않은 IP로 요청하는 경우를 탐지할 수 있도록 로그와 모니터링 구축.
| 구분 | 내용 |
| 취약점 | 서버가 신뢰하지 않는 입력을 기반으로 외부/내부로 요청 |
| 위험 | 내부 네트워크, 메타데이터 서비스, 민감 서비스 접근 |
| 방어 | 화이트리스트, 내부 IP/포트 차단, 네트워크 제한, 로깅 |
CSRF vs SSRF 비교
| 구분 | CSRF | SSRF |
| 뜻 | 교차 사이트 요청 위조 | 서버 측 요청 위조 |
| 공격 대상 | 사용자의 브라우저 (사용자 권한) | 서버 (서버 권한) |
| 공격 방향 | 공격자가 사용자를 속여 사용자의 브라우저로 요청을 보내게 함 | 공격자가 서버가 내부/외부로 요청을 보내게 유도함 |
| 주요 목표 | 사용자의 인증 정보 (세션, 쿠키)로 사용자를 대신해 요청 수행 | 서버로 하여금 내부 자원 또는 외부 자원에 비인가 요청 |
| 전제 조건 | 피해자가 로그인된 상태 (세션 쿠키 보유) | 서버가 외부/내부로 요청 가능한 기능 보유 |
| 공격 방식 | 악성 링크, 이미지, 폼 등을 피해자에게 클릭 유도 → 사용자의 인증으로 요청 전송 | 공격자가 서버의 요청 기능(예: URL 입력)을 조작해 내부 서비스로 요청 전송 |
| 주요 피해 | 계좌 이체, 게시글 작성, 비밀번호 변경 등 피해자 계정 오용 | 내부 서비스 정보 탈취, 메타데이터 접근, 사설망 포트 스캔 |
| 예시 | 사용자가 로그인된 상태에서 악성 사이트 방문 → 피해 사이트로 POST 요청 전송 | 서버에서 http://localhost/admin 같은 URL을 공격자가 입력해 내부로 요청 |
각각의 방어 기법
| 구분 | 방어기법 |
| CSRF | - CSRF Token 사용 - SameSite 속성 쿠키 - Referer / Origin 헤더 검증 - 중요 요청은 재인증 |
| SSRF | - URL 화이트리스트 - 내부 IP/포트 요청 차단 - 서버 아웃바운드 요청 제한 - DNS rebinding, open redirect 차단 |
728x90
'정보보호' 카테고리의 다른 글
| X.509 인증서의 개념, Openssl을 사용한 인증서 생성 방법 (0) | 2025.05.08 |
|---|---|
| 가상사설망 VPN의 종류 IPsecVPN, SSLVPN (0) | 2025.05.07 |
| Buffer Overflow의 개념과 예방방법 (0) | 2025.05.05 |
| TLS 1.3 Handshake 동작 과정 (0) | 2025.05.04 |
| 세션 하이재킹(Session Hijacking) 개념 (0) | 2025.05.04 |