ClickFixからMaaSへ: モジュラーWindows RATとそのコントロールパネルの内部
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Netskope Threat Labsは、ClickFixキャンペーンが悪意のあるMSIインストーラーを介してNode.jsで構築されたカスタムWindows RATを配布していることを観察しました。このペイロードは重要なモジュールをメモリ内に保持し、Tor経由でgRPCストリーミングを使用してC2と通信します。OPSECのミスにより管理パネルのプロトコルが露出し、ウォレット追跡を伴うマルウェア・アズ・ア・サービスモデルを示唆しています。持続性はユーザーレベルのHKCU Run値を介して設定されます。
調査
研究者たちはMSIを捕獲し、PowerShellブートストラップをデコードし、Node.jsモジュールの動的ロードを追跡しました。彼らは構成ブロブを抽出および復号化し、.onion C2アドレスを回復しました。リークされたadmin.protoファイルは、マルチオペレータ管理やウォレットモニタリングなどのMaaS機能を明らかにし、アナリストは自己修復ウォッチドッグと匿名化されたトラフィックのためのTor使用を指摘しました。
緩和策
信頼できないソースからの署名のないMSIの実行をブロックし、新しい疑わしいエントリのHKCU…Runを監視します。cloud-verificate.comのようなドメインからMSIペイロードをダウンロードするPowerShellを検出します。隠し引数で起動されたconhost.exeまたはnode.exe、および必要のないエンドポイントに現れるtor.exeにアラートを出します。
対応
影響を受けたホストを隔離し、メモリ内モジュールの分析のためのメモリを収集し、HKCU Runの持続性を削除します。%LOCALAPPDATA%LogicOptimizerをレビューして、ステージングアーティファクトやスケジュールされたtor.exe活動を確認し、その後、onionエンドポイントと関連するドメイン/IPをブロックします。同じインストーラーアーティファクトとプロセスチェーンを全社的に探します。
攻撃フロー
検出
NodeJSバイナリが通常でない場所から実行される (cmdline経由)
表示
可能性のある持続性のポイント[ASEPs – ソフトウェア/NTUSER Hive] (registry_event経由)
表示
PowerShellによるダウンロードまたはアップロード (cmdline経由)
表示
LOLBAS Conhost (cmdline経由)
表示
シェルプロセスにより生成されたMsiExec (cmdline経由)
表示
試みられた可能性のあるIPルックアップドメイン通信 (dns経由)
表示
可能性のあるTorネットワークツール (cmdline経由)
表示
Conhost実行の検出によるNodeのブートストラップスクリプトの生成 [Windowsプロセス作成]
表示
悪意のあるPowerShellコマンドの実行によりMSIをダウンロードしてインストールする [Windows PowerShell]
表示
シミュレーション実行
前提条件: テレメトリー & ベースラインのプリフライトチェックを通過している必要があります。
理論: このセクションは、検出ルールをトリガーするために設計された敵対者戦術手法(TTP)の正確な実行を詳述します。コマンドとナラティブは、特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目的としています。
-
攻撃のナラティブとコマンド:
- 目的: 攻撃者は、疑念を抱かせずに悪意のあるNode.jsペイロードをブートストラップしたい (
bootstrap.js)。 - 方法: 署名済みのWindowsバイナリ (
conhost.exe) をプロキシとして使用し、node.exeをヘッドレスモードで起動し、ブートストラップスクリプトを引数として渡します。 - ステップ:
- 悪意のある
bootstrap.jsを書き込み可能なディレクトリ (例:%TEMP%). - にドロップします。
conhost.exe正確な引数文字列を指定して呼び出し、ルール監視を開始します。 - コマンドは現在のユーザーのコンテキストで実行され、正当なプロセス生成を模倣します。
- 悪意のある
# 1. 悪意のあるbootstrap.jsをドロップ(テストのための無害なコンテンツをシミュレート) $bootstrapPath = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrapPath -Value "// 悪意のあるブートストラッププレースホルダー" # 2. conhost.exeを実行して必要なフラグ付きでnode.exeを生成 $conhost = "$env:windirsystem32conhost.exe" $args = '--headless "node.exe" "bootstrap.js"' Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP - 目的: 攻撃者は、疑念を抱かせずに悪意のあるNode.jsペイロードをブートストラップしたい (
-
レグレッションテストスクリプト:
# ------------------------------------------------- # レグレッションテスト: Conhost → Nodeブートストラップのトリガー # ------------------------------------------------- # Sysmonが稼働し、ProcessCreateイベントをロギングしていることを確認します。 # ダミーブートストラップスクリプトをドロップ $bootstrap = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrap -Value "// テストブートストラップコンテンツ" # 検出ルールが探す正確なコマンドラインを定義します $conhostPath = "$env:windirsystem32conhost.exe" $cmdLine = '--headless "node.exe" "bootstrap.js"' # 悪意のある引数でconhostを起動 Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP Write-Host "シミュレーション完了 – SIEMアラートを確認してください。" -
クリーンアップコマンド:
# テストによって起動された残っているnodeまたはconhostプロセスを停止 Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force # 一時的なブートストラップスクリプトを削除 Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue Write-Host "クリーンアップ完了。"