Project Icon

cloudgoat

AWS安全渗透测试实践平台

CloudGoat是Rhino Security Labs开发的AWS安全学习平台,提供多个内置漏洞的场景供用户实践云安全技能。平台包含从简单到复杂的AWS安全挑战,用户可在其中探索环境、发现并利用漏洞,达成特定目标。通过这种捕获旗标式的实践,有助提升AWS安全渗透测试能力。CloudGoat注重学习体验质量,具备完善文档、易用性和模块化架构等特点。

CloudGoat(云端山羊)

犀牛 PyPI GitHub
许可证 欢迎提交拉取请求 CloudGoat 是 Rhino Security Labs 的"故意设计为易受攻击"的 AWS 部署工具。

快速参考

CloudGoat 2.0 现已发布!

CloudGoat 是 Rhino Security Labs 的"故意设计为易受攻击"的 AWS 部署工具。它允许您通过创建和完成多个"夺旗"式场景来磨练云网络安全技能。每个场景由 AWS 资源组合而成,创建一个结构化的学习体验。有些场景简单,有些困难,许多场景提供多种通关路径。作为攻击者,您的任务是探索环境、识别漏洞并利用它们达成场景目标。

以下是我们对 CloudGoat 的主要目标:

  • 专注、精心策划、高质量的学习体验 - CloudGoat 的每个场景都应提供实验、探索和培养实践云安全技能的机会。
  • 完善的文档 - 我们尽最大努力确保 CloudGoat 的场景有良好的文档,易于理解,并可以从难度、内容、结构和所需技能方面进行评估。
  • 易于安装和使用 - 我们理解 CloudGoat 是达到目的的手段 - 学习和实践云安全渗透测试。因此,我们致力于保持简单、直接和可靠。
  • 模块化 - 每个场景都是一个独立的学习环境,有明确的目标(或目标集),CloudGoat 能够独立启动、重置或关闭每个场景。
  • 可扩展性 - CloudGoat 的核心组件(Python 应用和场景)设计为允许我们或社区轻松独立扩展。

在继续之前,请注意以下警告!

警告 #1: CloudGoat 会在您的账户中创建故意易受攻击的 AWS 资源。不要在生产环境或任何敏感的 AWS 资源旁边部署 CloudGoat。

警告 #2: CloudGoat 只能管理它创建的资源。如果您在场景过程中自行创建任何资源,应在运行 destroy 命令前手动删除它们。

要求

快速开始

要安装 CloudGoat,请确保您的系统满足上述要求,然后运行以下命令:

git clone https://github.com/RhinoSecurityLabs/cloudgoat.git
cd cloudgoat
python3 -m venv .venv
source .venv/bin/activate
pip3 install -r ./requirements.txt
chmod +x cloudgoat.py

您可能还想运行一些快速配置命令 - 这将为您节省一些时间:

$ ./cloudgoat.py config profile
$ ./cloudgoat.py config whitelist --auto

现在,您可以使用 CloudGoat 在云中 create 一个场景实例。当环境准备就绪时,项目根目录中将创建一个以场景名称命名并附加唯一场景 ID 的新文件夹。该文件夹内将有一个名为 start.txt 的文件,其中包含开始场景所需的所有资源,尽管这些信息也会在 create 命令完成时打印到控制台。有时还会创建一个名为 cloudgoat/cloudgoat.pub 的 SSH 密钥对。

注意: 不要删除或修改场景实例文件夹或其中的文件,因为这可能会阻止 CloudGoat 管理您的场景资源。

在完成场景时,如果需要指导,可以参考场景的自述文件。如果遇到困难,每个路线的演练底部都有链接到作弊表。

完成场景后,删除您自己创建的任何资源(请记住:CloudGoat 只能管理它创建的资源),然后运行 destroy 命令。事后快速浏览一下 AWS Web 控制台总是个好主意 - 以防有什么没有被删除。

您可以在使用指南部分阅读 CloudGoat 命令的完整文档。

如何使用 CloudGoat 的 Docker 镜像

在 PWD 中尝试

选项 1: 使用默认入口点运行

$ docker run -it rhinosecuritylabs/cloudgoat:latest

选项 2: 使用 AWS 配置和凭证运行

警告:运行此命令将在启动 Docker 容器时将您本地的 AWS 配置文件挂载到容器中。这意味着任何能访问容器的用户都将有权访问您主机计算机的 AWS 凭证。

$ docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest

可用场景

vulnerable_lambda (小型 / 简单)

$ ./cloudgoat.py create vulnerable_lambda

在这个场景中,您从 'bilbo' 用户开始。您将承担一个具有更多权限的角色,发现一个应用策略到用户的 lambda 函数,并利用该函数中的漏洞来提升 bilbo 用户的权限,以便搜索机密。

