NPM 上の悪意のパッケージを解析:AI によるコード生成を示す証拠が発見された

Hackers Use AI to Create Malicious NPM Package that Drains Your Crypto Wallet

2025/08/04 CyberSecurityNews — 人工知能 (AI) を悪用するサイバー犯罪者たちは、正規の開発ツールを装う NPM パッケージを作成/展開することで、暗号資産ウォレットから密かに資金を吸い上げるという、巧妙な攻撃を仕掛けている。“@kodane/patch-manager” という名のパッケージは、ライセンス検証およびレジストリ最適化機能を提供する “NPM Registry Cache Manager” を装っているが、実際には Solana ブロックチェーン資産を標的とする、高度な暗号資産ウォレット・ドレイナー (資金窃取ツール) を内包している。

このマルウェア攻撃キャンペーンが示すのは、OSS パッケージに対する開発者の信頼を悪用する、サプライチェーン攻撃の著しい進化である。

2025年7月28日に公開された、このパッケージは、検出にいたるまでの僅か2日間で、17種類のバージョンが 1,516 回以上もダウンロードされている。

Kodane というユーザー名で活動する攻撃者は、悪意の機能を維持しながら検出を回避するために、このパッケージを体系的に更新していた。

GetSafety の研究者たちは、悪意のパッケージを検出する技術を用いて、ソースコード・ドキュメント内の “ENHANCED STEALTH WALLET DRAINER” と明示されたコードを発見し、このパッケージを特定した。

Wallet Drainer (Source – GetSafety)

この発見が示すのは、AI を積極的に活用する脅威アクターたちが、専門家を装う技術ドキュメントやコード・コメントを生成し、その背後に悪意を隠蔽していることだ。

AI を活用した欺瞞とインストールメカニズム

このマルウェアが、AI により生成されたことを明らかにするのは、機械生成コードと人間作成コードの間に存在する、複数の特徴的な差異である。

このソースコードに含まれるものには、過剰な絵文字と過多な console.log メッセージに加えて、専門家が執筆したように見える、英語による詳細な説明付き関数コメントがある。

これらの特徴は、Claude のような AI コーディング・アシスタントによる出力と一致しており、とくに “Enhanced” という接頭語や、構造化された Markdown ドキュメントの一貫した使用において顕著となる。

インストール時には、パッケージが postinstall スクリプトを実行し、悪意のコンポーネントを複数のオペレーティング・システム上に展開する。

{
  "scripts": {
    "postinstall": "node scripts/post-install.js",
    "preuninstall": "node scripts/cleanup.js"
  }
}

正規のキャッシュ・フォルダを模倣する隠しディレクトリに、このマルウェアは自身をインストールする。macOS では “~/Library/Application Support/npm/registry-cache/”、Linux では “~/.local/share/npm/registry-cache/”、Windows では “%APPDATA%\npm\registry-cache\” が、それに該当する。

Windows システムにおいては、attrib + H コマンドを実行することで、インストール・ディレクトリを標準の File Explorer から完全に隠蔽する。

Sweeper monitor (Source – GetSafety)

永続的なバックグラウンド・デーモンである “connection-pool.js” は、”sweeper-monitor-production.up.railway.app” に存在する、Command and Control (C2) サーバとの通信を確立する。このサーバは、いまもアクセス可能であり、合計で 890件のログ/6件のウォレット・スイープ成功/7件の資金調達イベントなどの、進行中のオペレーションに関する証拠が確認されている。

暗号資産ウォレットの検出に到達すると、このマルウェアはハードコードされた Solana アドレス “B2XwbrGSXs3LAAcqFqKqGUug5TFA1Bug2NNGH3F3mWNK” に対して資金を送信する。さらに、即時の検出を回避するために、転送後も取引手数料を支払えるだけの十分な残高を残しているという。