Remco SprootenRuben Groenewoud

Logiciels malveillants hors-la-loi pour Linux : Persistants, peu sophistiqués et étonnamment efficaces

Outlaw est un logiciel malveillant Linux persistant qui utilise des tactiques simples de force brute et de minage pour maintenir un réseau de zombies de longue durée.

33 minutes de lectureAnalyse des malwares
Logiciels malveillants hors-la-loi pour Linux : Persistants, peu sophistiqués et étonnamment efficaces

Préface

OUTLAW est un logiciel de minage de pièces de monnaie à auto-propagation, persistant mais peu sophistiqué, dont plusieurs versions ont été observées au cours des dernières années[1],[2],[3],[4]. Malgré l'absence de furtivité et de techniques d'évasion avancées, il reste actif et efficace en s'appuyant sur des tactiques simples mais efficaces telles que le forçage brutal de SSH, la persistance basée sur les clés SSH et les crons, ainsi que les mineurs de matières premières et les canaux IRC modifiés manuellement. Cette persistance montre que les opérateurs de réseaux de zombies peuvent avoir un impact important sans avoir recours à des techniques sophistiquées.

Pour mieux comprendre le comportement et les modes opératoires d'OUTLAW, nous avons déployé un pot de miel conçu pour attirer et observer les attaquants en action. En créant avec soin un environnement imitant un système vulnérable, nous avons réussi à appâter les adversaires pour qu'ils interagissent avec notre serveur. Cette interaction a révélé des actions automatisées et manuelles, les opérateurs saisissant les commandes directement, apportant des modifications à la volée et même se trompant de commande - des indicateurs clairs de l'implication humaine. Un GIF capturé illustre ces moments, offrant un rare aperçu de leur processus de prise de décision en temps réel.

En analysant OUTLAW, nous obtenons de nouvelles informations sur les outils utilisés par ses opérateurs et sur l'évolution de leurs stratégies au fil du temps. Ce logiciel malveillant offre une occasion précieuse d'appliquer les principes de l'ingénierie de la détection, car sa chaîne d'attaque couvre la quasi-totalité du cadre MITRE ATT&CK. L'examen de son processus d'infection nous permet de développer des stratégies de détection efficaces qui tirent parti de ses comportements prévisibles et répétitifs.

Ce rapport fournit une analyse complète de la chaîne d'attaque, y compris des règles de détection détaillées et des requêtes de chasse. En décomposant les composants d'OUTLAW, nous démontrons comment un logiciel malveillant, même rudimentaire, peut conserver sa longévité dans les environnements modernes et comment les défenseurs peuvent tirer parti de sa simplicité pour améliorer la détection et la réponse.

Principaux points abordés

  • Persistant mais non sophistiqué: OUTLAW reste actif malgré l'utilisation de techniques de base telles que le forçage brutal de SSH, la manipulation de clés SSH et la persistance basée sur cron.
  • Outils de base: Le logiciel malveillant déploie des mineurs XMRig modifiés, exploite IRC pour le C2 et inclut des scripts accessibles au public pour la persistance et l'évasion de la défense.
  • Surface d'attaque étendue: La chaîne d'infection d'OUTLAW s'étend sur la quasi-totalité du cadre MITRE ATT&CK, ce qui offre de nombreuses possibilités de détection et de chasse.
  • Propagation de type ver: OUTLAW utilise ses hôtes compromis pour lancer d'autres attaques SSH par force brute sur leurs sous-réseaux locaux, ce qui permet d'étendre rapidement le réseau de zombies.

OUTLAW Aperçu

OUTLAW suit un processus d'infection en plusieurs étapes qui commence par le téléchargement et l'exécution de sa charge utile, l'établissement de la persistance et l'expansion de son réseau de zombies par le biais d'attaques SSH par force brute. La chaîne d'exécution est présentée ci-dessous :

1. Infection initiale & Déploiement

  • L'attaque commence lorsque tddwrt7s.sh télécharge le paquet dota3.tar.gz à partir d'un serveur C2.
  • Le script initall.sh extrait s'exécute, donnant le coup d'envoi à la chaîne d'infection.

2. Prendre le contrôle & Persistance

  • Le logiciel malveillant assure sa domination en tuant les foreurs bruts et les mineurs concurrents.
  • Il se déploie ensuite :
    • Modification de XMRIG pour le minage de crypto-monnaie (connexion à un pool de minage).
    • STEALTH SHELLBOT pour le contrôle à distance via IRC C2.
    • BLITZ pour effectuer des attaques SSH par force brute.

3. Propagation & Expansion

  • Le module brute-force récupère des listes de cibles à partir d'un serveur SSH C2 et tente des attaques SSH par force brute sur de nouvelles machines.
  • Les systèmes compromis avec succès sont infectés, ce qui répète le cycle.

Cette boucle d'infection automatisée permet à OUTLAW de rester actif et rentable avec un minimum d'efforts de la part des attaquants. Examinons de plus près l'ensemble de la chaîne d'attaque.

Chaîne d'exécution OUTLAW

