Pentesting CI/CD Methodology

HackTricksをサポートする

VCS

VCSはバージョン管理システムを指し、このシステムは開発者がソースコードを管理することを可能にします。最も一般的なものはgitで、企業は通常以下のプラットフォームのいずれかで使用しています:

  • Github

  • Gitlab

  • Bitbucket

  • Gitea

  • クラウドプロバイダー(独自のVCSプラットフォームを提供)

パイプライン

パイプラインは、特定のアクションが発生した後に、開発者がコードの実行を自動化することを可能にします(ビルド、テスト、デプロイなどの目的のために):プッシュ、PR、cron... これらは開発から本番環境までのすべてのステップを自動化するのに非常に便利です。

ただし、これらのシステムはどこかで実行される必要があり、通常はコードをデプロイするための特権資格情報が必要です。

VCSペンテスティング方法論

いくつかのVCSプラットフォームがこのセクションのためにパイプラインを作成することを許可している場合でも、ここではソースコードの制御に対する潜在的な攻撃のみを分析します。

プロジェクトのソースコードを含むプラットフォームは機密情報を含んでおり、人々はこのプラットフォーム内で付与された権限に非常に注意する必要があります。攻撃者が悪用できるVCSプラットフォーム全体に共通するいくつかの問題は次のとおりです:

  • 漏洩:コードにコミット内の漏洩が含まれており、攻撃者がリポジトリにアクセスできる場合(公開されているか、アクセス権を持っている場合)、漏洩を発見する可能性があります。

  • アクセス:攻撃者がVCSプラットフォーム内のアカウントにアクセスできる場合より多くの可視性と権限を得ることができます。

  • 登録:一部のプラットフォームでは、外部ユーザーがアカウントを作成することを許可します。

  • SSO:一部のプラットフォームでは、ユーザーが登録することは許可されていませんが、有効なSSOでアクセスすることは許可されています(したがって、攻撃者は例えば自分のGitHubアカウントを使用して入ることができます)。

  • 資格情報:ユーザー名+パスワード、個人トークン、SSHキー、OAuthトークン、クッキー... ユーザーがリポジトリにアクセスするために盗むことができるトークンの種類はさまざまです。

  • Webhook:VCSプラットフォームはWebhookを生成することを許可します。これらが見えない秘密保護されていない場合、攻撃者が悪用する可能性があります

  • 秘密が設定されていない場合、攻撃者はサードパーティプラットフォームのWebhookを悪用する可能性があります。

  • 秘密がURLに含まれている場合、同様のことが起こり、攻撃者も秘密を持っています。

  • コードの妥協:悪意のある行為者がリポジトリに対して何らかの書き込みアクセスを持っている場合、悪意のあるコードを注入しようとする可能性があります。成功するためには、ブランチ保護を回避する必要があるかもしれません。これらの行動は、さまざまな目標を持って実行される可能性があります:

  • メインブランチを妥協して本番環境を妥協する。

  • メイン(または他のブランチ)を妥協して開発者のマシンを妥協する(通常、彼らは自分のマシンでリポジトリ内のテスト、Terraform、または他のものを実行します)。

  • パイプラインを妥協(次のセクションを確認)

パイプラインペンテスティング方法論

パイプラインを定義する最も一般的な方法は、パイプラインがビルドするリポジトリにホストされたCI構成ファイルを使用することです。このファイルは、実行されるジョブの順序、フローに影響を与える条件、およびビルド環境の設定を説明します。 これらのファイルは通常、一貫した名前と形式を持ちます。例えば、Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)、および.github/workflowsの下にあるGitHub Actions YAMLファイルです。トリガーされると、パイプラインジョブは選択されたソースからコードをプルし、そのコードに対してCI構成ファイルに指定されたコマンドを実行します。

したがって、攻撃者の最終的な目標は、何らかの方法でこれらの構成ファイルまたはそれらが実行するコマンド妥協することです。

PPE - 毒されたパイプライン実行

毒されたパイプライン実行(PPE)パスは、SCMリポジトリ内の権限を悪用してCIパイプラインを操作し、有害なコマンドを実行します。必要な権限を持つユーザーは、CI構成ファイルやパイプラインジョブで使用される他のファイルを変更して悪意のあるコマンドを含めることができます。これにより、CIパイプラインが「毒され」、これらの悪意のあるコマンドが実行されます。

