DevOps 環境のセキュリティ態勢

完了

ソース コード管理システムや継続的インテグレーション/継続的デリバリー パイプラインに対するサイバー攻撃が増加する中、DevOps 脅威マトリックスで特定された多様な脅威に対して DevOps プラットフォームを保護することは極めて重要です。 このようなサイバー攻撃によって、コード インジェクション、特権エスカレーション、データ流出が可能になり、甚大な被害を引き起こす可能性があります。

Microsoft Defender for Cloud での DevOps 体制管理の特徴は次のとおりです。

  • ソフトウェア サプライチェーン ライフサイクル全体のセキュリティ体制に関する分析情報を提供する。
  • 詳細な評価のために高度なスキャナーを使用する。
  • 組織、パイプライン、リポジトリなどさまざまなリソースに対応する。
  • 顧客が提示された推奨事項に対応して行動することで、攻撃面を減少できる。

DevOps スキャナー

調査結果を提供するために、DevOps 体制管理では、DevOps スキャナを使用してセキュリティ構成とアクセス制御に対する確認を行うことによって、ソース コード管理と継続的インテグレーション/継続的デリバリー パイプラインの弱点を特定します。

Azure DevOps スキャナーと GitHub スキャナーは、Microsoft 内で DevOps リソースに関連するリスクを特定するために使用され、攻撃面を減少し、企業の DevOps システムを強化します。

DevOps 環境が接続されると、Defender for Cloud はこれらのスキャナーを自動構成し、次の内容を含む複数の DevOps リソースに対して 24 時間ごとに定期的なスキャンを実施します。

  • ビルド
  • セキュリティで保護されたファイル
  • 変数グループ
  • サービス接続
  • 組織
  • リポジトリ

DevOps 脅威マトリックスのリスク軽減

DevOps 体制管理は、DevOps プラットフォームにおける有害な構成の誤りの検出と修正をサポートします。 これにより、DevOps 脅威マトリックスで定義されたさまざまな脅威に対して強化された、回復性が高くゼロトラストの DevOps 環境を実現できます。 主な体制管理には、次のようなものがあります。

  • 範囲指定されたシークレット アクセス: 各パイプラインがその機能に不可欠なシークレットのみにアクセスできるようにすることで、機密情報の露出を最小限に抑え、不正アクセス、データ漏洩、侵入拡大のリスクを軽減します。
  • 自己ホスト型ランナーと行為のアクセス許可の制限: 自己ホスト型ランナーを避け、パイプラインのアクセス許可の既定値を読み取り専用にすることで、未承認の実行と潜在的なエスカレーションを防ぎます。
  • 強化されたブランチ保護: ブランチ保護ルールを適用し、悪意のあるコードの注入を防止することで、コードの整合性を維持します。
  • 最適化されたアクセス許可とセキュリティで保護されたリポジトリ: 最小限の基本アクセス許可を追跡し、リポジトリのシークレット プッシュ保護を有効にして、未承認のアクセスや変更のリスクを軽減します。

DevOps の脅威マトリックス

DevOps の脅威マトリックスを開発するための目標は、関連する攻撃手法を追跡し、それに対する防御を構築するために防御者が使用できる包括的なナレッジベースを構築することです。 MITRE ATT&CK フレームワークをベースとして使用し、DevOps 環境に関連する手法と攻撃ベクトルを収集し、DevOps 攻撃手法に特化したマトリックスを作成しました。

このマトリックスの戦術は DevOps の観点から検討する必要があることに注意してください。 たとえば、Windows または Linux OS を実行する仮想マシンでの実行手法は、DevOps パイプラインでの実行とは異なります。 Linux の場合、実行とは、OS 内でコードを実行することを意味します。 DevOps 環境に言及する場合、実行は、パイプラインまたは DevOps リソース内でコードを実行することを意味します。 防御者は、この脅威マトリックスを使用して攻撃とそれに対応する防御方法を分類できるだけでなく、レッド チームと連携して、想定を継続的にテストし、新しい潜在的な攻撃手法を検出することができます。

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 機能を使用して構成された組織のパブリック リポジトリへのアクセス。 これらのリポジトリは、組織の構成によっては、pull request (PR) 要求が作成された後、パイプライン実行をトリガーできる場合があります。

エンドポイント侵害 - 攻撃者は既存の侵害を利用して、侵害された開発者のワークステーションを悪用し、組織の SCM、レジストリ、または開発者がアクセスできるその他のリソースにアクセスできるようになります。

構成された Webhook - 組織が Webhook を構成している場合、攻撃者は、SCM 自体を使用して組織のネットワークへの要求をトリガーし、そのネットワークへの初期アクセス方法として Webhook を使用する可能性があります。 これにより、パブリックに公開することを意図していないサービス、またはプライベート ネットワーク内で古い脆弱なソフトウェア バージョンを実行しているサービスへのアクセスが攻撃者に許可される可能性があります。

実行

実行戦術とは、悪意のある敵対者がパイプライン リソース (パイプライン自体またはデプロイ リソース) への実行アクセスを取得するために使用する可能性がある手法を指します。 このセクションでは、一部の手法の説明で、それらを実行するためのさまざまな方法、つまりサブ手法と呼ばれるものについても説明します。

