概要:巧妙なnpmサプライチェーン攻撃が発覚
セキュリティ研究チームSocketの調査により、npmパッケージエコシステムを標的とした高度なサプライチェーン攻撃が明らかになりました。この攻撃では、インストール時に自動実行され、開発者の認証情報を窃取する10個の悪性npmパッケージが使用されています。これらのパッケージは、高度な難読化技術、ソーシャルエンジニアリングの手法、およびクロスプラットフォーム機能を駆使し、Windows、Linux、macOS環境の開発者システムから機密性の高い認証データを収集します。
悪性パッケージは2025年7月4日から4ヶ月以上にわたりnpmレジストリ上で活動を続け、Socketがnpmに削除を要請するまでに合計9,900回以上ダウンロードされていました。この攻撃は、npmサプライチェーンの悪用において新たなレベルの巧妙さを示しており、自動実行フック、多層難読化、およびプロフェッショナルな認証情報収集インフラを組み合わせています。
攻撃の実行メカニズム
悪性パッケージは、npmのpostinstallライフサイクル・フックを利用して、開発者がnpm installを実行すると同時に悪性コードを実行します。具体的には、package.jsonファイルが悪性なinstall.jsスクリプトを自動的にトリガーするように設定されており、このスクリプトが被害者のオペレーティングシステムを検出し、隠れたターミナルウィンドウでマルウェアを起動します。
- Windowsシステム:新しいコマンドプロンプトを起動。
- Linuxシステム:
gnome-terminalを起動しようとし、x-terminal-emulatorにフォールバック。 - macOSシステム:AppleScriptを使用して
Terminal.appを起動。
マルウェアは、実行後すぐに内容をクリアする別のターミナルウィンドウで実行されるため、開発者がターミナル出力を確認しても検出されにくいという特徴があります。この実行方法は、初期のnpm installコマンド以外のユーザー操作を必要としないため、特に悪質です。タイプスクワッティングされたパッケージをインストールした開発者は、システム上で悪性コードが実行されたという明らかな兆候なしに、知らず知らずのうちにマルウェアをトリガーしてしまいます。
4層の高度な難読化技術
このマルウェアは、静的解析やリバースエンジニアリングを妨害するために、4つの異なる難読化レイヤーを実装しています。
- 第1層:ペイロード全体を自己復号化する
evalラッパーで包み込み、実行時に自身を再構築および評価することで、ソースコードの表面的な検査を阻止します。 - 第2層:デコーダー関数自体をハッシュ化して動的に生成されたキーを用いたXOR暗号化を採用し、コードを実行せずに自動復号化を困難にします。
- 第3層:ペイロード文字列をURLエンコードし、完全なJavaScript評価機能を持たない解析ツールに対する障壁を追加します。
- 第4層:復号化されたコードは、16進数および8進数の算術演算を用いたswitch-caseステートマシンを使用し、プログラムフローを曖昧にすることで、手動解析を極めて時間のかかるものにしています。
この多層的なアプローチは、npmマルウェアの難読化における大きな進歩を示しており、攻撃者のインフラと能力をセキュリティ研究者から保護することを目的としています。
認証情報窃取の4段階プロセス
認証情報窃取操作は、検出を回避しつつ認証情報の捕捉を最大化するように設計された4つの異なる段階で展開されます。
- 第1段階:開発者を騙して正規のボット保護と信じ込ませるために、偽のCAPTCHAプロンプトをターミナルにASCIIアートで表示します。同時に、正規のパッケージ依存関係を模倣した偽のインストールメッセージを表示し、マルウェアが信頼できるものに見せかけ、
npm installとの関連性を曖昧にするために実行を遅らせます。 - 第2段階:被害者のIPアドレスを攻撃者のサーバー
195.133.79.43/get_current_ipに送信し、フィンガープリントと地理位置情報特定を行います。これにより、被害者の追跡記録が作成され、インストールが意図したターゲットプロファイルと一致するかどうかを攻撃者が確認できます。 - 第3段階:被害者が偽のCAPTCHAにテキストを入力すると、
data_extracterバイナリの自動ダウンロードと実行が開始されます。これは、被害者のオペレーティングシステムに合わせて調整された24MBのPyInstallerでパッケージ化されたPythonアプリケーションです。 - 第4段階:複数のストレージメカニズムにわたる包括的な認証情報収集が行われます。バイナリはファイルシステムをスキャンして認証情報ストアを探し、主要なすべてのOSのシステムキーリングからデータを抽出し、ブラウザのセッションクッキーと保存されたパスワードを収集し、OAuthおよびJWT認証トークンを収集し、SSH秘密鍵とAPI認証情報を含む設定ファイルを見つけ出します。盗まれたデータはZIPアーカイブに圧縮され、攻撃者のコマンド&コントロールインフラに送られます。
クロスプラットフォーム対応の認証情報収集
data_extracterバイナリは、Windows、Linux、macOSプラットフォーム全体で高度な認証情報抽出機能を実装しています。
- Linuxシステム:SecretService D-Bus API、GNOME Keyring、KWalletに保存された認証情報にアクセスします。
- macOSシステム:Keychain Services APIを介して悪用されます。
- Windowsシステム:CredReadおよびCredWrite APIを介してCredential Managerが収集されます。
このマルチプラットフォームアプローチにより、どのOSの開発者も認証情報が侵害される可能性があります。マルウェアは、メールクライアント、クラウドストレージ同期ツール、VPNアプリケーション、パスワードマネージャーで使用されるシステムキーリング、多要素認証をバイパスするセッションクッキー、ブラウザのパスワードマネージャーに保存されたパスワード、セッションハイジャック用のクッキーデータなど、価値の高い認証情報ストアを特に標的としています。また、OAuthトークン、JWTトークン、Ubuntu SSOおよびAPIアクセスに使用されるLaunchPad認証情報など、最新の認証トークンを抽出するための特殊なライブラリも含まれています。
推奨される対策
組織は、直ちに依存関係を監査し、10個の悪性パッケージがインストールされていないか確認する必要があります。これらのパッケージがインストールされたシステムは、完全に侵害されたと見なすべきです。
- システムキーリングおよびパスワードマネージャーに保存されているすべての認証情報をリセットする。
- すべてのサービスの認証トークンを失効させる。
- 多要素認証(MFA)がまだ展開されていない場合は有効にする。
- SSHキーをローテーションし、すべてのシステムで承認済みキーをレビューする。
- 接続されているサービスでの異常なアクティビティがないかアクセスログを監査する。
- 侵害されたシステムから本番インフラへの潜在的な横移動がないか確認する。
- 認証情報窃取の可能性がないかブラウザ履歴をレビューする。
- リポジトリやクラウドサービスへの不正アクセスを監視する体制を確立する。
- 攻撃者のインフラへの接続がないかVPNおよびファイアウォールログを監査する。
- インストールされた可能性のある追加の永続化メカニズムを特定する。
Socketのサプライチェーン防御ツール(GitHubアプリ統合による依存関係スキャン、インストール時のCLI検査、ダウンロード警告用のブラウザ拡張機能、エンタープライズファイアウォール保護など)を導入することで、同様のサプライチェーン攻撃が開発環境を侵害するリスクを大幅に軽減できます。
