ClickFix ao MaaS: Dentro de um RAT Modular para Windows e Seu Painel de Controle
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O Netskope Threat Labs observou uma campanha ClickFix entregando um RAT personalizado para Windows construído em Node.js via instaladores MSI maliciosos. A carga útil mantém módulos-chave na memória e usa streaming gRPC sobre Tor para C2. Um erro de OPSEC expôs o protocolo do painel de administração, apontando para um modelo de malware-como-serviço com rastreamento de carteira. A persistência é configurada via um valor de execução HKCU em nível de usuário.
Investigação
Os pesquisadores capturaram o MSI, decodificaram o bootstrap em PowerShell e rastrearam o carregamento dinâmico de módulos Node.js. Eles extraíram e descriptografaram o blob de configuração para recuperar um endereço C2 .onion. Um arquivo admin.proto vazado revelou funções MaaS como gerenciamento multi-operador e monitoramento de carteira, e os analistas notaram um watchdog auto-recuperador além do uso de Tor para tráfego anonimizado.
Mitigação
Bloqueie a execução de MSI não assinados de fontes não confiáveis e monitore HKCU…Run para novas entradas suspeitas. Detecte PowerShell que faça download de cargas MSI de domínios como cloud-verificate.com. Alerta sobre conhost.exe ou node.exe lançados com argumentos ocultos e sobre tor.exe surgindo em endpoints que não o exigem.
Resposta
Isole hosts afetados, colete a memória para análise de módulos na memória e remova a persistência do HKCU Run. Revise %LOCALAPPDATA%LogicOptimizer para artefatos de preparação e qualquer atividade agendada de tor.exe, depois bloqueie o endpoint onion e domínios/IPs relacionados. Busque em toda a empresa pelos mesmos artefatos de instalador e cadeias de processos.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[“<b>Ação</b> – <b>T1204.001 Execução pelo utilizador: Link malicioso</b><br/>Utilizador clica num link malicioso que inicia PowerShell”] class action_user_exec action process_powershell_cmd[“<b>Processo</b> – <b>T1059.001 PowerShell</b><br/>Comando Base64 descarrega instalador MSI”] class process_powershell_cmd process action_msi_install[“<b>Ação</b> – <b>T1546.016 Pacotes de instalação</b><br/>Instalação MSI silenciosa de Node.js”] class action_msi_install action tool_msiexec[“<b>Ferramenta</b> – <b>Nome</b>: msiexec.exe<br/><b>Técnica</b>: T1218.007 Execução por proxy de binário”] class tool_msiexec tool action_persistence[“<b>Ação</b> – <b>T1037.001 Chave Run</b><br/>Escreve no Run para persistência”] class action_persistence action tool_tor[“<b>Ferramenta</b> – <b>Nome</b>: tor.exe<br/><b>Técnica</b>: T1090.002 Proxy externo”] class tool_tor tool action_tor_proxy[“<b>Ação</b> – <b>T1090.003 Proxy multi-hop</b><br/>Tráfego C2 via Tor SOCKS5”] class action_tor_proxy action action_grpc_comm[“<b>Ação</b> – <b>T1102.002 Serviço web: gRPC</b><br/>Comunicação com C2 .onion”] class action_grpc_comm action action_encrypted_channel[“<b>Ação</b> – <b>T1573 Canal encriptado</b><br/>AES-256-CBC ou XOR”] class action_encrypted_channel action action_collection[“<b>Ação</b> – <b>T1592.* Informação do host</b><br/>Recolha de hardware e rede”] class action_collection action action_archive[“<b>Ação</b> – <b>T1560.003 Arquivo personalizado</b><br/>Encriptação multicamada”] class action_archive action action_config_repo[“<b>Ação</b> – <b>T1602 Configuração</b><br/>Extrai C2 onion e ID”] class action_config_repo action action_dynamic_resolution[“<b>Ação</b> – <b>T1568 Resolução dinâmica</b><br/>Resolve .onion em runtime”] class action_dynamic_resolution action action_ip_discovery[“<b>Ação</b> – <b>T1016.001 Descoberta de IP</b><br/>Obtém IP externo”] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery
Fluxo de Ataque
Detecções
Executável NodeJS a partir de Localização Incomum (via linha de comando)
Visualizar
Pontos Possíveis de Persistência [ASEPs – Software/NTUSER Hive] (via evento de registro)
Visualizar
Download ou Upload via PowerShell (via linha de comando)
Visualizar
LOLBAS Conhost (via linha de comando)
Visualizar
MsiExec Iniciado por Processo de Shell (via linha de comando)
Visualizar
Tentativas de Comunicação com Domínios de Verificação de IP Possíveis (via DNS)
Visualizar
Possíveis Ferramentas de Rede Tor (via linha de comando)
Visualizar
Detecção de Execução do Conhost para Iniciar Nó para Script Bootstrap [Criação de Processo Windows]
Visualizar
Execução de Comando PowerShell Malicioso para Download e Instalação de MSI [PowerShell Windows]
Visualizar
Execução de Simulação
Pré-requisito: A Verificação Prévia de Telemetria & Base de Referência deve ter sido aprovada.
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 visar a geração da telemetria exata esperada pela lógica de detecção.
-
Narrativa & Comandos do Ataque:
- Objetivo: O atacante deseja iniciar uma carga maliciosa Node.js (
bootstrap.js) sem levantar suspeitas. - Método: Use um binário assinado do Windows (
conhost.exe) como um proxy para lançarnode.exeem modo sem cabeça, passando o script bootstrap como um argumento. - Etapas:
- Soltar um malicioso
bootstrap.jsem um diretório gravável (por exemplo,%TEMP%). - Invoque
conhost.execom a string de argumento exata que a regra está vigiando. - O comando é executado sob o contexto do usuário atual, imitando uma reprodução legítima de processo.
- Soltar um malicioso
# 1. Soltar bootstrap.js malicioso (conteúdo inofensivo simulado para teste) $bootstrapPath = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrapPath -Value "// espaço reservado para bootstrap malicioso" # 2. Execute conhost.exe para iniciar node.exe com as flags requeridas $conhost = "$env:windirsystem32conhost.exe" $args = '--headless "node.exe" "bootstrap.js"' Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP - Objetivo: O atacante deseja iniciar uma carga maliciosa Node.js (
-
Script de Teste de Regressão:
# ------------------------------------------------- # Teste de Regressão: Trigar Conhost → Bootstrap de Nó # ------------------------------------------------- # Certifique-se de que o Sysmon está em execução e registrando eventos ProcessCreate. # Solte um script bootstrap fictício $bootstrap = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrap -Value "// conteúdo de teste do bootstrap" # Defina a linha de comando exata que a regra de detecção procura $conhostPath = "$env:windirsystem32conhost.exe" $cmdLine = '--headless "node.exe" "bootstrap.js"' # Inicie conhost com os argumentos que parecem maliciosos Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP Write-Host "Simulação concluída – verifique o SIEM para alerta." -
Comandos de Limpeza:
# Pare todos os processos de node ou conhost remanescentes iniciados pelo teste Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force # Remova o script temporário bootstrap Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue Write-Host "Limpeza concluída."