どのようにVHDXファイルがRemcos RATを配信するか
Detection stack
- AIDR
- Alert
- ETL
- Query
サマリー
多段階のマルウェアキャンペーンは、一般的なセキュリティコントロールを回避するために、VHDXディスクイメージを含む武器化されたZIPアーカイブを使用します。VHDXがマウントされると、難読化されたJavaScriptファイルが実行され、WMIを通じて一連のPowerShellステージを起動します。最終ペイロードはRemcos RATで、正規のWindowsプロセスに注入されてその実行を隠蔽します。
調査
リサーチャーは、悪意のあるZIPアーカイブと組み込まれたVHDXコンテナを調べて、完全な攻撃フローを再構築しました。分析により、WMIベースのプロセス作成を利用した親子関係の偽装、XORおよびBase64文字列難読化、反射型.NETローダーを含む複雑な実行チェーンが明らかになりました。感染経路は、最初のJavaScript実行から最終的なRemcosペイロードの展開まで成功裏に追跡されました。
緩和策
組織は、信頼できないソースからのVHDXディスクイメージのマウントを防止するため、厳格なコントロールを適用するべきです。セキュリティツールはまた、 Win32_Process.Create JavaScriptやPowerShellなどのスクリプトエンジンによってトリガーされる疑わしい活動を監視するべきです。既知の悪意のあるドメインをブロックし、レジストリ内の異常なRunキーの持続性を監視することで、リスクをさらに低減できます。
対応
この活動が検出された場合、指令と管理通信を停止させるために、影響を受けたエンドポイントを直ちに隔離してください。注入されたRemcosペイロードと反射型.NETローダーをキャプチャするためにメモリダンプを取得してください。その後、完全なフォレンジックレビューを実施して、悪意のあるRunキーのエントリ、追加のVHDXファイル、環境内の他の部分での疑わしいPowerShell活動を検索してください。
攻撃フロー
検出
持続性の可能性のあるポイント [ASEPs – ソフトウェア/NTUSERハイブ] (via registry_event)
表示
持続性の可能性のあるポイント [ASEPs – ソフトウェア/NTUSERハイブ] (via cmdline)
表示
LOLBAS WScript / CScript (via process_creation)
表示
仮想ハードディスクファイルが作成されました (via file_event)
表示
動的DNSサービスに連絡された可能性があります (via dns)
表示
PowerShell反射型.NETローダーとプロセス注入検出 [Windowsプロセス作成]
表示
EDR回避のためのWMI経由でのPowerShellスクリプト実行 [Windows Powershell]
表示
## シミュレーションの実行
前提条件:テレメトリおよびベースラインの事前フライトチェックが合格している必要があります。
理由:このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳細に説明します。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診につながる可能性があります。
-
攻撃の説明とコマンド: 対戦相手は、伝統的なAVによる検出を回避するためにメモリ内で悪意のあるペイロードを実行することを目指しています。彼らはPowerShellスクリプトを利用し、
[System.Reflection.Assembly]::Load()を使用して、コンパイル済みの.NET DLLをバイト配列から直接カレントプロセスに取り込みます。持続性を維持し、監視を逃れるために、backgroundTaskHost.exe、正規のWindowsプロセスを利用して、標準のシステムバックグラウンドタスク内に実行スレッドを隠そうとしています。 -
リグレッションテストスクリプト:
# シミュレーションスクリプト: Reflective .NETロードとプロセスの相互作用 # このスクリプトは、検出ルールにキャプチャされたロジックを模倣します。 # 1. ダミーバイト配列を作成し、.NETアセンブリを表す(シミュレーション用に簡略化) $assemblyBytes = [byte[]](0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00) # MZヘッダーを模倣 Write-Host "[+] Reflective .NETアセンブリの読み込みを試みています..." -ForegroundColor Cyan try { # この特定の文字列は検出ルールの目標です $assembly = [System.Reflection.Assembly]::Load($assemblyBytes) Write-Host "[!] 成功:アセンブリがメモリに読み込まれました(シミュレーションのみ)。" -ForegroundColor Green } catch { Write-Host "[-] アセンブリの読み込みが失敗しました(無効なダミーバイトのために予期される)、ただしコマンドは送信された。" -ForegroundColor Yellow } Write-Host "[+] detectionをトリガーするためにbackgroundTaskHost.exeを起動しています..." -ForegroundColor Cyan # この特定の文字列は検出ルールの目標です Start-Process "C:WindowsSystem32backgroundTaskHost.exe" -ArgumentList "/test-detection" -
クリーンアップコマンド:
# クリーンアップ:起動したbackgroundTaskHostプロセスを終了する Stop-Process -Name "backgroundTaskHost" -ErrorAction SilentlyContinue Write-Host "[+] クリーンアップ完了。BackgroundTaskHostが終了されました。" -ForegroundColor Green