El malware Linux Shishiga usa scripts de LUA

El malware Linux Shishiga usa scripts de LUA

El uso del protocolo BitTorrent y los módulos en Lua diferencian a Linux/Shishiga de otros tipos de malware, según el análisis de ESET.

El uso del protocolo BitTorrent y los módulos en Lua diferencian a Linux/Shishiga de otros tipos de malware, según el análisis de ESET.

Entre todas las muestras de Linux que recibimos cada día, advertimos una detectada solo por Dr.Web con la firma Linux.LuaBot. Nos pareció que esto era sospechoso, ya que nuestras tasas de detección para la familia Luabot generalmente son altas.

Al analizarla, resultó que efectivamente se trataba de un bot escrito en Lua, pero que representa a una nueva familia y no está relacionado con el malware Luabot visto anteriormente. Por lo tanto, le dimos un nuevo nombre: Linux/Shishiga. Usa cuatro protocolos diferentes (SSH, Telnet, HTTP y BitTorrent) y scripts de Lua para su modularidad.

¿Cómo encontrar a Shishiga?

Linux/Shishiga apunta a sistemas GNU/Linux. Su vector de infección es uno muy común: hacer fuerza bruta para obtener credenciales débiles basándose en una lista de contraseñas. Lo hace de manera similar a Linux/Moose, con la capacidad agregada de hacer fuerza bruta de credenciales SSH también. Aquí hay una lista completa de credenciales al momento de escribir este artículo:

bftelnet.lua
bfssh.lua

Encontramos varios binarios de Linux/Shishiga para arquitecturas como MIPS (tanto para los formatos Big Endian y Little Endian), ARM (armv4l), i686, y también PowerPC. Estos son comunes en dispositivos IoT. Creemos que otras arquitecturas como SPARC, SH-4 o m68k podrían ser soportadas, como explicaremos más adelante.

Las características de Shishiga

Linux/Shishiga es un binario empaquetado con UPX 3.91 (Ultimate Packer for Executables), pero la herramienta UPX tendrá problemas para desmpaquetar estos binarios porque Shishiga añade datos al final del archivo empaquetado.

Tras desempaquetarlo, vemos que está vinculado estáticamente con la biblioteca en tiempo de ejecución Lua y despojado de todos los símbolos.

Una vez ejecutado, el binario inicializará el módulo Lua de malware con los siguientes métodos:

El método getmods devolverá el flujo de memoria (o “blob“, en inglés) del archivo, como explicaremos después. Luego, se ejecuta el código en Lua (malware.lua) a través de las funciones luaL_loadstring y lua_pcall. El código Lua es bastante sencillo, pero aquí hay un rápido paso a paso del código fuente sin ninguna modificación de nuestra parte.

(1) abre el archivo ejecutable de malware desde /proc/self/exe y devuelve su contenido;
(2) recupera el archivo zlib a través del método getmods, lo descomprime, luego lo parsea usando etiquetas y lo almacena en un array de Lua;
(3) llama al módulo main.lua;

Hay una lista exhaustiva de todos los scripts de Lua hallados en la sección de IoC. La mayoría tienen nombres de archivo que se explican a sí mismos, pero aquí hay un breve resumen de algunos de ellos.

callhome.lua

  • devolver el archivo de configuración server.bt o servers desde config.lua;
  • si no es posible contactar al servidor por defecto actual, cambiar a uno diferente;
  • enviar archivos (reportes o cuentas, ambos con formato JSON);
  • ejecutar tareas de la lista obtenida del servidor de C&C;

bfssh.lua / bftelnet.lua

  • módulo para hacer fuerza bruta de de inicios de sesión SSH y Telnet;
  • verificar si el comando echo -en "\\x31\\x33\\x33\\x37" arroja 1337; si no, sale y continúa;
  • la arquitectura del dispositivo se determina desde el archivo / bin / ls ejecutando cat / bin / ls y analizando el encabezado ELF, véase más abajo;
  • propagar el malware (tanto archivos .lm como .dl) según la arquitectura del dispositivo;
  • guardar las credenciales correctas;

El código que verifica la arquitectura es como sigue:

bfssh.lua, getArchELF method
(1) cada archivo ELF debe empezar con \x7fELF
(2) ftype que representa e_type (tipo de archivo ELF = ejecutable, compartido, etc.) no se usa
(3) bits representa e_ident[EI_CLASS] (32 bits o 64 bits), denc representa e_ident[EI_DATA] (little o big endian), y farch representa e_machine en el encabezado ELF
bfssh.lua, getArchName method
(1) bits no se usa
(2) comprobar si el archivo es para MIPS little endian (e_machine == EM_MIPS y e_ident[EI_DATA] == ELFDATA2LSB)
(3) comprobar si el archivo es para Intel 80386, Intel 80860 o AMD x86-64 (e_machine == EM_386, e_machine == EM_860 o e_machine == EM_X86_64)