OUTLAW couvre efficacement un large éventail de tactiques et de techniques dans le cadre de MITRE ATT&CK. Cette section décrit son comportement afin de donner un aperçu de sa chaîne d'infection et de ses méthodes.

Accès initial : blitz

OUTLAW obtient un accès initial par le biais d'un forçage brutal opportuniste de SSH, en ciblant les systèmes dont les informations d'identification sont faibles ou par défaut. Le logiciel malveillant utilise son composant blitz, également connu sous d'autres noms tels que kthreadadd, pour effectuer des analyses et des tentatives d'identification de mot de passe en grand nombre. Il s'appuie sur des listes d'adresses IP et d'informations d'identification extraites de ses serveurs C2.

OUTLAW agit également comme un ver, s'installant automatiquement sur tous les systèmes qu'il réussit à compromettre. Ce mécanisme d'autopropagation lui permet de se propager rapidement dans les réseaux, transformant chaque appareil nouvellement infecté en un autre nœud pour d'autres tentatives de forçage brutal et d'infection.

Nous examinerons plus en détail la manière dont OUTLAW exécute ces attaques et se propage dans la suite de cet article.

Exécution : tddwrt7s.sh

Les premières infections par OUTLAW semblent provenir d'un script dropper simple : tddwrt7s.sh. Ce script shell vérifie la présence d'une installation existante. Si le logiciel malveillant est déjà présent et décompacté, il exécute le script initall, ce qui déclenche la chaîne d'infection. Dans le cas contraire, il tentera de télécharger le paquet à partir d'une liste de serveurs de transit fournis. À titre d'illustration, vous trouverez ci-dessous un extrait du compte-gouttes :

Le paquet dota3.tar.gz extrait son contenu dans un dossier caché appelé .rsync, et contient les entrées suivantes :

 ├── a
 │   ├── a
 │   ├── init0
 │   ├── kswapd0
 │   ├── kswapd01
 │   ├── run
 │   ├── socat
 │   └── stop
 ├── b
 │   ├── a
 │   ├── run
 │   └── stop
 ├── c
 │   ├── blitz
 │   ├── blitz32
 │   ├── blitz64
 │   ├── go
 │   ├── run
 │   ├── start
 │   ├── stop
 │   └── v
 ├── init
 ├── init2
 └── initall

Décortiquons les chaînes d'exécution une à une.

Script d'initialisation principal : initall

Les trois scripts init contrôlent le flux d'exécution global et le déploiement du logiciel malveillant. En commençant par le script initall, l'initialisateur principal détermine le chemin d'exécution à suivre. Il vérifie l'environnement du système et décide d'utiliser init ou init2 en fonction des autorisations de fichiers et des répertoires disponibles.

Ces scripts init utilisent tous l'obscurcissement par concaténation de chaînes à base de variables, où les commandes sont divisées en petits fragments de variables qui sont dynamiquement concaténés et exécutés, ce qui rend l'analyse statique plus difficile. Par exemple, le script initall se présente comme suit :

Cependant, en remplaçant le eval par un echo, nous pouvons obtenir la sortie sans aucun effort :

Par défaut, ce script exécute systématiquement init. Il s'agit du principal chemin d'exécution qui installe le logiciel malveillant dans le répertoire caché ~/.configrc6. Le chemin d'exécution de secours est init2, qui est utilisé lorsque ~/.configrc6 est inaccessible. La principale différence est que ce chemin conserve tous les composants dans le répertoire de travail actuel. En appliquant le même principe de désobfuscation que précédemment, nous obtenons les deux scripts suivants :

Le premier script (init) cache ses composants dans le répertoire caché ~/.configrc6, tandis que le second script (init2) s'exécute directement à partir du répertoire de travail. Malgré cette différence, le flux d'exécution reste le même, démarrant le binaire nommé a dans les répertoires a/ et b/ en tant que processus d'arrière-plan et établissant la persistance. Dans les deux scripts, le logiciel malveillant installe des tâches cron qui exécutent ses binaires à intervalles réguliers et au redémarrage du système :

5 6 * * 0   ~/.configrc6/a/upd
@reboot     ~/.configrc6/a/upd
5 8 * * 0   ~/.configrc6/b/sync
@reboot     ~/.configrc6/b/sync
0 0 */3 * * ~/.configrc6/c/aptitude

Bien que les scripts exécutent le binaire a dans les répertoires a/ et b/ presque simultanément, nous suivrons d'abord le flux d'exécution du répertoire a/.

Sous-programme Exécution du répertoire a/ : XMRIG

Le premier script exécuté est a, qui supprime toutes les tâches cron existantes à l'aide de crontab -r et stocke ensuite le répertoire de travail actuel dans une variable. Il crée ensuite un script shell appelé upd qui vérifie si un processus (stocké dans bash.pid) est toujours en cours d'exécution. Si le processus n'est pas en cours d'exécution, il exécute ./run en tant que processus d'arrière-plan, ce qui garantit que le logiciel malveillant est continuellement redémarré s'il est interrompu.

En outre, nous voyons quelques commandes commentées, indiquant que d'autres versions de ce logiciel malveillant peuvent exister sous des noms tels que rsync, go, kswapd0, blitz, et redtail.

