SOC Prime Bias: Alto

29 Jun 2026 06:42 UTC

Campanha de ZIP de fotos que mira a indústria hoteleira entrega implante Node.js para acesso persistente

Author Photo
SOC Prime Team linkedin icon Seguir
Campanha de ZIP de fotos que mira a indústria hoteleira entrega implante Node.js para acesso persistente
shield icon

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

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