通过SSRF窃取EC2上的IAM安全凭据

这是 AWS 环境中一种常见且众所周知的攻击。Mandiant 已发现有攻击者对漏洞进行自动扫描,从面向公网的应用程序中获取 IAM 凭据。为了降低组织面临的风险,最好对所有 EC2 实例强制执行 IMDSv2,可以增加服务器的安全性。IMDSv2 将大大降低对手通过 SSRF 或 XXE 攻击窃取 IAM 凭据的风险。

AWS开发中最常见的就是滥用与目标 EC2 实例相关的实例元数据服务 (IMDS)arrow-up-right

多数EC2实例可以在 169.254.169.254访问他们的IMDS。这个服务成为攻击者趋之若鹜的对象,能够获取到服务器的IAM权限,从而达到窃取数据,勒索,挖矿等目的。

攻击复现/模拟攻击

1 - 使用IMDSv1的EC2

准备一个开启了IMDSv1的EC2(也可以找一个已有的开启了IMDSv1的EC2)。

打开控制台的Amazon EC2,查看IMDSv2属性,如果是 optional,代表使用的IMDSv1,如果是required 代表使用的是IMDSv1:

EC2 Instances

挑选是 optional的EC2,使用的就是IMDSv1。

2 - 访问Metadata服务

窃取EC2上的安全凭据可以通过滥用主机上运行的现有应用程序来实现。通过利用服务器端请求伪造 (SSRF) 或 XML 外部实体 (XXE) 等常见漏洞,攻击者可以让主机上运行的应用程序检索这些 IAM 凭据。

metadata 服务可以通过EC2实例从http://169.254.169.254/latest/meta-data/ 访问。

ssh登录上EC2,假设这台EC2绑定的role的名字是s3access,然后执行:

获取到类似的以下信息:

AccessKeyId和SecretAccessKey被暴露。

为了演示这一点,在下面的示例中,通过部署workshop: Startup Security: Techniques to Stay Secure while Building Quicklyarrow-up-right,workshop中提供了基于OWASP Juice Shop搭建的含有SSRF 漏洞的网站,允许我们向任意地址发出 GET 请求。我们可以利用这个漏洞向网站发出请求,提交到Username的输入框中:

上面的命令将服务器的安全凭据创建到一个assets/public/credentials.json路径下的json文件中。

之后通过AWS Command Line Interface (AWS CLI)获取。假设网站的URL地址是$JUICESHOPURL变量保存的(替换成你自己的URL地址),执行一下命令:

就可以看到窃取到的credentials了。

参考资料

Steal EC2 Metadata Credentials via SSRFarrow-up-right

最后更新于