Plus loin dans le script, une fonction est créée pour vérifier si /sys/module/msr/parameters/allow_writes existe et lui attribuer la valeur "sur" afin de permettre l'écriture dans les registres spécifiques au modèle (MSR). Si le fichier n'existe pas, il active les écritures MSR par le biais de la commande modprobe msr allow_writes=on.

Ensuite, la fonction identifie l'unité centrale active en vérifiant /proc/cpuinfo et applique des valeurs de registre MSR spécifiques pour optimiser les performances.

Enfin, la fonction optimise l'utilisation de la mémoire en activant hugepages pour tous les cœurs de l'unité centrale, ce qui augmente l'efficacité de l'accès à la mémoire. Il calcule le nombre de hugepages nécessaires en fonction des processeurs disponibles (nproc) et les place dans les répertoires /sys/devices/system/node/node*/hugepages/.

La fonction optimize_func() n'a pas été créée par l'auteur de la menace. L'auteur de la menace a utilisé un script open-source du dépôt XMRig, en particulier le script randomx_boost.sh, pour faciliter sa chaîne d'infection.

En fonction des privilèges de l'utilisateur, il exécutera l'ensemble de la fonction d'optimisation ou tentera de définir le nombre de hugepages à l'aide de sysctl:

Toutes les étapes réalisées dans cette chaîne montrent des signes apparents d'optimisation du système de minage de crypto-monnaies. Enfin, le script accorde des droits d'exécution au fichier upd et à "777" à tous les fichiers de son dossier et exécute upd.

Comme nous l'avons vu plus haut dans la chaîne, le fichier upd vérifie si le processus stocké dans bash.pid est toujours en cours d'exécution et, s'il ne l'est pas, il exécute le script run:

Le script run lancera le script stop, qui est un script typique qui réduit les défenses de toutes les configurations de mineurs connues et tue tous les processus de mineurs connus sur la base du nom/de l'ID du processus ou du trafic réseau. Une version abrégée de ce script est illustrée ci-dessous :

Il est intéressant de noter la présence d'un second script de destruction de processus appelé init0, qui est un script open-source permettant de tuer les mineurs de crypto-monnaie dans un environnement Linux. Ce script n'est pas exécuté, car le flux d'exécution de ce script a été commenté dans le script a.

Une fois que le script stop a été exécuté avec succès, le script run lance les binaires kswapd01 et kswapd0 en arrière-plan via nohup.

kswapd01

Le binaire kswap01 joue un rôle essentiel en assurant une communication persistante au sein de l'infrastructure du logiciel malveillant. Sa tâche principale est de surveiller et de maintenir un processus continu socat, qui est essentiel pour la communication avec les serveurs C2 de l'attaquant.

Lorsqu'il est exécuté, kswap01 vérifie s'il existe des processus socat en cours d'exécution sur la machine infectée. Si aucune connexion active n'est trouvée, il arrête tous les processus socat en cours et sélectionne une autre adresse IP à partir d'une liste prédéfinie. Le binaire établit ensuite une nouvelle connexion en lançant un nouveau processus socat qui écoute sur la machine locale et transmet le trafic à un serveur distant, généralement sur le port 4444. Le logiciel malveillant garde ainsi le contrôle du système infecté et peut continuer à recevoir des commandes de l'attaquant.

Cependant, il est important de noter que toutes les versions du logiciel malveillant OUTLAW observées n'incluent pas le binaire socat. Dans ces cas, la fonctionnalité fournie par socat est soit reproduite par d'autres moyens, soit simplement omise, en s'appuyant sur d'autres méthodes pour maintenir la persistance et la communication.

En effectuant ces vérifications et ces modifications, kswap01 contribue à maintenir la persistance de la connexion C2, ce qui rend plus difficile pour les défenseurs d'interrompre le canal de communication entre l'attaquant et le système compromis.

kswapd0

Le fichier nommé kswapd0 est une copie malicieusement modifiée du mineur de crypto-monnaie légitime XMRig (plus précisément la version 6.22.1).

Deux modifications majeures définissent le comportement du logiciel malveillant :

1. Commandes du shell de démarrage

  • Le logiciel malveillant supprime et recrée le dossier ~/.ssh de la victime, injecte une clé publique SSH contrôlée par l'attaquant et réapplique des autorisations restrictives (chattr +ia) pour empêcher toute modification. Cela permet d'obtenir un accès SSH permanent.
  • Il supprime ou verrouille également les fichiers de configuration existants de XMRig (par exemple, ~/.xmrig.json, ~/.config/xmrig.json) afin de garantir que les paramètres du mineur intégré de l'attaquant restent intacts.

2. Configuration du mineur embarqué

  • Le binaire est compilé avec une configuration minière interne, permettant à XMRIG de fonctionner sans fichier de configuration externe.
  • Le trafic minier est acheminé vers plusieurs pools de Monero via des ports en clair (:80, :4444), SSL (:442), et parfois des adresses TOR. Notez que le port 442 n'est pas une coquille.
  • La configuration optimise les performances en
    • Exécution du mineur en arrière-plan
    • Permettre l'utilisation de grandes pages pour RandomX
    • Mise à zéro du niveau de don
    • Maximiser l'utilisation des threads de l'unité centrale

