Terraform Security
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
HashiCorp Terraform 是一个 基础设施即代码工具,允许您在可读的配置文件中定义 云和本地资源,这些文件可以版本控制、重用和共享。然后,您可以使用一致的工作流程来管理和管理整个生命周期中的所有基础设施。Terraform 可以管理低级组件,如计算、存储和网络资源,以及高级组件,如 DNS 条目和 SaaS 功能。
Terraform 通过其应用程序编程接口 (APIs) 创建和管理云平台和其他服务上的资源。提供程序使 Terraform 能够与几乎任何具有可访问 API 的平台或服务一起工作。
HashiCorp 和 Terraform 社区已经编写了 超过 1700 个提供程序 来管理成千上万种不同类型的资源和服务,这个数字还在不断增长。您可以在 Terraform 注册表 上找到所有公开可用的提供程序,包括亚马逊网络服务 (AWS)、Azure、谷歌云平台 (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDog 等等。
核心 Terraform 工作流程由三个阶段组成:
编写: 您定义资源,这些资源可能跨多个云提供商和服务。例如,您可能会创建一个配置,以在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。
计划: Terraform 创建一个执行计划,描述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。
应用: 在批准后,Terraform 按照正确的顺序执行提议的操作,尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中虚拟机的数量,Terraform 将在扩展虚拟机之前重新创建 VPC。
只需在您的计算机上安装 Terraform。
这里有一个 指南,这里有 下载 Terraform 的最佳方式。
Terraform 没有一个暴露网页或网络服务的平台,我们可以枚举,因此,妥协 Terraform 的唯一方法是 能够添加/修改 Terraform 配置文件。
然而,Terraform 是一个 非常敏感的组件,因为它将拥有 特权访问 不同位置,以便正常工作。
攻击者能够妥协运行 Terraform 的系统的主要方法是 妥协存储 Terraform 配置的仓库,因为在某些时候它们将被 解释。
实际上,市面上有一些解决方案 在创建 PR 后自动执行 Terraform plan/apply,例如 Atlantis:
如果您能够妥协一个 Terraform 文件,有不同的方法可以在某人执行 terraform plan
或 terraform apply
时执行 RCE。
Terraform plan 是 Terraform 中 使用最频繁的命令,开发人员/使用 Terraform 的解决方案一直在调用它,因此,获得 RCE 的最简单方法是确保您毒化一个 Terraform 配置文件,该文件将在 terraform plan
中执行任意命令。
使用外部提供程序
Terraform 提供了 external
提供程序,它提供了一种在 Terraform 和外部程序之间进行接口的方法。您可以使用 external
数据源在 plan
期间运行任意代码。
在 Terraform 配置文件中注入如下内容将在执行 terraform plan
时执行反向 shell:
使用自定义提供程序
攻击者可以将一个 custom provider 发送到 Terraform Registry,然后将其添加到功能分支中的 Terraform 代码中 (example from here):
提供程序在 init
中下载,并将在执行 plan
时运行恶意代码
您可以在 https://github.com/rung/terraform-provider-cmdexec 找到一个示例
使用外部引用
上述两种选项都很有用,但不够隐蔽(第二种比第一种更隐蔽,但更复杂)。您可以通过遵循以下建议以更隐蔽的方式执行此攻击:
不要直接将反向 shell 添加到 terraform 文件中,您可以加载一个包含反向 shell 的外部资源:
您可以在 https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules 找到 rev shell 代码。
在外部资源中,使用 ref 功能来隐藏 repo 中某个分支的 terraform rev shell 代码,类似于: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
将执行 Terraform apply 以应用所有更改,您也可以利用它通过注入 一个恶意的 Terraform 文件与 local-exec.
您只需确保一些有效载荷像以下内容结束于 main.tf
文件中:
遵循前一种技术的建议,以更隐蔽的方式使用外部引用执行此攻击。
您可以通过运行 terraform apply
来转储 terraform 使用的秘密值,方法是向 terraform 文件中添加如下内容:
如果您对 terraform 状态文件具有写入权限但无法更改 terraform 代码,这项研究 提供了一些有趣的选项来利用该文件:
有两种方法可以销毁资源:
在状态文件中插入一个随机名称的资源,指向要销毁的真实资源
因为 terraform 会看到该资源不应该存在,所以它会销毁它(根据指示的真实资源 ID)。来自上一页的示例:
以一种无法更新的方式修改要删除的资源(这样它将被删除并重新创建)
对于 EC2 实例,修改实例的类型就足以使 terraform 删除并重新创建它。
还可以 创建自定义提供程序,并仅用恶意提供程序替换 terraform 状态文件中的一个提供程序,或添加一个带有恶意提供程序的空资源。原始研究的示例:
如果您遇到 hashicorp/external
被列入黑名单的情况,可以通过以下方式重新实现 external
提供者。注意:我们使用由 https://registry.terraform.io/providers/nazarewk/external/latest 发布的 external 提供者的分支。您也可以发布自己的分支或重新实现。
然后您可以像往常一样使用 external
。
Snyk 提供全面的基础设施即代码 (IaC) 扫描解决方案,能够检测 Terraform、CloudFormation、Kubernetes 和其他 IaC 格式中的漏洞和错误配置。
特点:
实时扫描安全漏洞和合规性问题。
与版本控制系统(GitHub、GitLab、Bitbucket)集成。
自动修复拉取请求。
详细的修复建议。
注册: 在 Snyk 上创建一个账户。
Checkov 是一个用于基础设施即代码(IaC)的静态代码分析工具,同时也是一个用于图像和开源包的软件组成分析(SCA)工具。
它扫描使用 Terraform 提供的云基础设施、Terraform plan、Cloudformation、AWS SAM、Kubernetes、Helm charts、Kustomize、Dockerfile、Serverless、Bicep、OpenAPI、ARM Templates 或 OpenTofu 提供的基础设施,并使用基于图形的扫描检测安全和合规性错误配置。
它执行 软件组成分析(SCA)扫描,这是对开源包和图像进行的扫描,以查找常见漏洞和暴露(CVE)。
来自 docs:terraform-compliance
是一个轻量级的,专注于安全和合规性的测试框架,针对 terraform 以启用基础设施即代码的负面测试能力。
合规性: 确保实施的代码遵循安全标准和您自己的自定义标准
行为驱动开发: 我们几乎为所有事物都采用 BDD,为什么不为 IaC 采用呢?
可移植: 只需从 pip
安装或通过 docker
运行。请参见 安装
预部署: 在代码部署之前进行验证
易于集成: 它可以在您的管道中(或在 git hooks 中)运行,以确保所有部署都经过验证。
职责分离: 您可以将测试保存在不同的代码库中,由一个独立的团队负责。
不幸的是,如果代码使用了一些您没有访问权限的提供者,您将无法执行 terraform plan
并运行此工具。
来自文档:tfsec使用对您的terraform代码的静态分析来发现潜在的错误配置。
☁️ 检查所有主要(和一些次要)云提供商的错误配置
⛔ 数百条内置规则
🪆 扫描模块(本地和远程)
➕ 评估HCL表达式以及字面值
↪️ 评估Terraform函数,例如concat()
🔗 评估Terraform资源之间的关系
🧰 与Terraform CDK兼容
🙅 应用(并美化)用户定义的Rego策略
📃 支持多种输出格式:可爱(默认),JSON,SARIF,CSV,CheckStyle,JUnit,文本,Gif。
🛠️ 可配置(通过CLI标志和/或配置文件)
⚡ 非常快速,能够快速扫描大型代码库
使用 KICS by Checkmarx 在基础设施即代码的开发周期早期发现安全漏洞、合规性问题和基础设施配置错误。
KICS 代表 Keeping Infrastructure as Code Secure,它是开源的,是任何云原生项目的必备工具。
来自文档:Terrascan是一个用于基础设施即代码的静态代码分析器。Terrascan允许您:
无缝扫描基础设施即代码中的错误配置。
监控已配置的云基础设施的配置更改,以防止姿态漂移,并能够恢复到安全姿态。
检测安全漏洞和合规性违规。
在配置云原生基础设施之前减轻风险。
提供灵活性,可以本地运行或与您的CI\CD集成。
学习与实践 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) 学习与实践 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)