SOC Prime Bias: Crítico

22 Ene 2026 19:09

Análisis de la Campaña del Paquete npm BigSquatRat

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Análisis de la Campaña del Paquete npm BigSquatRat
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El informe perfila un paquete malicioso de npm, bigmathix, que instala un troyano de acceso remoto en Node.js. Utiliza código ofuscado en múltiples etapas para extraer cargas útiles posteriores de contenido de GitHub controlado por el atacante y aurevian.cloud. La detección se ve obstaculizada por claves de descifrado dinámicas y un argumento inicializador necesario que regula la ejecución, consistente con un ataque selectivo a la cadena de suministro dirigido a desarrolladores de JavaScript.

Investigación

Los investigadores desofuscaron el paquete para reconstruir una cadena que genera un proceso secundario, realiza la resolución de DNS y descifra URLs incrustadas utilizando claves derivadas. Con fuerza bruta del valor inicializador, recuperaron una carga útil de segunda etapa de aurevian.cloud, que introdujo más ofuscación en la lógica final del troyano. Los analistas también correlacionaron repositorios relacionados de GitHub y paquetes adicionales de npm publicados en tiempos similares para mapear el alcance de la campaña.

Mitigación

Evite dependencias de npm no confiables, especialmente paquetes recién publicados, con pocas descargas o módulos con cambios de versión abruptos, y valide su integridad mediante controles de hash/procedencia. Monitoree procesos secundarios sospechosos generados por node.exe y búsquedas salientes inesperadas a dominios desconocidos. Aplique filtrado de salida para aurevian.cloud y alerte sobre actividades de persistencia como claves Run de Windows o servicios systemd de Linux creados por procesos de Node.js.

Respuesta

Si se identifica bigmathix, aisle el endpoint, elimine el paquete y termine los procesos de Node.js generados. Elimine las claves Run creadas o las unidades systemd, bloquee los dominios/IPs asociados y recopile registros que muestren DNS, ancestros de proceso y salida de red. Realice análisis forense para identificar cargas útiles descargadas y persistencia como lanzadores wscript.exe o servicios programados, luego busque en el entorno artefactos coincidentes.

«graph TB %% Class Definitions Section classDef action fill:#99ccff classDef process fill:#ffcc99 classDef persistence fill:#ccffcc classDef c2 fill:#ccccff classDef cleanup fill:#ffccff %% Nodes Definitions node_supply_chain[«<b>Technique</b> – T1195.001 Compromiso de la Cadena de Suministro<br /><b>Description</b>: Compromiso de cadena de suministro de software para distribuir código malicioso.<br /><b>Detail</b>: Paquete malicioso npm ‘bigmathix’ publicado.»] class node_supply_chain action node_obfuscation[«<b>Technique</b> – T1027 Archivos o Información Ofuscados<br /><b>Subu2011techniques</b>: T1027.009 (Esteganografía), T1027.004 (Compilar Después de Entrega)<br /><b>Description</b>: Paquete contiene JavaScript altamente ofuscado que se desofusca en tiempo de ejecución.»] class node_obfuscation action node_process_creation[«<b>Technique</b> – T1543 Crear o Modificar Proceso del Sistema<br /><b>Subu2011technique</b>: T1543.001 (Agente de Lanzamiento)<br /><b>Description</b>: Cargador genera un proceso secundario de Node.js y rompe el árbol de procesos para ocultar la ejecución (T1036.009).»] class node_process_creation process node_dns_key_derivation[«<b>Technique</b> – T1071.004 Protocolo de Capa de Aplicación DNS<br /><b>Additional</b>: T1590.002 (Dominio/IP), T1596.001 (Obtener Material Criptográfico)<br /><b>Description</b>: Genera argumento numérico, realiza búsqueda DNS para IP, combina IP con hash SHAu2011256 de README remoto para derivar claves de descifrado.»] class node_dns_key_derivation action node_encrypted_download[«<b>Technique</b> – T1573.001 Canal Encriptado Criptografía Asimétrica<br /><b>Description</b>: Utiliza canal cifrado AESu2011GCM para obtener una carga útil de segunda etapa de aurevian.cloud.»] class node_encrypted_download action node_persistence_linux[«<b>Technique</b> – T1543.002 Servicio systemd<br /><b>Description</b>: Crea un servicio systemd y lo inicia a través de systemctl para persistencia en Linux.»] class node_persistence_linux persistence node_persistence_windows[«<b>Technique</b> – T1547.014 Claves de Ejecución de Registro Carpeta de Inicio<br /><b>Description</b>: Crea una clave de ejecución ASEP que lanza wscript.exe u2192 node.exe para persistencia en Windows.»] class node_persistence_windows persistence node_c2[«<b>Technique</b> – T1104 Transferencia de Herramienta de Entrada (C2)<br /><b>Description</b>: RAT consulta C2, ejecuta comandos recibidos y verifica la extensión MetaMask de Chrome.»] class node_c2 c2 node_cleanup[«<b>Technique</b> – T1070.004 Eliminación de Archivos, T1070.009 Limpiar Registro<br /><b>Description</b>: La etapa final borra sus archivos y elimina entradas de registro/clave de ejecución para borrar evidencia.»] class node_cleanup cleanup %% Connections Showing Attack Flow node_supply_chain u002du002d>|leads_to| node_obfuscation node_obfuscation u002du002d>|leads_to| node_process_creation node_process_creation u002du002d>|uses| node_dns_key_derivation node_dns_key_derivation u002du002d>|uses| node_encrypted_download node_encrypted_download u002du002d>|enables| node_persistence_linux node_encrypted_download u002du002d>|enables| node_persistence_windows node_persistence_linux u002du002d>|supports| node_c2 node_persistence_windows u002du002d>|supports| node_c2 node_c2 u002du002d>|triggers| node_cleanup «

