BigSquatRat npm Package Campaign Analysis
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このレポートでは、リモートアクセス型トロイの木馬をインストールする悪意のあるnpmパッケージ「bigmathix」がプロファイルされています。それは多段階のコードを使用して、攻撃者が管理するGitHubコンテンツとaurevian.cloudからペイロードを取得します。動的な暗号解読キーと、実行を制御する初期化引数の必要性により、検知が難しく、JavaScript開発者を狙う供給チェーン攻撃に一致します。
調査
研究者たちはこのパッケージをデオブファスケートし、子プロセスを生成し、DNS解決を行い、派生キーを使用して埋め込まれたURLを解読するチェーンを再構築しました。初期化値をブルートフォースすることにより、彼らはaurevian.cloudから2段階目のペイロードを回収し、最終的なRATロジックには追加のオブファスケーションが導入されました。アナリストたちはまた、関連するGitHubリポジトリや、同時期に公開された追加のnpmパッケージを関連付け、キャンペーンの規模をマッピングしました。
軽減策
信用できないnpm依存関係、特に新たに公開されたものやダウンロード数が少ないパッケージ、または突然バージョン変更されたモジュールを避け、ハッシュやプロバナンス制御を通じて整合性を確認してください。node.exeによって生成された疑わしい子プロセスや、未知のドメインへの予期しないアウトバウンドルックアップを監視してください。aurevian.cloudへのエグレスフィルタリングを適用し、Node.jsプロセスによって作成されるWindowsの実行キーやLinuxのsystemdサービスなどの持続性にアラートを設定してください。
対応策
bigmathixが特定された場合、エンドポイントを隔離し、パッケージを削除し、生成されたNode.jsプロセスを終了してください。作成された実行キーやsystemdユニットを削除し、関連するドメイン/IPをブロックし、DNS、プロセスの系譜、およびネットワークのエグレスを示すログを収集します。ダウンロードされたペイロードや持続性(wscript.exeランチャーやスケジュールされたサービスなど)を特定するためにフォレンジック調査を行い、それに一致するアーティファクトを環境全体で探してください。
“graph TB %% Class Definitions Section classDef action fill:#99ccff classDef process fill:#ffcc99 classDef persistence fill:#ccffcc classDef c2 fill:#ccccff classDef cleanup fill:#ffccff %% Nodes Definitions node_supply_chain[“<b>Technique</b> – T1195.001 サプライチェーンの妥協<br /><b>Description</b>: 悪意のあるコードを配布するためにソフトウェアサプライチェーンを妥協させます。<br /><b>Detail</b>: 悪意のあるnpmパッケージ’bigmathix’が公開されました。”] class node_supply_chain action node_obfuscation[“<b>Technique</b> – T1027 ファイルまたは情報の難読化<br /><b>Subu2011techniques</b>: T1027.009(ステガノグラフィー)、T1027.004(配信後のコンパイル)<br /><b>Description</b>: パッケージには実行時にデオブファスケートされる強くオブファスケートされたJavaScriptが含まれています。”] class node_obfuscation action node_process_creation[“<b>Technique</b> – T1543 システムプロセスの作成または修正<br /><b>Subu2011technique</b>: T1543.001(エージェントの起動)<br /><b>Description</b>: ローダーは子Node.jsプロセスを生成し、実行を隠すためにプロセスツリーを分断します(T1036.009)。”] class node_process_creation process node_dns_key_derivation[“<b>Technique</b> – T1071.004 アプリケーション層プロトコルDNS<br /><b>Additional</b>: T1590.002(ドメイン/IP)、T1596.001(暗号資料の取得)<br /><b>Description</b>: 数値引数を生成し、IPのためにDNSルックアップを行い、リモートREADMEのSHAu2011256ハッシュと共に結合して解読キーを導出します。”] class node_dns_key_derivation action node_encrypted_download[“<b>Technique</b> – T1573.001 暗号化チャネル非対称暗号化<br /><b>Description</b>: AESu2011GCM暗号化チャネルを使用してaurevian.cloudから二段階目のペイロードを取得します。”] class node_encrypted_download action node_persistence_linux[“<b>Technique</b> – T1543.002 Systemdサービス<br /><b>Description</b>: Linuxで持続性を持たせるためにsystemdサービスを作成し、それをsystemctlで開始します。”] class node_persistence_linux persistence node_persistence_windows[“<b>Technique</b> – T1547.014 レジストリ実行キー スタートアップフォルダー<br /><b>Description</b>: ASEP実行キーを作成し、持続性を持たせるためにwscript.exe u2192 node.exeを起動します。”] class node_persistence_windows persistence node_c2[“<b>Technique</b> – T1104 ツール転送の受信 (C2)<br /><b>Description</b>: RATはC2をポーリングし、受け取ったコマンドを実行し、MetaMask Chrome拡張機能を確認します。”] class node_c2 c2 node_cleanup[“<b>Technique</b> – T1070.004 ファイル削除, T1070.009 レジストリクリア <br /><b>Description</b>: 最終段階はそのファイルを削除し、証拠を消すためにレジストリ/実行キーのエントリを削除します。”] class node_cleanup cleanup %% Connections Showing Attack Flow node_supply_chain u002du002d>|leads_to| node_obfuscation node_obfuscation u002du002d>|leads_to| node_process_creation node_process_creation u002du002d>|uses| node_dns_key_derivation node_dns_key_derivation u002du002d>|uses| node_encrypted_download node_encrypted_download u002du002d>|enables| node_persistence_linux node_encrypted_download u002du002d>|enables| node_persistence_windows node_persistence_linux u002du002d>|supports| node_c2 node_persistence_windows u002du002d>|supports| node_c2 node_c2 u002du002d>|triggers| node_cleanup “
攻撃フロー
検出
LOLBAS WScript / CScript(プロセス作成を通じて)
表示
ランキーに追加された疑わしいファイル拡張子 [ASEPs](レジストリエベントを通じて)
表示
疑わしいNodeJS子プロセス [Linux] (Cmdlineを通じて)
表示
異常なプロセスによって開始された可能性のあるGithubファイルのダウンロード(ネットワーク接続を通じて)
表示
IOCs (Emails) による検出: BigSquatRat npmパッケージキャンペーン分析
表示
IOCs (HashSha1) による検出: BigSquatRat npmパッケージキャンペーン分析
表示
IOCs (HashSha256) による検出: BigSquatRat npmパッケージキャンペーン分析
表示
wscript.exe経由でのNode.js RAT実行の検出 [Windowsプロセス作成]
表示
難読化されたスクリプトとシステムコントロールによるNode.jsマルウェアの検出 [Linuxプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリおよびベースラインの事前チェックが合格している必要があります。
根拠: このセクションは、検出ルールを発動するように設計された敵の技術(TTP)の正確な実行を詳細に示します。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例では誤診を引き起こす可能性があります。
-
攻撃の詳細とコマンド:
攻撃者は、Node.jsランタイムを必要とする悪意のあるJavaScriptペイロードを所有しています。通常のアプリケーションホワイトリスティングを回避するために、彼らは使用しますwscript.exe—ネイティブのWindowsスクリプトホスト—を使用して開始しますnode.exe間接的に、検出ルールに一致する親/子関係を作成します。手順は次の通りです:- 悪意のあるスクリプトをドロップします (
malicious.js) それは単にnode.exeペイロードを生成します。 - ラッパーJavaScriptを作成します (
launcher.js) Windowsスクリプトホストが実行するために; このラッパーはWScript.Shellを使用して実行しますnode.exeペイロードを生成します。 - ラッパーを介して実行
wscript.exe //B //Nologo launcher.js. - 結果として生じるプロセスツリーは
wscript.exe → node.exe → malicious.js, 目標のテレメトリを生成します。
- 悪意のあるスクリプトをドロップします (
-
回帰テストスクリプト:
次のPowerShellスクリプトは、Windowsテストホスト上での全チェーンを自動化します。# ------------------------------------------------- # 回帰テスト – Node.js RAT実行 via wscript # ------------------------------------------------- # 変数 $tempPath = "$env:TEMP" $launcherPath = Join-Path $tempPath "launcher.js" $payloadPath = Join-Path $tempPath "malicious.js" $nodePath = "C:Program Filesnodejsnode.exe" # インストール場所が異なる場合、調整してください # 1. 悪意のあるペイロードを書き込む(デモ用の簡単なコンソールログ) $payloadContent = @" console.log('悪意のあるペイロードが実行されました'); // 本当のRATコードはここに "@ $payloadContent | Out-File -FilePath $payloadPath -Encoding ASCII # 2. wscriptが実行するランチャーを書き込む $launcherContent = @" var shell = WScript.CreateObject("WScript.Shell"); // 悪意のあるスクリプトでnode.exeを実行する var cmd = "`"$nodePath`" `"$payloadPath`""; shell.Run(cmd, 0, false); "@ $launcherContent | Out-File -FilePath $launcherPath -Encoding ASCII # 3. wscriptを介してチェーンを実行 Write-Host "悪意のあるチェーンを起動中..." wscript.exe //B //Nologo $launcherPath # テレメトリがキャプチャされるまで一時停止 Start-Sleep -Seconds 5 # 4. オプション: nodeプロセスが実行中であることを確認(手動観察用) Get-Process -Name node -ErrorAction SilentlyContinue # ------------------------------------------------- # 回帰テストの終了 # ------------------------------------------------- -
クリーンアップコマンド: アーティファクトを削除し、残っているプロセスを終了します。
# クリーンアップスクリプト – 検証後に実行 $tempPath = "$env:TEMP" Remove-Item -Path (Join-Path $tempPath "launcher.js") -ErrorAction SilentlyContinue Remove-Item -Path (Join-Path $tempPath "malicious.js") -ErrorAction SilentlyContinue # テストによって生成された残りのnode.exeプロセスを終了 Get-Process -Name node -ErrorAction SilentlyContinue | Stop-Process -Force