前言
本章节主要是根据腾讯云鼎实验室发布的《云安全攻防矩阵V3.0》来分析,其中窃取凭据中写到通过元数据服务获取角色临时凭据,而该攻击方式有两种不同的形态,一种是通过云服务器来攻击,另外一种是Serverless攻击方式。利用的过程主要是通过SSRF、RCE或者任意文件读取来获取到元数据的内容,最终导致的危害,这个需要根据实际情况来评定,比如用户面或管理面的凭据,包含的用户的数据以及资源都是千差万别的。大体上获取这些凭据去深度利用,比如攻击对象存储服务或者云服务器实例等。
概念
这里我们可以简单的查看下华为云、腾讯云和阿里云的ECS元数据相关API文档(相关的接口链接可以看附录)。元数据实际上包含了用户购买的ECS实例在云平台中基本信息(例如云服务ID、主机名、网络信息、临时凭据等)、自定义信息。同时也发现了华为云和腾讯云在描述元数据的时候,都有这样的重要提示,提示用户如果在元数据中注入了一些敏感数据,虽然这些敏感数据是从实例自身内部访问,但是也要注意敏感数据的加密或限定访问范围等加固措施,避免配置的敏感信息泄露。
熟悉了元数据的概念,接下来就是怎么在各个云平台上获取该元数据,由于每个云平台定义的API接口存在差别,所以这些在实际利用过程中,需要查询各自的API文档,不可以照搬别人的poc,但是攻击思路是可以学习复制的。虽然云平台的API接口差异很大,但是访问的ip地址都是169.254.169.254。169.254.169.254 属于链路本地地址(Link-localaddress),链路本地地址又称连结本地位址,是计算机网络中一类特殊的地址,它仅供于在网段,或广播域中的主机相互通信使用。这类主机通常不需要外部互联网服务,仅有主机间相互通讯的需求。IPv4 链路本地地址定义在 169.254.0.0/16 地址块。
接下来我们选华为云或AWS的云服务器为例,来介绍部分比较常用的API接口:(AWS目前对国内新用户绑定信用卡,可以免费使用一年,详情可以百度下)AWS云:所有的操作都是在linux环境下测试。实际测试发现直接curl 会出现401。查询了官网发现现在存在两个版本了Instance Metadata Service (IMDS)和 IMDSv2版本。IMDS版本实际上是不需要任何的token,直接访问的。而第二个版本是需要创建一个有效期为6个小时的token。
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token"
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
使用该有效的token访问元数据
curl -H "X-aws-ec2-metadata-token: $TOKEN"
-v http://169.254.169.254/latest/meta-data/
1、/latest/meta-data 罗列所有的相关接口的名称:
system[ec2-user@ip-172-31-30-218 ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
发现接口和华为云差异还是很大的。2、/latest/meta-data/iam/security-credentials/ 获取临时凭据返回的就是cor0ps角色,这个是我们在IAM中创建的角色。
在ECS上选择该角色并生效。
继续查询获取临时的AK SK。
3、/latest/user-data/ 该接口查询弹性云服务器的自定义数据。后续还会单独提到这,这里就先不多说。
4、/latest/dynamic/instance-identity/document 获取实例标识文档。华为云:1、/latest/meta-data 罗列所有的相关接口的名称:
[root@xxxx ~]# curl http://169.254.169.254/latest/meta-data
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
local-hostname
local-ipv4
placement/
public-hostname
public-ipv4
reservation-id
2、/openstack/latest/securitykey 获取临时的AK、SK。
对弹性云服务器获取临时的AK、SK,需要在IAM上对op_svc_ecs帐户授权,并对相应的弹性云服务器资源进行授权委托管理。这里其实很重要的信息就是在华为云界面上去添加委托,委托的意思就是让op_svc_ecs账户来替我管理相应的资源 具体的操作步骤:统一身份认证服务--委托--创建委托,其中创建委托名称随意添加,委托类型这里选择普通账号,委托的账号这里一定要添加op_svc_ecs,持续时间这里不建议写永久。接下来就是授权操作,授权操作尽量做到最小权限配置,这样即使泄露了,被攻击也能避免攻击范围过大。这里我只选择 ECS ReadOnlyAccess 权限。
创建完成委托后,要指定哪台ECS使用该委托,让该委托生效。华为云ECS 点击详情有个委托项,选择 我们创建的委托项即可,这样就完成了所有的配置。
[root@xxxxx ~]# curl http://169.254.169.254/openstack/latest/securitykey
{"credential": {"access": "25QLI7ISFZEU661ZWV8H", "secret": "xxxxxx",
"securitytoken": "gQxxxxx","expires_at": "2023-05-08T07:09:47.398000Z"}}
3、openstack/latest/user_data 该接口查询弹性云服务器的自定义数据。
curl http://169.254.169.254/openstack/latest/user_data
#!/bin/bash
echo 'root:$6$xxxxxx$xxxxx' | chpasswd -e;
利用方式
利用方式目前总结下外网的主要攻击思路,漏洞原理差不多,但是实际业务的场景复杂多变。
1、Escalating SSRF to RCE on AWS https://hg8.sh/posts/bugbounty/ssrf-to-rce-aws/
2、Exploiting SSRF in AWS Elastic Beanstalk https://notsosecure.com/exploiting-ssrf-aws-elastic-beanstalk
3、Abusing the AWS metadata service using SSRF vulnerabilities https://blog.christophetd.fr/abusing-aws-metadata-service-using-ssrf-vulnerabilities/
4、How to hack AWS instances https://alexanderhose.com/how-to-hack-aws-instances-with-the-metadata-service-enabled/
5、How I got access to local AWS info via Jira https://www.coengoedegebure.com/how-i-got-access-to-local-aws-info-via-jira/
6、Cloud Metadata - AWS IAM Credential Abuse https://sneakymonkey.net/cloud-credential-abuse/
目前筛选了几个比较好的文章,根据这些文章总结出共同的攻击思路,这里也只是起到抛砖引玉的作用,大家利用的时候,还是要结合实际情况来利用,当然你也可以通过各种关键字来google下学习新的攻击姿势,比如aws metadata 或ssrf rce 等。这里其实发现SSRF漏洞在云平台上利用的地位一下上升了很多。之前在传统的平台,SSRF利用的条件被限制了很多。
实战
这里假定使用了云服务器部署了Web应用程序并存在SSRF漏洞,同时该云服务器开启了元数据查询的功能,这里我们利用SSRF读取出元数据。当然SSRF漏洞不同的场景不同攻击方法,这里就不一一赘述。重点注意下如果使用AWS部署,需要先恢复到IMDSv1 版本,否则SSRF无法直接获取元数据。https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/configuring-IMDS-existing-instances.html#modify-restore-IMDSv1。
EC2的元数据版本选择;
传统的服务器:
我们发现了一个SSRF漏洞,会去读取本地的系统配置文件或者是程序的配置文件,寻找是否存在敏感数据。
云安全获取元数据:
我们攻击AWS的EC2,通过http://169.254.169.254/latest/meta-data/iam/security-credentials/获取绑定的角色信息,这里返回的cor0ps角色。通过http://169.254.169.254/latest/meta-data/iam/security-credentials/
危害
目前本章节是介绍凭据窃取,所以我们完成了元数据的窃取,攻击目标已经完成。造成的危害实际上在攻防矩阵中会单独罗列。AWS 云造成的危害:华为云造成的危害:
其他云的攻击手段类似,但是云服务每个云提供云服务实现的不同。
附录
1、腾讯云鼎实验室 https://cloudsec.tencent.com/home/
2、阿里云的ECS元数据 https://help.aliyun.com/document_detail/49122.html?spm=a2c4g.49150.0.0.2c314a07i7ZyZH
3、华为云的ECS元数据 https://support.huaweicloud.com/usermanual-ecs/ecs_03_0166.html
4、腾讯云的ECS元数据 https://cloud.tencent.com/document/product/213/4934
5、AWS的ECS元数据 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
6、腾讯云鼎实验室对元数据的视频介绍 https://www.bilibili.com/video/BV1kq4y1t76m
7、SSRF、RCE结合元数据案例 https://notsosecure.com/exploiting-ssrf-aws-elastic-beanstalk
8、关于ip 169.254.169.254的介绍 https://zh-hans.ipshu.com/ipv4/169.254.169.254
9、阿里云的实例标识接口 https://help.aliyun.com/document_detail/67254.html
10、IMDSV2https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html
原文始发于微信公众号(Web安全):云安全攻防矩阵之元数据
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论