L’arsenale di FishMonger aggiornato da ESET Research: SprySOCKS per Windows
Detection stack
- AIDR
- Alert
- ETL
- Query
Riassunto
I ricercatori di ESET hanno scoperto due nuove varianti Windows del backdoor SprySOCKS, chiamate WIN_DRV e WIN_PLUS, che sono legate al gruppo di minacce FishMonger. La versione WIN_DRV utilizza un driver kernel per ottenere una furtività avanzata, inclusa la capacità di nascondere connessioni di rete, processi e file. Entrambe le varianti supportano diversi protocolli di comunicazione e forniscono un ampio insieme di comandi per il controllo del sistema e il furto di dati.
Indagine
L’indagine ha fatto leva su campioni di malware scoperti tramite VirusTotal e telemetria ESET, rivelando attività che si estendono dal 2023 al 2024. I ricercatori hanno analizzato l’intera catena di esecuzione, tra cui il DLL sideloading, il caricamento del driver kernel tramite DriverLoader e RawWNPF, e l’iniezione di processi usando tecniche di doppelgänging. Lo studio ha anche scoperto modelli di comunicazione command-and-control e chiavi di crittografia hardcoded condivise tra più componenti.
Mitigazione
Le organizzazioni dovrebbero dare priorità alla patching delle applicazioni esposte a internet per ridurre il rischio di compromissione iniziale tramite vulnerabilità N-day. È essenziale un forte enforcement della firma dei driver e il monitoraggio per l’installazione non autorizzata di driver kernel. I difensori dovrebbero anche monitorare attività sospette di task pianificati, modifiche al registro sotto Image File Execution Options, e registrazioni inusuali di processori di stampa.
Risposta
Se queste minacce vengono rilevate, i sistemi interessati dovrebbero essere isolati immediatamente per fermare ulteriori movimenti laterali o furti di dati. Gli investigatori dovrebbero eseguire una revisione forense dettagliata per determinare il vettore di intrusione originale e l’intera portata della compromissione, con particolare attenzione alla persistenza a livello kernel. I log di rete dovrebbero anche essere controllati per la comunicazione con infrastrutture command-and-control conosciute, mentre le modifiche del sistema come nuovi servizi o chiavi di registro alterate dovrebbero essere sottoposte a verifica.
graph TB %% Definizione delle classi classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef defense fill:#ffcc99 %% Accesso iniziale action_exploit[“<b>Azione</b> – <b>T1190 Exploit Public-Facing Application</b><br/>Descrizione: Sfruttamento di vulnerabilità N-day<br/>su server pubblici per ottenere l’accesso iniziale.”] class action_exploit action %% Diramazione delle varianti op_variant((“AND”)) class op_variant tool %% Percorso variante WIN_DRV action_win_drv_persist[“<b>Azione</b> – <b>T1546.012 Event Triggered Execution: IFEO</b><br/>Descrizione: Registrazione di un debugger dannoso per vds.exe<br/>Strumento: script klelam00007.bat”] class action_win_drv_persist action action_win_drv_dll[“<b>Azione</b> – <b>T1574.001 Hijack Execution Flow: DLL</b><br/>Descrizione: DLL side-loading tramite eseguibile<br/>legittimo firmato<br/>Strumento: ApphostRegistrationVerifier.exe carica tpsvcloc.dll”] class action_win_drv_dll action malware_loader[“<b>Malware</b>: Loader<br/>Descrizione: Utilizza Process Doppelgänging<br/>per eseguire l’iniezione.”] class malware_loader malware action_reflective[“<b>Azione</b> – <b>T1620 Reflective Code Loading</b><br/>Descrizione: Iniezione dello shellcode del backdoor SprySOCKS<br/>tramite Process Doppelgänging.”] class action_reflective action process_svchost[“<b>Processo</b>: svchost.exe<br/>Descrizione: Processo bersaglio per<br/>l’iniezione dello shellcode.”] class process_svchost process malware_sprysocks[“<b>Malware</b>: SprySOCKS Backdoor<br/>Descrizione: Mantiene il C2 ed esegue<br/>attività di raccolta dati.”] class malware_sprysocks malware tool_driver_loader[“<b>Strumento</b>: DriverLoader<br/>Descrizione: Distribuisce un driver<br/>a livello kernel.”] class tool_driver_loader tool malware_rootkit[“<b>Malware</b>: RawWNPF Kernel Driver<br/>Descrizione: Funziona come Rootkit (T1014)<br/>per nascondere processi, file e chiavi di registro.”] class malware_rootkit malware action_port_knocking[“<b>Azione</b> – <b>T1205.001 Traffic Signaling: Port Knocking</b><br/>Descrizione: Devia traffico TCP appositamente creato<br/>tramite Windows Filtering Platform.”] class action_port_knocking action %% Percorso variante WIN_PLUS action_win_plus_persist[“<b>Azione</b> – <b>T1547.012 Boot or Logon Autostart Execution: Print Processors</b><br/>Descrizione: Installazione di VSPMsg.dll come<br/>Print Processor per la persistenza.”] class action_win_plus_persist action %% Post-exploitation e raccolta action_keylogging[“<b>Azione</b> – <b>T1056.001 Input Capture: Keylogging</b><br/>Descrizione: Cattura di tasti premuti,<br/>dati degli appunti e titoli delle finestre.”] class action_keylogging action action_c2[“<b>Azione</b> – <b>T1132.001 Command and Control: Protocol</b><br/>Descrizione: Comunicazione tramite TCP, UDP e WebSocket<br/>con crittografia AES-128.”] class action_c2 action action_defense_impair[“<b>Azione</b> – <b>T1562.004 Defense Impairment: Disable or Modify Tools</b><br/>Descrizione: Modifica delle regole di Windows Firewall<br/>tramite netsh.exe per consentire il traffico.”] class action_defense_impair action %% Connessioni action_exploit –>|porta_a| op_variant %% Flusso WIN_DRV op_variant –>|percorso_variante| action_win_drv_persist action_win_drv_persist –>|porta_a| action_win_drv_dll action_win_drv_dll –>|carica| malware_loader malware_loader –>|esegue| action_reflective action_reflective –>|inietta_in| process_svchost process_svchost –>|avvia| malware_sprysocks malware_sprysocks –>|distribuisce| tool_driver_loader tool_driver_loader –>|mappa| malware_rootkit malware_rootkit –>|facilita| action_port_knocking %% Flusso WIN_PLUS op_variant –>|percorso_variante| action_win_plus_persist action_win_plus_persist –>|utilizza| action_reflective %% Post-exploitation comune malware_sprysocks –>|esegue| action_keylogging malware_sprysocks –>|comunica_tramite| action_c2 malware_sprysocks –>|esegue| action_defense_impair %% Connessione logica action_defense_impair –>|abilita| action_c2
Flusso di Attacco
Rilevazioni
Possibile Utilizzo di Schtasks o AT per Persistenza (via cmdline)
Visualizza
Possibile Utilizzo di PING per Esecuzione Ritardata (via cmdline)
Visualizza
Modifiche Firewall Sospette tramite CLI (via cmdline)
Visualizza
Attività di Rete del Backdoor FishMonger SprySOCKS [Connessione di Rete Windows]
Visualizza
Rilevazione di Svchost.exe Sospetto e Attività Correlate [Creazione Processo Windows]
Visualizza
## Esecuzione Simulazione
Prerequisito: Il Controllo di Telemetria e Linea Base Pre-volo deve essere superato.
Razionale: Questa sezione dettaglia l’esatta esecuzione della tecnica avversaria (TTP) progettata per attivare la regola di rilevazione. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare esattamente la telemetria attesa dalla logica di rilevazione. Esempi astratti o non correlati porteranno a una diagnostica errata.
-
Narrazione dell’Attacco & Comandi: L’avversario ha distribuito con successo il backdoor SprySOCKS su un host Windows compromesso. Per stabilire un canale command-and-control, il malware apre una socket in ascolto sulla porta 53781. Per garantire che la comunicazione sia riconosciuta dal loro server C2 personalizzato, il malware inietta il valore esadecimale magico
0xACACBCBCnei pacchetti di handshake iniziali. Questo imita il comportamento specifico del protocollo del gruppo FishMonger per facilitare una comunicazione affidabile tramite traffico intercettato o deviato. -
Script di Test di Regressione:
# Script di Simulazione: Generazione di Artefatti di Rete SprySOCKS # Questo script imita il comportamento di rete del backdoor SprySOCKS. $TargetPort = 53781 $MagicValue = [byte[]] @(0xAC, 0xAC, 0xBC, 0xBC) $Listener = [System.Net.Sockets.TcpListener]$TargetPort try { Write-Host "[+] Avvio del listener sulla porta $TargetPort..." -ForegroundColor Cyan $Listener.Start() $Client = $Listener.AcceptTcpClient() $Stream = $Client.GetStream() Write-Host "[+] Connessione stabilita. Invio del valore magico $MagicValue..." -ForegroundColor Yellow # Iniezione del valore magico nello stream per attivare la logica 'selezione1' $Stream.Write($MagicValue, 0, $MagicValue.Length) Start-Sleep -Seconds 5 } catch { Write-Error "[-] Simulazione fallita: $($_.Exception.Message)" } finally { Write-Host "[+] Pulizia delle connessioni..." -ForegroundColor Cyan $Stream.Close() $Client.Close() $Listener.Stop() } -
Comandi di Pulizia:
# Assicurarsi che non vi siano listener canaglia attivi Get-NetTCPConnection -LocalPort 53781 -ErrorAction SilentlyContinue | Remove-NetTCPConnection Write-Host "[+] Pulizia completata." -ForegroundColor Green