构建易受攻击的AWS DevOps环境作为CloudGoat场景

本文详细介绍了如何构建一个故意设计漏洞的AWS DevOps实验环境,包含完整的攻击路径分析、供应链安全元素以及自动化测试方案,帮助安全人员理解云环境中的常见安全风险。

实现易受攻击的AWS DevOps环境作为CloudGoat场景

我是可丢弃安全实验室的忠实粉丝,无论是用于攻击还是防御目的(参见:在Azure中自动化配置Active Directory实验室)。在撰写《云安全漏洞与破坏:2021年回顾》之后,我想构建一个"故意设计漏洞的AWS实验室",包含典型的攻击路径,包括静态长期凭证和供应链安全元素。

CloudGoat:易受攻击的AWS环境

CloudGoat是一个开源项目,包含一系列可以在您自己的AWS账户中轻松创建的易受攻击的AWS环境,使用Python包装器围绕Terraform实现。每个场景都有专门的文件夹,包含其描述和解决方案。

示例CloudGoat场景

例如,您可以使用以下命令在AWS账户中启动cicd场景:

1
python cloudgoat.py create cicd

贡献新CloudGoat场景

场景故事

FooCorp是一家提供公共API的公司。客户每分钟向以下API端点提交敏感数据:

1
2
3
4
5
POST {apiUrl}/prod/hello
Host: {apiHost}
Content-Type: text/html

superSecretData=...

API实现为通过API网关公开的Lambda函数。由于FooCorp采用DevOps实践,它有一个持续部署管道,可以在几分钟内自动将Lambda函数的新版本从源代码部署到生产环境。

场景包含

  • 3个IAM用户
  • 1个VPC,其中包含私有子网中的EC2实例
  • 用于实现API的组件:
    • 1个API网关
    • 1个Lambda函数
    • 1个ECR仓库
  • 用于实现持续部署管道的组件:
    • 1个CodePipeline管道
    • 2个CodeBuild项目
    • 1个CodeCommit仓库

漏洞利用步骤

当我们通过python3 cloudgoat.py create cicd实例化场景时,会获得初始AWS IAM访问密钥:

1
2
3
4
5
6
[cloudgoat] terraform apply completed with no error code.
[cloudgoat] terraform output completed with no error code.
cloudgoat_output_access_key_id = AKIA254BBSG...
cloudgoat_output_api_url = https://4ybsnrwee1.execute-api.us-east-1.amazonaws.com/prod
cloudgoat_output_aws_account_id = 012345678912
cloudgoat_output_secret_access_key = mjV9uB....

我们以名为ec2-sandbox-manager的用户身份进行身份验证,该用户具有IAM策略,允许我们管理标记为Environment=dev的EC2实例的标签,并对标记为Environment=sandbox的实例执行任何SSM操作。

通过分析Git提交历史,我们发现一个引人注目的提交,其中包含泄露的AWS凭证!使用这些凭证进行身份验证后,我们发现我们刚刚泄露了IAM用户developer的凭证,该用户具有codecommit:GitPushcodecommit:PutFile权限。

持续测试与端到端测试

我们利用Terratest(一个用于测试Terraform代码的Go库)编写了Go测试,这些测试的工作方式如下:

  1. 使用Terratest针对实时AWS环境运行我们的Terraform代码
  2. 从我们的Go测试中,向FooCorp API发送实际的HTTP请求以确保它已正确部署
  3. 仍然从我们的Go测试中,以编程方式执行漏洞利用步骤
  4. 测试完成后,销毁我们通过Terraform代码配置的基础设施

结论

我鼓励您尝试这个场景!更广泛地说,CloudGoat包含一组有价值的实验室,其中包含许多真实的AWS漏洞。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计