访问场景页面。

vulnerable_cognito (小型 / 中等)

$ ./cloudgoat.py create vulnerable_cognito

在这个场景中,您会看到一个使用 AWS Cognito 作为后端的注册和登录页面。您需要绕过限制并利用 Amazon Cognito 中的错误配置来提升权限并获取 Cognito Identity Pool 凭证。

TrustOnCloud 贡献。

访问场景页面。

iam_privesc_by_key_rotation (小型 / 简单)

$ ./cloudgoat.py create iam_privesc_by_key_rotation

利用不安全的 IAM 权限来提升您的访问权限。从管理其他用户凭证的角色开始,找到设置中的弱点以访问"admin"角色。使用 admin 角色从 secretsmanager 检索标志。

infrasec.sh 贡献。

访问场景页面。

iam_privesc_by_rollback (小型 / 简单)

$ ./cloudgoat.py create iam_privesc_by_rollback

从一个高度受限的 IAM 用户开始,攻击者能够审查之前的 IAM 策略版本并恢复一个允许完全管理员权限的版本,从而实现权限提升漏洞。

访问场景页面。

lambda_privesc (小型 / 简单)

$ ./cloudgoat.py create lambda_privesc

从 IAM 用户 Chris 开始,攻击者发现他们可以承担一个具有完全 Lambda 访问权限和传递角色权限的角色。然后,攻击者可以使用这些新权限执行权限提升,以获得完全的管理员权限。

注意: 此场景可能要求您创建一些 AWS 资源,由于 CloudGoat 只能管理它创建的资源,您应该在运行 ./cloudgoat destroy 之前手动删除这些资源。

访问场景页面。

sqs_flag_shop (小型 / 简单)

$ ./cloudgoat.py create sqs_flag_shop

首先,从可以购买 FLAG 的商店页面开始。该网站有多个页面,您可以看到源代码是公开的。攻击者分析代码以找到漏洞,并利用他们的权限购买 FLAG。 访问场景页面。

cloud_breach_s3(小型/中等)

$ ./cloudgoat.py create cloud_breach_s3

从一个没有访问权限或特权的匿名外部人员开始,利用配置错误的反向代理服务器查询EC2元数据服务并获取实例配置文件密钥。然后,使用这些密钥发现、访问并窃取S3存储桶中的敏感数据。

访问场景页面。

iam_privesc_by_attachment(中等/中等)

$ ./cloudgoat.py create iam_privesc_by_attachment

从一组非常有限的权限开始,攻击者能够利用实例配置文件附加权限创建一个权限远高于自身的新EC2实例。通过访问这个新的EC2实例,攻击者获得了目标账户内的完全管理权限,并能够完成场景目标 - 删除cg-super-critical-security-server,为进一步的恶意行动铺平道路。

注意: 此场景可能需要你创建一些AWS资源,由于CloudGoat只能管理它创建的资源,你应该在运行./cloudgoat destroy之前手动删除这些资源。

访问场景页面。

ec2_ssrf(中等/中等)

$ ./cloudgoat.py create ec2_ssrf

从IAM用户Solus开始,攻击者发现他们对Lambda函数有只读权限,其中硬编码的秘密信息引导他们到一个运行着易受服务器端请求伪造(SSRF)攻击的Web应用程序的EC2实例。在利用易受攻击的应用程序并从EC2元数据服务获取密钥后,攻击者获得了对私有S3存储桶的访问权限,其中包含一组允许他们调用Lambda函数并完成场景的密钥。

访问场景页面。

ecs_takeover(中等/中等)

$ ./cloudgoat.py create ecs_takeover

从访问外部网站开始,攻击者需要找到一个远程代码执行漏洞。通过使用RCE,攻击者可以获取网站容器可用的资源访问权限。利用几个ECS配置错误,攻击者获得了允许他们强制ECS将目标容器重新调度到受损实例的IAM权限。

访问场景页面。

rds_snapshot(中等/中等)

$ ./cloudgoat.py Create rds_snapshot

在这个场景中,我们从用户"David"开始。通过David,你可以利用权限窃取凭证。使用窃取的凭证,攻击者可以利用RDS漏洞访问数据库并检索标志。

注意: 此场景可能需要你创建一些AWS资源,由于CloudGoat只能管理它创建的资源,你应该在运行./cloudgoat destroy之前手动删除这些资源。

访问场景页面。

rce_web_app(中等/困难)

$ ./cloudgoat.py create rce_web_app

