Análisis de la Campaña del Paquete npm BigSquatRat
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.
Flujo de ataque
Detecciones
LOLBAS WScript / CScript (mediante creación de procesos)
Ver
Extensión de Archivo Sospechosa Agregada a las Claves de Ejecución [ASEPs] (mediante evento de registro)
Ver
Procesos Secundarios de NodeJS Sospechosos [Linux] (mediante línea de comandos)
Ver
Descarga de Archivos de GitHub Posible Iniciada por Proceso No Habitual (mediante conexión de red)
Ver
IOCs (Emails) para detectar: Análisis de la Campaña del Paquete npm BigSquatRat
Ver
IOCs (HashSha1) para detectar: Análisis de la Campaña del Paquete npm BigSquatRat
Ver
IOCs (HashSha256) para detectar: Análisis de la Campaña del Paquete npm BigSquatRat
Ver
Detección de Ejecución del Troyano de Acceso Remoto de Node.js via wscript.exe [Creación de Procesos de Windows]
Ver
Detección de Malware de Node.js Usando Scripts Ofuscados y systemctl para Persistencia [Creación de Procesos de Linux]
Ver
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, usawscript.exe—un host de scripts nativo de Windows—para lanzarnode.exeindirectamente, creando una relación padre/hijo que coincide con la regla de detección. Los pasos son:- Deje caer un script malicioso (
malicious.js) que simplemente generanode.execon la carga útil. - Cree un script wrapper de JavaScript (
launcher.js) que el host de scripts de Windows ejecutará; este wrapper usaWScript.Shellpara ejecutarnode.execon la carga útil. - Ejecute el wrapper a través de
wscript.exe //B //Nologo launcher.js. - El árbol de procesos resultante es
wscript.exe → node.exe → malicious.js, generando la telemetría objetivo.
- Deje caer un script malicioso (
-
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