DarkGate Sotto il Cofano
Detection stack
- AIDR
- Alert
- ETL
- Query
Sintesi
DarkGate è un loader basato su Delphi venduto come Malware-as-a-Service nei mercati criminali. Include funzionalità complete di RAT, risoluzione dinamica delle API e trucchetti di evasione stratificati come set di caratteri base64 personalizzati, syscall in stile Union-API syscall caricamento e iniezione APC. Lo strumento, attribuito al venditore “RastaFarEye”, è stato adottato da attori come TA577 e Ducktail. Comunica con il C2 su HTTP con payload offuscati e può distribuire utility di desktop remoto, rubare token Discord e eseguire una shell inversa interattiva.
Analisi del Malware DarkGate
La pubblicazione offre un walkthrough approfondito di reverse engineering dell’eseguibile DarkGate, spiegandone la configurazione personalizzata di scrambling, la generazione di BotID basata su XOR e il logging crittografato. Elenca le tecniche di persistenza del loader, i percorsi di escalation dei privilegi, i flussi di lavoro di furto di token e l’abuso di binari legittimi come PsExec ed Extexport per il caricamento laterale di DLL. Il documento descrive ulteriormente i modelli di comunicazione C2, le credenziali predefinite hVNC e le tipiche porte HTTP sfruttate (2351 e 9999).
Mitigazione
Le squadre di sicurezza dovrebbero monitorare la creazione dei file e delle voci Run nel registro, invalidare immediatamente o bloccare le credenziali hVNC predefinite e rilevare l’uso di PsExec ed Extexport per il caricamento non autorizzato di DLL. Le analisi comportamentali dovrebbero coprire l’utilizzo di syscall Union-API, l’iniezione APC tramite NtTestAlert e lo spoofing dell’ID del processo genitore. Le difese di rete possono segnalare porte HTTP insolite e tentare di decodificare gli alfabeti base64 personalizzati di DarkGate per rilevare il traffico C2.
Risposta
Una volta confermata l’attività di DarkGate, isolare l’endpoint interessato, raccogliere gli artefatti documentati, terminare i processi malevoli e pulire tutti i punti di persistenza. Ruotare le credenziali esposte e bloccare i domini C2 noti e gli intervalli IP. Una revisione forense approfondita dovrebbe identificare tutti i payload secondari e verificare che tutte le DLL introdotte tramite Extexport o loader correlati siano state eradicate.
mermaid graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef action fill:#d9ffd9 %% Nodes – Techniques step_initial_infection[“<b>Tecnica</b> – <b>T1055.001: Accesso Iniziale via Script AutoIt</b><br />Lo script AutoIt viene utilizzato per consegnare il payload malware al sistema vittima.”] class step_initial_infection technique step_dynamic_api[“<b>Tecnica</b> – <b>T1027.007: File Offuscati/Archivio – Risoluzione Dinamica delle API</b><br />Il codice malevolo risolve le API di Windows necessarie in fase di esecuzione per evadere l’analisi statica.”] class step_dynamic_api technique step_union_syscall[“<b>Tecnica</b> – <b>T1106: API Nativa</b><br />L’evasione del syscall Union API viene eseguita per nascondere il comportamento malevolo agli strumenti di monitoraggio.”] class step_union_syscall technique step_process_injection[“<b>Tecnica</b> – <b>T1055.004: Iniezione di Processo – APC</b><br />L’iniezione di Procedura Asincrona viene utilizzata per eseguire codice malevolo all’interno di un processo legittimo.”] class step_process_injection technique step_token_manipulation[“<b>Tecnica</b> – <b>T1134: Manipolazione dei Token di Accesso</b><br />L’attaccante ruba o modifica i token di accesso per ottenere privilegi elevati.”] class step_token_manipulation technique step_priv_esc_psexec[“<b>Tecnica</b> – <b>T1548.002: Abuso del Meccanismo di Elevazione dei Privilegi – PsExec</b><br />PsExec viene sfruttato per eseguire comandi come utente con privilegi più elevati su sistemi remoti.”] class step_priv_esc_psexec technique step_persistence[“<b>Tecnica</b> – <b>T1547.001: Script di Inizializzazione di Avvio o Login – LNK e Run del Registro</b><br />File di collegamento e chiavi del Registro Voci di Esecuzione vengono creati per garantire che il malware si avvii al boot.”] class step_persistence technique step_keylogging[“<b>Tecnica</b> – <b>T1056.001: Cattura Input – Keylogging</b><br />I tasti dell’utente vengono registrati per catturare credenziali e dati sensibili.”] class step_keylogging technique step_remote_vnc[“<b>Tecnica</b> – <b>T1021.005: Servizi Remoti – VNC</b><br />Un server VNC nascosto fornisce all’attaccante accesso remoto interattivo al desktop.”] class step_remote_vnc technique step_command_execution[“<b>Tecnica</b> – <b>T1059.001: Interprete di Comandi e Script – PowerShell</b> e <b>T1059.003: Interprete di Comandi e Script – Windows Command Shell</b><br />PowerShell e cmd vengono utilizzati per eseguire ulteriori comandi dell’attaccante.”] class step_command_execution technique step_c2_communication[“<b>Tecnica</b> – <b>T1102.002/T1102.003: Protocollo di Livello Applicazione – Protocolli Web (HTTP/HTTPS)</b> e <b>T1132.002: Codifica dei Dati – Codifica Standard</b><br />Il traffico C2 viene inviato su HTTP con codifica personalizzata per confondersi con il normale traffico web.”] class step_c2_communication technique step_environment_checks[“<b>Tecnica</b> – <b>T1497.001: Evasione della Virtualizzazione/Sandbox – Controlli di Sistema</b> e <b>T1112: Modifica Registro</b><br />Il malware esamina l’ambiente e modifica i valori del registro per nascondere la sua presenza.”] class step_environment_checks technique %% Nodes – Tools tool_autoit[“<b>Strumento</b> – <b>Nome</b>: AutoIt<br /><b>Descrizione</b>: Linguaggio di scripting utilizzato per creare lo script di infezione iniziale.”] class tool_autoit tool tool_psexec[“<b>Strumento</b> – <b>Nome</b>: PsExec<br /><b>Descrizione</b>: Utility di esecuzione remota che esegue processi con privilegi elevati.”] class tool_psexec tool tool_vnc[“<b>Strumento</b> – <b>Nome</b>: Server VNC Nascosto<br /><b>Descrizione</b>: Fornisce capacità di desktop remoto furtivo all’attaccante.”] class tool_vnc tool %% Connections – Attack Flow step_initial_infection u002du002d>|utilizza| tool_autoit step_initial_infection u002du002d>|porta_a| step_dynamic_api step_dynamic_api u002du002d>|porta_a| step_union_syscall step_union_syscall u002du002d>|porta_a| step_process_injection step_process_injection u002du002d>|porta_a| step_token_manipulation step_token_manipulation u002du002d>|porta_a| step_priv_esc_psexec step_priv_esc_psexec u002du002d>|utilizza| tool_psexec step_priv_esc_psexec u002du002d>|porta_a| step_persistence step_persistence u002du002d>|porta_a| step_keylogging step_keylogging u002du002d>|porta_a| step_remote_vnc step_remote_vnc u002du002d>|utilizza| tool_vnc step_remote_vnc u002du002d>|porta_a| step_command_execution step_command_execution u002du002d>|porta_a| step_c2_communication step_c2_communication u002du002d>|porta_a| step_environment_checks
Flusso di Attacco
Rilevamenti
Rilevamento dell’Iniezione APC tramite NtQueueApcThread e NtTestAlert in DarkGate [Windows Sysmon]
Visualizza
Rilevamento dell’Esecuzione di Comando e Escalation dei Privilegi del Malware DarkGate [Creazione di Processi Windows]
Visualizza
IOC (HashMd5) per rilevare: Interni di DarkGate
Visualizza
IOC (HashSha256) per rilevare: Interni di DarkGate
Visualizza
Esecuzione Sospetta di AutoHotKey e AutoIT da Posizione Insolita (tramite creazione processi)
Visualizza
Punti di Persistenza Possibili [ASEPs – Hive Software/NTUSER] (via evento_registry)
Visualizza
Esecuzione della Simulazione
Prerequisito: Il Controllo Pre-flight di Telemetria & Baseline deve essere stato superato.
-
Narrativa & Comandi dell’Attacco:
L’avversario simulato ha già infiltrato l’endpoint e cerca di stabilire un accesso RDP persistente. Per prima cosa, entità a cui fa riferimento, archiviano le credenziali concmdkey, quindi utilizzanopsexec.exeper passare lateralmente e infine avviano un payload PowerShell che lascia un piccolo programma key-logger. Ogni passaggio è progettato per generare gli eventi di creazione di processi che la regola di rilevamento monitora.- Raccolta delle Credenziali (T1552.001) – Archiviare una voce di credenziali creata ad arte che corrisponde al
modello_selection_cmdkeydella regola. - Movimento Laterale (T1219) – Eseguire
psexec.exesu un host remoto, invocando un comando che genera una nuova sessione PowerShell. - Esecuzione PowerShell (T1059.001) – Eseguire un comando PowerShell che carica uno script malevolo (simulato qui con un comando innocuo codificato in base64).
- Distribuzione Keylogger (T1056.001) – Compilare ed eseguire un minuscolo binario C che chiama
GetAsyncKeyState, generando la corrispondenza delAPIcampo.
- Raccolta delle Credenziali (T1552.001) – Archiviare una voce di credenziali creata ad arte che corrisponde al
-
Script di Test di Regressione:
# Script di Simulazione DarkGate – PowerShell # -------------------------------------------------- # 1. Voce delle credenziali Cmdkey (corrisponde al modello di rilevamento) $generic = '""' # generico vuoto come utilizzato da DarkGate $user = 'SafeMode' # nome utente che la regola si aspetta $pass = 'darkgatepassword0' # password che la regola si aspetta cmd.exe /c cmdkey /generic:$generic /user:$user /pass:$pass # 2. Movimento laterale PsExec (il binario deve esistere nel PATH o specificarne il percorso completo) $remoteHost = '10.0.0.5' $psexecPath = "$env:SystemRootSystem32psexec.exe" if (Test-Path $psexecPath) { & $psexecPath \$remoteHost -accepteula cmd /c "whoami" } else { Write-Host "PsExec non trovato in $psexecPath – saltando questo passaggio." } # 3. Esecuzione PowerShell (comando innocuo codificato in base64) $psCommand = 'Write-Output "PowerShell payload executed"' $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($psCommand)) powershell.exe -EncodedCommand $encoded # 4. Compilazione ed esecuzione dello stub del keylogger $cSource = @" #include <windows.h> int main() { // Chiamata semplice a GetAsyncKeyState per soddisfare la corrispondenza API GetAsyncKeyState(VK_RETURN); return 0; } "@ $srcPath = "$env:TEMPkeylog_stub.c" $exePath = "$env:TEMPkeylog_stub.exe" $cSource | Set-Content -Path $srcPath -Encoding ASCII # Compilare con Visual C++ (cl.exe deve essere nel PATH) cl.exe /nologo /O2 /Fe:$exePath $srcPath if (Test-Path $exePath) { & $exePath } -
Comandi di Pulizia:
# Rimuovere la voce delle credenziali cmd.exe /c cmdkey /delete:$generic # Eliminare i file temporanei Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.c" Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.exe" # Opzionale: terminare eventuali processi psexec o powershell lasciati aperti dallo script Get-Process -Name psexec, powershell -ErrorAction SilentlyContinue | Stop-Process -Force