强大的 AWS 漏洞练习靶场介绍——CloudGoat
2019-10-14 10:15:57 Author: www.4hou.com(查看原文) 阅读量:175 收藏

屏幕快照 2019-10-05 06.18.49 PM.png

引言:识别 AWS 环境中的安全风险

在 AWS 环境下正确执行渗透测试是一项困难而复杂的任务,需要各种不同领域的知识和实践。这项任务需要掌握 AWS 知识和红队知识才能执行一个有价值的测试。

在这一点上的问题是,目前没有任何简单的方法来测试和学习这些技能。举个例子: 对于 Web 应用程序,有各种各样的资源可以反复直接测试你的知识、技能。 这些资源包括 bug 赏金程序、 CTF和易受攻击的设计虚拟机和 Web 应用程序,你可以在个人电脑上设置这些虚拟机 和 Web 应用程序以进行各种安全测试(比如 OWASP 的 WebGoat)。

目前还没有针对 AWS 环境学习渗透测试和攻击技术的这类资源。并且云计算,每天都被越来越多的世界各地的公司所采用,这意味着攻击者也被吸引进来,也会越来越多。 没有人愿意在自己的专业环境中测试新的攻击技术,无论它是一个开发环境、测试环境还是生产环境;也没有人愿意设置一个易受攻击的环境来手动执行攻击,因为它可能会向他们不知道的外部风险开放帐户。

为了满足这些需求,我们创建了 CloudGoat ——一个廉价、简单、易受攻击的 AWS 环境。在这里,你可以随意部署和关闭环境。

CloudGoat 的 GitHub 仓库: https://github.com/RhinoSecurityLabs/cloudgoat

CloudGoat: 一个脆弱的、基于按需的 AWS 环境

CloudGoat 是用于部署(并关闭)一组易受攻击的 AWS 资源,用于教学 AWS 的安全风险知识。 我们要确保我们包含的所有漏洞只能被给定的 AWS 帐户的人访问和利用。 这包括在白名单中尽可能访问你提供的个人 IP 地址的敏感资源。

在默认状态下,CloudGoat 可以安全地启动到 AWS 帐户并保持运行,而不必担心来自外部参与者的威胁。

注意: 如果你在攻击环境更改了环境配置,则可能会更改环境的安全性。 为了避免这种情况,作为攻击的一部分,是不允许入站安全组规则访问易受攻击实例的未知 IP 地址,也不允许将个人 / 私有信息上传到 CloudGoat 部署的易受攻击资源。 建议将 CloudGoat 部署到它自己的帐户中,独立于任何真正的 AWS 资源,或者至少是一个单独的区域,这样在测试中的安全性更高。

万一在测试过程中搞砸了一些事情,你可能会担心你做出的一些改变会影响后续的操作,或者是今天测试过程暂时结束了。那么,只要把运行脚本关闭,CloudGoat 就可以从你的帐户中清除。

CloudGoat 支持 Pacu

开发 CloudGoat 的主要驱动程序之一是支持 Pacu 的研究和开发,Pacu 是在一个开源的AWS 攻击框架,我在这篇文章中提及过

Pacu 将于8月8日星期三在 BSidesLV 上正式发布,Spencer Gietzen 将在大会上做一个关于 AWS 安全研究的演讲,以及这项研究对我们构建 Pacu 的影响。 Pacu 将会在那次活动上完全开源发布。

编辑(2018/8/9) : Pacu 在 GitHub 上的仓库地址:https://github.com/RhinoSecurityLabs/pacu

CloudGoat 和 Pacu 目前是紧密联系在一起的,因为我们的目标是让 CloudGoat 支持 Pacu 中可用的攻击模块。 这将允许 Pacu 用户测试针对 AWS 环境的攻击,而不需要针对真正的系统,也不需要动用他们自己的资源。

安装设置: 它包括哪些内容以及它是如何工作的?

CloudGoat 部署脚本使用 Terraform 和 Python 中的一些定制组件来启动所需的资源到你的帐户中。 它将生成环境中使用的密码和密钥对,并将它们输出到 CloudGoat 工作目录中的一个文件中。 在攻击环境时,这些凭证可以作为起点。里面有多个 IAM 用户,所以一个好的起点是获取其中某个用户的访问密钥或密码,就好像你只是拿到了这点信息,再没有更多的信息了。

CloudGoat 将以下资源启动到你的 AWS 帐户(当前位于 us-west-2,如果可能的话) :

· 1 个 CloudTrail 

· 1 个 GuardDuty 检测器

· 1 个 Lambda 函数

· 2 个 S3 存储桶

· 1 个 Elastic 弹性负载均衡器

· 1个 EC2实例

· 3个 EC2安全组

· 3 个 IAM 用户

· 3 个 IAM 角色

