元数据与 SSRF
云环境特有的攻击
元数据与 SSRF 是 CoddyKit 上的免费 Ethical Hacking Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ethical Hacking Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ethical Hacking Academy 课程共包含 4 节课。
实例元数据服务
每个云 VM 都可以查询一个特殊的内部端点来了解自身信息:实例元数据服务(IMDS)。关键在于,它还可以发放附加到该实例的角色的临时凭证。
- AWS / GCP / Azure 都在
169.254.169.254提供元数据 - 只能从实例内部访问
- 本地进程无需身份验证即可访问
当这种便利性与 SSRF 结合时,就会变成攻击武器。
读取 AWS 元数据(IMDSv1)
在旧版 IMDSv1 中,单个 GET 请求就会返回元数据,其中包括角色凭证。不需要令牌。
当应用存在 SSRF 时,这正是 IMDSv1 危险的原因。
# List roles attached to the instance
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Retrieve the temporary credentials for a role
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/app-role什么是 SSRF
服务器端请求伪造(SSRF)是一种漏洞,攻击者会诱使服务器代表自己发出 HTTP 请求。服务器因此成为通往攻击者无法直接访问区域的代理。
- 由服务器获取的 URL 参数
- 网络钩子、PDF 生成器或图像缩放功能
- 任何接收用户提供的 URL 的功能
云环境中 SSRF 的经典目标就是元数据端点。
SSRF 遇上元数据
致命的组合是:存在 SSRF 的应用允许攻击者将服务器指向 169.254.169.254。服务器获取实例的 IAM 凭证并将其返回。
攻击者此时便掌握了云凭证,而这往往是完全接管账户的开始。
# Vulnerable endpoint fetches any URL the user supplies
GET /fetch?url=http://example.com/image.png
# Attacker redirects it to the metadata service
GET /fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/app-role使用被盗凭证
元数据响应包含访问密钥、秘密密钥和会话令牌。攻击者将它们导出后,立即以实例角色的身份执行操作。
接下来,他们会枚举权限并寻找权限提升路径。
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
# Confirm the stolen identity
aws sts get-caller-identityIMDSv2 作为防御措施
AWS 引入 IMDSv2 来削弱 SSRF 的影响。它要求先通过 HTTP PUT 请求获取会话令牌,而大多数 SSRF 原语无法执行这种请求(它们只能执行 GET)。
强制使用 IMDSv2 并设置较低的跳数限制,可以大幅减少通过 SSRF 窃取元数据的风险。
# IMDSv2: first PUT to get a session token
TOKEN=$(curl -X PUT 'http://169.254.169.254/latest/api/token' \
-H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')
# Then GET using that token
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/Azure 和 GCP 元数据
其他云服务商也提供元数据服务,但各自有一些差异。两者都要求使用特殊标头,这本身就是一种小型 SSRF 缓解措施。
- Azure 要求使用
Metadata: true - GCP 要求使用
Metadata-Flavor: Google
# Azure: fetch a managed-identity access token
curl -H 'Metadata: true' \
'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/'
# GCP: fetch a service-account token
curl -H 'Metadata-Flavor: Google' \
'http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token'SSRF 绕过技术
防御者通常会将 169.254.169.254 列入阻止名单。攻击者则会利用替代 IP 编码和重定向来绕过简单的过滤器。
- 十进制 IP:
2852039166 - 同一地址的八进制或十六进制编码
- 将 DNS 重新绑定到解析为元数据 IP 的名称
- 利用开放重定向将请求转发到元数据 URL
稳健的防御措施必须验证解析后的 IP,而不是验证原始字符串。
# The metadata IP in alternate notations (all 169.254.169.254)
http://2852039166/latest/meta-data/
http://0251.0376.0251.0376/latest/meta-data/其他 SSRF 目标
元数据虽然最受关注,但 SSRF 还可以触及更多内部资源:
- 绑定到本地主机的内部管理面板和仪表板
- 内部数据库和缓存(Redis、Elasticsearch)
- Kubernetes API 服务器和 kubelet 端点
- 未对外暴露的其他微服务
SSRF 实际上可以利用受信任的网络位置穿透网络边界。
防御这条攻击链
要切断从 SSRF 到元数据的攻击链,需要采用分层防御:
- 强制使用 IMDSv2,并将元数据跳数限制设为 1
- 验证抓取功能的出站 URL,并仅允许列入许可名单的 URL
- DNS 解析后阻止对链路本地 IP 和私有 IP 范围的请求
- 为实例角色应用最小权限原则,限制被盗凭证的权限
最小权限角色可以确保即使凭证成功被盗,攻击者也难以造成严重影响。
仅测试您获授权测试的内容
SSRF 测试可能会按其设计触及敏感的内部系统。请务必遵守纪律:
- 确认目标主机和云账户属于授权范围
- 不要跳转到参与约定之外的系统
- 一旦证明可以访问凭证,就停止操作并报告
访问元数据会产生重大影响,请谨慎证明,不要使用被盗密钥肆意操作。
快速检查
强制使用 IMDSv2 为什么有助于防御基于 SSRF 的凭证窃取?
回顾:元数据与 SSRF
您已经了解了云环境中影响最大的攻击链。
- 位于 169.254.169.254 的元数据服务会发放实例角色凭证
- SSRF允许攻击者让服务器获取该端点
- 被盗的临时凭证可以帮助攻击者接管账户
- IMDSv2要求使用基于 PUT 的令牌,从而阻止大多数 SSRF
- 通过 URL 许可名单、IP 验证和最小权限角色进行防御
云环境渗透测试到此完成。下一门课程:漏洞赏金狩猎。
常见问题解答
「元数据与 SSRF」课时是免费的吗?
是的 — 「元数据与 SSRF」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ethical Hacking Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ethical Hacking Academy 课程共包含 4 节课。
「元数据与 SSRF」这节课中我会学到什么?
云环境特有的攻击 你通过在浏览器中直接运行的动手代码来练习 Ethical Hacking Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ethical Hacking Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ethical Hacking Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「元数据与 SSRF」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ethical Hacking Academy 课中编写并运行代码吗?
能。每节 Ethical Hacking Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。