rhinosecuritylabs/cloudgoatCloudGoat是Rhino Security Labs开发的“设计即漏洞”AWS部署工具。它允许用户通过创建和完成多个夺旗赛(CTF)风格的场景来磨练云网络安全技能。每个场景由AWS资源组合而成,提供结构化学习体验,场景难度各异,部分场景有多种解决路径。用户作为***者,需探索环境、识别漏洞并利用漏洞达成场景目标。
警告1:CloudGoat会在您的账户中创建故意存在漏洞的AWS资源。请勿在生产环境或敏感AWS资源旁部署CloudGoat。
警告2:CloudGoat仅能管理其创建的资源。若在场景中自行创建资源,需在运行
destroy命令前手动删除。
$PATH。$PATH,且AWS账户需有足够权限创建和销毁资源。确保系统满足上述要求,执行以下命令:
$ git clone [***] $ cd cloudgoat $ pip3 install -r ./core/python/requirements.txt $ chmod u+x cloudgoat.py
建议运行以下配置命令以节省后续时间:
$ ./cloudgoat.py config profile $ ./cloudgoat.py config whitelist --auto
创建场景后,项目根目录会生成以场景名和唯一ID命名的文件夹,内含start.txt文件(包含开始场景所需资源信息),有时还会创建cloudgoat/cloudgoat.pub SSH密钥对。
注意:不要删除或修改场景实例文件夹及内部文件,否则可能导致CloudGoat无法管理场景资源。完成场景后,手动删除自行创建的资源,再运行
destroy命令。
console$ docker run -it rhinosecuritylabs/cloudgoat:latest
警告:此命令会将本地AWS配置文件挂载到Docker容器中,任何有权访问容器的用户都能获取主机的AWS凭据。
console$ docker run -it -v ~/.aws:/root/.aws/ rhinosecuritylabs/cloudgoat:latest
$ ./cloudgoat.py create iam_privesc_by_rollback
从权限高度受限的IAM用户开始,***者可查看IAM策略的历史版本并恢复允许完全管理员权限的版本,实现权限提升。
查看场景页面
$ ./cloudgoat.py create lambda_privesc
以IAM用户Chris身份开始,***者发现可 assume 具有完全Lambda访问权限和传递角色权限的角色,利用这些权限实现权限提升,获取完全管理员权限。
注意:此场景可能需要创建AWS资源,CloudGoat仅能管理其创建的资源,需在运行
./cloudgoat destroy前手动删除自行创建的资源。
查看场景页面
$ ./cloudgoat.py create cloud_breach_s3
以无访问权限的***用户身份开始,利用配置错误的反向代理服务器查询EC2元数据服务获取实例配置文件密钥,使用这些密钥发现、访问并窃取S3存储桶中的敏感数据。
查看场景页面
$ ./cloudgoat.py create iam_privesc_by_attachment
以权限非常有限的用户身份开始,***者利用实例配置文件附加权限创建具有更高权限的新EC2实例,通过访问该实例获取目标账户的完全管理权限,完成场景目标:删除cg-super-critical-security-server。
注意:此场景可能需要创建AWS资源,需在运行
./cloudgoat destroy前手动删除自行创建的资源。
查看场景页面
$ ./cloudgoat.py create ec2_ssrf
以IAM用户Solus身份开始,***者发现对Lambda函数有只读权限,其中硬编码的密钥指向易受服务器端请求伪造(SSRF)***的EC2实例上的Web应用。利用漏洞从EC2元数据服务获取密钥,访问私有S3存储桶,调用Lambda函数完成场景。
查看场景页面
$ ./cloudgoat.py create ecs_takeover
从访问外部网站开始,***者需发现远程代码执行(RCE)漏洞,利用RCE获取网站容器可访问的资源,滥用ECS配置错误获取IAM权限,强制ECS将目标容器重新调度到已入侵的实例。
查看场景页面
$ ./cloudgoat.py create rce_web_app
以IAM用户Lara身份开始,探索负载均衡器和S3存储桶寻找漏洞,通过易受***的Web应用的RCE漏洞获取机密文件,最终访问高度安全的RDS数据库实例。或以IAM用户McDuck身份开始,枚举S3存储桶,获取SSH密钥直接访问EC2服务器及数据库。
查看场景页面
$ ./cloudgoat.py create codebuild_secrets
以IAM用户Solo身份开始,枚举并探索CodeBuild项目,发现其中未受保护的IAM用户Calrissian的密钥。以Calrissian身份操作,发现RDS数据库,利用RDS快照功能获取场景目标:一对秘密字符串。或探索SSM参数获取EC2实例的SSH密钥,通过元数据服务获取实例配置文件密钥,最终访问数据库获取秘密字符串。
注意:此场景可能需要创建AWS资源,需在运行
./cloudgoat destroy前手动删除自行创建的资源。
查看场景页面
$ ./cloudgoat.py create ecs_efs_***
从访问“ruse”EC2实例开始,用户利用实例配置文件后门运行中的ECS容器,通过容器元数据API获取凭据,使用这些凭据在具有特定标签的任何EC2实例上启动会话。***者修改Admin EC2的标签并启动会话,端口扫描子网寻找开放的EFS,挂载后获取弹性文件系统中的标志。
查看场景页面
CloudGoat命令基本结构:
$ ./cloudgoat.py [ 命令 ] [ 子命令 ] [ --参数名 ] [ 参数值 ]
create [ 场景名 ]在指定AWS账户中部署场景。若场景已存在,将销毁并重新创建。
提示:场景名中可使用
/scenarios,支持bash自动补全。
--profile参数为必填项(出于安全考虑,CloudGoat不使用系统默认AWS配置文件或环境变量指定的默认配置文件),可通过config profile设置默认值以避免重复输入。
list显示all(所有)、undeployed(未部署)或deployed(已部署)场景的信息,或已部署[ 场景名 ]的详细信息。
destroy [ 场景名 ]关闭并删除场景的云资源,将场景实例文件夹移至./trash(便于恢复Terraform状态文件等)。指定all可销毁所有活动场景。
提示:CloudGoat仅能管理其创建的资源。若在场景中自行创建资源,需在运行
destroy前手动删除。
config用于管理CloudGoat安装的各个方面,特别是IPwhitelist(白名单)、默认AWSprofile(配置文件)和argcomplete(参数自动补全)。
CloudGoat需知道部署潜在漏洞资源时应白名单化的IP地址,这些IP存储在项目根目录的./whitelist.txt文件中。提供的IP可不使用CIDR格式,CloudGoat会为裸IP添加/32。可添加--auto参数,CloudGoat将通过curl请求ifconfig.co自动获取IP并创建白名单文件。
CloudGoat不会使用系统默认AWS CLI配置文件或环境变量指定的默认配置文件,但可通过config profile命令指定AWS配置文件名称,该名称将保存在项目根目录的config.yml文件中。只要该文件存在,CloudGoat将使用其中列出的配置文件名称,无需--profile标志。可随时运行config profile查看默认配置文件名称并验证config.yml格式,也可手动创建config.yml(需确保格式正确)。
CloudGoat支持Python库“argcomplete”实现参数自动补全(Linux用户支持良好,OSX用户需升级bash至4.2+)。安装步骤如下:
$ pip3 install -r core/python/requirements.txt$ activate-global-python-argcomplete$ source [ /补全脚本路径 ]若无法或不愿配置argcomplete,CloudGoat支持将目录路径用作场景名,通过/scenario/[ 场景名 ]或./[ 场景实例名 ]实现shell自动补全。
help提供命令的上下文帮助,可放在命令前后,例如:
$ ./cloudgoat.py create help$ ./cloudgoat.py destroy help$ ./cloudgoat.py list help$ ./cloudgoat.py config help此外,$ ./cloudgoat.py [ 场景名 ] help可打印场景作者定义的场景简要摘要。
若有功能请求或错误报告,请在此提交。
错误报告:需包含足够重现错误的描述(包括回溯和重现步骤),并在提交前检查是否已有相同报告。
功能请求:请求需具体,并检查是否已有相同请求。
非常感谢对CloudGoat的贡献。若想帮助改进项目,请遵循以下准则:
black和flake8(Python语法和风格检查器)。提交代码前,确保对core/python/中的所有Python文件和cloudgoat.py运行flake8,然后运行black(black的决策优先于flake8)。这两个工具在core/python/requirements.txt中被注释掉(普通用户无需安装)。CloudGoat是不提供任何担保的软件。使用CloudGoat,您对由此产生的任何和所有结果承担全部责任。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务