DEV#POPPER RAT Distribuído Através de Lançamentos Comprometidos do Joyfill no npm
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Duas versões beta comprometidas do @joyfill pacote npm foram encontradas contendo um implante JavaScript de importação. O implante usa transações em blockchain através de Tron, Aptos e BNB Smart Chain para resolver e baixar o trojan de acesso remoto DEV#POPPER (RAT). A campanha tem como alvo estações de trabalho de desenvolvedores e pipelines CI/CD executando código malicioso assim que o módulo afetado é importado.
Investigação
A Equipe de Pesquisa da Socket descobriu o comprometimento enquanto analisava versões beta de @joyfill/layouts and @joyfill/components. Os pesquisadores identificaram uma cadeia de entrega de payloads em várias etapas que combinava JavaScript ofuscado com mecanismos de despacho baseados em blockchain. A investigação ligou o carregador inicial à família PolinRider e confirmou que o payload final pertencia à família de malware DEV#POPPER.
Mitigação
Os desenvolvedores devem remover imediatamente as @joyfill versões beta afetadas de lockfiles, caches de pacotes, ambientes de build e artefatos de implantação. Fixar dependências em versões verificadas como @joyfill/layouts@0.1.1 or @joyfill/components@4.0.0-rc24 é recomendado. As equipes de segurança também devem bloquear as versões comprometidas através de proxies de registro e ferramentas de governança de dependências.
Resposta
Qualquer sistema que importou os pacotes afetados deve ser isolado, e todas as credenciais acessíveis ao processo Node.js comprometido devem ser rotacionadas. Os investigadores devem inspecionar aplicativos de desenvolvedores, incluindo VS Code, GitHub Desktop e Discord, para mudanças inesperadas nos módulos principais. A telemetria de endpoint e CI/CD também deve ser revisada para processos Node.js destacados, endereços C2 conhecidos e tráfego suspeito de RPC em blockchain.
Fluxo de Ataque
Detecções
Possível Tentativa de Abuso de Publicnode Ethereum Como Canal C2 (via dns_query)
Ver
Possível Comunicação de Domínio de Consulta de IP Tentada (via dns)
Ver
Possível Captura de Tela no Linux (via linha de comando)
Ver
Arquivo Oculto Foi Criado no Host Linux (via file_event)
Ver
IOCs (HashSha256) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
Ver
IOCs (SourceIP) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
Ver
IOCs (DestinationIP) para detectar: Duas Versões Beta do npm Joyfill Comprometidas para Entregar DEV#POPPER Trojan de Acesso Remoto
Ver
Detecção de Indicadores de Malware DEV#POPPER [Conexão de Rede do Windows]
Ver
Detecção de Pacotes npm Joyfill Comprometidos Entregando Trojan de Acesso Remoto [Evento de Arquivo no Linux]
Ver
Detecção de Injeção de Módulo Node.js e Execução de Processo Destacado [Criação de Processo no Linux]
Ver
Execução de Simulação
Pré-requisito: O Check de Pré-voo de Telemetria & Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para disparar 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 erros de diagnóstico.
-
Narrativa do Ataque & Comandos: O adversário injetou com sucesso código malicioso em uma dependência amplamente usada do npm (Comprometimento da Cadeia de Suprimentos). Quando um desenvolvedor executa
npm installou inicia um projeto, o script malicioso é executado. O script primeiro tenta ocultar sua intenção ao atribuir afunção require a uma variável global (global.r = requireglobal.r = require), permitindo que ele carregue módulos em qualquer lugar do aplicativo sem chamarfunção require a uma variável global (diretamente (ofuscação). Finalmente, ele usachild_process.spawnpara lançar um processo de shell destacado que se conecta de volta a um servidor de Comando & Controle (C2), tentando evitar a detecção ao desacoplar o processo malicioso do processo pai Node.js. -
Script de Teste de Regressão:
#!/bin/bash # Script de simulação para acionar a regra de detecção de injeção de Node.js. # Este script cria um arquivo JS malicioso temporário e o executa via Node.js. MALICIOUS_FILE="malicious_pkg.js" echo "[+] Criando script Node.js malicioso..." cat << 'EOF' > $MALICIOUS_FILE // Simular injeção global de módulo (T1027) global.r = require; // Simular execução de processo destacado via child_process.spawn (T1059.006) const cp = require('child_process'); cp.spawn('bash', ['-c', 'sleep 30 &'], { detached: true, stdio: 'ignore' }); console.log("[!] Payload malicioso executado."); EOF echo "[+] Executando script malicioso via Node.js..." node $MALICIOUS_FILE echo "[+] Simulação completa. Verifique SIEM para Alerta: Detecção de Injeção de Módulo Node.js e Execução de Processo Destacado." -
Comandos de Limpeza:
# Remover o arquivo malicioso simulado rm -f malicious_pkg.js # Matar quaisquer processos de sono órfãos gerados pela simulação pkill -f "sleep 30"