En verrouillant les administrateurs, en empêchant les changements de configuration et en injectant une clé SSH contrôlée par l'attaquant, kswapd0 sert de mécanisme de persistance furtif - permettant l'extraction continue de Monero et l'accès à distance non autorisé, tout en se faisant passer pour un processus système légitime.

Exécution de sous-programmes dans le répertoire b/ : SHELLBOT FURTIF

Comme nous l'avons décrit précédemment, le binaire a du répertoire b/ a également été exécuté via les scripts init.

Ce script lance un autre script stop dont l'objectif est le même que celui décrit précédemment : tuer tous les processus nuisibles connus. Ensuite, il crée un script appelé sync, dans le seul but d'exécuter le script run. Ce script est référencé dans le cronjob que nous avons décrit précédemment. Le script run contient trois blobs encodés en base64, qui sont envoyés à perl. Vous trouverez ci-dessous un exemple de script abrégé :

Lors du décodage base64, les scripts perl obfusqués sont identifiés. Ces scripts utilisent un utilitaire Perl Obfuscator public pour obscurcir leur contenu, ce qui les rend plus difficiles à analyser :

Heureusement, l'auteur a laissé les commentaires standard dans les scripts obscurcis. En utilisant le désobfuscateur disponible publiquement, nous pouvons désobfusquer le script à l'aide de la commande suivante :

perl decode-stunnix-5.17.1.pl < obfuscated_run.pl > deobfuscated_run.pl

Ensuite, nous pouvons voir le contenu désobfusqué :

Il ne s'agit que des premières lignes du script, à titre d'illustration. Cette technique de désobfuscation peut également être utilisée pour les autres scripts Perl obfusqués utilisés par OUTLAW. Nous allons examiner ces scripts de plus près dans un instant.

Le script se termine par l'installation de sa propre clé publique SSH pour un accès permanent, la définition de permissions restrictives et la création d'un répertoire immuable pour empêcher toute modification à l'aide de chattr:

Scripts STEALTH SHELLBOT

Les scripts STEALTH SHELLBOT utilisés dans OUTLAW ne sont pas des scripts personnalisés, mais plutôt des scripts de bot IRC accessibles au public, souvent issus d'anciens dépôts GitHub et de forums clandestins. Ces scripts existent depuis plus de dix ans et ont été conçus à l'origine pour l'administration à distance, l'automatisation et la gestion des réseaux de zombies. Cependant, les auteurs de logiciels malveillants les ont depuis lors réaffectés à des activités malveillantes.

Les scripts SHELLBOT fonctionnent comme des portes dérobées basées sur IRC, permettant aux attaquants de contrôler à distance les machines infectées par le biais de commandes prédéfinies envoyées via un canal IRC. Une fois connectés au serveur IRC de l'attaquant, ces bots peuvent :

  • Exécuter des commandes arbitraires de l'interpréteur de commandes
  • Télécharger et exécuter des charges utiles supplémentaires
  • Lancer des attaques DDoS (dans les anciennes variantes)
  • Voler des informations d'identification ou exfiltrer des informations système
  • Gérer les mineurs de crypto-monnaie ou d'autres composants de logiciels malveillants

OUTLAW intègre ces anciens scripts SHELLBOT en tant que mécanisme de persistance secondaire, ce qui garantit que même si ses modules de force brute sont interrompus, les attaquants conservent un point d'ancrage à distance. Le bot se connecte à un C2 IRC contrôlé par l'attaquant, où il écoute d'autres commandes, ce qui permet l'exécution à la demande d'actions malveillantes.

Bien que ces scripts ne soient pas nouveaux, leur utilisation continue met en évidence le fait que les attaquants s'appuient sur des outils accessibles au public plutôt que de développer de nouveaux logiciels malveillants à partir de zéro.

Exécution de sous-programmes dans le répertoire c/ : Client Bruteforcer

Dans le cadre de la troisième et dernière sous-routine, un outil de force brute personnalisé est déployé. Cette chaîne commence, comme les sous-programmes précédents, par les scripts init et init2. Ces scripts appellent tous deux le script start, dont le contenu est le suivant :

Ce script enregistre le répertoire de travail actuel, accorde toutes les autorisations (777) à tous les fichiers du répertoire actuel et crée un script nommé aptitude (qui est également appelé par le travail cron précédemment mis en place), afin d'exécuter le script run. Après avoir créé aptitude, il reçoit des autorisations d'exécution et s'exécute.

Le script run est utilisé pour recueillir des informations sur l'architecture du CPU et compter les cœurs du CPU afin de déterminer le comportement de l'exécution, comme indiqué ci-dessous :

Si le système est x86_64, il vérifie si le CPU a moins de 7 cœurs, introduisant un délai aléatoire avant d'exécuter ./go en arrière-plan. Si 7 ou plus de cœurs sont détectés, l'exécution est sautée ou modifiée (avec un binaire golan précédemment utilisé et maintenant commenté). L'auteur de la menace a peut-être testé ou travaillé avec un binaire Golang capable d'exploiter pleinement le nombre de cœurs présents dans un système, mais ce n'est qu'une supposition.