config.lua

  • contiene publicKey para verificar la firma del binario (.lm o .dl);
  • contiene lista de nodos de arranque;
  • contiene nombres de archivos .bt, números de puerto de SOCKS y servidor HTTP;
  • contiene dirección IP del servidor (probablemente servidor de C&C);

persist.lua

  • método de persistencia dependiendo del privilegio (root o usuario)

scanner.lua

  • utilizado para generar redes /16 aleatorias que no son locales

worm.lua (este script se eliminó en la última versión de Linux/Shishiga)

  • permite el escaneo de un determinado puerto;
  • permite la carga;
  • obtiene información del nuevo servidor infectado;

El script readme.lua tiene un banner de mensaje que llama la atención, si hablas ruso:

Esto se traduce a:

Parece que el autor del malware se inspiró en Y.Letov y su álbum Everything goes according to plan; mira el último verso de la canción.

Durante las últimas semanas, observamos algunos cambios menores como partes de algunos módulos reescritas, suma de módulos de prueba o eliminación de archivos redundantes, pero nada especialmente notorio.

Si bien el binario principal se llama <architecture>.lm, también pudimos obtener binarios con el nombre <architecture>.dl, un simple backdoor que escucha en 0.0.0.0 (todas las direcciones IPv4) el puerto  2015.

Comunicación de Shishiga

Linux/Shishiga se puede comunicar usando cualquiera de los módulos httpproto.lua, btloader.lua o server.lua. El módulo httpproto.lua tiene funciones que permiten codificar o decodificar los datos dados, y hacer solicitudes HTTP POST y GET. El código fuente de abajo muestra el proceso de codificación de datos.

httpproto.lua

btloader.lua usa el módulo torrent.lua (que reúne funciones de BitTorrent) para guardar o cargar nodos del archivo nodes.cfg. También recupera sus datos de configuración de archivos {server, update, script}.bt (en formato Bencode) y utiliza el protocolo BitTorrent para buscar nuevas versiones de estos archivos. script.bt permite la ejecución de un script en Lua y update.bt permite ejecutar el binario .lm.

A continuación se muestran ejemplos de archivos .bt decodificados mostrados como diccionarios Python.

script.bt
(1) firma
(2) llave pública
update.bt
server.bt

Finalmente, la funcionalidad principal del módulo server.lua es crear un servidor HTTP con el puerto definido en config.lua. En todas las muestras que analizamos hasta ahora, ese puerto es 8888.

El servidor responde solo a peticiones /info y /upload. Debajo hay una versión (embellecida) de la respuesta del servidor al path /info. Todos los archivos de aquí abajo pueden ser fácilmente descargados desde el dispositivo infectado.

(1) Scripts de Lua
(2) Backdoor
(3) Scripts de BitTorrent
(4) Versión del malware
(5) Cargador de módulos

Al consultar el puerto root / en el puerto 8888 se obtendrá HTTP/1.0 404 OK, que sirve como un simple indicador de compromiso (IoC).

Función de respuesta de http.lua

En este punto de nuestra investigación, le pedimos al equipo de Censys que hiciera un escaneo en masa de Internet en el puerto TCP 8888. Encontraron cerca de 10 direcciones IP que coinciden con esta respuesta HTTP particular, que potencialmente corresponden a máquinas infectadas.

Conclusión

A primera vista, Linux/Shishiga pareciera ser igual a otras amenazas que se propagan aprovechando credenciales débiles de Telnet y SSH, pero el uso del protocolo BitTorrent y módulos Lua lo separan de la manada. Apenas el año pasado se vio el uso de BitTorrent en un gusano inspirado en la botnet Mirai, Hajime, y solo podemos especular que se volverá más popular en el futuro.

Es posible que Shishiga evolucione y se expanda, aunque el bajo número de víctimas y los constantes cambios, eliminaciones, modificaciones y agregados en el conjunto de componentes indican claramente que es un trabajo todavía en proceso. Para evitar que tus dispositivos se infecten con Shishiga y gusanos similares, no deberías usar credenciales por defecto de Telnet y SSH.

Quisiéramos agradecer al equipo de Censys por su colaboración.

IoCs

C&C

93.117.137.35

Hashes SHA-1 (.lm)
Hashes SHA-1 (.dl)

Nombre de archivo de los scripts de Lua
Archivos que podrían potencialmente indicar una infección
y

Discusión