Les experts d'ESET ont parlé de nouveaux logiciels malveillants ciblant les clusters HPC du monde entier. C'est intéressant pour plusieurs raisons. Malgré la taille relativement petite de la base de code (les échantillons analysés avaient une taille de 25 Ko), le malware est suffisamment complexe pour mener des attaques sur Linux, BSD et Solaris et, potentiellement, peut convenir aux attaques sur AIX et Microsoft Windows . Une autre caractéristique distinctive est la possibilité de transformer les serveurs infectés en nouveaux C&C à la commande de l'opérateur. En raison des nombreuses astuces et de la petite taille du code, les chercheurs l'ont nommé Kobalos - d'après les esprits grecs antiques espiègles qui ont autrefois volé Hercule et adoré tromper et effrayer les gens.
L'étude publiée par des experts décrit les vecteurs initiaux estimés des mécanismes de compromis, d'authentification et de distribution, des fonctions intégrées et fournit une analyse technique du code malveillant. Après cela, les experts signalent les signes de compromis et les méthodes appliquées de MITRE ATT & CK.
Nous avons eu l'idée que des personnes qui maîtrisent mal l'anglais, mais ne sont pas indifférentes aux recherches actuelles dans le domaine de la sécurité de l'information, en particulier à l'analyse des malwares, seraient intéressantes et utiles pour traduire l'analyse de tels, en notre avis, un malware inhabituel.
ESET Research a analysé Kobalos, un malware multiplateforme complexe et jusqu'alors inconnu conçu pour s'exécuter sous Linux, FreeBSD et Solaris. Étant donné que les victimes sont principalement des organisations bien connues, il ne fait aucun doute qu'elles ont été ciblées par le logiciel. Une fois déployé, Kobalos donne accès au système de fichiers et au terminal distant de l'hôte compromis, permettant aux attaquants d'exécuter des commandes arbitraires.
Kobalos possède des capacités de mise en réseau remarquables. Il peut fonctionner en mode passif ou en tant que bot, se connectant activement à ses serveurs C&C. Il est curieux que ces serveurs eux-mêmes aient été compromis par Kobalos: le code de leur utilisation se trouve dans tous les échantillons de ce malware.
Grâce à des recherches approfondies sur le réseau, ESET Research a pu identifier et informer les victimes de Kobalos. On ne sait pas quand ce logiciel a été développé, mais sa première activité connue, confirmée par une victime, a été enregistrée fin 2019. Le groupe d'attaquants qui dirigeait Kobalos a continué tout au long de 2020. Les techniques d'attaque Linux continuent d'évoluer et les auteurs de malwares mettent beaucoup d'efforts pour améliorer leurs conceptions. Kobalos est l'un de ces programmes.
Principales conclusions
- Kobalos est une porte dérobée multi-plateforme qui fonctionne sous Linux, FreeBSD et Solaris. Il y a des indications que ce logiciel peut exister sous AIX et même Windows.
- Kobalos , , , -. Kobalos , .
- Kobalos , .
- Kobalos C&C- . , .
- OpenSSH. Kobalos.
- Kobalos. , , - . , SSH.
Si vous avez suivi ESET Research ces dernières années, vous avez peut-être remarqué que nous préférons rechercher et documenter les logiciels malveillants côté serveur développés pour Linux et d'autres systèmes d'exploitation moins courants. L'un des premiers rapports de ce type est dédié à l' opération Windigo et décrit plusieurs familles de logiciels qui travaillent ensemble pour rediriger le trafic Internet, envoyer du spam et d'autres activités malveillantes. L'opération Windigo est basée sur Ebury, une porte dérobée OpenSSH qui vole les informations d'identification. Ebury peut compromettre le client et le serveur SSH sans modifier les exécutables OpenSSH. Au lieu de cela, il modifie la bibliothèque qu'ils sont en train de charger et corrige les fonctions pour pouvoir démarrer et voler les informations d'identification après le chargement de la porte dérobée. La tâche n'est pas facile, mais les auteurs d'Ebury ont réussi à la résoudre.
Après l'opération Windigo, nous avons découvert et décrit plusieurs autres logiciels malveillants sous Linux, tels que Mumblehard , Moose , Shishiga , et également décrit des dizaines de portes dérobées pour OpenSSH dans Le côté obscur du rapport ForSSHe .
Jusqu'à présent, nous n'avons pas rencontré de malwares Linux aussi difficiles à analyser qu'Ebury. Mais cette fois, la situation est différente: contrairement à Ebury, les actions de Kobalos ne semblent pas si vastes. Le nombre de voitures compromises par eux est de l'ordre de dizaines et, dans le cas d'Ebury, de dizaines de milliers. Cet article fournit une analyse technique complète de Kobalos, des cibles des attaquants et des indicateurs de compromission qui peuvent aider les victimes potentielles à trouver des logiciels malveillants et à s'en débarrasser.
Victimes
Après avoir analysé le malware, ESET a mené une analyse Internet approfondie à la recherche des victimes de Kobalos. Nous recherchions un comportement de porte dérobée spécifique, qui se caractérise par l'établissement d'une connexion TCP avec un hôte compromis à partir d'un port sortant spécifique.
Compte tenu de la complexité de ce logiciel, nous avons été surpris par le très petit nombre de victimes retrouvées. Cependant, les objectifs eux-mêmes n'ont manifestement pas été choisis par hasard: il s'agit d'ordinateurs haute performance (HPC) et de serveurs qui font partie de réseaux scientifiques et de recherche. L'un de ces ordinateurs avait au moins 512 Go de RAM et près de pétaoctets de stockage sur disque. Nous avons également trouvé d'autres organisations victimes bien connues, telles qu'un fournisseur de sécurité des terminaux (pas nous!).
Figure 1. Industries et régions auxquelles appartiennent les organisations compromises.
Dans certaines organisations, plusieurs serveurs ont été infectés à la fois. Nous avons informé toutes les victimes que nous avons trouvées et avons travaillé ensemble pour supprimer le malware. Merci à tous ceux qui ont répondu et partagé des informations qui nous ont aidés dans cette étude.
Vecteur initial de compromis
Nous ne savons pas de première main comment les systèmes ont été compromis afin que les attaquants puissent obtenir un accès administratif pour installer Kobalos. Nous ne pouvons que spéculer sur la base des preuves recueillies.
Sur les machines compromises dont les administrateurs système ont participé à l'enquête, nous avons découvert que le programme de vol d'informations d'identification SSH était présenté comme un client OpenSSH cheval de Troie. Déposer
/usr/bin/ssh
a été remplacé par un exécutable modifié qui a enregistré le nom d'utilisateur, le mot de passe, le nom d'hôte cible et les a enregistrés dans un fichier crypté. Par conséquent, nous pensons que le vol d'identité était l'un des moyens de distribution de Kobalos. Cela pourrait également expliquer pourquoi de nombreux réseaux universitaires ont été compromis: si un client SSH était utilisé par des étudiants ou des chercheurs de plusieurs universités, les informations d'identification de tous ces systèmes tiers pourraient être volées.
Un autre point d'entrée possible pourrait être l'exploitation d'une vulnérabilité connue: certaines machines compromises exécutaient des systèmes d'exploitation et des applications anciens, non pris en charge ou non corrigés, donc l'option utilisant un exploit connu est la plus probable. Mais vous ne devez pas non plus exclure la possibilité d'utiliser une vulnérabilité actuellement inconnue.
Attaque des réseaux pour le calcul haute performance
ESET a partagé des informations avec des organisations qui jouent un rôle important dans la résolution d'incidents dans les systèmes de recherche et universitaires, comme l'équipe de sécurité informatique du CERN. Ils ont confirmé que de fin 2019 à mi-2020, la communauté HPC a été touchée par une vague de trois attaques différentes, dont certaines ont été annoncées publiquement .
Après de nombreux mois d'enquête, on ne sait toujours pas si ces trois vagues étaient liées les unes aux autres, ou s'il s'agissait simplement d'une coïncidence inattendue. Les opérateurs de logiciels malveillants ont utilisé différentes tactiques, techniques et niveaux de difficulté. D'un autre côté, il est étrange que lors de différentes attaques, certaines adresses IP aient coïncidé.
- La première vague a utilisé Kobalos, qui est décrit dans cette étude.
- La deuxième vague s'est concentrée sur l'extraction de crypto-monnaies avec un ensemble d'outils très différent.
- La troisième vague était la plus importante, mais sa charge utile n'a pas encore été déterminée.
Des signes indirects de compromis résultant des deuxième et troisième vagues ont été décrits par l'équipe de réponse aux incidents de sécurité informatique de l'infrastructure réseau européenne sous la forme d'incidents # EGI20200421 et # EGI2020512 .
On ne sait pas pourquoi la communauté HPC est dominante parmi les victimes de ces attaques. Les HPC sont bien sûr intéressants, mais ils sont généralement plus difficiles à pénétrer que les autres serveurs de R&D. Grâce à un processus de réponse aux incidents basé sur la communauté, le CERN et d'autres équipes impliquées ont identifié un certain nombre d'architectures obsolètes et de pratiques de sécurité sous-optimales qui ont joué un rôle clé dans la prolifération des attaques. En outre, la plupart des victimes de la communauté HPC étaient mal équipées pour mener des enquêtes, en particulier en termes de surveillance de l'activité du système.
Examen de Kobalos
Kobalos dispose de nombreuses capacités pour accéder aux systèmes compromis et masquer les traces de leur utilisation.
Accès aux systèmes compromis
Premièrement, Kobalos fournit des commandes générales pour lire et écrire dans le système de fichiers, ainsi que pour lancer un terminal et exécuter des commandes arbitraires. Malheureusement, il n'y a pas de charge utile spécifique dans le programme qui suggérerait les intentions des auteurs. Très probablement, les opérateurs exécutent un shell de commande via le terminal et exécutent les commandes dont ils ont besoin.
Disponibilité
Deuxièmement, Kobalos dispose d'un certain nombre de fonctionnalités qui vous permettent d'établir une connexion réseau entre les opérateurs et le malware en cours d'exécution. Le logiciel assure son accessibilité externe de plusieurs manières:
- Ouvre un port TCP et attend une connexion entrante (ce mode est parfois appelé une porte dérobée passive).
- Se connecte à une autre instance Kobalos configurée en tant que serveur C&C.
- En attente de connexions à un service légitime déjà en cours d'exécution, sortant d'un port TCP spécifique.
Cette dernière méthode nécessite de remplacer le service en cours d'exécution par un autre qui contient le code Kobalos. Dans tous les cas où nous avons constaté l'utilisation de cette méthode, les attaquants ont dû modifier le serveur OpenSSH en cours d'exécution. Le fichier a été
sshd
complètement remplacé, de sorte que le programme a continué à fonctionner même lorsque le service ou le système a été redémarré.
Authentification et cryptage du réseau
Troisièmement, pour exécuter la porte dérobée, vous devez authentifier ses clients, qui doivent avoir une clé RSA-512 et un mot de passe privés. Après les avoir vérifiées, Kobalos génère et crypte deux clés de clé publique de 16 octets à l'aide de l'algorithme RSA-512 et les envoie aux attaquants. Ces deux clés sont utilisées pour le cryptage RC4 du trafic entrant et sortant ultérieur.
Changement de port
Quatrièmement, lors de l'authentification, l'opérateur peut continuer à interagir sur une autre connexion TCP. Sur demande, Kobalos peut commencer à écouter le port souhaité et y transférer toutes les communications ultérieures. Les données transitant par ce canal sont cryptées à l'aide de clés RC4 créées lors de l'authentification.
Proxying vers d'autres machines compromises
Cinquièmement, Kobalos peut être utilisé comme proxy pour se connecter à d'autres serveurs qu'il compromet. Ce n'est pas un proxy TCP ordinaire: il nécessite l'encapsulation des données dans des paquets spéciaux, et prend également en charge le changement de port ci-dessus: pour cela, une commande est envoyée qui "commute" la connexion.
Les proxies peuvent être chaînés, ce qui signifie que les opérateurs peuvent utiliser plusieurs machines compromises par Kobalos pour se connecter aux serveurs cibles.
Un ensemble de possibilités
Figure 2. Vue d'ensemble des capacités de Kobalos et des scénarios possibles pour accéder aux serveurs compromis.
Le premier scénario est une connexion directe à des serveurs compromis pour accéder à leurs ressources. Dans le diagramme, la porte dérobée s'exécute dans le processus du serveur OpenSSH et s'attend à ce que la connexion ait un port source. L'opérateur doit utiliser le port TCP source correct pour communiquer avec la porte dérobée.
Le deuxième scénario est sans doute le plus difficile, mais il comporte les caractéristiques uniques des Kobalos. L'opérateur peut exécuter le serveur C&C à partir de n'importe quel serveur exécutant ce logiciel. Aucun code supplémentaire n'est nécessaire pour cela, toutes les fonctionnalités sont déjà intégrées. Après son lancement, le serveur C&C vérifie la liste des bots connectés, et l'opérateur peut se connecter à n'importe lequel d'entre eux. Le dernier nœud nécessite une authentification et applique le chiffrement de bout en bout à l'aide de l'échange de clés RC4. Pour garantir un tel schéma de travail, l'instance Kobalos sur le serveur B doit avoir l'adresse IP et le port du serveur C&C fonctionnant sur le serveur A. Le serveur B échange le trafic uniquement avec le serveur A, masquant l'adresse IP de l'opérateur.
Dans le troisième scénario, le serveur A est utilisé pour proxy la connexion au serveur C. Cela applique également l'authentification et le chiffrement de bout en bout forcé. L'opérateur peut définir le port source lors de la connexion du serveur A à C. Cela signifie que le serveur A peut être utilisé pour se connecter à des instances Kobalos qui attendent une connexion à partir d'un port spécifique.
Analyse technique de Kobalos
Pour la première fois, nous avons analysé un serveur OpenSSH trojanisé. La taille du code malveillant et des données de Kobalos est assez petite: environ 25 Ko pour les échantillons x86-64. Curieusement, tout le code est emballé dans une seule fonction. Il n'y a qu'un seul appel à cette fonction dans le code OpenSSH légitime.
Kobalos est un logiciel complexe. De toute évidence, ses développeurs ont mis beaucoup d'efforts dans sa création. Les auteurs ont implémenté de nombreuses fonctionnalités et implémenté leur propre obfuscation.
Obscurcissement
Aplatissement exceptionnel du flux de contrôle
Le fait que le code s'insère dans une fonction ne signifie pas que le flux de contrôle est linéaire. Kobalos appelle récursivement sa fonction pour effectuer les sous-tâches requises.
Figure 3. Graphique du flux de contrôle Kobalos.
Le premier paramètre de la fonction est l'action à effectuer. Kobalos peut effectuer 37 actions. Celles-ci sont répertoriées dans l' annexe Fonctionnalités intégrées de Kobalos , qui vous aide à analyser les versions actuelles et futures de ce logiciel. La fonction sert également de gestionnaire de signal
SIGCHLD
pour terminer correctement le processus enfant et
SIGALRM
gérer le délai d'expiration de la connexion.
En ce qui concerne le code source de Kobalos, cela pourrait être comme la compilation du code C ci-dessous. Une partie de la conversion peut être automatisée en insérant des fonctions par le compilateur, mais en attribuant des identificateurs numériques à toutes les fonctions et en gérant le même nombre d'arguments dans les fonctions nécessite un travail manuel ou un outillage spécial.
| Avant que | Après |
|---|---|
|
|
Figure 4. Ce code C montre à quoi le code source Kobalos peut ressembler après avoir aligné le flux de contrôle.
Valeurs de chaîne chiffrées
Le code et les données Kobalos ne contiennent pas de valeurs de chaîne de texte brut. Seules quelques courtes chaînes cryptées avec RC4 sont utilisées ici. Ils sont déchiffrés immédiatement après l'interaction initiale avec le programme, mais avant l'authentification. Pour tous les échantillons que nous avons analysés, une clé est utilisée -
AE 0E 05 09 0F 3A C2 B5 0B 1B C6 E9 1D 2F E3 CE
.
Valeurs de chaîne décodées:
- % s% s
- / dev / ptmx
- ptem
- ldterm
- ttcompat
- / dev / tty
- % s
- % ré
- /
- \
- % d.% d
- win3.11
- win95
- winNT
- gagner ??
- \\. \ pipe \ 2
- % s% s.% s
- / dev / ptc
Dans les échantillons Kobalos que nous avons analysés, seules les valeurs en gras (1 et 6-9) sont utilisées. D'autres ne sont pas mentionnés, bien qu'ils puissent être utilisés dans d'autres versions. En particulier:
- Les lignes 10 et 12-16 semblent être spécifiques à Windows.
- La ligne 18 est le chemin d'accès au pilote de périphérique pseudo-terminal sous AIX.
- Les lignes 3 à 5 sont utilisées par les appels système du pseudo-terminal Solaris.
Nous ne pouvons pas exclure la possibilité d'essayer de désinformer les chercheurs sur l'existence de versions pour d'autres systèmes d'exploitation. Étant donné que nous avons confirmé la prise en charge de trois systèmes d'exploitation, il n'est pas surprenant qu'il y en ait d'autres. En revanche, Windows 3.11 et Windows 95 ont plus de 25 ans. Existe-t-il des versions de Kobalos pour ces systèmes hérités?
S'opposer à une enquête
Une fois authentifié, certaines techniques sont appliquées au processus de porte dérobée pour entraver l'enquête:
- La valeur
RLIMIT_CORE
est effacée pour empêcher la génération d'un vidage du noyau en cas de panne du processus. - La plupart des signaux sont ignorés pour qu'il soit plus difficile d'interrompre le processus.
Figure 5. Kobalos évite les vidages du noyau en cas de crash et ignore la plupart des signaux.
Il est important de noter que la configuration
RLIMIT_CORE
ne fait pas de mal pour vider le processus manuellement, par exemple, en utilisant
gcore
gdb. Cette limite est utilisée par le noyau pour déterminer la taille maximale d'un vidage mémoire lorsqu'un processus plante.
Horodatage
Une analyse du système de fichiers des serveurs compromis a montré qu'après le paramétrage, les horodatages des fichiers remplacés (comme
ssh
pour l'ajout d'un module de vol d'informations d'identification ou
sshd
pour le déploiement de Kobalos) sont falsifiés pour éviter les soupçons.
Configuration
Kobalos a une configuration statique qui active ou désactive les fonctions logicielles. Le tableau 1 répertorie les champs que nous considérons comme faisant partie de la configuration. La figure 6 montre un exemple concret.
Tableau 1. Structure de la configuration statique Kobalos:
| Taille (octets) | La description |
|---|---|
| 2 | Probablement un numéro de version. Transmis lors d'une authentification réussie. Dans tous les échantillons trouvés, cela compte 0xB03
(étant donné qu'il est transmis dans le format du plus élevé au plus bas, comme toutes les autres données Kobalos). |
| 320 | Module de clé publique RSA. Chiffré dans un format binaire spécial. |
| 2 | Port TCP pour écouter. S'il est défini sur zéro, Kobalos n'écoutera pas sur les ports, mais utilisera d'autres méthodes pour attendre une connexion à la porte dérobée. |
| 2 | C&C-, . , — . |
| 2 | . ( ) ( ). |
| 4 | IP- C&C- . Kobalos . |
| 2 x 16 | TCP-, C&C-. |
| 16 | MD5- , . |
Figure 6. Exemple de configuration de l'exemple Kobalos intégré dans sshd.
Une partie de la configuration sera différente si Kobalos est exécuté en interne
sshd
ou en tant que fichier exécutable séparé. Dans ce dernier cas, l'adresse du serveur C&C distant (
remote_c2_addr
) ou du port d'écoute (
listen_port
) est requise .
Déploiement et préservation
Si Kobalos est déployé pour s'exécuter dans le cadre d'un serveur OpenSSH, le fichier
sshd
doit être recompilé pour ajouter du code malveillant. Nous avons comparé la version Trojan d'OpenSSH et celle qui devrait être installée sur le système, par exemple, à partir du gestionnaire de paquets. Il semble que l'opérateur compile Kobalos sur la base de la bonne source OpenSSH déjà installée sur le serveur. L'exécutable infecté est susceptible d'être compilé sur la machine de la victime avant de remplacer l'original. Très probablement, un tel schéma a été choisi dans le but d'assurer la sécurité du logiciel en évitant les discordances de version, en raison desquelles une incompatibilité de la bibliothèque peut survenir.
Il est à noter que pour remplacer
sshd
a besoin des privilèges root. Cependant, il existe des versions de Kobalos sous forme de fichiers séparés qui se connectent au serveur C&C ou écoutent sur le port TCP. Vous n'avez pas besoin de privilèges d'administrateur pour les exécuter, mais l'accès au système de fichiers et à l'ensemble de commandes sera limité par le niveau d'accès de l'utilisateur actuel.
Interaction avec la porte dérobée
Connexion de porte dérobée
L'une des caractéristiques notables de Kobalos est la flexibilité dans l'établissement de connexions entre les opérateurs et les hôtes compromis. Cela peut être fait de trois manières:
- Écoute du port TCP spécifié (mode passif).
- En se connectant au serveur C&C (mode actif) et en attendant que l'opérateur se connecte via ce serveur.
- En remplaçant le service existant qui écoute sur les ports TCP et en attendant une connexion à partir d'un port TCP source spécifique.
En utilisant la configuration statique de Kobalos, plusieurs méthodes peuvent être activées à la fois, cependant, dans chaque échantillon que nous avons analysé, une seule a été activée.
Cette dernière méthode nécessite de modifier le démon exécutable. La version trojanized appelle le code Kobalos chaque fois qu'elle accepte une nouvelle connexion TCP, comme le montre la figure 7. La porte dérobée peut l'accepter si la connexion provient d'un port TCP spécifique. Si le numéro de port correspond, la fonction ne renvoie rien et le sous-processus se termine lorsque la connexion est fermée. Si le port ne correspond pas à celui prescrit, le programme ne fait rien et transfère le travail au code du service légitime, qui continue de fonctionner correctement.
Figure 7. Appel d'une fonction à partir d'une fonction OpenSSH trojanized après avoir accepté une nouvelle connexion TCP. C'est celui que nous avons le plus vu et qui n'a été abusé que par le serveur OpenSSH. Cependant, les données peuvent être erronées, car c'est ainsi que nous pourrions les détecter lors de la numérisation d'Internet. Comme le montre la figure 8, Kobalos écoute sur le port TCP 55201.
kobalos
main
Figure 8. Comparaison du port source avec 55201.
Kobalos implémente une méthode supplémentaire pour filtrer les connexions TCP entrantes, en comparant le port source avec une liste de 16 ports:
Figure 9. Comparaison d'un port source avec une liste de 16 ports.
Liste de 16 ports:
| vingt | 567 | 2734 | 22392 |
| 21 | 982 | 5392 | 33921 |
| 53 | 1821 | 11568 | 44983 |
| 230 | 1912 | 19678 | 55201 |
Cependant, aucun des échantillons trouvés n'utilisait ce filtre. Il peut avoir été utilisé dans une version précédente de la porte dérobée.
Authentification
Une fois la connexion établie, l'authentification est effectuée. Pour plus de travail, vous avez besoin d'une clé RSA privée et d'un mot de passe de 32 octets. Le client Kobalos envoie un premier paquet de 320 octets au serveur infecté, dont la structure est décrite dans le tableau 2.
Tableau 2. La structure du paquet d'authentification (chiffré à l'aide de la clé RSA privée) :
| Taille (octets) | La description | Valeur |
|---|---|---|
| quatre | Paramètre mystérieux | 0x7FFF000A
|
| 2 | Port de liaison | Si 0x0000
, alors Kobalos choisit un port aléatoire. Si 0xFFFF
, alors il utilise une connexion TCP existante. |
| une | Identifiant du canal de communication | Semble toujours être défini comme 0xFF
. |
| 32 | Mot de passe | La valeur du mot de passe correspond au hachage MD5 dans la configuration statique. |
| 280 | Remplissage |
Les 64 premiers octets du paquet sont déchiffrés à l'aide du module et de l'exposant de clé publique RSA-512 configurés
0x10001
(voir la figure 11). Ensuite, comme le montre la figure 10, le hachage MD5 est appliqué au mot de passe de 32 octets et le résultat est comparé aux informations de la configuration statique.
Figure 10. Après avoir reçu 320 octets, l'authentification est effectuée.
Figure 11. Chargement d'une clé publique RSA-512.
En utilisant la clé publique RSA, Kobalos crypte et définit les clés RC4 qui sont utilisées pour une communication ultérieure: une pour le trafic entrant, une autre pour le trafic sortant. Kobalos envoie des clés cryptées dans sa réponse.
Tableau 3. Structure de la réponse Kobalos (chiffrée avec la clé publique RSA) :
| Taille (octets) | La description | Valeur |
|---|---|---|
| quatre | Paramètre mystérieux | 0x7FFF000A
|
| 16 | Clé RC4 pour le trafic entrant | Clé RC4 utilisée pour le trafic vers l'hôte compromis. |
| 16 | Touche RC4 pour le trafic sortant | Clé RC4 utilisée pour le trafic d'un hôte compromis. |
| 2 | Port lié | Port TCP utilisé comme canal actif. La valeur 0xFFFF
signifie utiliser la connexion actuelle. |
| 282 | Remplissage |
Canal actif
Après avoir réussi l'authentification, le canal actif peut utiliser un port différent. Vous avez peut-être remarqué qu'avec l'authentification client, vous devez fournir un "port de liaison" dans le message chiffré.
- Si sa valeur diffère de
0xFFFF
, Kobalos commencera à écouter le port TCP spécifié. - Si la valeur est zéro, la porte dérobée commencera à écouter un port aléatoire supérieur à 1024.
Comme mentionné ci-dessus, dans la réponse d'authentification, avec la paire de clés RC4, le numéro du port nouvellement ouvert est transmis. Si vous le souhaitez, une connexion TCP supplémentaire peut être créée: si une valeur est transmise en tant que port de liaison
0xFFFF
, la connexion actuelle est utilisée.
Les communications ultérieures sur ces connexions TCP sont encapsulées dans des paquets dont le format est décrit dans le Tableau 4.
Tableau 4. Structure des paquets Kobalos :
| Taille (octets) | Valeur |
|---|---|
| une | Signification mystérieuse ( 0x7F
) |
| 2 | Charge utile |
| une | Identifiant du canal de communication. |
| une | Identifiant du canal de communication. |
| payload_size | Charge utile (cryptée avec RC4). |
Kobalos est le premier à envoyer le paquet à l'opérateur connecté. Le package contient des informations de base sur la machine, telles que le nom d'hôte et la version du noyau. La figure 12 montre les niveaux d'encapsulation dans un emballage.
Figure 12. Informations envoyées à l'opérateur depuis un hôte compromis.
La figure 13 montre les processus de communication entre Kobalos et son client.
Figure 13. Diagramme de séquence du protocole de réseau Kobalos.
Gestion de la porte dérobée
Après l'authentification, l'opérateur peut émettre différentes commandes vers la porte dérobée. Nous les avons divisés en catégories:
- Connectez-vous à d'autres serveurs infectés par Kobalos et agissez en tant que proxy.
- Lire et écrire tous les fichiers dans le système de fichiers.
- Lancement et accès à un pseudo-terminal sur un hôte compromis.
- Lancement et gestion des serveurs Kobalos C&C avec accès aux bots connectés.
Les commandes sont encapsulées dans le canal actif. Ils commencent par un octet d'identification, suivi des paramètres analysés par cette commande. Les commandes décrites dans ce travail sont traitées par Kobalos, c'est-à-dire que l'opérateur les envoie au système compromis à l'aide d'un client spécial. Kobalos répond dans le même format, avec le premier octet d'identifiant, et les réponses sont traitées par le même client. Par exemple, après authentification, la commande "envoyer les informations d'hôte" (
0x04
) peut être donnée .
Utilisation comme proxy
Les opérateurs peuvent utiliser les Kobalos installés sur la machine compromise pour se connecter à d'autres instances de la porte dérobée sur d'autres systèmes. Le mode proxy utilise la taille de paquet spéciale décrite ci-dessus pour l'authentification et l'encapsulation, c'est-à-dire qu'il ne s'agit pas d'un proxy TCP normal.
Lors de la connexion à une machine tierce, l'opérateur peut sélectionner le port TCP source. Cela vous permet de vous connecter à des instances Kobalos qui attendent une connexion à partir d'un port spécifique. La reconnexion du canal actif via un autre port est également prise en charge. Pour cela, une commande spéciale est donnée.
L'une des tâches dans ce cas est d'assurer un certain niveau d'anonymat de l'opérateur. Le nœud d'extrémité ne voit que l'adresse IP de l'autre machine compromise, pas l'adresse IP de l'opérateur. Pour masquer davantage l'adresse de l'opérateur, vous pouvez créer des chaînes de machines proxy compromises. La figure 14 montre un tel scénario.
Figure 14. Kobalos est utilisé comme proxy.
Les commandes de contrôle proxy sont décrites dans le tableau 5.
Tableau 5. Commandes pour utiliser Kobalos en tant que proxy :
| Commander | La description | Options |
|---|---|---|
| 0x01 | Établissement d'une connexion à un autre hôte compromis par Kobalos. | Adresse distante. Port source. Port d'extrémité. Message d'authentification (320 octets). |
| 0x03 | . , TCP-. | . |
| 0x05 | . |
Après l'authentification, l'opérateur peut lire ou écrire n'importe quel fichier sur le système. Dans le protocole de mise en réseau Kobalos, la charge utile encapsulée est définie à l'aide d'un entier 16 bits. Cela signifie que l'opérateur ne peut envoyer que des paquets de 64 Ko. Par exemple, s'il veut écrire 200 Ko dans un fichier, il devra exécuter quatre commandes d'écriture réussies. La commande de lecture a une limitation encore plus stricte: seuls 1000 octets peuvent être lus et envoyés à la fois.
Le tableau 6 décrit les commandes permettant de travailler avec le système de fichiers.
Tableau 6. Commandes de lecture et d'écriture de fichiers :
| Commander | La description | Options |
|---|---|---|
| 0x18 | Ouverture d'un fichier pour l'écriture; sinon, le fichier est créé. | Recherche de position. Le chemin d'accès au fichier. |
| 0x1A | Ecrire dans un fichier. | Données à écrire. Ils seront écrasés à partir de la position de recherche. |
| 0x1C | Fermeture du fichier après l'enregistrement. | |
| 0x1D | Ouverture et lecture d'un fichier. | Recherche de position. Le chemin d'accès au fichier. |
| 0x20 | Fermeture du fichier après lecture. |
Créer un pseudo-terminal
Cette fonctionnalité permet à un opérateur authentifié de créer un shell dans un nouveau pseudo-terminal et d'exécuter des commandes arbitraires. Pour ce faire, utilisez les commandes du Tableau 7.
Tableau 7. Commandes de création et de gestion de pseudo-terminaux :
| Commander | La description | Options |
|---|---|---|
| 0x12 | Lancement d'un nouveau pseudo-terminal. | Le chemin vers le shell (par exemple /bin/sh
). Argument. |
| 0x0D | Spécifie la taille de la fenêtre du pseudo-terminal. | Valeurs de structure winsize
acceptées par TIOCSWINSZ . |
| 0x14 | Fermer un pseudo-terminal. | |
| 0x16 | Ecrire sur un pseudo-terminal. | Données à écrire. |
Les données du terminal sont envoyées aux opérateurs, et après les données vient l'identifiant de la commande de fermeture
0x17
. Il est implémenté dans le client que les opérateurs utilisent.
Utiliser comme serveur C&C
L'une des caractéristiques les plus inhabituelles de Kobalos est que le code du serveur C&C est déjà intégré à la porte dérobée elle-même. Cela permet aux attaquants de transformer toutes les machines infectées en serveurs C&C (pour d'autres bots) avec une seule commande. Après le démarrage du serveur, l'opérateur peut définir son adresse IP et son port dans les configurations des futures instances Kobalos qui seront déployées sur d'autres hôtes. Ceci permet:
- Utilisez des ressources compromises comme serveurs C&C, plutôt que de louer des serveurs auprès de fournisseurs réguliers. Cela réduit la probabilité d'indisponibilité du serveur.
- Utilisez le serveur C&C comme nœud intermédiaire pour les machines derrière des pare-feu avec lesquelles il n'y a pas de connexion directe depuis Internet.
Lorsque l'opérateur envoie une commande "transition vers le mode C&C" (
0x21
) , le numéro de port est passé en paramètre. Kobalos commence à l'écouter et les bots utilisent ce port pour se connecter à l'instance de serveur C&C. Cependant, la porte dérobée écoute également le numéro de port supérieur suivant. Par exemple, si les bots utilisent le port TCP 7070, alors en mode C&C, Kobalos écoute également le 7071. Le deuxième port est utilisé par l'opérateur pour contrôler les fonctions C&C, telles que lister les bots et leur établir des tunnels. Le diagramme est illustré à la figure 15.
Figure 15. L'opérateur Kobalos appelle les bots qui se sont signalés au serveur C&C.
Le tableau 8 décrit les commandes de contrôle des capacités du serveur C&C.
Tableau 8. Commandes pour contrôler les fonctions du serveur C&C :
| Commander | La description | Options |
|---|---|---|
| 0x21 | Lancement du serveur C&C. | Port TCP pour le serveur C&C. |
| 0x23 | Obtenez le nombre de connexions actives et le total depuis le démarrage de C&C. | |
| 0x25 | Liste de tous les robots prêts à exécuter des commandes. | |
| 0x29 | Déconnexion du serveur C&C. | |
| 0x2B | Connectez-vous au bot. | Index des robots dans la liste des robots prêts à se connecter. Message d'authentification (320 octets). |
| 0x2D | Connexion à un bot sans authentification. | Index des robots dans la liste des robots prêts à se connecter. |
Commandes
0x23
-
0x2D
traitées par le sous-processus du serveur C&C. Comme le montre la figure 16, après avoir été envoyées sur un canal actif, les données sont redirigées via TCP vers l'interface de bouclage du port de contrôle (un de plus que le numéro de port utilisé par les bots) du serveur C&C.
Figure 16. Les paquets liés à la gestion du serveur C&C sont transférés via TCP vers un sous-processus.
Autres commandes
Variables d'environnement
Pour le processus de porte dérobée, il existe une commande permettant de définir les variables d'environnement. Il prend une chaîne comme paramètre et la transmet simplement à putenv , qui attend des données au format "VAR = valeur".
Tableau 9. Autres commandes comprises par Kobalos :
| Commander | La description | Options |
|---|---|---|
| 0x0E | Définit la variable d'environnement de la session. | Chaîne à laquelle passer putenv
. |
Opérations vides
Il y a deux autres commandes implémentées, mais elles ne font rien. Nous avons deux explications à cela:
- Les auteurs ont supprimé la fonctionnalité des commandes car elles étaient utilisées dans les versions précédentes et ne sont plus nécessaires.
- Les commandes sont spécifiques à la plate-forme et ne s'appliquent pas aux versions Linux et FreeBSD de Kobalos que nous avons analysées.
Figure 17. Équipes et ne rien faire. La deuxième explication semble plus probable car nous connaissons les valeurs de chaîne pour Solaris, AIX et Windows (voir le chapitre Valeurs de chaîne chiffrées).
0x07
0x09
Programme de vol d'informations d'identification OpenSSH
Sur la plupart des systèmes compromis par Kobalos, la porte dérobée a également déployé un programme pour voler les informations d'identification SSH via un client SSH cheval de Troie. Nous avons trouvé différentes versions de ces fichiers, y compris Linux et FreeBSD. Contrairement à Kobalos, les capacités de ce programme n'ont guère été obscurcies. Sa fonction principale est de voler le nom d'hôte, le numéro de port, le nom d'utilisateur et le mot de passe pour établir une connexion SSH à partir d'un hôte compromis. Les données sont enregistrées dans un fichier crypté. Les versions plus récentes du cheval de Troie peuvent également transmettre des informations sur le réseau via UDP, mais cette fonctionnalité n'a pas été activée dans la configuration de la plupart des échantillons trouvés.
Mais au moment de la publication de notre précédente étude sur les portes dérobées OpenSSH «Le côté obscur du ForSSHE», nous ne connaissions pas ce cheval de Troie, il n'est donc pas mentionné dans cet ouvrage. Nous ne pouvons pas non plus le lier à l'un des programmes de vol d'informations d'identification OpenSSH décrits dans les sources ouvertes.
L'emplacement du fichier de données volé dépend de la version du programme. Tous les exemples ont créé un
/var/run
fichier avec l'extension .pid dans le répertoire . Il est utilisé dans de nombreux fichiers de ce répertoire. Vous pouvez voir des exemples de noms de fichiers et de chemins d'accès à ceux-ci à partir de différents exemples dans le chapitre «Signes de compromission».
Tous les échantillons trouvés chiffrent le contenu des fichiers à l'aide d'un simple chiffrement. Comme le montre la figure 18, le cheval de Troie ajoute simplement 123 à chaque octet de données qu'il stocke.
Figure 18. Chiffrement et écriture des informations d'identification SSH volées dans le fichier.
La version FreeBSD utilise le même format et le même chiffrement. Cependant, ils sont implémentés un peu différemment, par exemple, dans le programme, le chemin d'accès au fichier est chiffré à l'aide d'un XOR à un octet.
Développement d'une famille de programmes
Après avoir informé l'une des organisations victimes, elles ont découvert ce qui semble être une version plus récente d'un cheval de Troie voleur d'informations d'identification. Il contient une configuration cryptée et permet aux informations volées d'être transmises via UDP à l'hôte distant spécifié dans la configuration. Ebury et d'autres programmes de vol d'informations d'identification SSH tels que Bonadan, Kessel et Chandrila ont également cette capacité. Peut-être qu'UDP a été choisi pour contourner les pare-feu et ne pas établir de connexions TCP avec des hôtes potentiellement non approuvés. Le cheval de Troie n'utilise qu'une seule méthode de transmission - via un fichier ou un réseau, car le nom de l'hôte cible et le chemin d'accès au fichier sont stockés dans la même variable.
La figure 19 montre le code décompilé pour l'envoi de données via UDP. Et la figure 20 montre la configuration de l'exemple trouvé. Il a été configuré pour enregistrer les informations volées dans
/var/run/sshd/sshd.pid
.
Figure 19. Le cheval de Troie envoie les informations d'identification via UDP .
Figure 20. Exemple de configuration utilisant un fichier pour capturer des données volées.
Curieusement, la configuration contient également le nom de l'hôte de la victime. Il est probablement utilisé par les opérateurs pour désigner une source de données. Cela signifie également que chaque serveur compromis reçoit une instance unique du cheval de Troie.
Conclusion
De nombreuses fonctionnalités et techniques de contournement de réseau bien mises en œuvre indiquent que les auteurs de Kobalos sont beaucoup plus compétents que de nombreux auteurs de logiciels malveillants pour Linux et d'autres systèmes non Windows. Le ciblage - des organisations assez connues - nous indique également que les opérateurs de Kobalos ne visent pas à infecter autant de systèmes que possible. Les faibles traces et les techniques de contournement du réseau pourraient être la raison pour laquelle la porte dérobée est passée inaperçue jusqu'à ce que nous informions les victimes des résultats de notre analyse du réseau.
Nous ne pouvons pas répondre à la question sur les intentions des assaillants. Les capacités de la porte dérobée vous permettent de l'utiliser pour résoudre n'importe quel problème. Aucun logiciel supplémentaire n'a été trouvé sur les machines compromises, à l'exception d'un cheval de Troie qui vole les informations d'identification SSH. Par conséquent, nous considérons SSH comme le point d'entrée, et non comme la charge utile. Selon les informations fournies par les administrateurs système des systèmes d'information HPC compromis des administrateurs système des systèmes HPC compromis, personne n'a tenté d'exploiter les crypto-monnaies ou de lancer d'autres tâches nécessitant une grande puissance de calcul.
Que poursuivent les attaquants?
Nous n'avons pas non plus été en mesure de savoir depuis combien de temps ce logiciel est utilisé. Nous avons trouvé des lignes liées à Windows 3.11 et Windows 95 qui sont sorties il y a plus de 25 ans. Existe-t-il une version Windows de Kobalos? Ce programme a été créé il y a si longtemps? Nous connaissons de nouvelles infections en 2019 et 2020, mais n'avons trouvé aucune preuve d'une utilisation antérieure.
Alors que les auteurs de ce logiciel semblent bien maîtriser le fonctionnement des protocoles réseau et des systèmes d'exploitation de leurs victimes, Kobalos présente plusieurs faiblesses. Premièrement, les problèmes de cryptographie sont probablement dus au développement de cette industrie, si Kobalos a vraiment été développé depuis très longtemps. Deuxièmement, vous remarquerez peut-être qu'il existe des instances à l'écoute passive, en particulier si elles nécessitent un port TCP source spécifique. Nous avons réussi à tirer parti de cette fonctionnalité et à notifier les victimes pour réduire le nombre d'hôtes infectés et mieux comprendre cette menace nouvellement découverte.
Nous rendons également compte du travail de Maciej Kotowicz de MalwareLab pl , qui a analysé Kobalos de manière indépendante et avec qui nous avons échangé les résultats de l'enquête. Il a dit Oh My H@ck 2020.
. Kobalos
| 1003 | INITIALIZE | socket, filter | Kobalos , ( enum). |
| 1004 | START_LISTENING | C&C- . | |
| 1005 | START_C2_SERVER | socket_1, socket_2 | C&C-. |
| 1006 | SEND_PACKET | socket_fd, &channel_1,
&channel_2, data, data_len |
Kobalos socket_fd. |
| 1007 | RECV_PACKET | socket_fd, &channel_1,
&channel_2, data, data_len |
Kobalos socket_fd. |
| 1008 | GET_RANDOM_INT | random_int | 32- . PRNG . |
| 1009 | GET_HOST_INFO | out_buf, returns buf_len | , IP- . |
| 1010 | SET_COMMON_SOCKOPT | socket | SO_REUSEADDR SO_KEEPALIVE
true, SO_LINGER — 15 . |
| 1011 | RC4_DECRYPT_STRING_INPLACE | str, len | str RC4- . |
| 1012 | CLEANUP_THINGS | what_to_close, send_report | . . . |
| 1013 | RC4_INIT | context, key_size, key | RC4 . |
| 1014 | RC4_CRYPT | context, len, data_in, data_out | RC4- . |
| 1015 | MD5 | input, input_len, output_digest | MD5-. |
| 1016
to 1037 |
, . | ||
| 1038 | RSA_PUBLIC_DECRYPT | ||
| 1039 | LOAD_PUB_KEY | key_bin_data, public_key | Charge un BLOB avec une clé RSA publique de key_bin_data à public_key. |
Signes de compromis
Noms trouvés par ESET
- Linux / Kobalos
- Linux / Agent.IV
- Linux / SSHDoor.EV
- Linux / SSHDoor.FB
- Linux / SSHDoor.FC
Échantillons
Kobalos
| SHA-1 | OS cible | Construit dans | Disponibilité |
|---|---|---|---|
FBF0A76CED2939D1F7EC5F9EA58C5A294207F7FE
|
RHEL | sshd | En attente de connexion depuis le port source 55201. |
479F470E83F9A5B66363FBA5547FDFCF727949DA
|
Debian | Autonome | Se connecte à
151.80.57 [.] 191: 7070 |
AFFA12CC94578D63A8B178AE19F6601D5C8BB224
|
FreeBSD | sshd | En attente de connexion depuis le port source 55201. |
325F24E8F5D56DB43D6914D9234C08C888CDAE50
|
Ubuntu | sshd | En attente de connexion depuis le port source 55201. |
A4050A8171B0FA3AE9031E0F8B7272FACF04A3AA
|
Arch Linux | sshd | En attente de connexion depuis le port source 55201. |
Cheval de Troie pour voler les informations d'identification SSH
| SHA-1 | OS cible | Écrit dans |
|---|---|---|
6616DE799B5105EE2EB83BBE25C7F4433420DFF7
|
RHEL | /var/run/nscd/ns.pid
|
E094DD02CC954B6104791925E0D1880782B046CF
|
RHEL | /var/run/udev/ud.pid
|
1DD0EDC5744D63A731DB8C3B42EFBD09D91FED78
|
FreeBSD | /var/run/udevd.pid
|
C1F530D3C189B9A74DBE02CFEB29F38BE8CA41BA
|
Arch Linux | /var/run/nscd/ns.pid
|
659CBDF9288137937BB71146B6F722FFCDA1C5FE
|
Ubuntu | /var/run/sshd/sshd.pid
|
Clés
Clé publique RSA
-----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOUgD8sEF1kZ04QxCd60HrB+TxWnLQED wzb0sZ8vMMD6xnUAJspdYzSVDnRnKYjTOM43qtLNcJOwVj6cuC1uHHMCAwEAAQ== -----END PUBLIC KEY-----
Clé RC4 statique pour les valeurs de chaîne
AE0E05090F3AC2B50B1BC6E91D2FE3CE
Règles YARA
rule kobalos { meta: = “Kobalos malware” author = “Marc-Etienne M.Léveillé” date = “2020-11-02” reference = «http://www.welivesecurity.com» source = «https://github.com/eset/malware-ioc/» license = «BSD 2-Clause» version = “1” strings: $encrypted_strings_sizes = { 05 00 00 00 09 00 00 00 04 00 00 00 06 00 00 00 08 00 00 00 08 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 05 00 00 00 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0A 00 00 00 } $password_md5_digest = { 3ADD48192654BD558A4A4CED9C255C4C } $rsa_512_mod_header = { 10 11 02 00 09 02 00 } $strings_RC4_key = { AE0E05090F3AC2B50B1BC6E91D2FE3CE } condition: any of them } rule kobalos_ssh_credential_stealer { meta: = “Kobalos SSH credential stealer seen in OpenSSH client” author = “Marc-Etienne M.Léveillé” date = “2020-11-02” reference = «http://www.welivesecurity.com» source = «https://github.com/eset/malware-ioc/» license = «BSD 2-Clause» version = “1” strings: $ = “user: %.128s host: %.128s port %05d user: %.128s password: %.128s” condition: any of them }
Techniques MITRE ATT & CK
Le tableau a été compilé à l'aide de la huitième version du framework ATT & CK.
| Tactique | Identifiant | Nom | La description |
|---|---|---|---|
| Durabilité | T1554 | Compromettre ClientSoftware Binary | Kobalos OpenSSH- sshd
.Kobalos SSH- . |
| T1205 | Traffic Signaling | Kobalos TCP- . | |
| Defense Evasion | T1070.003 | Clear Command History | Kobalos , . |
| T1070.006 | Timestomp | Kobalos . | |
| T1027.002 | Software Packing | Kobalos . | |
| Command And Control | T1573.001 | Encrypted Channel: Symmetric Cryptography | RC4. |
| T1573.002 | Encrypted Channel: Asymmetric Cryptography | RSA-512. | |
| T1090.003 | Proxy: Multi-hop Proxy | Kobalos , Kobalos. |