Flujo de ataque

Ejecución de Simulación

Prerequisito: El Chequeo Preliminar de Telemetría y Línea Base debe haberse completado.

Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente los TTPs identificados y tener como objetivo generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.

  • Narrativa de Ataque y Comandos:
    El atacante posee una carga útil de JavaScript maliciosa que necesita el runtime de Node.js para ejecutarse. Para evadir la lista blanca estándar de aplicaciones, usa wscript.exe—un host de scripts nativo de Windows—para lanzar node.exe indirectamente, creando una relación padre/hijo que coincide con la regla de detección. Los pasos son:

    1. Deje caer un script malicioso (malicious.js) que simplemente genera node.exe con la carga útil.
    2. Cree un script wrapper de JavaScript (launcher.js) que el host de scripts de Windows ejecutará; este wrapper usa WScript.Shell para ejecutar node.exe con la carga útil.
    3. Ejecute el wrapper a través de wscript.exe //B //Nologo launcher.js.
    4. El árbol de procesos resultante es wscript.exe → node.exe → malicious.js, generando la telemetría objetivo.
  • Script de Prueba de Regresión:
    El siguiente script de PowerShell automatiza toda la cadena en un host de prueba de Windows.

    # -------------------------------------------------
    # Prueba de Regresión – Ejecución del RAT de Node.js vía wscript
    # -------------------------------------------------
    
    # Variables
    $tempPath = "$env:TEMP"
    $launcherPath = Join-Path $tempPath "launcher.js"
    $payloadPath  = Join-Path $tempPath "malicious.js"
    $nodePath     = "C:Program Filesnodejsnode.exe"   # Ajuste si está instalado en otro lugar
    
    # 1. Escriba la carga útil maliciosa (simple registro de consola para demostración)
    $payloadContent = @"
    console.log('Carga útil maliciosa ejecutada');
    // El código real del RAT estaría aquí
    "@
    $payloadContent | Out-File -FilePath $payloadPath -Encoding ASCII
    
    # 2. Escriba el lanzador que ejecutará wscript
    $launcherContent = @"
    var shell = WScript.CreateObject("WScript.Shell");
    // Ejecutar node.exe con el script malicioso
    var cmd = "`"$nodePath`" `"$payloadPath`"";
    shell.Run(cmd, 0, false);
    "@
    $launcherContent | Out-File -FilePath $launcherPath -Encoding ASCII
    
    # 3. Ejecute la cadena a través de wscript
    Write-Host "Lanzando cadena maliciosa..."
    wscript.exe //B //Nologo $launcherPath
    
    # Pausa para permitir capturar telemetría
    Start-Sleep -Seconds 5
    
    # 4. Opcional: verifique que el proceso de nodo esté en ejecución (para observación manual)
    Get-Process -Name node -ErrorAction SilentlyContinue
    
    # -------------------------------------------------
    # Fin de la prueba de regresión
    # -------------------------------------------------
  • Comandos de Limpieza: Retire los artefactos y termine los procesos persistentes.

    # Script de limpieza – ejecute después de la validación
    $tempPath = "$env:TEMP"
    Remove-Item -Path (Join-Path $tempPath "launcher.js") -ErrorAction SilentlyContinue
    Remove-Item -Path (Join-Path $tempPath "malicious.js") -ErrorAction SilentlyContinue
    
    # Elimine cualquier proceso node.exe errante generado por la prueba
    Get-Process -Name node -ErrorAction SilentlyContinue | Stop-Process -Force