Caça a Ameaças da Zscaler Expõe e Reconstrói a Campanha APT Water Gamayun
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O relatório aborda uma intrusão em várias etapas atribuída ao grupo APT Water Gamayun, que explora uma vulnerabilidade zero-day do MMC (CVE-2025-26633) para entregar cargas úteis PowerShell em um arquivo RAR de dupla extensão.
Investigação
A Zscaler reconstruiu a cadeia de ataque desde um redirecionamento de busca do Bing para um site comprometido, o download de um arquivo .pdf.rar, exploração do MSC EvilTwin, scripts PowerShell em etapas e execução do backdoor ItunesC.exe.
Mitigação
As orientações incluem monitoramento de arquivos de dupla extensão, inspeção de redirecionamentos, detecção de comandos PowerShell codificados e bloqueio do IP e domínios maliciosos.
Resposta
Ao detectar, alertar sobre o mmc.exe iniciando o PowerShell com -EncodedCommand, colocar o arquivo em quarentena, bloquear conexões de saída para 103.246.147.17 e ativar procedimentos de resposta a incidentes.
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>Ação</b> – <b>T1659 Injeção de Conteúdo</b><br/><b>Descrição</b>: Compromete site legítimo para injetar redirecionamentos maliciosos”] class node_initial_access action node_malicious_domain[“<b>Arquivo</b> – <b>Nome</b>: Domínio semelhante malicioso<br/><b>Propósito</b>: Serve arquivo de dupla extensão”] class node_malicious_domain file node_pdf_rar[“<b>Arquivo</b> – <b>Nome</b>: brochure.pdf.rar<br/><b>Tipo</b>: Arquivo de dupla extensão disfarçado como PDF”] class node_pdf_rar file node_user_execution[“<b>Ação</b> – <b>T1204.001 Link Malicioso</b><br/><b>Descrição</b>: Vítima clica no link e baixa o arquivo”] class node_user_execution action node_exploit_client[“<b>Ação</b> – <b>T1203 Exploração para Execução do Cliente</b><br/><b>Descrição</b>: Arquivo faz drop de .msc que sequestra mmc.exe via MSC EvilTwin”] class node_exploit_client action node_cve[“<b>Ferramenta</b> – <b>Nome</b>: exploit MSC EvilTwin (CVE‑2025‑26633)<br/><b>Alvo</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>Ação</b> – <b>T1059.001 PowerShell</b><br/><b>Descrição</b>: Carga útil codificada Base64 UTF‑16LE”] class node_ps_command action node_obfuscation[“<b>Ação</b> – <b>T1027 Ofuscação</b> e <b>T1140 Decodificação</b><br/><b>Descrição</b>: Comando PowerShell duplamente codificado”] class node_obfuscation action node_unrar[“<b>Ferramenta</b> – <b>Nome</b>: UnRAR.exe”] class node_unrar tool node_rar_payload[“<b>Arquivo</b> – <b>Nome</b>: Cargas RAR protegidas por senha”] class node_rar_payload file node_hidden_window[“<b>Ação</b> – <b>T1564.003 Janela Oculta</b><br/><b>Descrição</b>: Classe .NET WinHpXN chama ShowWindow para ocultar o console”] class node_hidden_window action node_itunesc[“<b>Malware</b> – <b>Nome</b>: ItunesC.exe<br/><b>Função</b>: Carregador e backdoor”] class node_itunesc malware node_c2[“<b>C2</b> – <b>IP</b>: 103.246.147.17<br/><b>Protocolo</b>: HTTPS”] class node_c2 c2 %% Connections node_initial_access u002du002d>|redireciona_para| node_malicious_domain node_malicious_domain u002du002d>|serve| node_pdf_rar node_pdf_rar u002du002d>|baixado_por| node_user_execution node_user_execution u002du002d>|aciona| node_exploit_client node_exploit_client u002du002d>|faz_drop_de| node_cve node_cve u002du002d>|sequestra| node_mmc node_mmc u002du002d>|carrega| node_powershell node_powershell u002du002d>|executa| node_ps_command node_ps_command u002du002d>|usa| node_obfuscation node_ps_command u002du002d>|baixa| node_unrar node_unrar u002du002d>|extrai| node_rar_payload node_rar_payload u002du002d>|leva_para| node_hidden_window node_hidden_window u002du002d>|inicia| node_itunesc node_itunesc u002du002d>|se comunica com| node_c2
Fluxo de Ataque
Detecções
Execução Maliciosa de MMC e PowerShell pelo Water Gamayun APT [Criação de Processo do Windows]
Ver
Detecção de Padrões de Ofuscação PowerShell do Water Gamayun [Windows Powershell]
Ver
IOCs (DestinationIP) para detectar: Zscaler Threat Hunting Descobre e Reconstrói um Ataque Sofisticado do Grupo APT Water Gamayun
Ver
IOCs (SourceIP) para detectar: Zscaler Threat Hunting Descobre e Reconstrói um Ataque Sofisticado do Grupo APT Water Gamayun
Ver
IOCs (HashMd5) para detectar: Zscaler Threat Hunting Descobre e Reconstrói um Ataque Sofisticado do Grupo APT Water Gamayun
Ver
Execução de Simulação
Pré-requisito: O Cheque de Pré-vôo de Telemetria e Linha de Base deve ter sido aprovado.
Fundamento: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a um diagnóstico incorreto.
-
Narrativa do Ataque & Comandos:
O atacante, aproveitando a metodologia do Water Gamayun, prepara uma carga útil maliciosa PowerShell que cria um novo usuário admin local e o adiciona ao grupo Administradores. Para ocultar a carga útil, o atacante:- Escreve o script PowerShell em texto claro.
- Codifica em UTF‑16LE Base64.
- Insere um sublinhado (
_) a cada 4 caracteres para aumentar a entropia. - Encadeia uma
|Replace('_','')operação para que o runtime PowerShell remova os sublinhados antes de decodificar, correspondendo à assinatura de detecção.
O comando de execução final é:
powershell.exe -EncodedCommand <Base64StringWithUnderscores> | Replace('_','')Esta linha de comando exata satisfaz as duas condições da regra Sigma (
-EncodedCommandand|Replace('_','')), gerando entradas Sysmon EventID 1 e Security EventID 4688 que a regra sinalizará. -
Script de Teste de Regressão:
O script abaixo automatiza a criação da carga útil ofuscada e a executa. Pode ser executado em qualquer host Windows com PowerShell 5.1+.# Simulação de ofuscação PowerShell estilo Water Gamayun # Passo 1: Defina a carga útil maliciosa PowerShell (adiciona um usuário admin local) $payload = @' $user = "tempAdmin" $pwd = ConvertTo-SecureString "P@ssw0rd!" -AsPlainText -Force New-LocalUser -Name $user -Password $pwd -FullName "Temp Admin" -Description "Conta admin de teste" Add-LocalGroupMember -Group "Administradores" -Member $user '@ # Passo 2: Codificar em UTF-16LE e depois Base64 $bytes = [System.Text.Encoding]::Unicode.GetBytes($payload) $b64 = [Convert]::ToBase64String($bytes) # Passo 3: Injetar sublinhados a cada 8 caracteres (simulando o padrão do grupo) $b64Underscored = ($b64 -split '(.{8})' | Where-Object {$_} | ForEach-Object { $_ + '_' }) -join '' # Passo 4: Executar com o pipeline necessário Replace('_','') powershell.exe -EncodedCommand $b64Underscored | Replace('_','') -
Comandos de Limpeza:
Os seguintes comandos removem o usuário de teste e restauram o ambiente.# Limpeza: Remover a conta admin temporária criada pelo teste $user = "tempAdmin" if (Get-LocalUser -Name $user -ErrorAction SilentlyContinue) { Remove-LocalUser -Name $user Write-Host "Usuário de teste $user deletado." } else { Write-Host "Usuário de teste $user não existe." }