构建易受攻击的AWS DevOps环境:CloudGoat漏洞挖掘实战
CloudGoat:漏洞AWS环境库
CloudGoat是一个开源项目,包含一系列可通过Terraform Python封装在自有AWS账户中快速创建的脆弱环境。每个场景都有独立文件夹包含描述和解决方案。
例如,使用以下命令在AWS账户中启动cicd场景:
|
|
该命令将运行Terraform创建基础设施,并显示启动说明,通常会输出初始AWS凭证。
新场景贡献指南
直接链接:https://github.com/RhinoSecurityLabs/cloudgoat/tree/master/scenarios/cicd
场景背景
FooCorp公司暴露公共API,客户每分钟向以下端点提交敏感数据:
|
|
API通过API Gateway暴露Lambda函数实现。由于采用DevOps实践,FooCorp拥有持续部署管道,可在几分钟内将Lambda函数从源代码自动部署到生产环境。
任务目标:从低权限IAM用户凭证开始,窃取提交到API的敏感数据。注意账户中会每分钟运行AWS CodeBuild项目模拟用户活动。
基础设施组成
- 3个IAM用户
- 1个包含私有子网EC2实例的VPC
- API组件:1个API Gateway、1个Lambda函数、1个ECR仓库
- 持续部署管道:1个CodePipeline管道、2个CodeBuild项目、1个CodeCommit仓库
渗透测试过程
(包含剧透!仅建议卡关时阅读)
初始访问
运行python3 cloudgoat.py create cicd
后获得初始IAM访问密钥:
|
|
使用aws-vault配置凭证:
|
|
权限提升
当前用户ec2-sandbox-manager拥有以下权限:
- 对Environment=dev标签的EC2实例管理标签权限
- 对Environment=sandbox标签实例的完整SSM权限
通过修改EC2实例标签绕过访问控制:
|
|
凭证窃取
在用户目录发现SSH私钥,通过指纹比对确认属于IAM用户cloner:
|
|
代码仓库访问
cloner用户拥有codecommit:GitPull权限,克隆代码仓库:
|
|
历史凭证泄露
分析Git提交历史发现f1cb341提交包含硬编码AWS凭证:
|
|
使用泄露凭证获得developer用户权限(包含codecommit:GitPush和codecommit:PutFile)
供应链攻击
通过CodeCommit UI后门应用,等待持续部署管道自动部署。修改应用代码将敏感数据记录到CloudWatch日志:
|
|
成功捕获flag:
|
|
端到端自动化测试
使用Terratest Go库进行基础设施测试:
- 在真实AWS环境部署Terraform资源
- 发送HTTP请求验证API部署
- 程序化执行渗透步骤
- 测试完成后销毁基础设施
示例测试代码:
|
|
测试结果:
|
|
结论
鼓励尝试该场景,CloudGoat包含许多真实世界AWS漏洞实验。欢迎在Twitter继续讨论测试方法和未来场景建议。
致谢RhinoSecurityLabs的Ryan Gerstenkorn的贡献!