SSRF 与云上元数据防护
云主机的实例元数据服务是 SSRF 的重点攻击目标:一旦服务端请求被导向元数据地址,就可能读取到实例角色的临时凭据。防护分三层——实例侧强制启用需要令牌的元数据访问协议,权限侧让实例角色遵循最小权限,应用侧在解析目标地址之后做校验,而不是只匹配字符串。
基本信息
| 实例侧 | 启用要求令牌的元数据访问协议,禁用无令牌访问 |
|---|---|
| 权限侧 | 实例角色遵循最小权限,避免一失全失 |
| 应用侧 | 解析目标地址后校验,优先使用白名单 |
| 配套限制 | 限定协议、端口与重定向次数 |
| 评估边界 | 只核查配置与解析逻辑,不发起指向元数据地址的请求 |
典型使用场景
- 核查云主机是否已强制启用需令牌的元数据访问协议
- 评估实例角色权限是否过大,存在凭据被读取后的风险
- 审查应用中的地址校验逻辑是否基于解析结果
- 检查代理与跳转参数是否限制协议与目标范围
- 为云上资产的 SSRF 防护提供配置级整改建议
校验要点(伪代码)
校验要点(伪代码)
# 解析 URL 得到目标地址(注意重定向后要重新解析)
# 拒绝:回环地址、链路本地地址(含云元数据地址段)
# 按业务需要决定是否拒绝内网私有地址段
# 仅放行:业务必需的外部域名或地址白名单
# 同时限制:协议仅允许 http/https、端口白名单、重定向次数
# 关键:校验必须在解析之后进行,不能只判断字符串防护层次读法
| 层次 | 防护动作 | 失效后果 |
|---|---|---|
| 实例侧 | 启用需令牌的元数据访问 | 无令牌访问可被直接读取凭据 |
| 权限侧 | 实例角色最小权限 | 凭据一旦泄露可操作大量云资源 |
| 应用侧 | 按解析结果校验目标 | 仅字符串黑名单可被多种写法绕过 |
| 网络侧 | 出站策略限制 | 限制外联范围,降低内网探测成功率 |
仅做字符串黑名单不够:十进制、八进制等写法仍可能到达目标地址,必须校验解析后的结果地址。
评估中不要发起指向元数据地址的请求来验证防护:元数据地址返回的凭据一旦获取即构成实际的凭据泄露。