Il Toolkit in Evoluzione di Gamaredon: GammaPhish e GammaWorm
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
Gamaredon, un gruppo APT supportato dallo stato russo, continua a condurre operazioni di spionaggio a lungo termine contro istituzioni governative ucraine, enti militari e infrastrutture critiche. La sua catena di infezione modulare inizia con un documento di spearphishing, sfrutta un difetto di attraversamento dei percorsi di WinRAR e poi si affida a VBScript, stream di dati alternati e resolver dead-drop per diffondersi, persistere e recuperare ulteriori payload. La campagna utilizza anche servizi legittimi come Telegram, Cloudflare e Supabase per attività di comando e controllo. La rilevazione rimane difficile perché gli attaccanti abusano pesantemente della funzionalità integrata di Windows e dei metodi di esecuzione senza file.
Indagine
Sekoia TDR ha ricostruito la catena di intrusione di gennaio 2026 esaminando oltre 70 artefatti raccolti da sistemi compromessi. La loro analisi ha identificato il componente di phishing iniziale, GammaPhish, seguito dal loader VBScript GammaLoad, dal worm auto-propagante GammaWorm e dallo stealer PowerShell GammaSteel, che memorizza i moduli nel registro. I ricercatori hanno anche documentato l’uso da parte di GammaWorm di stream di dati alternati e attività pianificate per la persistenza, insieme a richieste di rete ripetute a più domini di resolver dead-drop. L’indagine ha mappato come ciascun componente supportava la catena di infezione più ampia e una presenza a lungo termine.
Mitigazione
Poiché il malware può recuperare continuamente nuovi payload attraverso resolver dead-drop, l’approccio di rimedio più sicuro è spesso una ricostruzione completa del sistema. Gli sforzi difensivi dovrebbero concentrarsi sul rilevamento della creazione sospetta di stream di dati alternativi, modifiche al registro RunOnce, attività pianificate con nomi insoliti e traffico in uscita da processi non browser verso domini di resolver noti. Bloccare l’infrastruttura di comando e controllo identificata e applicare controlli di scansione rigorosi agli allegati e-mail può anche ridurre la probabilità di compromissione iniziale.
Risposta
Se viene rilevata questa attività, isolare immediatamente l’host interessato, raccogliere prove volatili ed eseguire un’acquisizione forense completa. Rimuovere i file nascosti in stream di dati alternativi, eliminare la voce del registro RunOnce dannosa e disabilitare eventuali attività pianificate correlate. I domini di resolver noti e gli indirizzi IP dovrebbero essere bloccati al bordo della rete e i rilevamenti degli endpoint dovrebbero essere aggiornati per identificare le linee di comando osservate e i modelli di esecuzione senza file.
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ddffdd classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes attack_phishing[“<b>Azione</b> – <b>T1566.001 Spearphishing con allegato</b><br/>L’attaccante invia un file ZIP malevolo via email alle vittime.”] class attack_phishing action file_zip[“<b>File</b> – malicious.zip<br/>Contiene un collegamento .lnk e un dropper .exe compilato in Rust.”] class file_zip file action_user_exec[“<b>Azione</b> – <b>T1204.001 Esecuzione utente</b><br/>La vittima apre il .lnk o esegue il .exe, avviando la catena di esecuzione.”] class action_user_exec action file_lnk[“<b>File</b> – payload.pdf.lnk<br/>Collegamento con doppia estensione e icona Edge per sembrare legittimo.”] class file_lnk file tool_wscript[“<b>Strumento</b> – wscript.exe<br/>Esegue il payload VBScript.”] class tool_wscript tool file_vbs[“<b>File</b> – empty.vbs<br/>VBScript minimale che avvia PowerShell.”] class file_vbs file action_vbscript[“<b>Azione</b> – <b>T1059.005 Visual Basic</b><br/>VBScript eseguito tramite wscript per avviare PowerShell.”] class action_vbscript action action_powershell[“<b>Azione</b> – <b>T1059.001 PowerShell</b><br/>ExecutionPolicy bypass ed esecuzione della fase successiva decrittata.”] class action_powershell action file_dat[“<b>File</b> – 1.dat<br/>Contenitore XOR cifrato contenente RuntimeBroker_update.exe.”] class file_dat file process_runtime[“<b>Processo</b> – RuntimeBroker_update.exe<br/>Decrittato da 1.dat; carica DLL tramite DLL side-loading.”] class process_runtime process file_dll[“<b>File</b> – UnityPlayer.dll<br/>DLL malevola posizionata nella stessa directory del processo.”] class file_dll file action_dll_sideload[“<b>Azione</b> – <b>T1546.009 AppCert DLL</b><br/>Il DLL side-loading consente l’esecuzione di codice.”] class action_dll_sideload action tool_rustloader[“<b>Strumento</b> – Rust loader (RUSTCLOAK)<br/>Alloca memoria, scrive il PE AZUREVEIL decrittato ed esegue tramite Windows fibers.”] class tool_rustloader tool action_process_injection[“<b>Azione</b> – <b>T1055.002 Iniezione di processo</b><br/>Iniezione PE tramite Windows fibers.”] class action_process_injection action file_azureveil[“<b>File</b> – AZUREVEIL.exe<br/>Payload decrittato eseguito dopo l’iniezione.”] class file_azureveil file action_discovery[“<b>Azione</b> – <b>T1083 Scoperta file</b><br/>Il loader enumera i file e li sposta in %TEMP%.”] class action_discovery action action_network_discovery[“<b>Azione</b> – <b>T1016 Scoperta rete</b><br/>Raccolta informazioni MAC e IP.”] class action_network_discovery action action_c2[“<b>Azione</b> – <b>T1102 Servizio web</b><br/>Comunicazione con Azure Blob Storage via HTTPS.”] class action_c2 action action_dead_drop[“<b>Azione</b> – <b>T1102.003 Comunicazione unidirezionale</b><br/>Beacon upload e command retrieval nello stesso container.”] class action_dead_drop action action_encrypted_channel[“<b>Azione</b> – <b>T1573.001 Canale cifrato</b><br/>Comunicazione cifrata RC4 e SM4-CBC.”] class action_encrypted_channel action action_exfil[“<b>Azione</b> – <b>T1567.002 Esfiltrazione via web service</b><br/>Upload di dati cifrati su Azure Blob.”] class action_exfil action action_persistence[“<b>Azione</b> – <b>T1547.009 Persistenza tramite collegamento</b><br/>Posizionamento di un collegamento nella cartella di avvio.”] class action_persistence action %% Connections attack_phishing –>|consegna| file_zip file_zip –>|attiva| action_user_exec action_user_exec –>|apre| file_lnk file_lnk –>|esegue| tool_wscript tool_wscript –>|esegue| file_vbs file_vbs –>|avvia| action_vbscript action_vbscript –>|avvia| action_powershell action_powershell –>|decritta| file_dat file_dat –>|genera| process_runtime process_runtime –>|carica| file_dll file_dll –>|usato da| action_dll_sideload process_runtime –>|inietta| action_process_injection action_process_injection –>|usa| tool_rustloader tool_rustloader –>|carica| file_azureveil file_azureveil –>|esegue| action_discovery action_discovery –>|anche| action_network_discovery action_network_discovery –>|invia a| action_c2 action_c2 –>|usa| action_dead_drop action_dead_drop –>|dipende da| action_encrypted_channel action_encrypted_channel –>|abilita| action_exfil action_exfil –>|può attivare| action_persistence file_lnk –>|persistenza| action_persistence
Flusso di Attacco
Rilevamenti
Possibili Punti di Persistenza [ASEPs – Software/NTUSER Hive] (via registry_event)
Visualizza
LOLBAS WScript / CScript (via process_creation)
Visualizza
Comportamento di Evasione Difensive Sospetto MSHTA di LOLBAS rilevato nei Comandi Associati (via process_creation)
Visualizza
Uso Sospetto di CURL (via cmdline)
Visualizza
Binari / Script Sospetti in Posizione di Avvio Automatico (via file_event)
Visualizza
Possibile Abuso di Telegram come Canale di Comando e Controllo (via dns_query)
Visualizza
Possibile Infiltrazione / Esfiltrazione / C2 di Dati tramite Servizi / Strumenti di Terze Parti (via dns_query)
Visualizza
Possibile Tentativo di Sfruttamento CVE-2025-8088 / CVE-2025-6218 (Vulnerabilità WinRAR) (via file_event)
Visualizza
Comunicazione Sospetta di Domini Trycloudflare (via dns)
Visualizza
Possibile Abuso di Domini di Sviluppo Cloudflare (via dns)
Visualizza
IOC (HashMd5) per rilevare: matryoshka #1/3 dell’FSB – I regali di Gamaredon che continuano a disimballarsi – GammaPhish e GammaWorm
Visualizza
IOC (SourceIP) per rilevare: matryoshka #1/3 dell’FSB – I regali di Gamaredon che continuano a disimballarsi – GammaPhish e GammaWorm
Visualizza
IOC (DestinationIP) per rilevare: matryoshka #1/3 dell’FSB – I regali di Gamaredon che continuano a disimballarsi – GammaPhish e GammaWorm
Visualizza
Rilevamento dell’Uso degli ADS di GammaWorm NTFS per Persistenza e Propagazione [Evento File di Windows]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Pre-flight Check di Telemetria & Baseline deve essere superato.
Motivazione: Questa sezione descrive l’esecuzione precisa della tecnica avversaria (T1564.007) progettata per attivare la regola di rilevamento. I comandi e la narrativa producono direttamente la telemetria prevista dalla logica di rilevamento.
-
Narrativa dell’Attacco & Comandi:
Un operatore ha ottenuto il payload di GammaWorm (un PE compilato) e desidera ottenere persistenza rimanendo nascosto dalle normali liste di file. L’attaccante scrive il payload in un NTFS Alternate Data Stream chiamato GTR nella directory del profilo utente. Windows tratterà l’ADS come parte del file normale (%USERPROFILE%gamma.exe:GTR). Poiché il nome dell’ADS corrisponde alla lista hard-coded della regola, qualsiasi evento di creazione file che include “:GTR” sotto%USERPROFILE%attiverà il rilevamento.# Step 1 – Preparare un binario dannoso dummy (es. un comando base64-encoded PowerShell in un'unica riga) $malicious = [System.Convert]::FromBase64String( "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAwAAAAA4AAAAA") $payloadPath = "$env:USERPROFILEgamma.exe" # Step 2 – Scrivere il binario nel file primario (opzionale; l'ADS può esistere senza un file primario) [IO.File]::WriteAllBytes($payloadPath, $malicious) # Step 3 – Scrivere lo stesso binario (o un payload diverso) nell'ADS chiamato GTR $adsPath = "$payloadPath:GTR" Set-Content -Path $adsPath -Value $malicious -Encoding Byte -
Script di Test di Regresso: (autosufficiente; può essere eseguito su qualsiasi host Windows con PowerShell 5+)
# Simulazione di Persistenza ADS GammaWorm – attiva la regola di rilevamento try { # Creare un file host segnaposto $hostFile = "$env:USERPROFILEgamma.exe" $dummyBytes = [byte[]] (0x4D,0x5A,0x90,0x00) # Intestazione PE minima [IO.File]::WriteAllBytes($hostFile, $dummyBytes) # Scrivere il payload dannoso nell'ADS chiamato "GTR" $ads = "$hostFile:GTR" Set-Content -Path $ads -Value $dummyBytes -Encoding Byte Write-Host "ADS 'GTR' creato con successo su $ads" } catch { Write-Error "Simulazione fallita: $_" } -
Comandi di Pulizia:
# Rimuovere l'ADS e il file host segnaposto $hostFile = "$env:USERPROFILEgamma.exe" $ads = "$hostFile:GTR" # Eliminare l'ADS (richiede Sysinternals Streams.exe o PowerShell 5+) if (Test-Path $ads) { Remove-Item -Path $ads -Force Write-Host "Rimosso ADS GTR." } # Eliminare il file principale if (Test-Path $hostFile) { Remove-Item -Path $hostFile -Force Write-Host "Rimosso file host gamma.exe." }