Skip to content
Latchkey

悪意ある依存関係とは? サプライチェーンに潜む敵対的なコード

悪意ある依存関係とは、宣伝どおりの機能を果たしながら敵対的なコードも運ぶパッケージであり、それをインストールするすべての build に攻撃者を忍び込ませます。

現代のプロジェクトは数百のサードパーティパッケージを引き込み、build はそのすべてが install スクリプトを実行しコードを出荷することを信頼します。悪意ある依存関係はその信頼を悪用します。真新しい敵対的なパッケージ、乗っ取られた正当なパッケージ、あるいは紛らわしい名前の偽物かもしれません。一度インストールされると、あなたの build の権限で実行されます。

どう入り込むか

  • メンテナーのアカウントが侵害され、敵対的なバージョンが公開される。
  • 本物と混同されるよう名付けられたパッケージ(typosquatting)。
  • 内部パッケージ名が公開 registry から乗っ取られる(dependency confusion)。
  • インストールした者を攻撃するためだけに新しいパッケージが公開される。

何をするか

悪意あるパッケージは一般に、環境変数を読み取ってシークレットを exfiltrate する、backdoor を仕込む、暗号通貨をマイニングする、あるいは build の出力を改ざんする install 時スクリプトを実行します。ペイロードはしばしば、あなたのテストが実行される前の install 時に発火します。

なぜ CI が標的なのか

開発者のラップトップにはいくつかのシークレットがありますが、CI ランナーには良いもの - deploy キー、クラウド認証情報、署名キー - があります。CI で実行される悪意ある依存関係は大当たりを引くわけで、だからこそサプライチェーン攻撃はますます pipeline を狙うのです。

締め出す方法

依存関係を lockfile と正確なバージョンで固定し、新しい依存関係を追加する前にレビューし、脆弱性とマルウェアのデータベースに対して dependency scanning を実行し、可能な限り install スクリプトを無効化します。software bill of materials があれば、悪いパッケージが公表されたときに素早く対応できます。

被害範囲を限定する

悪意あるパッケージが実行されてしまった場合、isolation と最小権限がどれだけ悪化するかを決めます。スコープが絞られた短命な認証情報と egress フィルタリングを備えた ephemeral なランナーは、敵対的な install スクリプトが盗むものをほとんど見つけられず、送る先もないことを意味します。

重要なポイント

  • 悪意ある依存関係は、正当な機能と並んで敵対的なコードを運ぶ。
  • typosquatting、dependency confusion、アカウント乗っ取りが主な侵入経路である。
  • lockfile、scanning、レビュー、最小権限がそれらを締め出し、封じ込める。

関連ガイド