サプライチェーン攻撃の解剖:簡潔な解説
現代のソフトウェア開発は、依存関係、サードパーティサービス、自動化されたパイプラインのネットワークに依存しています。各接続ポイントは、攻撃者がこの信頼関係を悪用し、単一の侵害を通じて数千のシステムを危険にさらす潜在的な侵入口となります。これらの攻撃がどのように展開されるかを理解することは、セキュアなシステムを構築する開発者にとって極めて重要です。
重要なポイント
- サプライチェーン攻撃は、組織とその依存関係間の信頼関係を悪用する
- 攻撃者はパッケージリポジトリ、ビルドシステム、非人間的アイデンティティを標的にして悪意のあるコードを配布する
- 防止にはゼロトラスト原則、依存関係管理、継続的な監視が必要
- すべての依存関係とサードパーティ統合は、潜在的な脅威ベクトルとして扱うべき
サプライチェーン攻撃とは?
サプライチェーン攻撃は、敵対者が他の組織が依存するソフトウェアやサービスを侵害し、信頼関係を攻撃ベクトルに変える攻撃です。攻撃者は被害者を直接標的にするのではなく、上流のプロバイダー(パッケージリポジトリ、ビルドシステム、ベンダーネットワーク)に侵入し、正規のチャネルを通じて悪意のあるコードを配布します。
ターゲット自身のインフラストラクチャの脆弱性を悪用する従来の侵害とは異なり、サプライチェーン攻撃は組織とその依存関係間の暗黙の信頼を武器化します。開発者がパッケージをインストールしたり、アップデートを適用したり、サードパーティサービスを統合したりする際、それが安全であると仮定します。攻撃者はこの仮定を悪用します。
攻撃のライフサイクル:侵入から影響まで
信頼されたチャネルを通じた初期アクセス
攻撃者は通常、以下を侵害することで初期アクセスを獲得します:
- オープンソースパッケージ:悪意のある貢献またはアカウント乗っ取りを通じて
- ビルドパイプライン:コードがコンパイルされ署名される場所
- アップデートメカニズム:エンドユーザーにソフトウェアを配布する
- ベンダーシステム:顧客環境への特権アクセスを持つ
SolarWinds攻撃はこのアプローチを例証しました。攻撃者はOrionのビルドプロセスにSUNBURSTバックドアを注入し、悪意のあるコードが正規のデジタル署名を受け取ることを保証しました。18,000以上の組織がこのトロイの木馬化されたアップデートをインストールし、SolarWindsの標準リリースプロセスを信頼していました。
横方向の移動と持続性
内部に侵入すると、攻撃者は足がかりを利用してアクセスを拡大します。非人間的アイデンティティ(APIキー、OAuthトークン、サービスアカウント)が主要なターゲットになります。これらの認証情報は過剰な権限を持つことが多く、ユーザーアカウントに適用される監視が欠けています。
Oktaの侵害はこれを完璧に示しています。攻撃者はOktaのサポートシステムから認証情報を盗み、その後、見落とされていたサービスアカウントトークンを使用して数ヶ月後に顧客システムを侵害しました。数千の認証情報をローテーションしたにもかかわらず、組織は重要なトークンを見逃していました—攻撃者がアクセスを再取得するのに十分でした。
サプライチェーン侵害における持続性メカニズムには、以下が含まれることがよくあります:
- 各ビルド時に再インストールされるバックドア化された依存関係
- 悪意のあるコードを注入する変更されたCI/CD設定
- 将来の「正規の」リリースのために侵害された署名証明書
データ流出と影響
最終段階は攻撃者の動機によって異なります。SolarWindsの背後にいるような国家主導の攻撃者は長期的なスパイ活動に焦点を当て、静かに機密データを流出させます。Kaseya攻撃で見られたランサムウェアグループは、即座の混乱を優先し、侵害されたMSPインフラストラクチャを通じて1,500の企業のシステムを暗号化します。
現代の攻撃ベクトル
依存関係の混乱とパッケージ操作
依存関係の混乱攻撃は、プライベートリポジトリの前にパブリックリポジトリをチェックする誤設定されたパッケージマネージャーを悪用します。攻撃者は社内パッケージの名前と一致する名前で悪意のあるパッケージを公開します。ビルドシステムが依存関係を取得する際、誤って攻撃者のバージョンをダウンロードします。
npmエコシステムは以下を通じて絶え間ない脅威に直面しています:
- タイポスクワッティング:人気のあるライブラリに似た名前のパッケージ(例:
python-dateutilvspython-dateutl) - 悪意のあるアップデート:メンテナーアカウントの乗っ取りを通じて侵害された正規のパッケージ
- プロテストウェア:メンテナー自身によって意図的に妨害されたパッケージ
侵害されたビルドパイプライン
CI/CDシステムは高価値のターゲットです。単一のパイプライン侵害により、ソースコードに触れることなくすべてのビルドにマルウェアを注入できます。攻撃者は以下を標的にします:
- GitHub Actions:リポジトリシークレットで実行されるワークフロー
- Jenkins:古いプラグインや弱い認証を持つサーバー
- コンテナレジストリ:組織全体で使用されるベースイメージをホスティング
Codecovの侵害は数ヶ月間顧客のCI/CDパイプラインに感染し、ビルドプロセスから環境変数と認証情報を収集しました。
非人間的アイデンティティの悪用
OAuthアプリとサービスアカウントは監視なしに増殖します。調査によると、Google Workspaceに接続されているOAuthアプリの10個に1個が管理者権限を持っています。これらの非人間的アイデンティティは多くの場合:
- 従業員の退職後も持続する
- 多要素認証が欠けている
- 実際のニーズを超える権限を持つ
- 侵害されてもアラートを生成しない
Discover how at OpenReplay.com.
開発者のための防止原則
サプライチェーン攻撃から防御するには、境界セキュリティからゼロトラスト原則への移行が必要です:
依存関係管理
- 範囲を使用するのではなく正確なバージョンを固定する
- パッケージの署名とチェックサムを検証する
- 厳格なアクセス制御を持つプライベートレジストリを使用する
- Software Bill of Materials (SBOM)追跡を実装する
パイプラインセキュリティ
- ビルド環境を本番ネットワークから分離する
- CI/CDシークレットを定期的にローテーションする
- Sigstoreのようなツールでアーティファクトに署名する
- TruffleHogでコード内のシークレットをスキャンする
アイデンティティガバナンス
- OAuthアプリの権限を月次で監査する
- サービスアカウントのジャストインタイムアクセスを実装する
- APIキーの使用パターンを監視する
- 未使用の非人間的アイデンティティを即座に取り消す
結論
サプライチェーン攻撃が成功するのは、ソフトウェア開発における信頼に関する基本的な仮定を悪用するためです。迅速な開発を可能にする同じメカニズム(パッケージマネージャー、自動化されたパイプライン、サードパーティ統合)が、侵害されると武器になります。
保護には、すべての依存関係、ビルドプロセス、サードパーティ統合を潜在的な脅威ベクトルとして扱うことが必要です。侵害を想定し、継続的に検証し、適切なセグメンテーションと最小権限アクセスを通じて影響範囲を制限します。問題は、依存関係が今日安全かどうかではなく、明日侵害されたときにそれを知ることができるかどうかです。
よくある質問
依存関係による予期しないネットワーク接続、ファイルシステムの変更、または新しいプロセスの生成を監視します。npm auditやpip-auditのようなツールを定期的に使用します。依存関係の更新を追跡し、変更ログをレビューします。侵害されたパッケージを示す可能性のある本番システムでの異常な動作に対するアラートを設定します。
タイポスクワッティングは、スペルミスを通じて正規のパッケージに似た名前のパッケージをインストールするよう開発者を騙します。依存関係の混乱は、パッケージマネージャーの設定を悪用して、同一の名前でより高いバージョン番号を使用することで、プライベート内部パッケージの代わりに悪意のあるパブリックパッケージをインストールします。
いいえ、オープンソースを避けることは実用的でも必要でもありません。代わりに、依存関係を慎重に精査し、必要なものだけを使用し、最新の状態に保ち、セキュリティスキャンを実装します。アクティブなコミュニティを持つ、よくメンテナンスされたプロジェクトを選択し、追加のセキュリティ制御を持つキュレーションされたレジストリやエンタープライズパッケージマネージャーの使用を検討してください。
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.