悪意のある行為者がPPE攻撃を成功させるためには、次のことができる必要があります:

  • VCSプラットフォームへの書き込みアクセスを持つ必要があります。通常、パイプラインはプッシュまたはプルリクエストが行われたときにトリガーされます。(アクセスを取得する方法の概要については、VCSペンテスティング方法論を確認してください)。

  • 時には外部PRが「書き込みアクセス」としてカウントされることに注意してください。

  • 書き込み権限があっても、CI構成ファイルや構成が依存している他のファイルを変更できることを確認する必要があります

  • これには、ブランチ保護を回避する必要があるかもしれません。

PPEには3つのフレーバーがあります:

  • D-PPE直接PPE攻撃は、行為者が実行されるCI構成ファイルを変更するときに発生します。

  • I-DDE間接PPE攻撃は、行為者が実行されるCI構成ファイルが依存しているファイル(makeファイルやTerraform構成など)を変更するときに発生します。

  • パブリックPPEまたは3PE:場合によっては、パイプラインはリポジトリに書き込みアクセスを持たないユーザーによってトリガーされることがあります(そして、彼らは組織の一部でないかもしれません)なぜなら、PRを送信できるからです。

  • 3PEコマンドインジェクション:通常、CI/CDパイプラインはPRに関する情報環境変数を設定します。その値が攻撃者によって制御できる場合(PRのタイトルのように)で、危険な場所shコマンドを実行するなど)で使用される場合、攻撃者はそこにコマンドを注入する可能性があります。

悪用の利点

パイプラインを毒するための3つのフレーバーを知ったので、攻撃者が成功した悪用の後に何を得ることができるかを確認しましょう:

  • 秘密:前述のように、パイプラインはそのジョブに特権を必要とします(コードを取得し、ビルドし、デプロイする...)これらの特権は通常秘密に付与されます。これらの秘密は通常、環境変数やシステム内のファイルを介してアクセス可能です。したがって、攻撃者は常にできるだけ多くの秘密を流出させようとします。

  • パイプラインプラットフォームによっては、攻撃者が構成内で秘密を指定する必要がある場合があります。これは、攻撃者がCI構成パイプラインを変更できない場合(例えばI-PPE)、そのパイプラインが持っている秘密のみを流出させることができることを意味します。

  • 計算:コードはどこかで実行され、実行される場所によっては、攻撃者がさらにピボットできる可能性があります。

  • オンプレミス:パイプラインがオンプレミスで実行される場合、攻撃者はより多くのリソースにアクセスできる内部ネットワークに到達する可能性があります。

  • クラウド:攻撃者はクラウド内の他のマシンにアクセスすることができますが、IAMロール/サービスアカウントのトークンを流出させてクラウド内でさらにアクセスを取得することもできます。

  • プラットフォームマシン:時には、ジョブはパイプラインプラットフォームマシン内で実行され、通常は追加のアクセスがないクラウド内にあります。

  • 選択する:時には、パイプラインプラットフォームが複数のマシンを構成している場合があり、CI構成ファイルを変更できる場合、悪意のあるコードを実行したい場所を指定できます。この状況では、攻撃者はおそらく各可能なマシンでリバースシェルを実行して、さらに悪用しようとします。

  • 本番環境を妥協:パイプライン内にいる場合、最終バージョンがそこからビルドされてデプロイされるため、本番環境で実行されるコードを妥協することができます。

さらに関連する情報

ツールとCISベンチマーク

  • Chain-benchは、新しいCISソフトウェアサプライチェーンベンチマークに基づいて、セキュリティコンプライアンスのためにソフトウェアサプライチェーンスタックを監査するためのオープンソースツールです。監査は、コードのタイミングからデプロイのタイミングまでのリスクを明らかにすることができるSDLCプロセス全体に焦点を当てています。

トップ10 CI/CDセキュリティリスク

Ciderによるトップ10 CI/CDリスクに関する興味深い記事を確認してください:https://www.cidersecurity.io/top-10-cicd-security-risks/

ラボ

  • 各プラットフォームでローカルに実行できるものについては、ローカルで起動する方法が見つかり、テストするために好きなように構成できます。

自動ツール

  • CheckovCheckovは、インフラストラクチャコードの静的コード分析ツールです。

参考文献

HackTricksをサポートする

Last updated