从IAM用户Lara开始,攻击者探索负载均衡器和S3存储桶寻找漏洞线索,导致在易受攻击的Web应用程序上进行RCE攻击,暴露机密文件,最终访问场景的目标:一个高度安全的RDS数据库实例。

或者,攻击者可以从IAM用户McDuck开始,枚举S3存储桶,最终找到SSH密钥,直接访问EC2服务器和后面的数据库。

访问场景页面。

codebuild_secrets(大型/困难)

$ ./cloudgoat.py create codebuild_secrets

从IAM用户Solo开始,攻击者首先枚举和探索CodeBuild项目,在其中找到IAM用户Calrissian的不安全IAM密钥。然后作为Calrissian操作,攻击者发现了一个RDS数据库。无法直接访问数据库的内容,攻击者可以巧妙地使用RDS快照功能来获取场景的目标:一对秘密字符串。

或者,攻击者可以探索SSM参数并找到EC2实例的SSH密钥。使用元数据服务,攻击者可以获取EC2实例配置文件的密钥,并更深入地进入目标环境,最终通过更迂回的路线访问原始数据库和其中的场景目标(一对秘密字符串)。

注意: 此场景可能需要你创建一些AWS资源,由于CloudGoat只能管理它创建的资源,你应该在运行./cloudgoat destroy之前手动删除这些资源。

访问场景页面。

cicd(中等/中等)

$ ./cloudgoat.py create cicd

FooCorp是一家提供公共API的公司。FooCorp的客户每分钟都会向API提交敏感数据。该API作为Lambda函数实现,通过API网关暴露。由于FooCorp实施了DevOps,它有一个持续部署管道,可以在几分钟内自动将Lambda函数的新版本从源代码部署到生产环境。

你的目标:窃取FooCorp客户提交的敏感数据!

由Datadog贡献。

访问场景页面。

detection_evasion(中等/困难)

$ ./cloudgoat.py create detection_evasion

这个场景的目标是在不被检测到的情况下读取两个秘密的值。这两个秘密都存储在Secrets Manager中,它们的值格式如下(cg-secret-XXXXXX-XXXXXX)。

这个场景与其他CloudGoat场景有显著不同。在detection_evasion中,你的目标会更清晰地列出,挑战在于在不触发警报的情况下完成它们。这个场景涉及更多的设置,需要更长的时间来玩(你可能想/需要多次尝试)。

访问场景页面。

ecs_efs_attack(大型/困难)

$ ./cloudgoat.py create ecs_efs_attack

从访问"ruse" EC2开始,用户利用实例配置文件后门入侵运行中的ECS容器。使用被入侵的容器,攻击者可以从容器元数据API中检索凭证。这些凭证允许攻击者在任何设置了适当标签的EC2上启动会话。攻击者使用他们的权限更改Admin EC2的标签并启动会话。一旦进入Admin EC2,攻击者将扫描子网以寻找开放的EFS进行挂载。一旦挂载,攻击者就可以从弹性文件系统中检索标志。

访问场景页面。

glue_privesc(大型/中等)

$ ./cloudgoat.py create glue_privesc

这个场景从一个上传CSV文件并通过Glue服务执行数据可视化的网页开始。 攻击者通过SQL注入攻击窃取网页上存在的凭证,并上传一个反向shell来创建Glue Job以获取秘密字符串。

注意: 此场景可能需要你创建一些AWS资源,由于CloudGoat只能管理它创建的资源,你应该在运行./cloudgoat destroy之前手动删除这些资源。

访问场景页面。

使用指南

CloudGoat命令的基本结构如下:

$ ./cloudgoat.py [ 命令 ] [ 子命令 ] [ --参数名 ] [ 参数值 ]

CloudGoat的五个主要命令概述如下:

create

create [ 场景名 ] 将场景部署到你选择的AWS账户。你也可以对现有场景运行create - CloudGoat将简单地销毁并重新创建指定的场景。

提示: 你可以在名称中使用/scenarios,这允许bash的原生tab补全。

请注意,出于安全原因,--profile是必需的 - 我们不希望有人意外地将CloudGoat场景部署到生产环境中 - CloudGoat不会使用系统的"默认"AWS CLI配置文件或通过环境变量指定为默认的配置文件。但是,你可以通过config profile设置它,以避免每次都必须提供。

list

list显示有关allundeployeddeployed场景的一些信息,或者甚至显示已部署的[ 场景名 ]的大量信息。

destroy

destroy关闭并删除[ 场景名 ]的云资源,然后将场景实例文件夹移动到./trash - 以防你需要恢复Terraform状态文件或其他场景文件。你也可以指定all而不是场景名来销毁所有活跃的场景。

提示: CloudGoat只能管理它创建的资源。如果你在场景过程中自己创建了任何资源,你应该在运行destroy命令之前手动删除它们。

