DEV#POPPER RATが侵害されたJoyfill npmリリースを通じて配布される
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
2つの危険にさらされたベータリリースの @joyfill npmパッケージは、インポート時に実行されるJavaScriptインプラントを含む状態で発見されました。このインプラントは、Tron、Aptos、BNBスマートチェーン上のブロックチェーントランザクションを利用して、DEV#POPPERリモートアクセス型トロイのダウンロードを解決します。このキャンペーンは、影響を受けたモジュールがインポートされると同時に悪意のあるコードを実行することにより、開発者のワークステーションやCI/CDパイプラインを標的としています。
調査
Socketリサーチチームは、ベータ版の分析中にこの脅威を発見しました。 @joyfill/layouts and @joyfill/components。研究者は、難読化されたJavaScriptとブロックチェーンに支えられたディスパッチメカニズムを組み合わせた複数段階のペイロード配信チェーンを特定しました。調査により、初期ローダーがPolinRiderファミリーに関連していること、最終的なペイロードがDEV#POPPERマルウェアファミリーに属していることが確認されました。
緩和策
開発者は、影響を受けた @joyfill ベータ版を、ロックファイル、パッケージキャッシュ、ビルド環境、デプロイメント成果物から直ちに削除する必要があります。以下のような確認済みリリースに依存関係を固定することを推奨します。 @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 。セキュリティチームは、レジストリプロキシや依存関係管理ツールを通じて危険にさらされたバージョンをブロックする必要があります。
対応策
影響を受けたパッケージをインポートしたシステムは隔離され、危険にさらされたNode.jsプロセスにアクセスできるすべてのクレデンシャルは更新されるべきです。調査担当者は、開発者のアプリケーション(VS Code、GitHub Desktop、Discordを含む)についてコアモジュールへの予期しない変更を調査する必要があります。エンドポイントとCI/CDのテレメトリーも、解除されたNode.jsプロセス、既知のC2アドレス、および疑わしいブロックチェーンRPCトラフィックについてレビューされるべきです。
攻撃フロー
検出
Publicnode Ethereum 悪用の試みとしてのC2チャネル (dns_queryによる)
表示
IPルックアップドメイン通信の試行 (dnsによる)
表示
Linuxでのスクリーンショットを取得した可能性 (cmdlineによる)
表示
Linuxホスト上に隠しファイルが作成された可能性 (file_eventによる)
表示
IOC (HashSha256) を検出する: @joyfill npm ベータリリース2つが、DEV#POPPER リモートアクセス型トロイの配信に危険にさらされた
表示
IOC (SourceIP) を検出する: @joyfill npm ベータリリース2つが、DEV#POPPER リモートアクセス型トロイの配信に危険にさらされた
表示
IOC (DestinationIP) を検出する: @joyfill npm ベータリリース2つが、DEV#POPPER リモートアクセス型トロイの配信に危険にさらされた
表示
DEV#POPPER マルウェアのインジケーターを検出 [Windowsネットワーク接続]
表示
危険にさらされたJoyfill npmパッケージによるリモートアクセス型トロイの配信の検出 [Linuxファイルイベント]
表示
Node.jsモジュールの注入および解除されたプロセスの実行の検出 [Linuxプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリおよびベースラインの出発前チェックが通過していること。
理由: このセクションでは、検出ルールをトリガーするための敵の技術 (TTP) の正確な実行を詳述します。コマンドと説明は、特定されたTTPに直接反映され、検出ロジックが期待する正確なテレメトリを生成することを目的とする必要があります。抽象的または無関係な例は、誤診を招きます。
-
攻撃のストーリーとコマンド: 敵は広く使用されているnpm依存関係に悪意のあるコードを注入することに成功しました(サプライチェーンの脅威)。開発者が
npm installを実行するかプロジェクトを開始すると、悪意のあるスクリプトが実行されます。このスクリプトは、まずrequire関数をグローバル変数(global.r = require)に割り当てることによってその意図を隠蔽し、どこでもモジュールをロードできるようにし、requireを直接呼び出さずに(難読化)します。最後に、child_process.spawnを使用してC2サーバーに接続する解除されたシェルプロセスを起動し、親Node.jsプロセスから悪意のあるプロセスを切り離すことで検出を回避します。 -
リグレッションテストスクリプト:
#!/bin/bash # Node.js注入検出ルールを誘発するシミュレーションスクリプト。 # 一時的な悪意のあるJSファイルを作成し、それをNode.js経由で実行します。 MALICIOUS_FILE="malicious_pkg.js" echo "[+] 悪意のあるNode.jsスクリプトを作成中..." cat << 'EOF' > $MALICIOUS_FILE // グローバルモジュール注入のシミュレーション (T1027) global.r = require; // child_process.spawnによる解除プロセス実行のシミュレーション (T1059.006) const cp = require('child_process'); cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' }); console.log("[!] 悪意のあるペイロードが実行されました。 "); EOF echo "[+] Node.jsを通じて悪意のあるスクリプトを実行中..." node $MALICIOUS_FILE echo "[+] シミュレーション完了。SIEMでアラートを確認: Node.jsモジュール注入と解除プロセス実行の検出。" -
クリーンアップコマンド:
# シミュレートされた悪意のあるファイルを削除 rm -f malicious_pkg.js # シミュレーションによって生成された孤立したスリーププロセスを終了 pkill -f "sleep 30"