SSRF在云环境下的利用和防御方式
[TOC]
SSRF云环境利用
什么是SSRF?
SSRF(Server-Side Request Forgery,服务端请求伪造) 是一种允许攻击者诱导Web应用程序向攻击者指定的目标发起请求的漏洞。
简单理解:你开发了一个“从URL导入头像”的功能,用户传一个图片链接,后端去下载。看起来很正常对吧?但问题是——后端服务器在内网,它可以访问内网资源。攻击者传的不是图片链接,而是内网地址或云元数据服务的地址,服务器就会乖乖地去请求,然后把结果返回给攻击者。
SSRF漏洞通常发生在以下场景:
- URL参数处理(如
?url=) - 外部API调用
- 从远程URL加载文件
- Webhook处理
- 图片/页面预览功能
在云环境中,SSRF(服务器端请求伪造)漏洞的核心危害在于可以访问云实例的元数据服务(IMDS),从而窃取高权限的临时凭证,并以此为跳板,横向渗透到整个云环境
核心攻击链:外部可控URL → 内网探测 → 窃取元数据凭证 → 横向移动 → 权限提升
元数据服务
云上的“元数据服务”(Metadata Service),可以把它理解为云服务器的“身份证”和“配置中心”。
它是一个运行在云服务器(虚拟机)内部、只能从内部访问的特殊Web服务。它就像服务器内置的“小秘书”,你不需要登录云控制台,直接在服务器里发个请求,就能问到这个实例的所有关键信息
元数据里的关键信息可能包括:
- 服务器身份:实例ID、主机名、地域可用区等。
- 网络配置:内/外网IP、MAC地址、VPC信息、子网掩码等。
- 硬件规格:实例规格(如CPU、内存)、镜像ID、操作系统类型等。
- 动态信息:云厂商提供的临时访问凭证(最关键!)、即将发生的维护事件等
流程
1. 发现与确认SSRF:寻找业务功能中可能发起请求的参数(如 url=、fetch=、load= 等),尝试注入可访问的URL(如 https://baidu.com)验证漏洞。
攻击者可能会尝试一些协议探测内网,比如:
1 | http:// |
2. 探测云服务商:通过IP归属或HTTP响应头(如 Server: Tencent-ci)判断服务商。
3. 访问元数据服务:针对不同云商使用对应的内网地址:
- AWS:
http://169.254.169.254/latest/meta-data/ - GCP:
http://metadata.google.internal/computeMetadata/v1/ - Azure:
http://169.254.169.254/metadata/instance?api-version=2017-08-01 - 阿里云:
http://100.100.100.200/latest/meta-data/ - 腾讯云:
http://metadata.tencentyun.com/latest/meta-data/
注意:访问时通常需要特定的请求头(Header),例如Azure需要 Metadata:true,GCP需要 Metadata-Flavor: Google
4. 窃取临时凭证:访问角色凭证路径(如AWS的 /iam/security-credentials/或 /identity-credentials/ec2/security-credentials/),获取 AccessKeyId、SecretAccessKey 等。
以AWS为例,攻击链路如下
1 | # 1. 获取RAM角色名称 |
有了这三样东西,攻击者可以以该服务器的身份执行任何云操作——创建ECS实例、读取OSS存储桶、配置网络规则、甚至删除整个基础设施
5. 横向移动与提权:利用窃取的凭证,通过云厂商CLI或控制台执行命令、接管控制台、窃取数据等
攻击者利用获得的权限进行横向移动:
- 使用AWS Systems Manager(SSM)直接与私有子网中的实例通信
- 通过
ec2-instance-connect:SendSSHPublicKey获取实例Shell访问 - 扫描并攻击同一VPC内的其他云资源
防御措施
- 及时升级IMDSv2:AWS等提供了更安全的v2版本,要求每次请求带令牌,可有效防御。
- 遵循最小权限原则:严格控制实例的IAM角色权限,避免过度授权。
- 严格限制和过滤请求:对用户输入的URL进行白名单校验,禁用危险的URL协议(如
file://、dict://)。 - 监控与告警:关注对元数据服务地址的异常内部请求,以及异常的API调用行为。





