Node.js: De entorno de desarrollo a herramienta para ciberataques
Node.js es un entorno de ejecución de JavaScript de código abierto y multiplataforma tremendamente popular. Permite a los desarrolladores ejecutar código JavaScript fuera del navegador web, facilitando la creación de aplicaciones tanto en el lado del servidor (backend) como en el del cliente (frontend). Su versatilidad y amplio uso lo han convertido en un pilar para muchos proyectos de desarrollo.
Sin embargo, estas mismas características lo han puesto en el punto de mira de los ciberdelincuentes. Desde finales de 2024, se ha observado un aumento en el uso de Node.js para distribuir malware, robar información y exfiltrar datos. Los atacantes aprovechan la legitimidad y ubicuidad de Node.js para camuflar sus acciones maliciosas, eludir controles de seguridad tradicionales y establecer persistencia en los sistemas comprometidos.
¿Cómo explotan los atacantes Node.js?
Los métodos varían, pero se han identificado patrones claros en campañas recientes.
Campañas de Malvertising: El anzuelo digital
Una técnica frecuente es el malvertising (publicidad maliciosa). Los atacantes crean anuncios engañosos, a menudo relacionados con temas populares como el trading de criptomonedas, que redirigen a los usuarios a sitios web fraudulentos. En estas webs, se incita a la víctima a descargar un instalador que aparenta ser software legítimo (por ejemplo, una aplicación de Binance o TradingView).
Este instalador suele ser un paquete (a veces creado con herramientas como Wix) que contiene una librería maliciosa (un archivo DLL). Al ejecutar el instalador, se activa esta librería.
La anatomía de un ataque basado en Node.js
Una vez ejecutado el instalador falso, la cadena de ataque suele seguir estos pasos:
Acceso inicial y persistencia
La DLL maliciosa recopila información básica del sistema y crea una tarea programada. Esta tarea asegura que un comando de PowerShell se ejecute periódicamente, garantizando la persistencia del malware incluso si el sistema se reinicia. A menudo, se muestra una web legítima como señuelo para no levantar sospechas.
Evasión de defensas
La tarea programada ejecuta comandos de PowerShell diseñados para añadir exclusiones en el software antivirus (como Microsoft Defender). Se intenta evitar que el propio proceso de PowerShell y el directorio donde reside el malware sean escaneados, permitiendo que las siguientes fases del ataque pasen desapercibidas.
Recolección y exfiltración de datos
Mediante scripts ofuscados de PowerShell, lanzados a través de las tareas programadas, se recopila información detallada del sistema infectado. Esto incluye datos sobre Windows, BIOS, hardware (CPU, GPU, memoria, red), software instalado, configuración regional y de usuario. Toda esta información se empaqueta (normalmente en formato JSON) y se envía a un servidor de Comando y Control (C2) bajo el control del atacante mediante una petición HTTP POST.
Entrega de la carga útil (Payload)
Otro script de PowerShell descarga un archivo comprimido desde el servidor C2. Este archivo contiene los componentes necesarios para la siguiente fase, que suelen ser el ejecutable de Node.js (node.exe), un archivo JavaScript compilado (JSC) y diversas librerías de soporte. El script también puede modificar la configuración del proxy del sistema.
Ejecución de la carga útil
Finalmente, se utiliza el ejecutable de Node.js descargado para lanzar el archivo JSC malicioso. Este script puede realizar múltiples acciones: cargar módulos adicionales, establecer conexiones de red, añadir certificados al dispositivo y, crucialmente, leer y exfiltrar información sensible del navegador, como contraseñas guardadas o cookies de sesión.
Nueva táctica emergente: Ejecución de scripts en línea
Más allá de los ejecutables compilados, se ha observado una técnica más sigilosa: la ejecución de JavaScript directamente en la línea de comandos utilizando Node.js, sin necesidad de un archivo JSC intermedio.
Un ejemplo detectado implicaba un ataque de ingeniería social (tipo ClickFix) que engañaba al usuario para ejecutar un comando de PowerShell. Este comando descargaba Node.js y sus módulos necesarios. Luego, en lugar de ejecutar un archivo, el script de PowerShell usaba Node.js para ejecutar código JavaScript directamente.
Este código realizaba tareas como descubrir la estructura de la red, identificar activos valiosos, camuflar el tráfico C2 (haciéndolo pasar por tráfico legítimo de Cloudflare) y lograr persistencia modificando claves del registro de Windows.
¿Por qué es importante este cambio?
El uso de Node.js por parte de los ciberdelincuentes representa una evolución en sus Tácticas, Técnicas y Procedimientos (TTPs). Aunque quizás todavía no sea tan prevalente como el malware basado en Python u otros lenguajes de script tradicionales, su uso está en aumento.
La confianza generalizada en Node.js y su capacidad para ejecutarse en múltiples plataformas lo convierten en un vector de ataque atractivo y potencialmente difícil de detectar si no se cuenta con las defensas adecuadas.
Recomendaciones para protegerse
Para mitigar los riesgos asociados al uso malicioso de Node.js, tanto usuarios como organizaciones deberían considerar las siguientes medidas:
- Educar a los usuarios: Concienciar sobre los peligros de descargar software de fuentes no verificadas o hacer clic en anuncios sospechosos.
- Monitorizar la ejecución de Node.js: Vigilar la ejecución de procesos 'node.exe' no autorizados o inesperados en los sistemas.
- Reforzar la seguridad de PowerShell: Habilitar el registro detallado de scripts de PowerShell (Script Block Logging) para detectar comandos ofuscados o maliciosos. Gestionar adecuadamente las políticas de ejecución de PowerShell.
- Utilizar protección avanzada para endpoints: Asegurarse de que las soluciones de detección y respuesta para endpoints (EDR) o extendidas (XDR) estén activas y monitorizando la ejecución de scripts.
- Activar protección basada en la nube: Configurar el software antivirus para utilizar la protección basada en la nube, que ayuda a detectar amenazas nuevas y en rápida evolución.
- Bloquear comunicaciones maliciosas: Implementar reglas de firewall para bloquear la comunicación saliente hacia dominios o direcciones IP sospechosas conocidas asociadas a servidores C2.
- Activar la protección contra manipulaciones: Habilitar las funciones que impiden que el malware deshabilite los servicios de seguridad.
Mantenerse alerta y aplicar buenas prácticas de seguridad es fundamental para hacer frente a esta y otras amenazas emergentes en el panorama de la ciberseguridad.