Dans la plupart des scénarios, le flux d'exécution se déplace vers le script bash appelé go:

Le script détermine l'architecture du processeur et attribue un nombre de threads en conséquence :

  • Systèmes basés sur ARM → 75 threads
  • i686 (x86 32 bits) → 325 threads
  • Tous les autres (par défaut) → 475 threads

Il entre ensuite dans une boucle infinie, exécutant les actions suivantes :

  1. Crée et nettoie les fichiers temporaires (v, p, ip, xtr*, a.*, b.*).
  2. Écrit des valeurs codées en dur (257.287.563.234 et sdaferthqhr34312asdfa) dans les fichiers c et d.
  3. Attend un délai aléatoire (1-30 secondes) avant de lancer blitz.
  4. Exécute blitz pendant 3 heures avec les paramètres spécifiés (-t $threads suggère un traitement multithread).
  5. Effectue un nettoyage post-exécution, en supprimant les fichiers temporaires et les fichiers journaux avant de répéter le cycle.

BLITZ

OUTLAW est un ver qui se propage de lui-même et qui se propage latéralement par le biais d'attaques SSH par force brute à l'aide de BLITZ, son forceur de force brute personnalisé. Conçu pour des attaques agressives et automatisées, BLITZ recherche et compromet systématiquement les systèmes dont les identifiants SSH sont faibles ou par défaut, ce qui permet au logiciel malveillant d'étendre son emprise avec une intervention minimale de la part de l'attaquant.

Processus d'exécution de BLITZ

Une fois exécuté, BLITZ suit une séquence d'attaque structurée :

  1. Cible IP et récupération des données d'identification
    • BLITZ contacte un serveur SSH C2 pour obtenir une liste d'adresses IP cibles et de paires d'identifiants.
  2. Authentification par la force brute & Profilage du système
    • En utilisant le forçage brutal SSH multithread, BLITZ tente de s'authentifier à l'aide d'informations d'identification volées.
    • Une fois l'accès obtenu, il :
      • Modifie le mot de passe de l'utilisateur pour l'accès permanent.
      • Exécute les commandes de reconnaissance du système, collecte les données :
        • Privilèges de l'utilisateur
        • Détails de l'unité centrale
        • Informations sur la bannière SSH
        • Version du système d'exploitation
      • Exfiltre les données recueillies vers le serveur C2.
  3. Subnet Scanning & Mouvement latéral
    • Le logiciel malveillant analyse le sous-réseau local des systèmes nouvellement compromis, identifiant d'autres machines accessibles par SSH à attaquer.
  4. Auto-réplication & Déploiement de logiciels malveillants
    • Au lieu de télécharger à partir d'un C2 externe, BLITZ transfère directement le paquet de logiciels malveillants dota3.tar.gz de l'hôte infectant à la nouvelle victime, renforçant ainsi la persistance et minimisant la dépendance à l'égard de l'infrastructure externe.

En combinant les attaques automatisées par force brute, le profilage des systèmes, l'analyse des sous-réseaux et le transfert direct des logiciels malveillants, BLITZ maximise l'efficacité de l'infection tout en assurant l'expansion continue du réseau.

Analyse binaire & C2 Communication

Au-delà des opérations de force brute, l'analyse révèle que BLITZ exécute ses tâches en interagissant avec les commandes shell du système et une bibliothèque SSH intégrée. Une fois connecté à un système compromis, il interroge le serveur C2 pour connaître les cibles mises à jour et relayer les données d'authentification.

En outre, OUTLAW intègre une clé SSH codée en dur pour l'authentification C2, qui doit être déverrouillée à l'aide du mot de passe "pegasus". En cas d'authentification réussie, Blitz enregistre les détails de l'attaque dans un fichier "v", structuré comme suit :

Ce journal contient :

  • Nom d'utilisateur et mot de passe originaux utilisés dans l'attaque.
  • L'adresse IP de la victime et le nouveau mot de passe défini par le logiciel malveillant.
  • Port SSH et détails du système d'exploitation, y compris les spécifications du processeur.

Une fois que BLITZ a terminé son cycle d'analyse, le fichier "v" est exfiltré vers un serveur SSH C2, ce qui permet aux attaquants de disposer d'une liste constamment mise à jour des systèmes infectés.

L'après-compromis

Pour analyser le comportement de l'attaquant après la compromission, nous avons délibérément mis en place un pot de miel et téléchargé de manière proactive ses informations d'identification sur le même serveur SSH C2 que celui utilisé par l'attaquant. L'attaquant est ainsi invité à pénétrer dans notre environnement contrôlé, ce qui nous permet de suivre de près ses actions ultérieures.