配置

config 允许您管理 CloudGoat 安装的各个方面,特别是 IP 白名单、默认的 AWS 配置文件以及通过 argcomplete 实现的 Tab 自动补全。值得简要描述一下每个子命令的功能。

白名单

CloudGoat 需要知道在云中部署潜在易受攻击的资源时应该将哪些 IP 地址列入白名单,这些 IP 地址会被记录在项目根目录下的 ./whitelist.txt 文件中。您提供的用于白名单的 IP 地址不一定要是 CIDR 格式,但 CloudGoat 会为您提供的任何单独 IP 地址添加 /32。您也可以添加 --auto 参数,CloudGoat 将自动使用 curl 向 ifconfig.co 发送网络请求以获取您的 IP 地址,然后用结果创建白名单文件。

配置文件

虽然 CloudGoat 永远不会使用系统的"默认" AWS CLI 配置文件或通过环境变量指定的默认配置文件,但您可以使用 config profile 命令指示 CloudGoat 使用特定名称的 AWS 配置文件。这将提示您输入并保存配置文件名称到项目根目录下的 config.yml 文件中。只要该文件存在,CloudGoat 就会使用其中列出的配置文件名来执行创建和销毁命令,而不需要 --profile 标志。您可以随时运行 config profile 命令来查看 CloudGoat 默认配置文件的名称并验证 config.yml 的格式。如果您愿意,也可以手动创建 config.yml,只要使用正确的格式即可。

argcomplete

我们真的希望 CloudGoat 能有原生的 Tab 自动补全功能,但事实证明在 REPL 之外实现这一点有些困难。对于 Linux 用户来说,这应该可以正常工作,对于那些勇于将 bash 版本升级到 4.2+ 的 OSX 用户来说也是如此。CloudGoat 确实包含并支持 Python 库 "argcomplete"。下面简要概述了如何安装 argcomplete,但如需更详细的步骤,您应该参考该库 GitHub 页面 上的官方文档。

  1. 使用 CloudGoat 的 requirements.txt 文件安装 argcomplete Python 包:$ pip3 install -r core/python/requirements.txt
  2. 在 bash 中,运行 argcomplete 包提供的全局 Python 参数补全脚本:$ activate-global-python-argcomplete
  3. 在上一个激活命令打印的位置处引用补全脚本,或重启您的 shell 会话:$ source [ /path/to/the/completion/script ]

对于那些无法或不希望配置 argcomplete 的用户,CloudGoat 还支持使用目录路径作为场景名称,这意味着场景名称的 Tab 补全将正常工作。只需使用 /scenario/[ scenario-name ]./[ scenarioinstance-name ],您的 shell 就会完成剩下的工作。

帮助

help 提供关于命令的上下文帮助。help 可以在相关命令之前或之后使用,所以在您需要时随时可用。以下是一些示例:

  • $ ./cloudgoat.py create help
  • $ ./cloudgoat.py destroy help
  • $ ./cloudgoat.py list help
  • $ ./cloudgoat.py config help

另一个值得注意的用法:$ ./cloudgoat.py [ scenario-name ] help 可用于在控制台打印场景的简要摘要,该摘要由场景作者定义。

功能请求和错误报告

如果您有功能请求或需要报告错误,请在此提交

对于错误,请确保包含足够的描述以重现您发现的错误,包括回溯和复现步骤,并在提交新的错误报告之前检查是否有其他人报告了相同的错误。

对于功能,同样适用!请在您的请求中具体说明,并确保没有其他人已经请求了相同的功能。

贡献指南

我们非常感谢对 CloudGoat 的贡献。如果您想帮助改进这个项目,请继续阅读。

  1. CloudGoat 中的 Python 代码通常应遵循 Python 的风格约定,首要考虑可读性和可维护性。
  2. 遵循良好的 git 实践:使用拉取请求,优先使用功能分支,始终写清晰的提交消息。
  3. CloudGoat 使用 blackflake8 - Python 语法和风格检查工具 - 如果您要提交 CloudGoat 的代码,请确保首先在 core/python/ 目录下的所有 Python 文件和 cloudgoat.py 上运行 flake8,然后运行 blackblack 的决定优先于 flake8。这两个工具都在 core/python/requirements.txt 文件中被注释掉了,因为普通用户不需要它们。
  4. CloudGoat 代码应始终使用 BSD 3-clause 许可证。

最后,感谢您的贡献!

更新日志

  • 2019年6月24日: CloudGoat 2.0 发布!

免责声明

CloudGoat 是一款不附带任何担保的软件。使用 CloudGoat 即表示您对使用它所产生的任何和所有结果承担全部责任。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号