Terraform Security
基本信息
HashiCorp Terraform是一种基础设施即代码工具,允许您在人类可读的配置文件中定义云和本地资源,您可以对其进行版本控制、重用和共享。然后,您可以使用一致的工作流程来提供和管理整个基础设施的生命周期。Terraform可以管理像计算、存储和网络资源这样的低级组件,以及像DNS条目和SaaS功能这样的高级组件。
Terraform如何工作?
Terraform通过应用程序编程接口(API)在云平台和其他服务上创建和管理资源。提供程序使Terraform能够与几乎任何具有可访问API的平台或服务一起工作。
HashiCorp和Terraform社区已经编写了超过1700个提供程序来管理成千上万种不同类型的资源和服务,这个数字还在不断增长。您可以在Terraform Registry上找到所有公开可用的提供程序,包括Amazon Web Services(AWS)、Azure、Google Cloud Platform(GCP)、Kubernetes、Helm、GitHub、Splunk、DataDog等等。
核心Terraform工作流程包括三个阶段:
**编写:**您定义资源,这些资源可能跨越多个云提供商和服务。例如,您可以创建一个配置来在虚拟专用云(VPC)网络中的虚拟机上部署应用程序,该配置包括安全组和负载均衡器。
**计划:**Terraform创建一个执行计划,描述基于现有基础设施和您的配置将要创建、更新或销毁的基础设施。
**应用:**经批准后,Terraform按正确顺序执行建议的操作,遵守任何资源依赖关系。例如,如果您更新VPC的属性并更改该VPC中的虚拟机数量,Terraform将在扩展虚拟机之前重新创建VPC。
Terraform实验室
只需在您的计算机上安装terraform。
这里有一个指南,这里有一个下载terraform的最佳方式。
Terraform中的RCE
Terraform没有暴露网页或网络服务的平台,因此,入侵terraform的唯一方法是能够添加/修改terraform配置文件。
然而,terraform是一个非常敏感的组件,因为它将具有对不同位置的特权访问,以便正常工作。
攻击者能够入侵运行terraform的系统的主要方法是入侵存储terraform配置的存储库,因为在某个时候它们将被解释。
实际上,有一些解决方案在创建PR后自动执行terraform plan/apply,例如Atlantis:
Atlantis Security如果您能够入侵terraform文件,有不同的方法可以在某人执行terraform plan
或terraform apply
时执行RCE。
Terraform plan
Terraform plan是terraform中最常用的命令,开发人员/使用terraform的解决方案经常调用它,因此获取RCE的最简单方法是确保您植入一个terraform配置文件,该文件将在terraform plan
执行时执行任意命令。
使用外部提供程序
Terraform提供了external
提供程序,它提供了一种在plan
期间在Terraform和外部程序之间进行接口的方式。您可以使用external
数据源在plan
期间运行任意代码。
在terraform配置文件中注入类似以下内容将在执行terraform plan
时执行一个反向shell:
使用自定义提供程序
攻击者可以将自定义提供程序发送到Terraform Registry,然后将其添加到功能分支中的Terraform代码中(示例在此处)。
提供程序在init
中被下载,并在执行plan
时运行恶意代码
您可以在https://github.com/rung/terraform-provider-cmdexec找到一个示例
使用外部引用
提到的两种选项都很有用,但不太隐蔽(第二种比第一种更隐蔽,但比第一种更复杂)。您甚至可以以更隐蔽的方式执行此攻击,按照以下建议操作:
不要直接将反向shell添加到terraform文件中,而是可以加载包含反向shell的外部资源:
你可以在https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules找到反向shell代码。
在外部资源中,使用ref功能来隐藏存储库中的terraform反向shell代码的分支,类似于:
git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform Apply
将执行Terraform apply以应用所有更改,您还可以滥用它来注入**带有local-exec的恶意Terraform文件以获得RCE。
您只需要确保类似以下负载结束在main.tf
文件中:
遵循上一个技术的建议,以更隐蔽的方式使用外部引用执行此攻击。
机密信息泄露
您可以通过向 terraform 文件添加类似以下内容来运行 terraform apply
,从而转储 terraform 使用的机密值。
滥用 Terraform 状态文件
如果您对 Terraform 状态文件具有写入访问权限但无法更改 Terraform 代码,这项研究提供了一些利用该文件的有趣选项:
删除资源
有两种方法可以销毁资源:
将具有随机名称的资源插入状态文件,指向要销毁的真实资源
因为 Terraform 将看到资源不应存在,它将销毁它(根据指示的真实资源 ID)。来自前一页的示例:
修改资源以删除,使其无法更新(因此将被删除并重新创建)
对于 EC2 实例,修改实例的类型就足以让 Terraform 删除并重新创建它。
RCE
还可以创建一个自定义提供者,只需将 Terraform 状态文件中的一个提供者替换为恶意提供者,或者添加一个带有恶意提供者的空资源。来自原始研究的示例:
替换被列入黑名单的提供者
如果你遇到 hashicorp/external
被列入黑名单的情况,你可以通过以下步骤重新实现 external
提供者。注意:我们使用了由 https://registry.terraform.io/providers/nazarewk/external/latest 发布的 external 提供者的分支。你也可以发布自己的分支或重新实现。
然后您可以像平常一样使用 external
。
审计工具
参考资料
Last updated