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,您对由此产生的任何和所有结果承担全部责任。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务