Quelques jours après que BLITZ ait réussi à forcer brutalement et à définir un nouveau mot de passe sur le système du pot de miel, nous avons observé une connexion à distance à l'aide de ces informations d'identification. La connexion provient de 212.234.225[.]29. L'attaquant a immédiatement effectué une reconnaissance de base en exécutant la commande w pour vérifier qui était connecté, puis en exécutant ps pour voir quels processus étaient en cours d'exécution. Au cours de la saisie des commandes, ils ont fait une petite faute de frappe et ont interrompu l'invite avec un rapide Ctrl+C, ce qui indique une interaction manuelle plutôt qu'un script automatisé à ce stade. Ensuite, l'attaquant a collé une série de commandes pour télécharger une nouvelle copie de dota3.tar.gz via wget, l'a décompressée et a exécuté le nouveau script récupéré.

Toute cette chaîne d'activité peut être affichée grâce à la vue de session, un outil d'investigation qui vous permet d'examiner les données des processus Linux organisées dans une structure arborescente selon le modèle d'événement logique de Linux, avec des processus organisés par parenté et par heure d'exécution. Il affiche les événements dans un format très lisible inspiré du terminal. Il s'agit donc d'un outil puissant pour surveiller et étudier l'activité des sessions sur votre infrastructure Linux et comprendre le comportement des utilisateurs et des services.

La chaîne d'attaque présentée ci-dessus reflète la méthode d'infection initiale, ce qui suggère que l'auteur de l'attaque mettait à jour les composants ou réinfectait l'hôte pour maintenir la persistance de l'infection. Peu après avoir vérifié que la charge utile mise à jour s'exécutait, l'attaquant s'est déconnecté de l'hôte, laissant derrière lui un environnement propice à la poursuite du forçage brutal de SSH, au minage de crypto-monnaies et à la prise de contrôle à distance par l'intermédiaire d'IRC.

Cette brève connexion nous rappelle que même les campagnes peu sophistiquées peuvent comporter des poches d'activité interactive de la part des attaquants - une sorte de contrôle de qualité manuel "" -, ce qui souligne l'importance d'une détection rapide et d'un endiguement rapide.

Détecter OUTLAW grâce à MITRE ATT&CK

OUTLAW est un logiciel malveillant Linux qui s'appuie sur des attaques SSH par force brute, le minage de crypto-monnaies et la propagation de type ver pour infecter des systèmes et en garder le contrôle. Bien qu'il ne soit pas très sophistiqué, il couvre un large éventail de techniques MITRE ATT&CK, ce qui en fait un cas efficace pour l'ingénierie de détection.

Cette section présente la chaîne d'attaque d'OUTLAW à MITRE ATT&CK, en mettant en évidence les règles d'Elastic SIEM et des points d'extrémité, ainsi que les requêtes de chasse aux menaces qui peuvent identifier son activité à différents stades.

OUTLAW suit un flux d'infection structuré :

  • Accès initial - force brute SSH contre des informations d'identification faibles.
  • Exécution - Exécute des scripts malveillants pour lancer plusieurs étapes de l'infection par des logiciels malveillants.
  • Persistance - Installe des tâches cron et modifie les clés SSH.
  • Évasion de la défense - Se cache dans des répertoires cachés, modifie les autorisations de fichiers, utilise des techniques d'empaquetage, de codage des commandes et d'obscurcissement des scripts.
  • Accès aux informations d 'identification - Modifie les informations d'identification et injecte des clés SSH publiques.
  • Découverte - Enumère les informations relatives à l'utilisateur, au système et au matériel.
  • Mouvement latéral - Propagation par force brute SSH interne et transfert de logiciels malveillants.
  • Collecte & Exfiltration - Collecte et exfiltre les données du système vers son C2.
  • Commandement et contrôle - Utilise socat et STEALTH SHELLBOT pour les communications C2.
  • Impact - Lance XMRIG pour miner de la crypto-monnaie et utilise l'hôte infecté comme nœud de force brute.

Les sections suivantes détaillent les stratégies de détection pour chaque technique, afin d'aider les défenseurs à identifier et à atténuer efficacement les infections d'OUTLAW.

TA001 : Accès initial

OUTLAW obtient un accès initial par le biais d'un forçage brutal opportuniste de SSH, en ciblant les systèmes dont les informations d'identification sont faibles ou par défaut. Les règles de détection préconstruites d'Elastic peuvent détecter avec succès cette méthode d'accès initial. Il s'agit notamment de

En outre, plusieurs règles basées sur les journaux d'authentification permettent de détecter les authentifications SSH suspectes :

En plus de s'appuyer sur les détections, il est important d'intégrer la chasse aux menaces dans votre flux de travail. Elastic Security fournit plusieurs requêtes de chasse utilisant ES|QL et OSQuery, disponibles publiquement dans notre référentiel de règles de détection, en particulier dans le sous-répertoire de chasse Linux. Par exemple, les deux chasses suivantes peuvent aider à identifier les différentes étapes de l'attaque :

TA002 : Exécution

Après avoir obtenu l'accès initial, OUTLAW exécute une série de scripts et de binaires pour prendre le contrôle. Après le téléchargement et le déballage, nous détectons :

Le script STEALTH SHELLBOT est détecté par le biais de :

En outre, le logiciel malveillant exécute plusieurs commandes système suspectes, ce qui déclenche des attaques :

TA003 : Persistance

