依存関係混同攻撃(Dependency Confusion)
依存関係混同攻撃(Dependency Confusion) とは何ですか?
依存関係混同攻撃(Dependency Confusion)攻撃者が組織内部の依存関係と同じ名前の悪意あるパッケージをパブリックレジストリに公開し、ビルドツールにパブリック版を取得させるサプライチェーン攻撃。
Dependency Confusion は、npm、pip、Maven、NuGet、RubyGems などのパッケージマネージャがパブリックとプライベートのレジストリを併用する際の既定の解決動作を悪用します。攻撃者は内部パッケージの名前を漏洩したマニフェスト、公開リポジトリ、DNS などから特定し、より高いバージョンを同名でパブリックレジストリに公開して、ビルドエージェントが取得するのを待ちます。Alex Birsan の 2021 年の調査により、大手企業多数が脆弱であることが示されました。対策には、レジストリスコープの明示(npm scoped パッケージ、NuGet の upstream feed、pip --index-url)、内部名のプレースホルダーをパブリックに事前公開、外向き解決のブロック、Sigstore や PGP による署名、名前と取得元を固定するキュレート済み成果物リポジトリ経由での取得などがあります。SLSA、SBOM、パブリックレジストリの新規パッケージの継続的監視も検知に有効です。
● 例
- 01
内部パッケージ internal-utils が、npm 上の悪意ある internal-utils@99.0.0 に置き換えられる事例。
- 02
ビルドパイプラインが、プライベートインデックスではなく PyPI から pip 依存をダウンロードしてしまうケース。
● よくある質問
依存関係混同攻撃(Dependency Confusion) とは何ですか?
攻撃者が組織内部の依存関係と同じ名前の悪意あるパッケージをパブリックレジストリに公開し、ビルドツールにパブリック版を取得させるサプライチェーン攻撃。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
依存関係混同攻撃(Dependency Confusion) とはどういう意味ですか?
攻撃者が組織内部の依存関係と同じ名前の悪意あるパッケージをパブリックレジストリに公開し、ビルドツールにパブリック版を取得させるサプライチェーン攻撃。
依存関係混同攻撃(Dependency Confusion) はどのように機能しますか?
Dependency Confusion は、npm、pip、Maven、NuGet、RubyGems などのパッケージマネージャがパブリックとプライベートのレジストリを併用する際の既定の解決動作を悪用します。攻撃者は内部パッケージの名前を漏洩したマニフェスト、公開リポジトリ、DNS などから特定し、より高いバージョンを同名でパブリックレジストリに公開して、ビルドエージェントが取得するのを待ちます。Alex Birsan の 2021 年の調査により、大手企業多数が脆弱であることが示されました。対策には、レジストリスコープの明示(npm scoped パッケージ、NuGet の upstream feed、pip --index-url)、内部名のプレースホルダーをパブリックに事前公開、外向き解決のブロック、Sigstore や PGP による署名、名前と取得元を固定するキュレート済み成果物リポジトリ経由での取得などがあります。SLSA、SBOM、パブリックレジストリの新規パッケージの継続的監視も検知に有効です。
依存関係混同攻撃(Dependency Confusion) からどのように防御しますか?
依存関係混同攻撃(Dependency Confusion) に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
依存関係混同攻撃(Dependency Confusion) の別名は何ですか?
一般的な別名: パッケージ置き換え攻撃, ネームスペース混同。
● 関連用語
- appsec№ 1069
ソフトウェアサプライチェーンセキュリティ
ソースコード・依存関係・ビルド・署名・配布・デプロイに至るまで、ソフトウェア製造の各リンクを改ざん・悪意あるコード・完全性喪失から守る取り組み。
- attacks№ 1116
サプライチェーン攻撃
信頼されたサードパーティのソフトウェア・ハードウェア・サービス提供者を侵害し、その下流顧客に到達する攻撃。
- attacks№ 1184
タイポスクワッティング
正規のドメイン名やパッケージ名のスペルミス・視覚的類似名を取得し、入力ミスや視認ミスをするユーザー・開発者を狙う手口。
- appsec№ 305
依存関係のピン留め
ソフトウェア依存関係を厳密なバージョン、可能なら暗号学的ハッシュとともに固定し、ビルドが常に同一の成果物を取得することでサプライチェーン改ざんへの耐性を高める手法。
- appsec№ 971
SCA(ソフトウェアコンポジション解析)
アプリケーションが利用するオープンソース・サードパーティコンポーネントを自動解析し、既知の脆弱性、ライセンス問題、古い・危険な依存関係を洗い出す手法。
- appsec№ 784
パッケージ署名
ソフトウェアパッケージに暗号学的署名を付与し、利用者が発行者の身元と公開後に改ざんされていないことを検証できるようにする仕組み。
● 関連項目
- № 1097スタージャッキング
- № 647悪意ある npm パッケージ
- № 1183Typosquatting パッケージ