· 1 个 IAM group

· 1 个 IAM 实例配置文件

· 1 个 Lightsail 实例

· 1 个 CodeBuild 项目

· 1 个 Glue 开发端点(默认情况下是禁用的)

EC2安全组的设置只允许从你在部署时提供的特定 IP 地址范围进行入站访问。 在运行关闭脚本时,所有这些资源都将从 AWS 帐户中删除。

AWS API 成本-CloudGoat 的托管昂贵吗?

不,成本并不高! 如果 CloudGoat 运行在一个没有启用 AWS 免费层的帐户中,根据你的使用情况,估计每天的成本大约为1-3美元。 我们建议部署环境,执行测试和攻击,然后在当天完成时关闭环境,以确保不会遇到任何大的意外的收费。 环境可以很快地被创建和破坏,从而使其成为理想的解决方案。

CloudGoat 漏洞及攻击载体

CloudGoat 是使用 Pacu (Rhino 安全实验室出品的 AWS 后漏洞利用攻击工具)构建的,这意味着我们的目标是使所有 Pacu 模块都能在 CloudGoat 环境中使用。 随着 Pacu 的不断发展,CloudGoat 也将继续发展,我们将继续发表其他详细介绍如何使用 Pacu 来攻击这个环境的文章。

起点:

下面的列表是不同环境中的差异之处,它们在真实的攻防场景中是有意义的。 利用最初的访问权限来了解更多关于环境的信息,并在整个环境中进行扩展。

· 通过 SSH 访问 EC2实例

· IAM 用户“Joe”(数据库管理员)的访问密钥

· IAM 用户“Bob”(EC2管理员)的访问密钥

· IAM 用户“Administrator”(帐户管理员)的密码

· 通过 SSH 访问 Glue 开发端点(如果你已经启用了它)

不同用户和服务器的凭证(IAM 密钥对和密码)和服务器的 IP 地址将被输出到 CloudGoat 根目录中的“credentials.txt”文件中,任何密钥(SSH/GPG)都将存储在“./keys”文件夹。

目标:

当攻击任何 AWS 环境时,有许多目标需要瞄准。 这个列表只是为了展示在 AWS 环境中执行渗透测试时应该记住的一些内容。

· 权限提升

· 规避日志记录和监控

· 数据和信息枚举

· 数据外泄

· 持久访问

这些不一定与 CloudGoat 直接相关,但重要的是要指出,恶意攻击者并不遵循我们渗透测试人员和安全专家遵循的规则,所以不要认为这是唯一一种可能被用来攻击现实世界中的环境的方法。 下面的列表包含了一些这类攻击的例子。

· 销毁(删除资源)

· 赎金(将你的资源 / 数据作为人质)

· 资金 / 资源枯竭(比如分布式拒绝服务攻击攻击)

· 隐匿挖矿(在你的账户中启动加密货币矿工)

· 针对客户的攻击(针对你公开提供服务的用户,也就是你的顾客)

场景漏洞

警告: 以下部分包含环境中不同攻击向量和漏洞的破坏者。

如果你希望在没有内部细节的情况下开始将 CloudGoat 作为目标,请直接跳到下面的结论。

下面的列表详细说明了 CloudGoat 环境在部署到一个帐户之后的许多弱点(在撰写本博客时,为了获取最新的列表,请拉取最新的 CloudGoat GitHub)。

  1. EC2实例运行的 web 服务器允许你发送任意 HTTP 请求并读取其响应。 你能用它进一步获取信息吗?

  2. EC2实例附加了一个 IAM 实例配置文件,这是否对权限提升有帮助?

  3. EC2实例在其用户数据中存储了一些内容,你可以利用它来获得进一步的访问吗?

  4. Lambda函数具有与你不同的 IAM 特权,你可以滥用它们来升级特权或建立后门吗? 你可能无法直接调用函数,那么你能做什么呢? (提示: DynamoDB)

  5. Lightsail 实例是使用默认设置配置的,你能访问它吗?

  6. CloudTrail正在记录所有的东西—- 你可以规避,破坏,或者给它或者那些稍后可能审查这些东西的人带来问题吗?

  7. 你可能能够重新启动 EC2实例,你能够使用该知识获得对它的远程访问吗?

  8. EC2实例运行的是亚马逊 Linux 2,你能使用安装在它上面的默认软件来获得对它的远程访问吗?

  9.  IAM 权限“ CreatePolicyVersion”接受“-set-as-default”标志,但不需要“ SetDefaultPolicyVersion”权限来使用它,这对你有什么帮助呢?

  10. GuardDuty 正在运行,你如何能逃避侦查或使它信任你?

  11. 有些用户没有设置密码,你能利用这一点来访问他们的帐户吗?

  12. 有些用户只有访问密钥,你能利用这一点来访问他们的帐户吗?

  13. 里面有多个 EC2安全组,你能否使用不同规则发现并获得访问新服务的权限吗?

  14. 你能发现弹性负载均衡器和 EC2实例中的错误配置吗?

  15. 使用 CodeBuild 的开发人员没有遵循最佳实践—- 你能访问他们项目中的密钥吗?

  16. S3存储桶没有启用版本控制或 MFA-delete,你能隐藏你的轨迹吗?

  17. 里面有一个未使用的组,你可以将你的用户添加到这个组以获得特权吗?

  18. 里面有未使用的角色,你怎么能假设他们获得他们的特权?

  19. 一个 S3存储桶允许写访问,你能覆盖任何文件以获得进一步的访问吗?

  20. Glue 开发端点附加了一个角色,你可以通过 SSH 访问这个角色来升级特权吗? (如果你已经启用它)

甚至可能有一些没有记录的攻击载体。看看你能找到什么!

CloudGoat 是开源的项目,欢迎你能为此做出任何贡献。 这种环境扩展得越多,AWS 社区的安全意识就越强。

我使用 CloudGoat 是否需要获得 AWS渗透测试的授权?

构建 CloudGoat 的时候我们就考虑到了 AWS 的可接受使用政策( https://AWS.amazon.com/aup/ )。 对你来说,这意味着我们已经确保 CloudGoat 在你的环境中打开的攻击仍然符合我们对 AWS 可接受的使用政策的解释,你不需要在你的账户中申请一个渗透测试授权。 当你攻击你的环境时,一定要记住它们的规则,因为违反它们会导致严重的后果。 如果你认为进一步访问 CloudGoat 环境的唯一方法是明确地破坏 AWS 可接受的使用政策,那么你就错了,你不应该这样做。

CloudGoat 2简介

Rhino 安全实验室很高兴地宣布 CloudGoat 2 的正式发布,这是我们的下一代“易受攻击的设计” AWS 部署工具。

在 AWS 中进行渗透测试仍然是非常新的领域。但是缺乏一个工具来帮助人们学习和实践,以便进行一次全面的 AWS 五角大楼所需的广泛技能。 在五角星的其他领域,这不是问题。 例如,对学习 Web 应用程序感兴趣的人有许多资源,可以直接以可重复的方式学习和测试技能和技术。 有CTF竞赛以及设计了一些易受攻击的虚拟机或 Web 应用程序,它们为学习提供了本地的沙盒环境。 CloudGoat 将同样的想法应用到云环境中,并允许用户基于 Rhino 安全实验室研究人员在野外观察到的漏洞有意创建脆弱的 AWS 环境。

你可以在我们的 GitHub 上找到 CloudGoat

CloudGoat 2 的新特性

CloudGoat 2以多种方式扩展和改进了原来 CloudGoat 的功能。 首先,CloudGoat 的用户界面已经得到了极大的改进。 现在,用户可以在 python 脚本中为场景创建或销毁基础架构,该脚本支持所有命令和参数的帮助消息。

场景

CloudGoat 2还引入了“场景”。 场景是具有明确定义的攻击路径和目标的自包含的学习环境。 每个场景都由已创建的基础架构、当前的攻击路径和逐步演练的详细说明文档支持。 下图是略微修改过的 Web 应用程序攻击路径图,显示用户可能有多个攻击路径,并提供提示。

cloudgoat-image-1.png

CloudGoat 2中包括的场景如下:

· rce_web_app——找到秘密端点,并利用 Web 应用程序远程代码执行漏洞,以获得EC2的 root权限来访问内部的 VPC

· iam_privesc_by_attachment: iam privesc – 发现并附加现有实例配置文件以提升特权

· iam_privesc_by_rollback枚举 IAM 策略版本并回滚到具有更高权限的旧版本

· codebuild_secrets——探索 CodeBuild 和 SSM 以发现安全数据库中的明文密钥

· ec2_ssrf ——查找并利用 EC2元数据服务,使用 Web 应用程序中的 SSRF 漏洞获取密钥

CloudGoat 是为安全社区创建的,我们鼓励每个人都参与进来。 CloudGoat 2的所有组件在设计时都考虑到了扩展和社区贡献。

安装和设置 CloudGoat 2

要开始使用 CloudGoat,你首先需要登录到 AWS 控制台(如果你已经有帐户) ,或者创建一个 AWS 免费试用帐户并登录到控制台。 如果还没有这种账户,请确保在 root 帐户上启用了 MFA 并删除了所有 root 访问密钥。 为了遵循最佳实践,我们将创建一个 IAM 用户,并附加 AWS 管理的“administration access”策略。 不要使用 root 帐户来部署 CloudGoat,这一点非常重要。

创建 IAM 用户

使用 CloudGoat 的下一步是创建一个 IAM 用户。 你将需要导航到 AWS 控制台的 IAM 部分,并从左侧菜单选择“用户” ,然后选择“添加用户” ,如下图所示。

cloudgoat-image-2.jpg

在下面的截图中,输入帐户的用户名并给予帐户编程访问权限,这将为用户生成密钥。 我们将使用这些密钥在 AWS 命令行界面中配置配置文件。 下面的图片显示了作者创建了一个名为“ cloudgoat”的用户,并为用户提供了编程访问。

cloudgoat-image-3.jpg

下一步是将现有策略直接附加到新用户。 选择“直接附加现有策略” ,如下面的屏幕截图所示。 CloudGoat 需要管理访问,因此选择出现在列表顶部的“ AdministrativeAccess”策略。

cloudgoat-image-4.jpg

接下来的截图是为新创建的用户分配一个标签,但是在本演练中我们不会使用到这个特性。 点击“Next: Review”。

检查信息以确保其正确性,然后点击最后的“创建用户”按钮。 将显示一个“成功”的消息,你的 AWS 键将被显示出来。 这是唯一可以检索 AWS 访问密钥和 AWS 秘密密钥的时间,因此保存它们非常重要。 如果这些秘钥丢失了,你将需要生成一组新的密钥。 下面的屏幕截图显示了一个成功创建的用户和发给该用户的密钥,这些密钥是创建 CloudGoat 环境所必需的。

cloudgoat-image-5-750x644.jpg

配置 AWS-CLI

接下来,我们需要在 AWS 命令行界面中配置一个配置文件。 运行以下命令安装 AWS CLI 并配置 AWS CLI 配置文件。 当出现提示时,输入前面步骤中生成的 AWS 访问密钥和秘密访问密钥:

sudo apt-get install awscli
aws configure --profile cloudgoat

现在我们准备创建我们的第一个 CloudGoat 场景!

创建一个场景

因为我们要有意创建易受攻击的 AWS 环境,所以只有目标用户才能访问它们是很重要的。 CloudGoat 使用一个白名单来限制访问,只允许来自特定 IP 地址或 CIDR 范围的网络连接。 运行以下命令并按照提示将你的公共 IP 地址列入白名单:

./cloudgoat.py config whitelist

设置场景的最后一步是使用我们设置的 AWS CLI 配置文件运行“create”命令,并指定要创建的场景。 可以在 AWS 帐户中创建多个场景,但必须单独运行创建命令。 运行以下命令创建 CloudGoat rce_web_app 场景:

./cloudgoat.py create rce_web_app --profile cloudgoat

当构建完成时,将显示一些信息以帮助你继续操作。 对于 rce_web_app 场景,你将获得两组密钥。 为给定的键创建 AWS CLI 配置文件! 如果你在任何时候遇到困难,CloudGoat 的 GitHub 上提供了详细的演练和流程图来帮助你学习。

提示: 一个好的开始主要是看看你可以访问哪些资源。 你能列出 EC2实例和S3存储桶?

其他资源

以下 Rhino 安全实验室发表的博客文章也会有所帮助:

AWS IAM 权限提升、方法和缓解措施

Pacu: 开源的 AWS 漏洞利用框架

使用 AWS 账户ID 枚举 IAM 用户

未经身份验证的 AWS 角色枚举(IAM 再访)

做最坏的打算: 通过 AssumeRole 列举 AWS 角色

总结

如果你对 CloudGoat 和 AWS 可接受的使用策略有任何疑问或担忧,请随意在 GitHub 上提交 issue。

AWS 的安全性,尤其是在扮演攻击者角色时,可能很难得到控制。 CloudGoat 旨在填补该行业的一个空白,并为希望学习更多 AWS 安全性和渗透测试的各种技能水平的人提供一个很好的学习体验。

我们计划在 Pacu 即将发布的时候发布另一篇文章,解释如何使用各种 Pacu 模块攻击 CloudGoat 环境。 这将帮助用户了解 Pacu 的基本用法,并帮助他们识别和利用 AWS 环境中的错误配置。

学习 Web 应用程序测试或二进制漏洞利用的资源很多,但是学习 AWS 的资源却很少。 CloudGoat 的存在就是为了缩小这个差距。 根据我们在 Rhino 安全实验室的研究,我们将定期发布其他情景。 同时,要密切关注每一个场景的官方更新。

CloudGoat 的 GitHub 地址: https://github.com/RhinoSecurityLabs/cloudgoat
支持 OWASP Talk 的演讲视频地址 YouTube here.

安装和部署说明可以在 GitHub 存储库中的 README.md 文件中找到。


文章来源: https://www.4hou.com/system/20707.html
如有侵权请联系:admin#unsafe.sh