Red Hat NPM Compromise: サプライチェーン・セキュリティの教訓
Red Hatのクラウドサービスに関連する複数のNPMパッケージが最近侵害されたことは、開発者コミュニティに波紋を広げています。この事件は、確立されたエンタープライズ級の組織であっても、サプライチェーン攻撃の影響を免れないことを示す厳しい警告となっています。信頼されているパブリッシャーのパイプラインが侵害されると、数千もの依存関係を自動的に取り込む現代のソフトウェア開発の信頼モデルが根本から揺るがされます。
事件の概要: 信頼の侵害
SafeDepによる詳細な分析を含む報告によると、同じ公開パイプラインを共有する約32個のパッケージが影響を受けました。この侵害により、攻撃者は開発者や組織がRed Hatサービスを利用するために依存しているパッケージに、悪意のあるコードを注入することが可能になりました。
侵害の正確なベクトルは現在調査中ですが、コミュニティの推測では、IDE拡張機能(NX VS Code extensionなど)を介した開発者のラップトップの侵害から、CI/CDパイプラインのセキュリティの不備まで、いくつかの可能性が示唆されています。侵入経路がどこであれ、結果は同じでした。信頼できる公式なチャネルを通じて悪意のあるコードが配布されたのです。
NPMのシステム的な脆弱性
この出来事をめぐる議論の多くは、JavaScriptエコシステムの固有のリスクに集中しています。主な論争点は、postinstallスクリプトの使用です。これらのスクリプトは、パッケージのインストール直後に任意のコードを実行することを可能にするため、マルウェアの完璧な配信メカニズムとなります。
"One thing I've never understood is why NPM allows packages to run code immediately after they are installed. What's the use case for that? A package should just be some code you can call on at runtime."
この「機能」は、実質的にすべてのnpm installコマンドを、潜在的なリモートコード実行(RCE)イベントへと変えてしまいます。制限的なOS権限モデルの欠如と組み合わさると、これらのスクリプトはホームディレクトリをスキャンし、環境変数を盗み、トークンを流出させることができてしまいます。これらは多くの場合、コマンドを実行しているユーザーのフル権限で行われます。
実践的な緩和策
システム的なリスクがあるものの、開発者やセキュリティチームは、環境を保護するためにいくつかの防御レイヤーを実装することができます。
1. Dependency Cooldowns (依存関係のクールダウン)
議論されている最も効果的で摩擦の少ない戦略の一つは、「クールダウン」の実の装です。これは、新しいパッケージバージョンを本番環境に導入する前に、一定期間(通常は1〜3日)インストールを遅らせることを指します。ほとんどの悪意のあるバージョンは、数時間以内に検出されてレジストリから削除されるため、短い遅延を設けることで、最も壊滅的な影響を防ぐことができます。
- pnpm: デフォルトで1日間のクールダウンを含んでいます。
- Yarn 4: 最近リリースされた期間内のパッケージのインストールを防ぐオプションを提供しています。
- Third-party tools:
depsguardやcooldowns.devのようなツールは、さまざまなパッケージマネージャーに対してこれらの遅延を強制するためのCLIラッパーを提供します。
2. Sandboxing と Isolation (サンドボックス化と分離)
侵害による「爆発半径」を制限するために、開発者はホストOS上でインストールコマンドを実行することを避けるべきです。
- Dev Containers:
VS Code Dev Containersや同様のサンドボックス環境を使用することで、パッケージが侵害された場合でも、攻撃者のアクセスはユーザーのホームディレクトリ全体ではなく、コンテナ内に限定されます。 - Privilege Separation in CI:
GitHub Actionsにおいて、ビルド/テストフェーズ(npm installを実行するフェーズ)と公開/署名フェーズを分離してください。これにより、インストール中に実行されるコードが、公開に使用されるシークレットに簡単にアクセスできないようにします。
3. Hardening the Publishing Pipeline (公開パイプラインの強化)
パッケージメンテナーにとって、焦点は消費から配布へと移ります。コミュニティは、より堅牢な公開保護策の採用を促しています。
- MFA for Publishing: すべてのリリースに対して多要素認証(MFA)を要求すること。
- Trusted Publishers: 静的な長寿命の認証情報を使用する必要をなくすため、OIDCベースの公開(
GitHub Actionsなど)を使用すること。 - Staged Publishing: メンテナーがCIからプッシュされた後、かつレジストリで公開される前に、MFAを介してリリースを承認できる新しい機能。
結論
Red Hatの事件は、より大きく、より脆弱なシステムの一つの兆候です。Project Lightwell(Red HatとIBMがサプライチェーンの脆弱性を検出するために発表したもの)のようなツールは前進を意味しますが、根本的な問題は、私たちがサードパーティのコードに置いている信頼です。クールダウン、サンドボックス化、および厳格な公開要件を組み合わせることで、より弾力性のあるソフトウェアサプライチェーンへと向かうことができます。