Cette combinaison d'exécution en mode cron et de manipulation de clés SSH permet à OUTLAW de s'implanter durablement sur les systèmes compromis. Ces deux techniques de persistance font l'objet de recherches approfondies dans notre publication "Linux Detection Engineering - A primer on persistence mechanisms". Nous pouvons détecter ces techniques à l'aide des règles SIEM et endpoint suivantes :

En outre, nous pouvons rechercher ces techniques par le biais des recherches ES|QL et OSQuery suivantes :

TA005 : Défense Evasion

OUTLAW utilise de multiples techniques d'évasion de la défense pour éviter d'être détecté. L'une de ses principales méthodes est le décodage Base64, qui est détecté à l'aide des règles prédéfinies suivantes :

En outre, les binaires du logiciel malveillant sont emballés avec UPX, ce qui réduit leur taille et modifie leur signature afin d'échapper à la détection traditionnelle des logiciels malveillants. Une fois que le logiciel malveillant s'est décompressé dans la mémoire, il est détecté par nos détections générales de logiciels malveillants.

Poursuivant la chaîne d'exécution, le logiciel malveillant crée plusieurs fichiers et répertoires cachés et les modifie à l'aide de chattr:

Nous pouvons encore améliorer la détection grâce à la requête de chasse suivante :

TA006 : Accès aux justificatifs

OUTLAW maintient un accès permanent à un système compromis en manipulant les informations d'identification. Après une authentification SSH réussie par force brute, le logiciel malveillant remplace le fichier SSH authorized_keys existant par une nouvelle version contenant une clé publique SSH malveillante, ce qui permet d'obtenir un accès permanent. Ce phénomène est détecté par les signaux suivants :

Le logiciel malveillant modifie ensuite les informations d'identification de l'utilisateur pour le compte authentifié en saisissant un nouveau mot de passe à l'aide de l'utilitaire passwd:

TA007 : Découverte

OUTLAW recueille des informations sur le système une fois l'infection réussie afin d'établir le profil de l'environnement compromis. Le logiciel malveillant exécute diverses commandes pour recueillir des informations sur le processeur du système, les privilèges de l'utilisateur, le système d'exploitation, l'utilisation de la mémoire et les binaires disponibles. Cette étape de reconnaissance permet à l'attaquant d'évaluer les capacités du système et de déterminer la meilleure façon d'utiliser la machine compromise. Tous ces éléments sont détectés au moyen de plusieurs règles de base, répertoriées dans notre répertoire rules_building_block. Vous trouverez ci-dessous une courte liste des plus importants d'entre eux déclenchés par OUTLAW :

Les paramètres d'interface par défaut n'incluent pas les règles des blocs de construction en raison de leur niveau de bruit relativement élevé. Toutefois, ces règles peuvent être activées pour faciliter l'identification des menaces potentielles.

TA008 : Mouvement latéral

Le logiciel malveillant OUTLAW se propage dans un réseau compromis en effectuant des attaques SSH internes par force brute. Nous pouvons identifier ce comportement grâce aux règles ES|QL suivantes :

Une fois qu'un système a été forcé brutalement, le logiciel malveillant, dota3.tar.gz, est déployé de l'hôte infecté vers la nouvelle cible. Le sous-réseau local est ensuite scanné à la recherche de cibles supplémentaires afin d'assurer la propagation continue du logiciel malveillant.

Les règles de détection préconstruites d'Elastic peuvent identifier ces tentatives de mouvement latéral :

En outre, lorsque le logiciel malveillant OUTLAW est copié sur un hôte distant, les alertes de prévention des logiciels malveillants se déclenchent.

TA009 : Collecte & TA010 : Exfiltration

OUTLAW recueille des informations de base sur le système, des informations d'identification et des détails SSH sur les machines compromises, principalement pour suivre les hôtes infectés et faciliter d'autres attaques. Ces données sont stockées dans un simple fichier texte avant d'être téléchargées vers un serveur C2. Étant donné que cette activité de collecte se limite à recueillir des informations sur le système et à les écrire dans un fichier, elle n'est pas suspecte en soi.

L'exfiltration se produit lorsque OUTLAW initie une connexion SSH sortante via le serveur sftp pour transférer les informations collectées vers un serveur C2 prédéfini. Bien que cela puisse ressembler à une activité SSH normale, nous pouvons détecter l'exécution suspecte d'utilitaires de transfert de fichiers par le biais d'ES|QL :

TA011 : Commandement et contrôle

OUTLAW communique avec son infrastructure C2 par de multiples canaux, ce qui permet aux attaquants de donner des ordres, d'exfiltrer des données et de gérer les systèmes infectés. Nous pouvons détecter plusieurs des utilitaires utilisés par le logiciel malveillant grâce aux règles suivantes :

Les mêmes requêtes de recherche qui ont permis de détecter les premières tentatives d'accès au logiciel malveillant peuvent également être utilisées pour rechercher cette activité C2. En outre, les requêtes de chasse suivantes peuvent être utilisées :

TA040 : Impact

OUTLAW a un impact sur les systèmes infectés en consommant des ressources CPU pour le minage de crypto-monnaie et en effectuant des attaques SSH par force brute pour se propager. Plusieurs optimisations du processeur et de la mémoire sont tentées avant de lancer le logiciel d'exploitation minière XMRIG modifié, y compris l'activation de l'accès à l'écriture MSR et le réglage des paramètres du noyau tels que les hugepages. Ces modifications peuvent être détectées grâce aux règles suivantes :

Comme OUTLAW tente d'activer l'accès en écriture au MSR via modprobe mais ne dispose pas des autorisations nécessaires, les règles liées au pilote du noyau sont déclenchées :

Ces règles surveillent directement les appels de service init_module() et finit_module(), par l'intermédiaire d'Auditd. Pour plus d'informations sur la manière de configurer l'intégration d'Auditd Manager pour capturer les événements des pilotes et bien plus encore, consultez la publication Linux Detection Engineering with Auditd (Ingénierie de détection Linux avec Auditd).

Simultanément, des tentatives de force brute SSH sont lancées à partir de l'hôte infecté, ce qui déclenche :

Tout au long de son exécution, OUTLAW exécute des scripts de mise à mort pour mettre fin aux logiciels malveillants concurrents ou aux processus résiduels des infections précédentes. Ce comportement déclenche :

Indicateurs de compromis (IOC)

L'ensemble des indicateurs est disponible sous forme de paquet sur Github.

Signatures de Yara

rule Linux_Hacktool_Outlaw_cf069e73 {
    meta:
        author = "Elastic Security"
        description = "OUTLAW SSH bruteforce component fom the Dota3 package"
        reference_sample = "c3efbd6b5e512e36123f7b24da9d83f11fffaf3023d5677d37731ebaa959dd27"
      
    strings:
        $ssh_key_1 = "MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI8vKBZRGKsHoCAggA"
        $ssh_key_2 = "MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBBC3juWsJ7DsDd2wH2XI+vUBIIJ"
        $ssh_key_3 = "UCQ2viiVV8pk3QSUOiwionAoe4j4cBP3Ly4TQmpbLge9zRfYEUVe4LmlytlidI7H"
        $ssh_key_4 = "O+bWbjqkvRXT9g/SELQofRrjw/W2ZqXuWUjhuI9Ruq0qYKxCgG2DR3AcqlmOv54g"
        $path_1 = "/home/eax/up"
        $path_2 = "/var/tmp/dota"
        $path_3 = "/dev/shm/ip"
        $path_4 = "/dev/shm/p"
        $path_5 = "/var/tmp/.systemcache"
        $cmd_1 = "cat /proc/cpuinfo | grep name | head -n 1 | awk '{print $4,$5,$6,$7,$8,$9;}'"
        $cmd_2 = "cd ~; chattr -ia .ssh; lockr -ia .ssh"
        $cmd_3 = "sort -R b | awk '{ if ( NF == 2 ) print } '> p || cat b | awk '{ if ( NF == 2 ) print } '> p; sort -R a"
        $cmd_4 = "rm -rf /var/tmp/dota*"
        $cmd_5 = "rm -rf a b c d p ip ab.tar.gz"
    condition:
        (all of ($ssh_key*)) or (3 of ($path*) and 3 of ($cmd*))
}

Aperçu des règles SIEM et Endpoint par MITRE ATT&CK Tactic

Conclusion

OUTLAW montre que même des logiciels malveillants peu sophistiqués peuvent persister et s'étendre efficacement dans les environnements modernes. Malgré l'absence de techniques d'évasion avancées, sa combinaison d'attaques SSH par force brute, d'autoreproduction et de composants modulaires lui permet de maintenir un réseau de zombies de longue durée. OUTLAW assure une expansion continue avec une intervention minimale de l'attaquant en exploitant les hôtes compromis pour propager les infections plus loin.

Notre expérience du pot de miel a fourni un rare aperçu du comportement réel de l'attaquant, confirmant que si une grande partie du fonctionnement d'OUTLAW est automatisée, il y a des moments d'interaction humaine directe. La possibilité d'observer des commandes manuelles, des tentatives de reconnaissance et même de simples erreurs typographiques met en évidence un aspect souvent négligé de la maintenance des botnets, à savoir le contrôle de qualité effectué par l'opérateur. Ces informations renforcent la nécessité d'élaborer des stratégies de détection qui tiennent compte non seulement des attaques automatisées, mais aussi des activités manuelles postérieures à la compromission.

En comprenant comment OUTLAW opère, se propage et monétise les infections, les défenseurs peuvent développer des stratégies de détection robustes pour atténuer son impact. Ce rapport fournit des règles SIEM exploitables, des requêtes de chasse aux menaces et des informations médico-légales, permettant aux équipes de sécurité de garder une longueur d'avance sur des menaces similaires en constante évolution.

Références

[1] Les logiciels malveillants de CounterCraft etDOTA3 se répètent encore et encore

[2] Juniper Networks, DOTA3 : Is Your Internet of Things Device Moonlighting ?

[3] SANS ISC, Hygiène Hygiène Hygiène Hygiène

[4] Darktrace, Outlaw Returns : Découvrir les caractéristiques du retour et les nouvelles tactiques

Partager cet article