SOC Prime Bias: Critico

27 Nov 2025 19:10

Caccia alle Minacce di Zscaler Espone e Ricostruisce la Campagna APT Water Gamayun

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Caccia alle Minacce di Zscaler Espone e Ricostruisce la Campagna APT Water Gamayun
shield icon

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

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:

    1. Scrive lo script PowerShell in testo chiaro.
    2. Lo codifica in Base64 UTF‑16LE.
    3. Inserisce un trattino basso (_) dopo ogni 4 caratteri per aumentare l’entropia.
    4. 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à.-EncodedCommand and |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."
    }