SOC Prime Bias: High

21 Sep 2026 20:13 UTC

ChainScript: Rastreando um RAT Node.js Através da Blockchain

Author Photo
SOC Prime Team linkedin icon Seguir
ChainScript: Rastreando um RAT Node.js Através da Blockchain
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

ChainScript é um trojan de acesso remoto (RAT) recém-descoberto baseado em Node.js que utiliza infraestrutura de blockchain descentralizada para descoberta de comando e controle (C2). O malware usa uma técnica EtherHiding, interrogando um contrato inteligente Polygon para resolver dinamicamente endpoints WebSocket ativos e girar rapidamente a infraestrutura. Suas capacidades incluem shells interativos, manipulação de arquivos e reconhecimento de carteiras de criptomoeda.

Investigação

O Blackpoint’s Adversary Pursuit Group (APG) identificou o ChainScript enquanto investigava atividades do ClickFix envolvendo pacotes maliciosos do Windows Installer. Os analistas observaram componentes de malware distribuídos em múltiplos diretórios temáticos da Microsoft e um contrato inteligente Polygon usado como resolvedor. A investigação mostrou que o ator da ameaça automatiza a implantação de contratos de resolução juntamente com as compilações de malware para permitir transições de C2 suaves.

Mitigação

As organizações devem reduzir os caminhos de execução do ClickFix desativando o diálogo Executar do Windows onde não é necessário e restringindo a instalação de MSI a partir de diretórios graváveis pelo usuário. As equipes de segurança devem monitorar relações de processos incomuns, particularmente msiexec.exe gerando wscript.exe ou PowerShell. Os usuários também devem ser treinados para reconhecer prompts de engenharia social que solicitam execução manual de comandos através do Win+R.

Resposta

Se atividade do ChainScript for detectada, o sistema afetado deve ser isolado imediatamente para evitar movimento lateral ou exfiltração de dados através do shell interativo. Os respondedores devem realizar uma revisão forense completa para cargas secundárias e persistência não autorizada em tarefas agendadas ou chaves de execução do registro. Credenciais potencialmente expostas também devem ser rotacionadas, especialmente aquelas associadas a extensões de navegador ou carteiras de criptomoeda locais.

Fluxo de Ataque

Ainda estamos atualizando esta parte.

Detecções

Possíveis Pontos de Persistência [ASEPs – Hive Software/NTUSER] (via registry_event)

Equipe SOC Prime
21 Set 2026

A Possibilidade de Execução Através de Linhas de Comando PowerShell Ocultas (via cmdline)

Equipe SOC Prime
21 Set 2026

Binário NodeJS Executando de Localização Incomum (via cmdline)

Equipe SOC Prime
21 Set 2026

Processos Filhos NodeJS Suspeitos [Windows] (via cmdline)

Equipe SOC Prime
21 Set 2026

LOLBAS WScript / CScript (via process_creation)

Equipe SOC Prime
21 Set 2026

Possível Criação de Tarefa Agendada (via powershell)

Equipe SOC Prime
21 Set 2026

Tarefa Agendada Suspeita (via audit)

Equipe SOC Prime
21 Set 2026

IOCs (HashSha256) para detectar: ChainScript: Rastreando um RAT de Node.js Através do Blockchain

Regras de IA do SOC Prime
21 Set 2026

Detectar Descoberta de Infraestrutura C2 Baseada em Blockchain do ChainScript [Conexão de Rede do Windows]

Regras de IA do SOC Prime
21 Set 2026

Detecção da Execução do ChainScript RAT via PowerShell [Windows PowerShell]

Regras de IA do SOC Prime
21 Set 2026

Detecção da Execução do ChainScript Node.js RAT via Msiexec e Wscript [Criação de Processos no Windows]

Regras de IA do SOC Prime
21 Set 2026

Execução de Simulação

  • Narrativa de Ataque e Comandos: O atacante implanta uma carga útil baseada em Node.js projetada para imitar o ChainScript. O objetivo é descobrir a infraestrutura C2 consultando um endpoint público Ethereum RPC. O script inicia uma conexão WebSocket e envia um JSON-RPC eth_call solicitação. Criticamente, a solicitação inclui o seletor de função específico 0x4ab7874e dentro da carga útil. Esta ação destina-se a simular a fase de “descoberta” do ciclo de vida do malware, onde o endereço C2 é extraído de um contrato inteligente no blockchain.

  • Script de Teste de Regressão:

    # Script de simulação para imitar a descoberta de blockchain do ChainScript via WebSocket
    # Isso requer um ambiente Node.js ou uma ferramenta capaz de enviar cargas úteis específicas de WebSocket JSON-RPC.
    # Para essa simulação, usamos um script PowerShell para enviar a carga útil bruta.
    
    $wsUri = "wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY" # Usando um endpoint RPC de espaço reservado
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $ct = New-Object System.Threading.CancellationToken
    
    try {
        Write-Host "[+] Conectando ao WebSocket RPC..."
        $connectTask = $ws.ConnectAsync($wsUri, $ct)
        $connectTask.Wait()
        Write-Host "[+] Conexão estabelecida."
    
        # A carga útil específica contendo o seletor de função ChainScript
        $payload = '{
            "jsonrpc":"2.0",
            "method":"eth_call",
            "params":[{
                "to":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
                "data":"0x4ab7874e0000000000000000000000000000000000000000000000000000000000000000"
            }],
            "id":1
        }'
        $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
        $segment = New-Object ArraySegment[Byte] -ArgumentList @(,$bytes)
    
        Write-Host "[+] Enviando carga útil de descoberta do ChainScript (eth_call + 0x4ab7874e)..."
        $sendTask = $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $ct)
        $sendTask.Wait()
        Write-Host "[+] Carga útil enviada."
    
    } catch {
        Write-Error "[-] Falha na simulação: $($_.Exception.Message)"
    } finally {
        if ($ws.State -eq 'Open') {
            $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Closing", $ct).Wait()
        }
        $ws.Dispose()
        Write-Host "[+] Limpeza completa."
    }
  • Comandos de Limpeza:

    # O script não faz alterações persistentes. 
    # Certifique-se de que quaisquer processos temporários do Node.js ou arquivos de ouvintes locais sejam removidos.
    Stop-Process -Name "node" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPchainscript_sim.tmp" -ErrorAction SilentlyContinue