有害なパイプライン実行 (PPE) - 攻撃者が組織のリポジトリにコードを挿入し、その結果、リポジトリの CI/CD システムでコードが実行される手法を指します。 コードの実行を達成するためのさまざまなサブ手法があります。

  • 直接 PPE (d-PPE) – 攻撃者がリポジトリ内の設定ファイルを直接変更できる場合。 パイプラインは新しい PR によってトリガーされ、構成ファイルに従って実行されるため、攻撃者は悪意のあるコマンドを構成ファイルに挿入でき、これらのコマンドがパイプラインで実行される可能性があります。
  • 間接 PPE (i-PPE) - 攻撃者が構成ファイルを直接変更できない場合、またはトリガーされたときに、これらの変更が考慮されない場合。 このような場合、攻撃者はコード (ファイル作成、スクリプトのテスト、スクリプトのビルドなど) を実行するためにパイプラインで使用されるスクリプトを感染させる可能性があります。
  • パブリック 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 環境で使用されている防御をバイパスし、攻撃を気付かれることなく続けるために使用される可能性があります。

サービス ログの操作 - サービス ログを使用すると、防御者は環境内の攻撃を検出できます。 環境内 (ビルド パイプラインなど) で実行されている攻撃者は、防御者が攻撃を観察できないようにログを変更する可能性があります。 これは、攻撃者が Linux マシン上の履歴ログを変更し、攻撃者が実行したコマンドを観察者が確認できないようにする場合と似ています。

コンパイルの操作 - 攻撃者は、SCM サービスに痕跡を残したくない場合、悪意のあるコードを挿入するためにコンパイル プロセスを変更する可能性があります。 これを行うには、いくつかの方法があります。

  • コードをその場で変更する – リポジトリ内でコードを変更したり、コードに痕跡を残したりせずに、ビルド プロセスが開始される直前にコードを変更します。
  • コンパイラの改ざん – ビルド環境のコンパイラを変更して、プロセスが開始される前に痕跡を残すことなく悪意のあるコードを導入します。

ブランチ保護の再構成 - ブランチ保護ツールを使用すると、組織は PR またはコミットがブランチに承認される前の手順を構成できます。 攻撃者は、管理者のアクセス許可を取得すると、ユーザーの介入なしにこれらの構成を変更し、ブランチにコードを導入する可能性があります。

影響

影響戦術とは、攻撃者が悪意のある目的で CI/CD リソースへのアクセスを悪用するために使用する手法を指します。これらの手法は目立ちやすく、簡単に検出される可能性があるため、攻撃の別のステップとしては使用されません。

分散型サービス拒否 (DDoS) - 敵対者は、外部ターゲットに対して分散型サービス拒否 (DDoS) 攻撃を実行するために、アクセス権を取得したコンピューティング リソースを使用する可能性があります。

暗号資産マイニング - コンピューティング リソースは、敵対者によって制御される暗号資産マイニングに使用される可能性があります。

ローカル サービス拒否 (DoS) - 攻撃者は、CI パイプライン上で実行されると、エージェントのシャットダウン、再起動、または VM の過負荷によって、当該パイプラインから顧客に対してサービス拒否攻撃を実行する可能性があります。

リソースの削除 - リソース (クラウド リソース、リポジトリなど) にアクセスできる攻撃者は、サービス拒否を達成するために、リソースを完全に削除してしまう可能性があります。

流出

流出戦術とは、攻撃者が被害者の環境から機密データを持ち出すために使用する可能性のあるさまざまな手法を指します。

プライベート リポジトリのクローン - 攻撃者は、CI パイプラインにアクセスできるようになると、プライベート リポジトリにもアクセスできるようになります (たとえば、GitHub で GITHUB_TOKEN を使用できます)。そのため、コードを複製したり、アクセスしたりして、プライベート IP にアクセスできるようになります。

パイプライン ログ - 敵対者はパイプライン実行ログにアクセスし、アクセス履歴、ビルド ステップなどを表示する可能性があります。これらのログには、ビルドやデプロイに関する機密情報が含まれている可能性があり、場合によってはサービスやユーザー アカウントなどの資格情報も含まれていることがあります。

運用リソースからのデータの流出 - パイプラインが運用リソースにアクセスできる場合、攻撃者もこれらのリソースにアクセスできるようになります。 このため、攻撃者は、運用データを持ち出すために、このアクセスを悪用する可能性があります。

DevOps 体制管理に関する推奨事項

DevOps スキャナーがソース コード管理システムや継続的インテグレーション/継続的デリバリー パイプライン内のセキュリティ ベスト プラクティスからの逸脱を検出すると、Defender for Cloud は正確で実行可能な推奨事項を出力します。 これらの推奨事項には、次のような利点があります。

  • 可視性の向上: DevOps 環境のセキュリティ体制への包括的な分析情報を取得し、既存の脆弱性を包括的に理解できるようにします。 攻撃を防ぐために、ブランチ保護ルールの欠落、特権エスカレーションのリスク、セキュリティで保護されていない接続を特定します。
  • 優先度ベースのアクション: 最も重要な脆弱性に最初に対処することで、リソースと労力をより効果的に費やすための重大度ごとに結果をフィルター処理します。
  • 攻撃面の減少: 強調されたセキュリティ ギャップに対処し、脆弱な攻撃面を大幅に減少させることで、潜在的な脅威に対する防御を強化します。
  • リアルタイム通知: ワークフロー自動化機能と統合することで、セキュリティで保護された構成が変更されたときに即時アラートを受け取ることができるため、迅速な対処が可能になり、セキュリティ プロトコルを持続的に遵守できます。