サプライチェーン攻撃の最新手口と対策とは?npm・PyPI・Docker Hubの脆弱性徹底分析【2025年版】
公開日
現代のソフトウェア開発において、オープンソースソフトウェア(OSS)のエコシステムは欠かせないインフラとなっています。しかし、その利便性の裏で、パッケージレジストリを悪用して開発環境や本番環境に侵入する「サプライチェーン攻撃」が急増しており、攻撃手法も日々巧妙化しています。
本記事では、オールドドミニオン大学のThomas A. Pham氏による研究論文「Supply Chain Attacks Through Open Source Software: A Comprehensive Analysis of NPM, PyPI, and Docker Hub Vulnerabilities」(2025年)に基づき、主要なパッケージレジストリであるnpm、PyPI、Docker Hubにおける攻撃の最新動向と、推奨される防御策について解説します。
調査の概要:26億ダウンロードに影響する脅威の実態
今回紹介する研究では、2024年1月から2025年10月にかけて発生した、npm、PyPI、Docker Hubを標的とする23の主要なサプライチェーン攻撃キャンペーンが分析されています。これらの攻撃は、合計で26億回以上の週間ダウンロード数に影響を及ぼしており、その規模の大きさが浮き彫りになりました。
特に、タイポスクワッティング(正規のパッケージ名に似せた不正パッケージ)においては、検出されたパッケージの86.1%にマルウェアが含まれており、その多くが暗号通貨の窃盗を目的としていました。攻撃者はシステムの脆弱性を突くだけでなく、開発者の心理や運用上の隙を巧みに利用しています。
主要な4つの攻撃ベクトルと手口
攻撃者は、各エコシステムの特性に合わせてさまざまな手法を使い分けています。研究では、サプライチェーン攻撃の手口を以下の4つのカテゴリに分類しています。
表1:サプライチェーン攻撃ベクトルの分類
| 攻撃ベクトル | 手法の特性 |
|---|---|
| タイポスクワッティング (Typosquatting) | ・文字の入れ替え、省略、重複 ・記号の置換や視覚的な類似性の悪用 ・npmだけで222,000以上のバリエーションが確認されている |
| 依存関係の混乱 (Dependency Confusion) | ・パブリックとプライベートのレジストリ解決の仕組みを悪用 ・漏洩した内部パッケージ名を必要とする ・パッケージマネージャーがパブリックリポジトリを優先する場合に容易に成立する |
| アカウント侵害 (Account Compromise) | ・偽ドメインを使用したフィッシング ・中間者攻撃(AitM)による2要素認証(2FA)の回避 ・期限切れドメインの再登録やクレデンシャルスタッフィング |
| 自己増殖型 (Self-Propagating) | ・認証情報の自動収集 ・トークンの検証と再利用 ・ワームのようにエコシステム内で増殖 ・GitHub/npmトークンの悪用 |
タイポスクワッティングとブランド擬態
最も一般的な手法の一つです。攻撃者は「react」を「rceat」とするような、入力ミスしやすい名称で悪意あるパッケージを公開します。2024年11月には、Puppeteerなどの人気ライブラリを装った287個の悪意あるパッケージが特定されました。
依存関係の混乱とアカウント侵害
企業の内部で使用されるプライベートなパッケージと同じ名前のパッケージを、より高いバージョン番号でパブリックレジストリに登録することで、開発者のツールに悪意ある方をダウンロードさせる手法です。また、メンテナへの巧妙なフィッシングにより、正規のアカウントを乗っ取る事例も後を絶ちません。
新たな脅威:自己増殖型攻撃(ワーム)
2025年9月に発見された「Shai-Hulud」ワームは、感染した環境から認証情報を盗み出し、それを使って自動的に自身のコピーを拡散させるという、高度な自己増殖能力を持っていました。
エコシステムごとの脆弱性と特徴的な事例
npm、PyPI、Docker Hubはそれぞれ異なるアーキテクチャを持っており、攻撃者はそれらの構造的な弱点を突いてきます。
表2:エコシステムごとの主な脆弱性比較
| エコシステム | 主な脆弱性要因 |
|---|---|
| npm | ・ライフサイクルスクリプト(pre/postinstall)の自動実行 ・巨大な依存関係ツリー(100以上の推移的依存関係) ・高速なリリースサイクルと分散型の公開モデル |
| PyPI | ・デフォルトでプライベートよりパブリックレジストリを優先する設定 ・インストール時の setup.py による任意のコード実行・名前の類似性に対する制限が最小限 ・メンテナの本人確認が必須ではない |
| Docker Hub | ・ベースイメージ侵害による連鎖的な影響 ・イメージレスリポジトリ(中身のない悪意あるリポジトリ)のすり抜け ・強制的な非推奨化(deprecation)機能の欠如 ・レイヤーキャッシュによる修正の妨げ |
npm:自動実行スクリプトと大規模な依存関係
npmの最大のリスクは、パッケージインストール時にスクリプトが自動実行される点です。
2025年9月8日、メンテナに対するフィッシング攻撃により、debugやchalkといった重要なライブラリを含む18のパッケージが侵害されました。攻撃者は偽のログインページを用いて2FAコードをリアルタイムで窃取し、わずか数時間で悪意あるバージョンを公開しました。
PyPI:内部名漏洩とセットアップ実行
PyPIでは、インストール時に setup.py が実行される仕様が悪用されがちです。また、デフォルト設定がパブリックリポジトリを優先するため、依存関係の混乱攻撃に対して脆弱です。
事例として、2024年から2025年にかけて、Solanaなどの暗号通貨開発者を標的とした複数のキャンペーンが観測されています。これらは、無害なバージョンで信頼を築いた後に悪意あるコードを混入させる手口を用いていました。
Docker Hub:ベースイメージの汚染と永続性
コンテナ技術特有の問題として、ベースイメージが汚染されると、それを利用するすべての派生イメージに被害が拡大します。 2024年3月に発覚した「XZ Utils」のバックドア事件では、問題発覚から1年以上経過しても、バックドアを含んだままのDockerイメージが35個も残存していることが確認されました。一度公開されたイメージを完全に排除することの難しさが浮き彫りになっています。
攻撃による定量的影響と検出の課題
攻撃の影響は、ダウンロード数や金銭的被害だけにとどまりません。検出までのタイムラグが、被害の拡大を助長しています。
表3:主なサプライチェーン攻撃のタイムライン(2024-2025)
| 日付 | 主なインシデント |
|---|---|
| 2024年1月 | warbeast2000/kodiak2k による npm SSH窃盗 |
| 2024年2月 | PyPI django-log-tracker NovaSentinel |
| 2024年3月 | XZ Utils バックドア (CVE-2024-3094) |
| 2024年11月 | 287件の npm タイポスクワッティングパッケージ |
| 2024年12月 | TypoSmartの展開:3,658件をフラグ付け |
| 2025年8月 | PyPI SilentSync RAT キャンペーン |
| 2025年9月8日 | npm フィッシング:18パッケージ、26億ダウンロード |
| 2025年9月15日 | Shai-Hulud 自己増殖型ワーム |
2025年9月のnpmフィッシング攻撃では、悪意あるパッケージが削除されるまでの2.5時間の間に、監視対象のクラウド環境の10%にコードが到達していました。これは、攻撃の伝播速度がいかに対策のスピードを上回っているかを示しています。
多層防御フレームワーク:今求められるセキュリティ対策
こうした脅威に対抗するためには、単一の対策ではなく、レジストリ側と利用者側双方での多層的な防御が必要です。
レジストリレベルでの強化
パッケージレジストリ(npm, PyPIなど)には、以下の機能強化が求められます。
- 強化された認証: すべてのメンテナに対する多要素認証(MFA)の義務化。特にSMSやメールよりも、ハードウェアセキュリティキーの利用が推奨されます。
- 来歴証明と署名: 全パッケージに対する暗号署名の義務化と、ビルド環境の情報を含む来歴(Provenance)の記録。
- 自動化された行動分析: 静的解析だけでなく、サンドボックス環境での動的解析を行い、不審なネットワーク接続やコマンド実行をリアルタイムで検知する仕組みの導入。
開発者・組織が実施すべき対策
開発チームや組織は、依存関係を能動的に管理する必要があります。
- SBOM(ソフトウェア部品表)の自動化: ビルドごとにSBOMを生成し、直接的および間接的な依存関係をすべて記録・可視化します。これにより、新たな脆弱性が発見された際に、自社システムへの影響を即座に特定できます。
- 依存関係のピニングと検証: パッケージのバージョンを範囲指定(例:
^1.0.0)するのではなく、ロックファイルを使用して正確なバージョンを固定(ピニング)します。更新は自動テストを経た上で慎重に行います。 - プライベートパッケージの保護: 内部で使用するパッケージ名を保護し、パブリックレジストリでの名前空間の悪用(依存関係の混乱)を防ぐ設定を行います。
結論
2024年から2025年にかけての調査結果は、OSSに対するサプライチェーン攻撃が、単なる「悪戯」から「洗練された組織的犯罪」へと進化していることを示しています。特にAIを活用した攻撃コードの生成や、自己増殖型の攻撃手法の登場は、従来の防御策が通用しにくくなっていることを意味します。
開発者は「OSSは便利だがリスクもある」という認識を強く持ち、SBOMの活用や依存関係の厳格な管理など、能動的なセキュリティ対策を開発プロセスに組み込むことが不可欠です。
Webサービスや社内のセキュリティにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: