Quasar Linux (QLNX) : Une porte d’entrée dans la chaîne d’approvisionnement avec toutes les capacités d’un RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Quasar Linux (QLNX) est un trojan d’accès à distance Linux avancé qui combine un rootkit en espace utilisateur et eBPF avec une porte dérobée PAM et de larges capacités de collecte d’identifiants. Le malware prend en charge l’exécution sans fichier, la dissimulation de nom de processus, et plusieurs techniques de persistance qui l’aident à rester caché sur les systèmes infectés. Son focus sur les postes de travail des développeurs le rend particulièrement dangereux pour les abus de la chaîne d’approvisionnement, car il peut voler des jetons, des clés SSH et des identifiants cloud. Le malware utilise également des communications chiffrées et supporte une architecture en maillage peer-to-peer pour améliorer la résilience et maintenir l’accès.
Enquête
Les chercheurs de Trend Micro ont obtenu le binaire QLNX et ont mené des analyses statiques et dynamiques, dévoilant le code source intégré pour les composants rootkit et porte dérobée PAM. Leur enquête a documenté la capacité du malware à compiler des composants directement sur l’hôte cible, la gamme de mécanismes de persistance qu’il utilise, et l’ensemble complet de commandes pris en charge par l’implant. L’analyse réseau a également révélé un protocole personnalisé basé sur TLS et un identifiant magique distinctif utilisé dans les communications. À partir de ce travail, les chercheurs ont extrait des indicateurs de compromission pour soutenir la chasse et la détection.
Atténuation
Les défenseurs devraient rechercher QLNX en surveillant son fichier de verrouillage mutex unique, des entrées LD_PRELOAD suspectes et des commandes de gcc compilation inhabituelles qui génèrent des objets partagés malveillants. Les organisations devraient également bloquer l’exécution de binaires inconnus nommés quasar-implant et restreindre l’accès en écriture à /etc/ld.so.preload. L’authentification multi-facteurs doit être appliquée pour les comptes développeurs, et les équipes de sécurité doivent surveiller de près toute tentative d’exfiltration de magasins d’identifiants et de fichiers de jetons sensibles.
Réponse
Si des indicateurs de QLNX sont trouvés, isolez immédiatement le système affecté, collectez les images mémoire et disque, et terminez le processus malveillant. Supprimez les entrées non autorisées de /etc/ld.so.preload, effacez les fichiers malveillants compilés et nettoyez le fichier de verrouillage utilisé par l’implant. Tous les identifiants potentiellement exposés, en particulier les jetons cloud et de registre de package, doivent être remplacés sans délai. Les enquêteurs devraient également évaluer si des systèmes, dépôts ou environnements de construction de la chaîne d’approvisionnement ont été contaminés pendant l’intrusion. .so files, and clear the lock file used by the implant. All potentially exposed credentials, especially cloud and package registry tokens, should be rotated without delay. Investigators should also assess whether any supply-chain systems, repositories, or build environments were contaminated during the intrusion.
graph TB %% Definiciones de clase 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 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>: inicia 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/>Ocultación de 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 privilegios superiores »] 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 solicitud »] 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, autoarranque 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 eliminación de 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 – process hollowing »] 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 desde 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 desde almacenes de contraseñas – módulo PAM »] class technique_pam technique %% Fase de recopilación action_collection[« <b>Acción</b> – <b>Recopilación</b>: captura datos del portapapeles y capturas 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 C2 action_c2[« <b>Acción</b> – <b>Mando y control</b>: exfiltración de datos mediante TLS/HTTPS cifrado »] class action_c2 action technique_exfil[« <b>Técnica</b> – T1041:<br/>Exfiltración por canal C2 »] class technique_exfil technique %% Movimiento lateral action_lateral[« <b>Acción</b> – <b>Movimiento lateral</b>: usa claves SSH recopiladas 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 –>|ejecuta| 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
Flux d’attaque
Détections
Tentative de communication de recherche d’IP possible (via dns)
Voir
Autostart suspect .desktop déposé dans le profil utilisateur (via file_event)
Voir
Un fichier caché a été créé sur un hôte Linux (via file_event)
Voir
IOCs (HashSha256) pour détecter : Quasar Linux (QLNX) – Une prise de pied silencieuse dans la chaîne d’approvisionnement: À l’intérieur d’un RAT Linux complet avec rootkit, porte dérobée PAM, collecte d’identifiants et plus
Voir
IOCs (HashSha1) pour détecter : Quasar Linux (QLNX) – Une prise de pied silencieuse dans la chaîne d’approvisionnement: À l’intérieur d’un RAT Linux complet avec rootkit, porte dérobée PAM, collecte d’identifiants et plus
Voir
IOCs (HashMd5) pour détecter : Quasar Linux (QLNX) – Une prise de pied silencieuse dans la chaîne d’approvisionnement: À l’intérieur d’un RAT Linux complet avec rootkit, porte dérobée PAM, collecte d’identifiants et plus
Voir
Détection de l’exécution sans fichier et de l’injection de code par QLNX [Création de processus Linux]
Voir
## Exécution de la simulation
Prérequis : Le pré-contrôle de télémétrie et de base doit avoir réussi.
Justification : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer la télémétrie attendue par la logique de détection.
-
Narratif de l’attaque et commandes :
- Étape 1 – Génération de charge utile : L’attaquant écrit une charge utile C minimale qui appelle
memfd_createpour créer un fichier exécutable anonyme en mémoire, écrit un shellcode simple (par exemple,execve("/bin/sh", …)), le marque exécutable, puis le lance viaexecveat. - Étape 2 – Compilation à la volée : Utilisation de
gcc(l’indicateur visible dans la règle) l’attaquant compile la source sans toucher le disque (sortie dirigée vers/dev/fd/3). - Étape 3 – Exécution et injection : Le binaire compilé s’exécute, invoque
memfd_create, charge le shellcode, et appelle finalementexecveatpour exécuter l’ELF résident en mémoire. Optionnelptracepeut être utilisé pour injecter du code dans un processus frère, ce qui satisferait également la règle.
- Étape 1 – Génération de charge utile : L’attaquant écrit une charge utile C minimale qui appelle
-
Script de test de régression :
#!/usr/bin/env bash # # Simulation d'exécution sans fichier à la QLNX # Génère un ELF en mémoire via memfd_create et l'exécute avec execveat. # Nécessite : gcc, libcap2-bin (pour la démonstration execveat), et des règles auditd du pré-vol. set -euo pipefail # 1️⃣ Créer une source C qui effectue la danse 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) { // Create an anonymous file descriptor (memfd) int fd = syscall(SYS_memfd_create, "memfd_payload", MFD_CLOEXEC); if (fd == -1) _exit(1); // Simple ELF binary that just execve /bin/sh const unsigned char elf[] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ... (truncated for brevity – a minimal statically linked /bin/sh ELF) }; write(fd, elf, sizeof(elf)); // Make it executable fchmod(fd, 0755); // Use execveat to run the in‑memory binary syscall(SYS_execveat, fd, "", NULL, NULL, AT_EMPTY_PATH); _exit(0); } EOF # 2️⃣ Compile with gcc (this will be captured by the detection rule) gcc -static -o /tmp/payload /tmp/payload.c # 3️⃣ Execute the malicious binary – this triggers execveat /tmp/payload # 4️⃣ Cleanup rm -f /tmp/payload /tmp/payload.c -
Commandes de nettoyage :
# Supprimez les fichiers résiduels et déchargez les règles d'audit potentielles (si l'environnement de test est jetable) 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