Pentesting CI/CD Methodology
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
VCSはバージョン管理システムを意味し、このシステムは開発者がソースコードを管理することを可能にします。最も一般的なものはgitで、企業は通常以下のプラットフォームのいずれかで使用しています:
Github
Gitlab
Bitbucket
Gitea
クラウドプロバイダー(独自のVCSプラットフォームを提供)
CI/CDパイプラインは、開発者がコードの実行を自動化することを可能にし、アプリケーションのビルド、テスト、デプロイなどのさまざまな目的に使用されます。これらの自動化されたワークフローは、コードのプッシュ、プルリクエスト、またはスケジュールされたタスクなどの特定のアクションによってトリガーされます。これにより、開発から本番環境へのプロセスが効率化されます。
ただし、これらのシステムはどこかで実行される必要があり、通常はコードをデプロイしたり、機密情報にアクセスするための特権資格情報が必要です。
一部の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)パスは、SCMリポジトリ内の権限を悪用してCIパイプラインを操作し、有害なコマンドを実行します。必要な権限を持つユーザーは、CI構成ファイルやパイプラインジョブで使用される他のファイルを変更して悪意のあるコマンドを含めることができます。これにより、CIパイプラインが「毒され」、これらの悪意のあるコマンドが実行されます。
悪意のある行為者がPPE攻撃を成功させるためには、以下のことができる必要があります:
VCSプラットフォームへの書き込みアクセスを持つこと。通常、パイプラインはプッシュまたはプルリクエストが行われたときにトリガーされます。(アクセスを取得する方法の概要についてはVCSペンテスト方法論を確認してください)。
時には外部PRが「書き込みアクセス」としてカウントされることに注意してください。
書き込み権限があっても、CI構成ファイルや構成が依存している他のファイルを変更できることを確認する必要があります。
そのためには、ブランチ保護を回避できる必要があるかもしれません。
PPEには3つのフレーバーがあります:
D-PPE:直接PPE攻撃は、行為者が実行されるCI構成ファイルを変更する場合に発生します。
I-DDE:間接PPE攻撃は、行為者が実行されるCI構成ファイルが依存しているファイル(MakefileやTerraform構成など)を変更する場合に発生します。
パブリックPPEまたは3PE:場合によっては、パイプラインはリポジトリに書き込みアクセスを持たないユーザーによってトリガーされることがあります(そしてそれらは組織の一部でないかもしれません)なぜなら、彼らはPRを送信できるからです。
3PEコマンドインジェクション:通常、CI/CDパイプラインはPRに関する情報を持つ環境変数を設定します。その値が攻撃者によって制御でき(PRのタイトルのように)、危険な場所で使用される場合(例えばshコマンドを実行する)、攻撃者はそこにコマンドを注入する可能性があります。
パイプラインを毒するための3つのフレーバーを知った上で、攻撃者が成功した悪用の後に何を得ることができるかを確認しましょう:
秘密:前述のように、パイプラインはそのジョブに特権を必要とします(コードを取得し、ビルドし、デプロイする...)これらの特権は通常秘密に付与されます。これらの秘密は通常、環境変数やシステム内のファイルを介してアクセス可能です。したがって、攻撃者は常にできるだけ多くの秘密を流出させようとします。
パイプラインプラットフォームによっては、攻撃者が構成内で秘密を指定する必要があるかもしれません。これは、攻撃者がCI構成パイプラインを変更できない場合(例えばI-PPE)、そのパイプラインが持つ秘密のみを流出させることができることを意味します。
計算:コードはどこかで実行され、実行される場所によっては、攻撃者がさらにピボットできる可能性があります。
オンプレミス:パイプラインがオンプレミスで実行される場合、攻撃者はより多くのリソースにアクセスできる内部ネットワークに到達する可能性があります。
クラウド:攻撃者はクラウド内の他のマシンにアクセスすることができますが、IAMロール/サービスアカウントのトークンを流出させてクラウド内でさらにアクセスを得ることもできます。
プラットフォームマシン:時には、ジョブがパイプラインプラットフォームマシン内で実行されることがあり、これらは通常、他のアクセスがないクラウド内にあります。
選択する:時には、パイプラインプラットフォームが複数のマシンを構成していることがあり、CI構成ファイルを変更できれば、悪意のあるコードを実行したい場所を指定できます。この状況では、攻撃者はおそらく各可能なマシンでリバースシェルを実行してさらに悪用しようとします。
本番環境を妥協する:パイプライン内にいて、最終バージョンがそこからビルドされてデプロイされる場合、本番環境で実行されるコードを妥協することができます。
Chain-benchは、セキュリティコンプライアンスのためにソフトウェアサプライチェーンスタックを監査するためのオープンソースツールです。新しいCISソフトウェアサプライチェーンベンチマークに基づいています。監査は、コードのタイミングからデプロイのタイミングまでのリスクを明らかにすることができるSDLCプロセス全体に焦点を当てています。
Ciderによるトップ10 CI/CDリスクに関する興味深い記事を確認してください:https://www.cidersecurity.io/top-10-cicd-security-risks/
各プラットフォームでローカルに実行できるものについては、ローカルで起動する方法が記載されているので、テストするために好きなように構成できます。
Gitea + Jenkinsラボ:https://github.com/cider-security-research/cicd-goat
Checkov:Checkovは、インフラストラクチャコードのための静的コード分析ツールです。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)