Quasar Linux (QLNX): Un Punto de Apoyo en la Cadena de Suministro con Capacidades Completas de RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Quasar Linux (QLNX) es un troyano avanzado de acceso remoto para Linux que combina un rootkit de espacio de usuario y eBPF con una puerta trasera PAM y amplias capacidades de recolección de credenciales. El malware admite ejecución sin archivos, suplantación de nombres de procesos y varias técnicas de persistencia que lo ayudan a permanecer oculto en los sistemas infectados. Su enfoque en estaciones de trabajo de desarrolladores lo hace especialmente peligroso para el abuso de la cadena de suministro, ya que puede robar tokens, claves SSH y credenciales en la nube. El malware también utiliza comunicaciones cifradas y admite una arquitectura de malla peer-to-peer para mejorar la resiliencia y mantener el acceso.
Investigación
Los investigadores de Trend Micro obtuvieron el binario de QLNX y realizaron tanto análisis estático como dinámico, descubriendo el código fuente incrustado para los componentes de rootkit y puerta trasera PAM. Su investigación documentó la capacidad del malware para compilar componentes directamente en el host objetivo, la variedad de mecanismos de persistencia que utiliza y el conjunto completo de comandos que admite el implante. El análisis de red también reveló un protocolo personalizado basado en TLS y un identificador mágico distintivo utilizado en las comunicaciones. A partir de este trabajo, los investigadores extrajeron indicadores de compromiso para apoyar la caza y detección.
Mitigación
Los defensores deben buscar QLNX monitoreando su archivo de bloqueo mutex único, sospechosas entradas LD_PRELOAD y comandos de compilación inusuales que generen objetos compartidos maliciosos. Las organizaciones también deben bloquear la ejecución de binarios desconocidos llamados gcc compilation commands that generate malicious shared objects. Organizations should also block execution of unknown binaries named quasar-implant y restringir el acceso de escritura a /etc/ld.so.preload. La autenticación multifactor debería ser impuesta para las cuentas de desarrolladores, y los equipos de seguridad deberían monitorear de cerca los intentos de exfiltrar almacenes de credenciales y archivos de tokens sensibles.
Respuesta
Si se encuentran indicadores de QLNX, aísle inmediatamente el sistema afectado, recoja imágenes de memoria y disco, y termine el proceso malicioso. Elimine entradas no autorizadas de /etc/ld.so.preload, elimine los .so archivos maliciosos compilados y borre el archivo de bloqueo utilizado por el implante. Todas las credenciales potencialmente expuestas, especialmente los tokens de la nube y del registro de paquetes, deben ser rotadas sin demora. Los investigadores también deben evaluar si algún sistema de la cadena de suministro, repositorio o entorno de construcción fue contaminado durante la intrusión.
graph TB %% Definiciones de Clases classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef process fill:#ccffcc classDef persistence fill:#ffdd99 %% Nodo de Malware malware_qlnx[«<b>Malware</b> – <b>Nombre</b>: QLNX<br/><b>Descripción</b>: Implante Linux sin archivos que utiliza técnicas de rootkit»] class malware_qlnx malware %% Fase de Ejecución action_execution[«<b>Acción</b> – <b>Ejecución</b>: Lanza implante sin archivos mediante memfd_create y execveat, falsifica argv0 y el nombre del proceso»] class action_execution action technique_process_spoof[«<b>Técnica</b> – T1564.010:<br/>Ocultar Artefactos – Suplantación de Argumentos de Proceso»] class technique_process_spoof technique technique_unix_shell[«<b>Técnica</b> – T1059.004:<br/>Intérprete de Comandos y Scripts – Shell Unix»] class technique_unix_shell technique %% Fase de Escalada de Privilegios action_priv_esc[«<b>Acción</b> – <b>Escalada de Privilegios</b>: Intenta usar sudo o pkexec para obtener mayores privilegios»] class action_priv_esc action technique_priv_esc[«<b>Técnica</b> – T1548.004:<br/>Abuso del Mecanismo de Control de Elevación – Ejecución Elevada con Confirmación»] class technique_priv_esc technique %% Fase de Persistencia action_persistence[«<b>Acción</b> – <b>Persistencia</b>: Instala servicios systemd, cron @reboot, scripts init.d, inicio automático XDG y hook LD_PRELOAD»] class action_persistence action technique_rc_scripts[«<b>Técnica</b> – T1037.004:<br/>Scripts de Inicialización de Arranque o Inicio de Sesión – Scripts RC»] class technique_rc_scripts technique technique_autostart[«<b>Técnica</b> – T1547:<br/>Ejecución Automática al Arranque o Inicio de Sesión»] class technique_autostart technique technique_hijack[«<b>Técnica</b> – T1574:<br/>Secuestro del Flujo de Ejecución mediante LD_PRELOAD»] class technique_hijack technique class action_persistence persistence %% Fase de Evasión de Defensa action_defense_evasion[«<b>Acción</b> – <b>Evasión de Defensa</b>: Despliega rootkit LD_PRELOAD, controlador eBPF, inyección de procesos y limpia registros»] class action_defense_evasion action technique_rootkit[«<b>Técnica</b> – T1014:<br/>Rootkit – oculta archivos, procesos y puertos»] class technique_rootkit technique technique_thread_hijack[«<b>Técnica</b> – T1055.003:<br/>Inyección de Procesos – Secuestro de Ejecución de Hilos»] class technique_thread_hijack technique technique_process_hollow[«<b>Técnica</b> – T1055.012:<br/>Inyección de Procesos – Hollowing de Procesos»] class technique_process_hollow technique %% Fase de Recolección de Credenciales action_credential_harvest[«<b>Acción</b> – <b>Recolección de Credenciales</b>: Recopila credenciales de archivos, claves SSH, /etc/shadow, navegadores y PAM»] class action_credential_harvest action technique_creds_files[«<b>Técnica</b> – T1552.001:<br/>Credenciales No Seguras – Credenciales en Archivos»] class technique_creds_files technique technique_private_keys[«<b>Técnica</b> – T1552.004:<br/>Credenciales No Seguras – Claves Privadas»] class technique_private_keys technique technique_shadow_dump[«<b>Técnica</b> – T1003.008:<br/>Volcado de Credenciales del SO – /etc/passwd y /etc/shadow»] class technique_shadow_dump technique technique_cookies[«<b>Técnica</b> – T1550.004:<br/>Uso de Material de Autenticación Alternativo – Cookie de Sesión Web»] class technique_cookies technique technique_pam[«<b>Técnica</b> – T1555:<br/>Credenciales de Almacenes de Contraseñas – Módulo PAM»] class technique_pam technique %% Fase de Recolección action_collection[«<b>Acción</b> – <b>Recolección</b>: Captura datos del portapapeles e imágenes de pantalla»] class action_collection action technique_clipboard[«<b>Técnica</b> – T1115:<br/>Datos del Portapapeles»] class technique_clipboard technique technique_screenshot[«<b>Técnica</b> – T1113:<br/>Captura de Pantalla»] class technique_screenshot technique %% Fase de Comando y Control action_c2[«<b>Acción</b> – <b>Comando y Control</b>: Exfiltra datos mediante TLS/HTTPS cifrado»] class action_c2 action technique_exfil[«<b>Técnica</b> – T1041:<br/>Exfiltración sobre Canal C2»] class technique_exfil technique %% Fase de Movimiento Lateral action_lateral[«<b>Acción</b> – <b>Movimiento Lateral</b>: Utiliza claves SSH recolectadas para acceder a hosts remotos»] class action_lateral action technique_remote_exploit[«<b>Técnica</b> – T1210:<br/>Explotación de Servicios Remotos»] class technique_remote_exploit technique %% Conexiones malware_qlnx –>|realiza| action_execution action_execution –>|usa| technique_process_spoof action_execution –>|usa| technique_unix_shell action_execution –>|conduce a| action_priv_esc action_priv_esc –>|usa| technique_priv_esc action_priv_esc –>|conduce a| action_persistence action_persistence –>|usa| technique_rc_scripts action_persistence –>|usa| technique_autostart action_persistence –>|usa| technique_hijack action_persistence –>|conduce a| action_defense_evasion action_defense_evasion –>|usa| technique_rootkit action_defense_evasion –>|usa| technique_thread_hijack action_defense_evasion –>|usa| technique_process_hollow action_defense_evasion –>|conduce a| action_credential_harvest action_credential_harvest –>|usa| technique_creds_files action_credential_harvest –>|usa| technique_private_keys action_credential_harvest –>|usa| technique_shadow_dump action_credential_harvest –>|usa| technique_cookies action_credential_harvest –>|usa| technique_pam action_credential_harvest –>|conduce a| action_collection action_collection –>|usa| technique_clipboard action_collection –>|usa| technique_screenshot action_collection –>|conduce a| action_c2 action_c2 –>|usa| technique_exfil action_c2 –>|habilita| action_lateral action_lateral –>|usa| technique_remote_exploit
Flujo de Ataque
Detecciones
Posible Comunicación Intentada de Dominio Chatear IP (vía DNS)
Ver
Autonicio Sospechoso .desktop Soltado en el Perfil del Usuario (vía file_event)
Ver
Archivo Oculto Fue Creado en Host Linux (vía file_event)
Ver
IOCs (HashSha256) para detectar: Quasar Linux (QLNX) – Una Brecha Silenciosa en la Cadena de Suministro: Dentro de un RAT de Linux a Pleno Rendimiento Con Rootkit, Puerta Trasera PAM, Recolección de Credenciales y Más
Ver
IOCs (HashSha1) para detectar: Quasar Linux (QLNX) – Una Brecha Silenciosa en la Cadena de Suministro: Dentro de un RAT de Linux a Pleno Rendimiento Con Rootkit, Puerta Trasera PAM, Recolección de Credenciales y Más
Ver
IOCs (HashMd5) para detectar: Quasar Linux (QLNX) – Una Brecha Silenciosa en la Cadena de Suministro: Dentro de un RAT de Linux a Pleno Rendimiento Con Rootkit, Puerta Trasera PAM, Recolección de Credenciales y Más
Ver
Detección de Ejecución Sin Archivos e Inyección de Código por QLNX [Creación de Procesos en Linux]
Ver
## Ejecución de Simulación
Prerrequisito: El Comprobación Previa de Telemetría y Línea Base debe haber tenido éxito.
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 apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa y Comandos del Ataque:
- Etapa 1 – Generación de Carga Útil: El atacante escribe una carga útil mínima en C que llama a
memfd_createpara crear un archivo ejecutable anónimo en memoria, escribe un shellcode simple (p.ej.,execve("/bin/sh", …)), lo marca como ejecutable y luego lo lanza a través deexecveat. - Etapa 2 – Compilación Sobre la Marcha: Usando
gcc(el indicador visible en la regla) el atacante compila el código fuente sin tocar el disco (salida dirigida a/dev/fd/3). - Etapa 3 – Ejecución e Inyección: El binario compilado se ejecuta, invoca
memfd_create, carga el shellcode y finalmente llama aexecveatpara ejecutar el ELF residente en memoria. Opcionalptracepuede ser utilizado para inyectar código en un proceso hermano, lo cual también cumpliría con la regla.
- Etapa 1 – Generación de Carga Útil: El atacante escribe una carga útil mínima en C que llama a
-
Script de Prueba de Regresión:
#!/usr/bin/env bash # # Simulación de ejecución sin archivos similar a QLNX # Genera ELF en memoria mediante memfd_create y lo ejecuta con execveat. # Requiere: gcc, libcap2-bin (para demo execveat) y reglas auditd del despegue previo. set -euo pipefail # 1️⃣ Crea el código fuente en C que realiza el baile de memfd + execveat cat > /tmp/payload.c <<'EOF' #define _GNU_SOURCE #include <sys/mman.h> #include <sys/syscall.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(void) { // Crea un descriptor de archivo anónimo (memfd) int fd = syscall(SYS_memfd_create, "memfd_payload", MFD_CLOEXEC); if (fd == -1) _exit(1); // Binario ELF simple que solo execve /bin/sh const unsigned char elf[] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ... (truncado por brevedad – un ELF mínimo estáticamente vinculado a /bin/sh) }; write(fd, elf, sizeof(elf)); // Hazlo ejecutable fchmod(fd, 0755); // Usa execveat para ejecutar el binario en memoria syscall(SYS_execveat, fd, "", NULL, NULL, AT_EMPTY_PATH); _exit(0); } EOF # 2️⃣ Compilar con gcc (esto será capturado por la regla de detección) gcc -static -o /tmp/payload /tmp/payload.c # 3️⃣ Ejecutar el binario malicioso – esto activa execveat /tmp/payload # 4️⃣ Limpieza rm -f /tmp/payload /tmp/payload.c -
Comandos de Limpieza:
# Eliminar archivos residuales y descargar posibles reglas de auditoría (si el entorno de prueba es desechable) rm -f /tmp/payload /tmp/payload.c sudo auditctl -d -a always,exit -F arch=b64 -S execveat -k qlnx_execveat sudo auditctl -d -a always,exit -F arch=b64 -S memfd_create -k qlnx_memfd sudo auditctl -d -a always,exit -F arch=b64 -S ptrace -k qlnx_ptrace