Campanha de ZIP de fotos que mira a indústria hoteleira entrega implante Node.js para acesso persistente
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Uma campanha de intrusão ativa e em múltiplas etapas está direcionada ao setor de hospitalidade por meio de arquivos ZIP temáticos de fotos que contêm arquivos LNK maliciosos. A cadeia de infecção utiliza decodificadores PowerShell ofuscados, compilação de DLL .NET em tempo real e um implante baseado em Node.js para persistência e comunicação de comando e controle. O ator da ameaça também faz a lavagem de autenticação através de serviços legítimos como Calendly e Google para reduzir a chance de detecção baseada em e-mail.
Investigação
A Microsoft identificou duas ondas separadas da campanha e observou uma progressão de carregadores simples do PowerShell para etapas mais complexas de compilação .NET. A investigação também revelou uma estratégia de dupla persistência que dependia de ambos HKCURun and HKCURunOnce chaves de registro. Os pesquisadores ainda notaram o uso de domínios com front-end na Cloudflare e portas de comando e controle não padrão para obscurecer a infraestrutura de suporte.
Mitigação
As organizações devem priorizar detecções em camadas para execução de atalhos, compilação inesperada do .NET e processos Node.js iniciados a partir de diretórios graváveis pelo usuário. Habilitar regras de Redução de Superfície de Ataque e monitorar alterações não autorizadas de exclusão do Microsoft Defender é fortemente recomendado. Bloquear padrões de domínio suspeitos e monitorar tráfego de saída em portas incomuns também pode ajudar a reduzir a exposição. domain patterns and watching for outbound traffic over unusual ports can also help reduce exposure.
Resposta
Se esta atividade for detectada, a remediação deve incluir a remoção de ambos, ProgramData RunOnce entrada e a chave Node.js Run para impedir que o implante se restaure. As equipes de segurança também devem excluir o runtime do Node.js e cargas .js úteis relacionadas do AppDataLocalNodejs diretório. A limpeza completa requer o endereçamento tanto da carga ativa quanto dos mecanismos de persistência deixados para trás.
"fluxograma TD step_phishing["T1566.002 u2013 Phishing: Spearphishing Link: Usa lavagem de autenticação via redirecionamentos do Calendly e do Google para entregar um arquivo ZIP temático de fotos."] step_user_execution["T1204.002 u2013 Execução pelo Usuário: Arquivo Malicioso: A vítima abre um atalho de imagem falso (.lnk) que aciona um downloader PowerShell ofuscado."] rules_for_user_execution("<b>Nome da Regra</b>: Possível Arquivo LNK Malicioso com Extensão Dupla<br/><b>ID da Regra</b>: 13f9a3c1-b2fe-4268-8052-bf6fe353e952") step_obfuscation["T1027 u2013 Arquivos ou Informações Ofuscados: PowerShell usa decodificação aritmética (XOR, módulo) para recuperar estágios subsequentes."] rules_for_obfuscation("<b>Nome da Regra</b>: Indicadores Possíveis de Ofuscação do PowerShell<br/><b>ID da Regra</b>: a11f179d-8248-4d34-905c-e61735a72688") step_compilation["T1027.004 u2013 Compilação Após Entrega: PowerShell aciona compilação .NET usando csc.exe e cvtres.exe para criar DLLs."] step_implant_execution["Execução de Implante Baseado em Node.js: Implantação de cargas maliciosas .js via node.exe."] rules_for_implant_execution("<b>Nome da Regra</b>: Possível Node Gerado Por Processo Abusado Conhecido<br/><b>ID da Regra</b>: b36fbdaf-1bab-45c2-a15b-f0c25c696d72") step_persistence["T1547.014 u2013 Execução de Inicialização ou Logon Automático: Configuração Ativa: Modo duplo usando chaves de registro 'Run' e 'RunOnce' para o componente Node.js e executável ProgramData."] rules_for_persistence("<b>Nome da Regra</b>: Possíveis Pontos de Persistência [ASEPs – Software/Hive NTUSER]<br/><b>ID da Regra</b>: 4cb3ac97-0fab-4447-9054-6f2d6ca102a1") step_command_and_control["TA0011 u2013 Comando e Controle: Beacons para infraestrutura IP fixada em portas não padrão (8443, 56001) e automação de navegador sem cabeça."] rules_for_c2("<b>Nome da Regra</b>: Comando e Controle Suspeito por Pedido DNS de Domínio de Nível Superior (TLD) Incomum (via dns)<br/><b>ID da Regra</b>: 63f3e8bc-0241-4f00-b9db-d4c309e61036") rules_for_c2_network("<b>Nome da Regra</b>: Execuções de Runtimes de Scripting Iniciando Conexões TLS de Saída (via conexão_de_rede)<br/><b>ID da Regra</b>: 1ac66e9b-fd10-4c8c-af41-8c3d901ba03d") step_phishing –>|leva_a| step_user_execution step_user_execution –>|aciona| step_obfuscation step_user_execution -.->|detected_by| rules_for_user_execution step_obfuscation –>|leva_a| step_compilation step_obfuscation -.->|detected_by| rules_for_obfuscation step_compilation –>|habilita| step_implant_execution step_implant_execution –>|estabelece| step_persistence step_implant_execution -.->|detected_by| rules_for_implant_execution step_persistence –>|leva_a| step_command_and_control step_persistence -.->|detected_by| rules_for_persistence step_command_and_control -.->|detected_by| rules_for_c2 step_command_and_control -.->|detected_by| rules_for_c2_network "
Fluxo do Ataque
Detecções
Comando e Controle Suspeito por Pedido DNS de Domínio de Nível Superior (TLD) Incomum (via dns)
Ver
Possíveis Pontos de Persistência [ASEPs – Software/NTUSER Hive] (via evento_de_registro)
Ver
Possível Arquivo LNK Malicioso com Extensão Dupla (via linha_cmd)
Ver
Possível Node Gerado Por Processo Abusado Conhecido (via linha_cmd)
Ver
Alterações Suspeitas nas Preferências do Windows Defender (via powershell)
Ver
Indicadores Possíveis de Ofuscação do PowerShell (via powershell)
Ver
Execuções de Runtimes de Scripting Iniciando Conexões TLS de Saída (via conexão_de_rede)
Ver
Detecção de Portas C2 não Padrão e Tráfego de Domínio .cfd [Conexão de Rede do Windows]
Ver
Detectar Decodificador PowerShell BigInt Ofuscado com Evasão do Defender [Windows Powershell]
Ver
Execução da Simulação
Pré-requisito: O Check de Pré-voo de Telemetria e Linha de Base deve ter sido aprovado.
Justificativa: 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: Um adversário obteve acesso inicial por meio de um link de spearphishing (T1566.002). Para estabelecer persistência e Comando e Controle (C2), o adversário implanta um implante leve baseado em PowerShell. Para evitar a detecção por regras de firewall básicas que monitoram apenas portas padrão, o atacante decide usar uma porta não padrão (8443) para o pulso primário. Além disso, o implante é configurado para realizar um “telefone para casa” secundário para um domínio de backup hospedado em um
padrões de domínio suspeitos e monitorar tráfego de saída em portas incomuns também pode ajudar a reduzir a exposição.TLD para garantir resiliência se o IP principal for bloqueado. Isso imita o comportamento da campanha Photo-Zip mencionada nas referências da regra. -
Script de Teste de Regressão:
# Script de Simulação: Emulação de C2 para Validação de Regra # Este script simula conexões de rede para portas não padrão e domínios .cfd. Write-Host "[+] Iniciando Simulação de C2..." -ForegroundColor Cyan # 1. Simular conexão para uma porta C2 não padrão (8443) # Usamos um IP público que escuta na 8443 (ou um ouvinte local, se disponível) Write-Host "[+] Tentando conexão para porta não padrão 8443..." -ForegroundColor Yellow try { $tcpClient = New-Object System.Net.Sockets.TcpClient $tcpClient.Connect("8.8.8.8", 8443) # Usando DNS do Google como um alvo fictício para teste de porta } catch { Write-Host "[!] Conexão na porta 8443 falhou (Esperado se a porta estiver fechada), mas a telemetria ainda deve ser gerada." -ForegroundColor Gray } finally { $tcpClient.Close() } # 2. Simular conexão para um domínio .cfd # Tentamos resolver e conectar a um domínio .cfd fictício Write-Host "[+] Tentando conexão para domínio .cfd..." -ForegroundColor Yellow $cfdDomain = "malicious-c2-test.cfd" try { # Usando Resolve-DnsName para acionar telemetria de DNS, seguido por uma solicitação web Resolve-DnsName -Name $cfdDomain -ErrorAction SilentlyContinue Invoke-WebRequest -Uri "http://$cfdDomain" -TimeoutSec 2 -ErrorAction SilentlyContinue } catch { Write-Host "[!] Conexão de domínio .cfd falhou (Esperado para domínio fictício), mas a telemetria deve ser gerada." -ForegroundColor Gray } Write-Host "[+] Simulação Concluída." -ForegroundColor Cyan -
Comandos de Limpeza:
# Limpeza: Nenhum artefato persistente foi criado por este script específico. # Se um ouvinte foi iniciado, ele deve ser parado. Write-Host "[+] Nenhuma limpeza necessária para esta simulação sem estado." -ForegroundColor Green