Terraform Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraformは、インフラストラクチャをコードとして管理するツールであり、クラウドおよびオンプレミスのリソースを人間が読みやすい設定ファイルで定義でき、これをバージョン管理、再利用、共有できます。その後、一貫したワークフローを使用して、インフラストラクチャのライフサイクル全体を通じてプロビジョニングおよび管理できます。Terraformは、コンピュート、ストレージ、ネットワークリソースなどの低レベルコンポーネントだけでなく、DNSエントリやSaaS機能などの高レベルコンポーネントも管理できます。
Terraformは、クラウドプラットフォームや他のサービス上でリソースを作成および管理します。プロバイダーは、Terraformがアクセス可能なAPIを持つほぼすべてのプラットフォームやサービスで機能することを可能にします。
HashiCorpとTerraformコミュニティは、すでに1700以上のプロバイダーを作成しており、数千の異なるタイプのリソースやサービスを管理でき、この数は増え続けています。すべての公開されているプロバイダーは、Terraform Registryで見つけることができ、Amazon Web Services (AWS)、Azure、Google Cloud Platform (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDogなどが含まれます。
Terraformのコアワークフローは、3つのステージで構成されています。
書き込み: 複数のクラウドプロバイダーやサービスにまたがるリソースを定義します。たとえば、セキュリティグループとロードバランサーを持つ仮想プライベートクラウド (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は、Terraformと外部プログラムとのインターフェースを提供するexternal
プロバイダーを提供しています。external
データソースを使用して、plan
中に任意のコードを実行できます。
terraform設定ファイルに次のようなものを注入すると、terraform plan
を実行したときにリバースシェルが実行されます:
カスタムプロバイダーの使用
攻撃者は、Terraform Registryにカスタムプロバイダーを送信し、その後、機能ブランチのTerraformコードに追加することができます(こちらの例):
プロバイダーは init
でダウンロードされ、plan
が実行されると悪意のあるコードが実行されます。
例は https://github.com/rung/terraform-provider-cmdexec で見つけることができます。
外部参照を使用する
前述の2つのオプションは便利ですが、あまりステルス性がありません(2つ目はよりステルス性がありますが、1つ目よりも複雑です)。この攻撃をよりステルスな方法で実行することもできます。以下の提案に従ってください:
terraformファイルにrev shellを直接追加する代わりに、rev shellを含む外部リソースをロードすることができます:
あなたは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
Terraform applyはすべての変更を適用するために実行されます。また、悪意のあるTerraformファイルをlocal-execを使ってRCEを取得するために悪用することもできます。
次のようなペイロードがmain.tf
ファイルに含まれることを確認するだけです:
前の技術からの提案に従って、この攻撃を外部参照を使用してよりステルス的に実行します。
terraform apply
を実行することでterraformによって使用される秘密の値をダンプするには、terraformファイルに次のようなものを追加します:
terraformステートファイルに書き込みアクセスがあるが、terraformコードを変更できない場合、この研究はファイルを利用するための興味深いオプションを提供します。
リソースを破壊する方法は2つあります:
実際のリソースを削除するために、ランダムな名前のリソースをステートファイルに挿入する
terraformはそのリソースが存在すべきではないと判断し、それを削除します(指定された実際のリソースIDに従って)。前のページの例:
リソースを削除する方法を変更して、更新できないようにする(そうすれば削除され再作成される)
EC2インスタンスの場合、インスタンスのタイプを変更するだけで、terraformが削除して再作成します。
カスタムプロバイダーを作成することも可能で、terraformステートファイル内のプロバイダーの1つを悪意のあるものに置き換えるか、悪意のあるプロバイダーを持つ空のリソースを追加することができます。元の研究からの例:
hashicorp/external
がブラックリストに登録されている状況に遭遇した場合、次の手順で external
プロバイダーを再実装できます。注意: https://registry.terraform.io/providers/nazarewk/external/latest に公開された external プロバイダーのフォークを使用しています。自分自身のフォークや再実装を公開することもできます。
その後、通常通り external
を使用できます。
Snykは、Terraform、CloudFormation、Kubernetes、およびその他のIaCフォーマットにおける脆弱性と誤設定を検出する包括的なInfrastructure as Code (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 を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティおよびコンプライアンスの誤設定を検出します。
それは、一般的な脆弱性および露出 (CVE) のためのオープンソースパッケージと画像のスキャンである ソフトウェア構成分析 (SCA) スキャン を実行します。
From the docs: terraform-compliance
は、インフラストラクチャコードに対するネガティブテスト機能を有効にするための、軽量でセキュリティおよびコンプライアンスに焦点を当てたテストフレームワークです。
compliance: 実装されたコードがセキュリティ基準や独自のカスタム基準に従っていることを確認します
behaviour driven development: ほぼすべてのものにBDDがありますが、IaCにはなぜないのでしょうか?
portable: pip
からインストールするか、docker
経由で実行するだけです。 Installationを参照してください
pre-deploy: デプロイされる前にコードを検証します
easy to integrate: パイプライン(またはgitフック)で実行でき、すべてのデプロイメントが検証されることを保証します。
segregation of duty: 別のチームが責任を持つ異なるリポジトリにテストを保持できます。
残念ながら、コードがアクセスできないプロバイダーを使用している場合、terraform plan
を実行してこのツールを使用することはできません。
From the docs: tfsecは、あなたのterraformコードの静的分析を使用して、潜在的な誤設定を特定します。
☁️ すべての主要(および一部のマイナー)クラウドプロバイダーにわたる誤設定をチェック
⛔ 数百の組み込みルール
🪆 モジュールをスキャン(ローカルおよびリモート)
➕ HCL式およびリテラル値を評価
↪️ Terraform関数を評価 e.g. concat()
🔗 Terraformリソース間の関係を評価
🧰 Terraform CDKと互換性あり
🙅 ユーザー定義のRegoポリシーを適用(および装飾)
📃 複数の出力形式をサポート: lovely(デフォルト)、JSON、SARIF、CSV、CheckStyle、JUnit、text、Gif。
🛠️ 設定可能(CLIフラグおよび/または設定ファイルを介して)
⚡ 非常に高速で、大規模なリポジトリを迅速にスキャン可能
インフラストラクチャをコードとして扱う開発サイクルの初期段階で、KICS by Checkmarxを使用してセキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの誤設定を早期に発見します。
KICSはKeeping Infrastructure as Code Secureの略で、オープンソースであり、すべてのクラウドネイティブプロジェクトにとって必須です。
From the docs: Terrascanは、Infrastructure as Codeのための静的コード分析ツールです。Terrascanを使用すると、以下のことができます:
インフラストラクチャをコードとしてシームレスにスキャンし、誤設定を検出します。
プロビジョニングされたクラウドインフラストラクチャの構成変更を監視し、ポスチャードリフトを引き起こす変更を検出し、安全なポスチャーに戻すことを可能にします。
セキュリティの脆弱性やコンプライアンス違反を検出します。
クラウドネイティブインフラストラクチャをプロビジョニングする前にリスクを軽減します。
ローカルで実行する柔軟性や、CI\CDと統合することができます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)