SOC Prime Bias: High

21 Sep 2026 20:13 UTC

ChainScript: Rastreando un RAT de Node.js a través de la Blockchain

Author Photo
SOC Prime Team linkedin icon Seguir
ChainScript: Rastreando un RAT de Node.js a través de la Blockchain
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

ChainScript es un troyano de acceso remoto (RAT) basado en Node.js recién descubierto que utiliza infraestructura de blockchain descentralizada para la detección de comando y control (C2). El malware utiliza una técnica llamada EtherHiding, consultando un contrato inteligente de Polygon para resolver dinámicamente los puntos finales de WebSocket activos y rotar rápidamente la infraestructura. Sus capacidades incluyen shells interactivos, manipulación de archivos y reconocimiento de billeteras de criptomonedas.

Investigación

El Grupo de Persecución de Adversarios (APG) de Blackpoint identificó ChainScript mientras investigaba la actividad de ClickFix que involucraba paquetes maliciosos de Windows Installer. Los analistas observaron componentes de malware ubicados en múltiples directorios temáticos de Microsoft y un contrato inteligente de Polygon utilizado como un resolutor. La investigación mostró que el actor de la amenaza automatiza el despliegue de contratos resolutores junto con construcciones de malware para permitir transiciones de C2 sin problemas.

Mitigación

Las organizaciones deben reducir las rutas de ejecución de ClickFix deshabilitando el cuadro de diálogo Ejecutar de Windows donde no sea necesario y restringiendo la instalación de MSI desde directorios escribibles por el usuario. Los equipos de seguridad deben monitorear relaciones de procesos inusuales, particularmente msiexec.exe generando wscript.exe o PowerShell. También se debe entrenar a los usuarios para reconocer sugerencias de ingeniería social que soliciten la ejecución de comandos manualmente a través de Win+R.

Respuesta

Si se detecta actividad de ChainScript, el sistema afectado debe ser aislado inmediatamente para evitar el movimiento lateral o la exfiltración de datos a través del shell interactivo. Los respondedores deben realizar una revisión forense completa en busca de cargas útiles secundarias y persistencias no autorizadas en tareas programadas o claves Run del registro. También deben rotarse las credenciales potencialmente expuestas, especialmente aquellas asociadas con extensiones del navegador o billeteras de criptomonedas locales.

Flujo de Ataque

Todavía estamos actualizando esta parte.

Detecciones

Puntos de Persistencia Posibles [ASEPs – Software/NTUSER Hive] (vía registry_event)

Equipo SOC Prime
21 Sep 2026

La Posibilidad de Ejecución a través de Líneas de Comando PowerShell Ocultas (vía cmdline)

Equipo SOC Prime
21 Sep 2026

Ejecución de Binario NodeJS desde Ubicación No Común (vía cmdline)

Equipo SOC Prime
21 Sep 2026

Procesos Hijos de NodeJS Sospechosos [Windows] (vía cmdline)

Equipo SOC Prime
21 Sep 2026

WScript / CScript LOLBAS (vía process_creation)

Equipo SOC Prime
21 Sep 2026

Creación de Tarea Programada Posible (vía PowerShell)

Equipo SOC Prime
21 Sep 2026

Tarea Programada Sospechosa (vía audit)

Equipo SOC Prime
21 Sep 2026

IOCs (HashSha256) para detectar: ChainScript: Rastreando un RAT de Node.js a través de la Blockchain

Reglas de IA de SOC Prime
21 Sep 2026

Detectar Descubrimiento de Infraestructura C2 Basado en Blockchain de ChainScript [Conexión de Red de Windows]

Reglas de IA de SOC Prime
21 Sep 2026

Detección de Ejecución de RAT ChainScript a través de PowerShell [PowerShell de Windows]

Reglas de IA de SOC Prime
21 Sep 2026

Detección de Ejecución de RAT Node.js ChainScript a través de Msiexec y Wscript [Creación de Procesos de Windows]

Reglas de IA de SOC Prime
21 Sep 2026

Ejecución de Simulación

  • Narrativa de Ataque y Comandos: El atacante despliega una carga útil basada en Node.js diseñada para imitar a ChainScript. El objetivo es descubrir la infraestructura C2 consultando un punto final público de RPC de Ethereum. El script inicia una conexión WebSocket y envía un JSON-RPC eth_call solicitud. Críticamente, la solicitud incluye el selector de función específico 0x4ab7874e dentro de la carga útil. Esta acción está destinada a simular la fase de «descubrimiento» del ciclo de vida del malware, donde la dirección C2 se extrae de un contrato inteligente en la blockchain.

  • Script de Prueba de Regresión:

    # Script de simulación para imitar el descubrimiento de blockchain de ChainScript a través de WebSocket
    # Esto requiere un entorno de Node.js o una herramienta capaz de enviar cargas JSON-RPC de WebSocket específicas.
    # Para esta simulación, usamos un script PowerShell para enviar la carga sin formato.
    
    $wsUri = "wss://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY" # Usando un punto final RPC de marcador de posición
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $ct = New-Object System.Threading.CancellationToken
    
    try {
        Write-Host "[+] Conectando con el RPC de WebSocket..."
        $connectTask = $ws.ConnectAsync($wsUri, $ct)
        $connectTask.Wait()
        Write-Host "[+] Conexión establecida."
    
        # La carga específica que contiene el selector de función de 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 de descubrimiento de ChainScript (eth_call + 0x4ab7874e)..."
        $sendTask = $ws.SendAsync($segment, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, $ct)
        $sendTask.Wait()
        Write-Host "[+] Carga enviada."
    
    } catch {
        Write-Error "[-] Simulación fallida: $($_.Exception.Message)"
    } finally {
        if ($ws.State -eq 'Open') {
            $ws.CloseAsync([System.Net.WebSockets.WebSocketCloseStatus]::NormalClosure, "Closing", $ct).Wait()
        }
        $ws.Dispose()
        Write-Host "[+] Limpieza completa."
    }
  • Comandos de Limpieza:

    # No se realizan cambios persistentes mediante el script.
    # Asegúrese de eliminar cualquier proceso temporal de Node.js o archivo local de escucha.
    Stop-Process -Name "node" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPchainscript_sim.tmp" -ErrorAction SilentlyContinue