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をブロックします。同じインストーラーアーティファクトとプロセスチェーンを全社的に探します。
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[“<b>アクション</b> – <b>T1204.001 ユーザー実行: 悪意あるリンク</b><br/>ユーザーが悪意あるリンクをクリックしPowerShellを起動”] class action_user_exec action process_powershell_cmd[“<b>プロセス</b> – <b>T1059.001 PowerShell</b><br/>Base64コマンドでMSIをダウンロード”] class process_powershell_cmd process action_msi_install[“<b>アクション</b> – <b>T1546.016 インストーラ</b><br/>サイレントMSIでNode.jsを展開”] class action_msi_install action tool_msiexec[“<b>ツール</b> – msiexec.exe<br/>システムバイナリプロキシ実行”] class tool_msiexec tool action_persistence[“<b>アクション</b> – Runキー永続化<br/>Runキーへ書き込み”] class action_persistence action tool_tor[“<b>ツール</b> – tor.exe<br/>外部プロキシ”] class tool_tor tool action_tor_proxy[“<b>アクション</b> – マルチホッププロキシ<br/>Tor SOCKS5経由C2通信”] class action_tor_proxy action action_grpc_comm[“<b>アクション</b> – gRPC通信<br/>.onion C2と通信”] class action_grpc_comm action action_encrypted_channel[“<b>アクション</b> – 暗号化チャネル<br/>AES-256-CBC / XOR”] class action_encrypted_channel action action_collection[“<b>アクション</b> – ホスト情報収集<br/>システム情報を収集”] class action_collection action action_archive[“<b>アクション</b> – カスタムアーカイブ<br/>多層暗号化”] class action_archive action action_config_repo[“<b>アクション</b> – 設定データ<br/>C2情報を取得”] class action_config_repo action action_dynamic_resolution[“<b>アクション</b> – 動的解決<br/>.onionを実行時に解決”] class action_dynamic_resolution action action_ip_discovery[“<b>アクション</b> – IP取得<br/>外部IPを取得”] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery
攻撃フロー
検出
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 "クリーンアップ完了。"