En el mundo actual, los desarrolladores de malware están adoptando un enfoque cada vez más sofisticado al utilizar lenguajes de programación no convencionales con el fin de evadir las avanzadas defensas de seguridad. Un claro ejemplo de esta tendencia es el malware Lu0Bot basado en Node.js.
Este malware representa una amenaza seria tanto para organizaciones como para individuos, y su enfoque es particularmente astuto. Al apuntar a un entorno de ejecución independiente de la plataforma, algo común en las aplicaciones web modernas, y emplear ofuscación multicapa, Lu0Bot se convierte en un desafío considerable para cualquier sistema de detección.
Aunque actualmente Lu0Bot muestra una actividad limitada, se sospecha que los atacantes están aguardando el momento propicio para llevar a cabo sus acciones maliciosas.
Para estar preparados ante cualquier escenario futuro, un equipo de analistas realizó un minucioso análisis técnico de una muestra reciente de Lu0Bot y documentó su proceso en un exhaustivo artículo. Aquí presentamos una descripción general de su investigación.
El análisis estático de la muestra reveló que Lu0Bot utiliza un empaquetador SFX (Self-Extracting Archive), un archivo autoextraíble que puede abrirse con cualquier utilidad de archivo. Este contenido fue examinado minuciosamente.
1. Archivo BAT
Dentro del archivo EXE se encontraban varios archivos, incluyendo un intérprete de Node.js denominado fjlpexyjauf.exe. Este intérprete recibía un archivo de bytes junto con un número (%1% en la captura de pantalla), que presumiblemente actuaba como una clave de cifrado para el archivo de bytes.
2. Archivos eqnyiodbs.dat
El archivo eqnyiodbs.dat se dividía en bloques de bytes que luego se combinaban para crear el intérprete de Node.js.
3. Archivo lknidtnqmg.dat
El archivo lknidtnqmg.dat contenía bytes cifrados en Base64, que podían ser descifrados utilizando el número de entrada proporcionado.
4. Archivo gyvdcniwvlu.dat
El archivo gyvdcniwvlu.dat desempeñaba un papel importante al permitir que los programas de 32 bits en sistemas x64 convirtieran códigos de escaneo de teclas en caracteres Unicode, probablemente para la funcionalidad de registro de teclas en el proceso principal.
El análisis dinámico del malware Lu0Bot se llevó a cabo en el entorno interactivo de malware ANY.RUN para monitorear su comportamiento y descifrar los bytes o localizarlos en la memoria del proceso. Durante este proceso, se descubrió que, después de la ejecución, el proceso principal lanzaba un archivo BAT que a su vez ejecutaba un archivo EXE. El código aceptaba entradas JS cifradas y recopilaba datos del sistema utilizando WMIC, lo que incluía información sobre la ubicación de ejecución del proceso, alineándose con la técnica MITRE T1047.
Además, se observó que el intérprete se copiaba en la carpeta de inicio, y la conexión al dominio continuaba incluso después de reiniciar el sistema, lo que permitía que el bot permaneciera operativo.
El malware también demostró un enfoque único para la conexión de dominios al ensamblar varias partes en una sola entidad dentro del código JS.
Para acceder al código JS principal, el equipo realizó un desempaquetado del archivo SFX y ejecutó un comando para extraer el archivo Node.js. Luego, se lanzó fjlpexyjauf.exe en x32dbg, ingresando los datos entrantes en la línea de comando y se llegó al punto donde comenzó la ejecución del código JS. El código se localizó en la memoria y se guardó un volcado.
El código JavaScript inicialmente parecía ininteligible, pero se aclaró eliminando bytes innecesarios y utilizando un desofuscador de JavaScript.
El código comenzaba con una serie de cadenas cifradas que se manipulaban para mover elementos específicos al final de la matriz. Luego, se implementó una función para descifrar las cadenas de la matriz utilizando una forma alternativa de BASE64 (T1132.002), seguida de codificación-decodificación de URL y, finalmente, RC4.
Esta función se llamaba utilizando dos variables: un elemento de la matriz y la llave RC4. Con la ayuda de un script especial, las líneas se descifraron, revelando que partes de los dominios estaban codificadas en la muestra.
A continuación, se descubrió la sección del código responsable de ensamblar el dominio.
Para depurar el código JavaScript, el equipo utilizó Node.js con su parámetro inspect-brk, colocando un punto de interrupción en la palabra clave “var” y observando el resultado generado por cada línea.
Se descubrió que la primera función, denominada ‘ginf’, recopilaba información del sistema y generaba una matriz de 15 elementos con detalles del sistema.
La segunda función, ‘hwco’, utilizaba la matriz de 15 elementos de la función ‘ginf’ como entrada y generaba una salida que comprendía el final del dominio hasta ese punto. Un análisis más detallado reveló que este resultado era un hash de los datos recopilados del sistema.
El puerto, el número y el segmento de dominio después del punto se extraían de la matriz ‘acc’ y se asignaban a variables.
Se agregaba un número aleatorio al segmento de dominio después del punto, y la siguiente línea seleccionaba un dominio alternativo si se cumplían ciertas condiciones
Después de varias operaciones más, el dominio quedaba completamente ensamblado y todos los elementos necesarios se empaquetaban en un objeto JSON.
Una vez que el malware se ejecutaba, buscaba una dirección para la transmisión de datos y, una vez que el servidor recibía el tráfico, enviaba el código JS.
Como parte de su esfuerzo, el equipo de analistas descubrió una gran cantidad de inteligencia y COI (Indicadores de Compromiso), y desarrolló reglas YARA, Sigma y Suricata para detectar el malware Lu0Bot. Estas reglas permiten identificar rápidamente cualquier muestra de Lu0Bot y revelar dominios de control y comando después de descifrar cadenas.
En resumen, Lu0Bot es un malware excepcional que combina Node.js y código JavaScript ejecutable. Su estructura de dominio única y sus métodos de cifrado personalizados lo convierten en una amenaza intrigante. Aunque su actividad actual es baja, podría representar un riesgo significativo si su campaña se intensifica y el servidor de control y comando comienza a responder activamente.
Para protegerse contra Lu0Bot y otros tipos de malware, es aconsejable utilizar herramientas como ANY.RUN para analizar rápidamente archivos o enlaces sospechosos y obtener un veredicto concluyente en segundos.”
fuente:thehackernews