SOC Prime Bias: Crítico

27 Nov 2025 19:10

Caça a Ameaças da Zscaler Expõe e Reconstrói a Campanha APT Water Gamayun

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Caça a Ameaças da Zscaler Expõe e Reconstrói a Campanha APT Water Gamayun
shield icon

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

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:

    1. Escreve o script PowerShell em texto claro.
    2. Codifica em UTF‑16LE Base64.
    3. Insere um sublinhado (_) a cada 4 caracteres para aumentar a entropia.
    4. 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 (-EncodedCommand and |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."
    }