DevOps 環境のセキュリティ体制
ソース コード管理システムと継続的インテグレーション/継続的デリバリー パイプラインに対するサイバー攻撃の増加に伴い、DevOps Threat Matrix で識別されるさまざまな脅威に対して DevOps プラットフォームをセキュリティで保護することが重要です。 このようなサイバー攻撃により、コードインジェクション、特権エスカレーション、およびデータ流出が可能になり、広範な影響を及ぼす可能性があります。
DevOps ポスチャ管理は、Microsoft Defender for Cloud の機能で、次を行います。
- ソフトウェア サプライ チェーンライフサイクル全体のセキュリティ体制に関する分析情報を提供します。
- 詳細な評価に高度なスキャナーを使用します。
- 組織、パイプライン、リポジトリからのさまざまなリソースについて説明します。
- 提供されている推奨事項を明らかにして対処することで、顧客が攻撃対象領域を減らすことができます。
DevOps スキャナー
結果を提供するために、DevOps ポスチャ管理では、DevOps スキャナーを使用して、セキュリティ構成とアクセス制御に対するチェックを実行することで、ソース コード管理と継続的インテグレーション/継続的デリバリー パイプラインの弱点を特定します。
Azure DevOps と GitHub スキャナーは、DevOps リソースに関連するリスクを特定し、攻撃対象領域を減らし、企業の DevOps システムを強化するために、Microsoft 内で内部的に使用されます。
DevOps 環境が接続されると、Defender for Cloud はこれらのスキャナーを自動構成して、次のような複数の DevOps リソースにわたって 24 時間ごとに定期的なスキャンを実行します。
- ビルド
- ファイルのセキュリティ保護
- 変数グループ
- サービス接続
- 組織
- リポジトリ
DevOps 脅威マトリックスのリスク削減
DevOps ポスチャ管理は、組織が DevOps プラットフォームで有害な構成ミスを検出して修復するのを支援します。 これにより、回復力のあるゼロトラスト DevOps 環境が実現され、DevOps 脅威マトリックスで定義されているさまざまな脅威に対して強化されます。 姿勢管理の主要なコントロールには、次のものが含まれます。
- スコープ指定されたシークレット アクセス: 各パイプラインがその機能に不可欠なシークレットにのみアクセスできるようにすることで、機密情報の露出を最小限に抑え、不正アクセス、データ漏えい、横方向の移動のリスクを軽減します。
- セルフホステッド ランナーと高いアクセス許可の制限: セルフホステッド ランナーを回避し、パイプライン アクセス許可が既定で読み取り専用になるようにすることで、不正な実行や潜在的なエスカレーションを防ぎます。
- 強化されたブランチ保護: ブランチ保護規則を適用し、悪意のあるコード インジェクションを防ぐことで、コードの整合性を維持します。
- 最適化されたアクセス許可とセキュリティで保護されたリポジトリ: 最小限の基本アクセス許可を追跡し、リポジトリのシークレット プッシュ保護を有効にすることで、不正アクセスや変更のリスクを軽減します。
DevOps の脅威マトリックス
DevOps の脅威マトリックスを開発するための目標は、Defender が関連する攻撃手法に対する防御を追跡および構築するために使用できる包括的なナレッジ ベースを構築することです。 MITRE ATT&CK フレームワークをベースとして、DevOps 環境に関連する手法と攻撃ベクトルを収集し、DevOps 攻撃方法専用のマトリックスを作成しました。
このマトリックスの戦術は DevOps の観点から見る必要があります。 たとえば、Windows または Linux OS を実行する仮想マシンでの実行手法は、DevOps パイプラインでの実行とは異なります。 Linux の場合、実行とは OS でコードを実行することです。 DevOps 環境について説明すると、パイプラインまたは DevOps リソースでコードを実行するということです。 この脅威マトリックスを使用して攻撃と対応する防御方法を分類するだけでなく、Defender は赤いチームと協力して、想定を継続的にテストし、新しい潜在的な攻撃手法を見つけることができます。
MITRE ATT&CK の定義
MITRE ATT&CK マトリックスは、サイバー攻撃の際に攻撃者が使用するさまざまなタクティクスとテクニックを理解するための、公開されているナレッジ ベースです。
このナレッジ ベースは、攻撃前、初回アクセス、実行、永続化、特権エスカレーション、防御回避、資格情報アクセス、検出、横方向の移動、収集、流出、コマンド アンド コントロールなど、いくつかのカテゴリに分類されています。
タクティクス (T) は、ATT&CK テクニックまたはサブテクニックの "理由" を表します。 これは敵対者の戦術的目標であり、アクションを実行する理由です。 たとえば、敵対者は資格情報のアクセスを取得しようとする場合があります。
テクニック (T) は、敵がアクションを実行して戦術的な目標を達成する "方法" を表します。 たとえば、敵対者は資格情報のアクセスを取得するために、資格情報をダンプする場合があります。
ATT&CK の CK は Common Knowledge (共通知識) の略ですが、基本的には、敵対者が実行するタクティクスとテクニックの手口を記録したものです。
初期アクセス
最初のアクセス戦術とは、攻撃者が DevOps リソース (リポジトリ、パイプライン、依存関係) へのアクセスを取得するために使用する可能性がある手法を指します。 次の手順では、次の手法が前提条件となる場合があります。
ソース コード管理 (SCM) の認証 - 組織のソースコード管理への認証方法を使用するアクセス。 個人用アクセス トークン (PAT)、SSH キー、またはその他の許可された認証資格情報を指定できます。 攻撃者がこの手法を実現するために使用できる方法の例として、組織に対するフィッシング攻撃が挙げられます。
継続的インテグレーション (CI)/継続的デリバリー (CD) サービスの認証 - SCM 認証と同様に、攻撃者は組織の DevOps を攻撃するために CI/CD サービスへの認証を利用する可能性があります。
組織のパブリック リポジトリ - CI/CD 機能を使用して構成された組織のパブリック リポジトリへのアクセス。 組織の構成によっては、プル要求 (PR) の作成後にこれらのリポジトリでパイプラインの実行をトリガーできる場合があります。
エンドポイント侵害 - 攻撃者は既存の侵害を利用して、侵害された開発者のワークステーションを悪用し、組織の SCM、レジストリ、または開発者がアクセスできるその他のリソースにアクセスできるようになります。
構成された Webhook - 組織が Webhook を構成している場合、攻撃者は SCM 自体を使用してそのネットワークへの要求をトリガーすることにより、それを組織のネットワークへの初期アクセス方法として使用する可能性があります。 これにより、パブリックに公開されることを意図していないサービス、またはプライベート ネットワーク内で古くて脆弱なソフトウェア バージョンを実行しているサービスへのアクセス権が攻撃者に付与される可能性があります。
実行
実行戦術とは、悪意のある敵対者がパイプライン リソース (パイプライン自体またはデプロイ リソース) に対する実行アクセス権を取得するために使用する可能性がある手法を指します。 このセクションの手法の一部には、それらを実行するさまざまな方法、またはサブ手法と呼ばれるものについての説明が含まれています。
有害なパイプライン実行 (PPE) - 攻撃者が組織のリポジトリにコードを挿入し、その結果、リポジトリの CI/CD システムでコードが実行される手法を指します。 コードの実行を実現するには、さまざまなサブ手法があります。
- 直接 PPE (d-PPE) - 攻撃者がリポジトリ内の構成ファイルを直接変更できる場合。 パイプラインは新しい PR によってトリガーされ、構成ファイルに従って実行されるため、攻撃者は構成ファイルに悪意のあるコマンドを挿入する可能性があり、これらのコマンドはパイプラインで実行されます。
- 間接 PPE (i-PPE) - 攻撃者が構成ファイルを直接変更できない場合、またはトリガーされたときに、これらの変更が考慮されない場合。 このような場合、攻撃者は、make-files、テスト スクリプト、ビルド スクリプトなどのコードを実行するためにパイプラインで使用されるスクリプトに感染する可能性があります。
- パブリック PPE - パイプラインがオープンソース プロジェクトによってトリガーされる場合。 このような場合、攻撃者は、パイプラインに感染するためにパブリック リポジトリで d-PPE または i-PPE を使用できます。
依存関係の改ざん - 攻撃者がリポジトリの依存関係に悪意のあるコードを挿入して、DevOps 環境または運用環境でコードを実行できるようにする手法を指します。 したがって、依存関係がダウンロードされると、悪意のあるコードが実行されます。 コードの実行を実現するために使用できるサブ手法には、次のようなものがあります。
- パブリック依存関係かく乱 - 敵対者がプライベート パッケージと同じ名前の悪意のあるパブリック パッケージを公開する手法。 この場合、パッケージ制御メカニズムでのパッケージ検索は通常、最初にパブリック レジストリで検索されるため、悪意のあるパッケージがダウンロードされます。
- パブリック パッケージのハイジャック ("リポジャッキング") - たとえば、GitHub ユーザー名変更機能を悪用するなどして、メンテナー アカウントを制御し、パブリック パッケージをハイジャックします。
- タイポスクワッティング - 既知のパブリック パッケージと同様の名前を持つ悪意のあるパッケージの公開。 これにより、攻撃者はユーザーを混乱させて、目的のパッケージではなく悪意のあるパッケージをダウンロードすることができます。
DevOps リソース侵害 - パイプラインは、本質的には、他のソフトウェアと共に CI/CD エージェントを実行する一連のコンピューティング リソースです。 攻撃者は、OS、エージェントのコード、VM にインストールされている他のソフトウェア、またはネットワーク内の他のデバイスの脆弱性を悪用して、これらのリソースを標的にしてパイプラインにアクセスできます。
共通レジストリの制御 - 攻撃者は、組織が使用するレジストリの制御を取得する可能性があり、その結果、パイプライン VM または運用 VM によって悪意のあるイメージまたはパッケージが実行されるおそれがあります。
固執
永続化の戦術は、攻撃者が被害者の環境へのアクセスを維持するために使用できるさまざまな手法で構成されています。
リポジトリの変更 - 敵対者は、パイプライン内から自動トークンを使用して、リポジトリにアクセスし、コードをプッシュする可能性があります (自動トークンにそのための十分なアクセス許可があることが前提となります)。 次のようないくつかのサブ手法を使用して、この方法で永続化を実現できます。
- コードでのスクリプトの変更または追加 - 初期化スクリプトの一部を変更したり、新しいスクリプトを追加したりすると、攻撃者用のバックドアまたはスターターをダウンロードしてしまう可能性があり、パイプラインがこれらのスクリプトを実行するたびに、攻撃者のコードも実行されることになります。
- パイプライン構成の変更 - パイプラインに新しいステップを追加すると、ビルド プロセスを続行する前に、攻撃者が制御するスクリプトをパイプラインにダウンロードする可能性があります。
- 依存関係の場所の構成変更 - 攻撃者によって制御されるパッケージを使用するように変更される可能性があります。
成果物への挿入 - 一部の CI 環境には、異なるパイプライン実行間で共有される成果物を作成するための機能があります。 たとえば、GitHub では、パイプライン構成から GitHub アクションを使用して成果物を格納し、それらをダウンロードできます。
レジストリ内のイメージの変更 - イメージ レジストリにアクセスするためのアクセス許可がパイプラインにある場合 (たとえば、ビルド完了後にイメージをレジストリに書き戻すため)、攻撃者がイメージを変更して悪意のあるイメージをレジストリに植え付ける可能性があり、そのイメージはユーザーのコンテナーによって実行され続けるおそれがあります。
サービス資格情報の作成 - 悪意のある敵対者は、環境上で既に持っているアクセス権を利用し、初回アクセス方法が失われた場合に使用する新しい資格情報を作成する可能性があります。 これを行うには、SCM、アプリケーション自体、クラウド リソースなどへのアクセス トークンを作成します。
特権エスカレーション
特権エスカレーション手法は、攻撃者が被害者の環境内の特権を昇格させるために使用され、既に侵害されたリソースに対して高い特権を取得します。
プライベート リポジトリのシークレット - 攻撃者は、既に取得した初期アクセス方法を利用して、プライベート リポジトリをスキャンして隠されたシークレットを探す可能性があります。 プライベート リポジトリで非表示のシークレットを見つける可能性は、パブリック リポジトリよりも高くなります。開発者の観点からは、これは組織外からアクセスできません。
保護されているブランチへのコミットまたはプッシュ - パイプラインは、制限の少ないアクセスで構成されたリポジトリにアクセスできます。これにより、保護されているブランチにコードを直接プッシュできるため、敵対者はチームの介入なしに重要なブランチにコードを直接挿入することができます。
メタデータ サービスからの証明書と ID - 攻撃者がクラウドでホストされているパイプラインを実行すると、パイプライン内からメタデータ サービスにアクセスし、これらのサービスから証明書 (高い権限が必要) と ID を抽出できるようになります。
資格情報アクセス
資格情報アクセス手法は、攻撃者が資格情報を盗むために使用します。
ユーザー資格情報 - 顧客が CI パイプラインから外部サービス (外部データベースなど) にアクセスする必要がある場合、これらの資格情報はパイプライン内に存在するため (CI シークレット、環境変数などによって設定可能)、敵対者がアクセスできる可能性があります。
サービス資格情報 - 攻撃者が、サービス プリンシパル名 (SPN) や共有アクセス署名 (SAS) トークンなどのサービス資格情報を見つけて、パイプラインから直接他のサービスにアクセスできる可能性があります。
水平展開
横移動戦術とは、攻撃者がさまざまなリソースを移動するために使用する手法を指します。 CI/CD 環境では、これはデプロイ リソースへの移行、成果物とレジストリの構築、または新しいターゲットへの移行を指す場合があります。
ビルド成果物の侵害 - 他のサプライ チェーン攻撃と同様、攻撃者が CI パイプラインを制御できるようになると、ビルド成果物に干渉する可能性があります。 これにより、ビルドが完了する前に、悪意のあるコードが建物の材料に挿入され、悪意のある機能がビルド成果物に挿入される可能性があります。
レジストリ インジェクション - パイプラインがビルド成果物のレジストリを使用して構成されている場合、攻撃者は悪意のあるイメージをレジストリに感染させる可能性があります。この後、そのイメージが、このレジストリを使用するコンテナーによってダウンロードされ、実行されることになります。
デプロイ リソースへの拡散 - パイプラインがデプロイ リソースにアクセスできるように構成されている場合、攻撃者はこれらのリソースに対して同じアクセス権を得るため、攻撃を拡散することができます。 これにより、パイプラインに付与されたアクセス許可に応じて、コードの実行、データの流出などが発生する可能性があります。
防御回避
防御回避手法は、攻撃者が DevOps 環境で使用される防御をバイパスし、レーダーの下で攻撃を続行するために使用される可能性があります。
サービス ログの操作 - サービス ログを使用すると、防御者は環境内の攻撃を検出できます。 環境内 (ビルド パイプラインなど) 内で実行されている攻撃者は、Defender が攻撃を監視できないようにログを変更する可能性があります。 これは、攻撃者が Linux マシンの履歴ログを変更し、攻撃者によって実行されたコマンドがオブザーバーに表示されないようにするのと似ています。
コンパイルの操作 - 攻撃者は、SCM サービスに痕跡を残したくない場合、悪意のあるコードを挿入するためにコンパイル プロセスを変更する可能性があります。 これは、いくつかの方法で行うことができます。
- その場でコードを変更する – ビルド プロセスが開始される直前にコードを変更します。リポジトリ内でコードを変更したり、トレースを残したりすることはありません。
- 改ざんされたコンパイラ – ビルド環境でコンパイラを変更し、そのプロセスが開始される前にトレースを残さずに悪意のあるコードを導入します。
ブランチ保護の再構成 - ブランチ保護ツールを使用すると、組織は PR またはコミットがブランチに承認される前の手順を構成できます。 攻撃者が管理者のアクセス許可を持つ場合、これらの構成を変更し、ユーザーの介入なしにコードをブランチに導入する可能性があります。
インパクト
影響戦術とは、攻撃者が悪意のある目的で CI/CD リソースへのアクセスを悪用するために使用できる手法を指します。これらの手法はノイズが多く、検出しやすい可能性がある攻撃のもう 1 つの手順ではありません。
分散型サービス拒否 (DDoS) - 敵対者は、外部ターゲットに対して分散型サービス拒否 (DDoS) 攻撃を実行するために、アクセス権を取得したコンピューティング リソースを使用する可能性があります。
暗号資産マイニング - コンピューティング リソースは、敵対者によって制御される暗号資産マイニングに使用される可能性があります。
ローカル サービス拒否 (DoS) - 攻撃者は、CI パイプライン上で実行されると、エージェントのシャットダウン、再起動、または VM の過負荷によって、当該パイプラインから顧客に対してサービス拒否攻撃を実行する可能性があります。
リソースの削除 - リソース (クラウド リソース、リポジトリなど) にアクセスできる攻撃者は、サービス拒否を達成するために、リソースを完全に削除してしまう可能性があります。
流出
流出戦術とは、攻撃者が被害者環境から機密データを流出させるために使用できるさまざまな手法を指します。
プライベート リポジトリのクローン - 攻撃者は、CI パイプラインにアクセスできるようになると、プライベート リポジトリにもアクセスできるようになります (たとえば、GitHub で GITHUB_TOKEN を使用できます)。そのため、コードを複製したり、アクセスしたりして、プライベート IP にアクセスできるようになります。
パイプライン ログ - 敵対者はパイプライン実行ログにアクセスし、アクセス履歴やビルド ステップなどを表示する可能性があります。これらのログには、ビルドやデプロイに関する機密情報が含まれている可能性があり、場合によってはサービスやユーザー アカウントなどの資格情報も含まれている可能性があります。
運用リソースからのデータの流出 - パイプラインが運用リソースにアクセスできる場合、攻撃者もこれらのリソースにアクセスできるようになります。 そのため、運用データを流出するためにこのアクセスを悪用する可能性があります。
DevOps ポーズ管理に関する推奨事項
DevOps スキャナーがソース コード管理システムと継続的インテグレーション/継続的デリバリー パイプライン内のセキュリティのベスト プラクティスからの逸脱を明らかにすると、Defender for Cloud は正確で実用的な推奨事項を出力します。 これらの推奨事項には、次の利点があります。
- 強化された可視性: DevOps 環境のセキュリティ態勢に関する包括的な分析情報を取得し、既存の脆弱性を包括的に理解できるようにします。 不足しているブランチ保護規則、特権の昇格リスク、および安全性の低い接続を特定して、攻撃を防ぎます。
- 優先度ベースのアクション: 結果を重大度別にフィルター処理し、最も不可欠な脆弱性を最初に解決することで、リソースと労力をより効果的に活用できます。
- 攻撃面の減少: 強調表示されたセキュリティ ギャップに対処して、脆弱な攻撃面を大幅に最小限に抑え、潜在的な脅威に対する防御を強化します。
- リアルタイム通知: ワークフロー自動化と統合して、セキュリティで保護された構成が変更されたときにすぐにアラートを受信する機能により、迅速な対応が可能になり、セキュリティ プロトコルへの継続的なコンプライアンスが確保されます。