Panchan, système de minage : dites bonjour à ce nouveau botnet Golang poste à poste !
Écrit par : Stiv Kupchik
Synthèse
Les chercheurs en sécurité d'Akamai ont découvert Panchan, un nouveau botnet poste à poste et ver SSH apparu en mars 2022 et qui, depuis, s'attaque activement aux serveurs Linux.
Panchan est écrit en Golang et utilise ses fonctions de simultanéité intégrées pour maximiser la propagation et exécuter des modules de logiciels malveillants.
Outre l'attaque par dictionnaire SSH « de base » qui est courante dans la plupart des vers, ce logiciel malveillant récolte également des clés SSH pour effectuer des mouvements latéraux.
Les chercheurs en sécurité d'Akamai ont pu accéder au protocole de communication du logiciel malveillant et à son panneau d'administration, et les utiliser pour analyser son champ d'infection.
Le segment de marché le plus couramment visé par Panchan (après les télécoms/VPS) est celui de l'éducation. Nous supposons que les collaborations entre différents instituts universitaires peuvent entraîner le partage de clés SSH sur les réseaux, ce qui peut expliquer pourquoi ce segment de marché est en tête de liste. Les chercheurs en sécurité d'Akamai ont contacté les e-mails indésirables associés à chaque adresse IP de victime.
Pour éviter la détection et réduire la traçabilité, le logiciel malveillant dépose ses cryptomineurs sous forme de fichiers mappés en mémoire, sans aucune présence sur le disque. Il interrompt également les processus du mineur de cryptomonnaie s'il détecte une surveillance des processus.
D'après l'activité du logiciel malveillant et la géolocalisation des victimes, la langue du panneau d'administration et l'activité de l'utilisateur Discord de l'acteur de la menace, nous pensons que ce dernier est japonais.
L'authentification multifactorielle d'Akamai peut atténuer le risque présenté par la collecte de clés SSH. En outre, la configuration de mots de passe SSH forts devrait arrêter le logiciel malveillant dans son élan, car il utilise une liste très basique de mots de passe par défaut pour se propager. Nous avons également publié des IOC, des requêtes, des signatures et des scripts qui peuvent être utilisés pour tester l'infection.
Introduction
Le système de minage Panchan comprend un botnet Golang et un cryptojacker dotés de nombreuses fonctionnalités. Son protocole poste à poste est simple : texte clair sur TCP, mais il est assez efficace pour décentraliser le botnet. Il peut aussi faire preuve de persistance et de persévérance, tout en échappant aux contrôles.
Le logiciel malveillant contient un « godmode », un panneau d'administration capable de modifier la configuration du minage, qui est ensuite diffusée au reste de ses pairs. Pour éviter toute modification indésirable, une clé privée est requise pour accéder au « godmode », qui est ensuite utilisé pour signer la configuration du minage. Ce logiciel malveillant contient une clé publique qui est utilisée pour vérifier la clé privée fournie. Le panneau d'administration est rédigé en japonais, ce qui laisse supposer la géolocalisation de son créateur.
Le botnet présente une approche unique (et peut-être inédite) du mouvement latéral en récoltant les clés SSH.. Au lieu de se contenter d'attaques par force brute ou par dictionnaire sur des adresses IP aléatoires comme le font la plupart des botnets, ce logiciel malveillant lit également les fichiers id_rsa et known_hosts pour récolter les informations d'identification existantes et les utiliser pour se déplacer latéralement sur le réseau.
Écrit en Golang, il utilise les fonctions de simultanéité de ce langage pour la majeure partie de sa logique principale, en l'exécutant sous forme de routines Go simultanées. L'acteur malveillant est au fait des nouvelles versions de Go : la première version du logiciel malveillant détectée (en mars 2022) a été compilée avec Go 1.17.7 (publié en février 2022), tandis que le dernier échantillon a été compilé avec Go 1.18 (publié en mars 2022). En outre, la version 1.18 de Go a subi quelques modifications au niveau de ses structures de données internes, de sorte que ni les outils en ligne ni le désassembleur IDA n'ont pu analyser correctement le logiciel malveillant et faire correspondre le nom de la fonction au pointeur de fonction. Dans l' Annexe A : Petit aperçu de la rétro-ingénierie de Go, nous décrivons comment nous avons surmonté ce problème.
Dans ce rapport, nous décrirons en détail les fonctionnalités du logiciel malveillant, comment nous l'avons détecté et le processus que nous avons suivi pour tenter de l'attribuer.
Pour obtenir une liste des indicateurs d'infection (IOC), vous pouvez consulter le répertoire GitHub ici.
Activité du logiciel malveillant
L'équipe de recherche en sécurité d'Akamai surveille de manière proactive l'activité des botnets et des programmes malveillants sur notre réseau mondial de capteurs. Nous avons remarqué l'activité de Panchan pour la première fois le 19 mars 2022. La communication poste à poste du logiciel malveillant et la possibilité qu'il s'agisse tel un ver ont attiré notre attention et justifié une enquête plus approfondie.
Lors de la rétro-ingénierie de ce logiciel malveillant, nous avons développé des scripts permettant de se connecter au réseau du botnet, ce qui a permis à l'équipe de rassembler une liste complète des machines infectées (pairs du botnet). Nous avons trouvé 209 pairs, dont 40 sont actuellement actifs.
Si les cibles sont dispersées dans le monde entier, leur concentration semble être plus forte en Asie.
Notre attribution des origines japonaises de l'acteur malveillant (détaillée plus loin) pourrait expliquer le plus grand nombre de cibles en Asie. Puisqu'il ne semble pas y avoir d'organisation derrière ce logiciel malveillant, il est plausible qu'il soit plus facile pour l'acteur malveillant de se limiter à ce qui est proche et familier.
Si l'on examine les segments de marché des victimes, la plupart de leurs adresses IP sont enregistrées sous leur plateforme d'hébergement/VPS, ce qui explique le peu d'informations disponibles. Le segment de marché le plus courant parmi les victimes surveillées est celui de l'éducation. Cela peut être dû à une mauvaise gestion des mots de passe ou à la capacité unique du logiciel malveillant à se déplacer latéralement grâce à des clés SSH volées. Les chercheurs de différents établissements universitaires collaborent peut-être plus fréquemment que les employés du secteur commercial et ont besoin d'informations d'identification pour s'authentifier sur des machines situées en dehors de leur organisation/réseau. Confortant cette hypothèse, nous avons constaté que certaines des universités impliquées étaient du même pays (par exemple, l'Espagne) et d'autres de la même région (par exemple, Taïwan et Hong Kong).
Exploration des fonctionnalités du logiciel malveillant
Vecteur d'infection — ver SSH
Ce logiciel malveillant est capable de se propager automatiquement via SSH. Il dispose de deux méthodes pour générer des cibles et des détails d'authentification :
clés SSH existantes
Le logiciel malveillant recherche la configuration et les clés SSH dans le répertoire HOME de l'utilisateur courant. Il lit la clé privée dans ~HOME/.ssh/id_rsa et l'utilise pour tenter de s'authentifier auprès de toute adresse IP trouvée dans ~HOME/.ssh/known_hosts. Il s'agit d'une nouvelle méthode de collecte d'informations d'identification dont nous n'avons pas constaté l'utilisation dans d'autres logiciels malveillants.
Obtention par force brute des informations d'identification
Le logiciel malveillant peut randomiser les adresses IP et tenter une attaque par dictionnaire en utilisant une liste prédéterminée d'utilisateurs et de mots de passe. Le propagateur par force brute est généré plusieurs fois dans un processus distinct, avec pour seule limite celle fixée par le système d'exploitation pour les fichiers ouverts. Les noms d'utilisateur et les mots de passe sont assez simples : combinaisons de chaînes par défaut comme "ubuntu," "root," "user," '‘debian," "pi," etc.
Après une authentification réussie auprès de la cible, le logiciel malveillant crée un dossier caché avec un nom aléatoire sous le répertoire racine /, et se copie dans le dossier caché avec le nom xinetd en utilisant sftp.
Il exécute ensuite à distance le code binaire copié sur la machine cible (à l'aide de nohup) et lui transmet une liste de pairs par la ligne de commande. Après une infection réussie, le logiciel malveillant lance une opération HTTPS POST vers un webhook Discord, qui est probablement utilisé pour la surveillance des victimes.
Communication poste à poste
Le protocole poste à poste du botnet est assez simple. Tout est envoyé en texte clair sur le port TCP 1919. Tous les pairs écoutent sur ce port et créent une règle pour l'autoriser dans iptables. Chaque message commence par « pan-chan's mining rig hi! » et se termine par « finish ». Entre ces éléments, le logiciel malveillant envoie des commandes de configuration séparées par des retours à la ligne. Nous avons constaté seulement deux options de configuration : sharepeer et sharerigconfig.
sharepeer est assez simple : elle est suivie d'une adresse IP, qui est ensuite ajoutée à la liste interne de pairs du logiciel malveillant.
sharerigconfig est suivie d'une chaîne codée en base64, qui est en fait une structure JSON qui code la configuration du minage, et d'une signature de cette configuration :
La signature est validée à l'aide d'une clé publique enregistrée en interne pour garantir son authenticité. La logique de communication est également simple : lors d'une connexion vers ou depuis un pair, le logiciel malveillant analyse sa configuration sauvegardée en mémoire (obtenue précédemment, lorsqu'il a commencé à s'exécuter), génère la chaîne de messages et l'envoie. Il reçoit également un message similaire de l'autre côté et l'analyse. De nouveaux pairs sont ajoutés à sa liste de pairs, tandis que la configuration est écrasée si elle est d'une version plus récente.
Pour rechercher les mises à jour, le logiciel malveillant se connecte périodiquement à ses pairs enregistrés.
Mode Godmode
Il s'agit probablement de la fonctionnalité la plus originale de ce logiciel malveillant : un panneau d'administration est directement intégré à son code binaire. Pour le lancer, il faut transmettre au logiciel malveillant la chaîne godmode comme premier argument de ligne de commande (suivi d'une liste de pairs).
Contrôle d'accès
Même si le panneau d'administration est intégré au logiciel malveillant, il n'est pas accessible à tous. Pour éviter tout accès indésirable au panneau, le logiciel malveillant demande d'abord une clé privée, et ce n'est qu'après validation que nous pouvons accéder à son interface.
Ne disposant pas de la clé privée nécessaire, nous avons donc patché le programme pour qu'il ignore la validation de la clé et accepte toute clé privée fournie (cela n'a nécessité qu'une seule modification de JZ à JMP).
Panneau d'administration : statistiques
Après la saisie de la clé privée et la « connexion », nous sommes accueillis par un écran d'état sur la configuration actuelle.
La première section concerne les statistiques des pairs, qui sont contactés avant le lancement de godmode, sur la base de la liste des pairs transmise sur la ligne de commande du logiciel malveillant (nous n'avons pas fourni de liste de pairs lors de l'analyse, d'où le zéro).
La deuxième section correspond à la configuration du minage de cryptomonnaie. Elle se présente sous le même format que la configuration de minage envoyée entre pairs, mais avec du texte en japonais au lieu de l'anglais. La différence de langue est probablement due à la facilité de programmation : l'impression du texte japonais est simple, mais son analyse syntaxique est plus difficile, c'est pourquoi le créateur du logiciel malveillant a utilisé l'anglais dans la configuration qui est envoyée entre les pairs.
Enfin, nous obtenons un menu avec les options suivantes :
Refresh the status screen (Actualiser l'écran d'état)
Print the active peer list (Imprimer la liste des pairs actifs)
Update miner settings (Mettre à jour les paramètres du mineur)
Exit (Quitter)
Mineur sans fichier
Le logiciel malveillant déploie deux mineurs : xmrig et nbhash. Les deux fichiers binaires de mineur sont encodés en base64 dans le binaire du logiciel malveillant lui-même et sont extraits et exécutés pendant la durée d'exécution. Cette exécution présente toutefois une certaine nouveauté, car les mineurs ne sont pas du tout extraits sur le disque. Au lieu de cela, le logiciel malveillant utilise la fonction UNIX memfd_create pour créer un fichier mappé en mémoire avec le contenu binaire du mineur, afin qu'il puisse être exécuté directement à partir de la mémoire sans avoir de chemin d'accès au système de fichiers. D'après la configuration que nous avons extraite de divers pairs du botnet, il semble que le logiciel malveillant utilise NiceHash pour ses pools de minage et ses portefeuilles. Les portefeuilles NiceHash ne sont pas des portefeuilles de blockchain, nous ne pouvons donc pas voir les détails des transactions et du minage sur ces données pour évaluer les revenus réels.
Anti-interruption
Le logiciel malveillant intercepte les signaux d'arrêt de Linux (en particulier SIGTERM - 0xF et SIGINT - 0x2) qui lui sont envoyés et les ignore. Il est donc plus difficile de mettre fin à l'activité du logiciel malveillant, mais pas impossible, puisque SIGKILL n'est pas géré (car ce n'est pas possible, selon la norme POSIX, page 313).
Anti-surveillance
Ce module est appelé en interne antitaskmanager, mais contrairement à son nom, il n'interfère pas avec le fonctionnement du gestionnaire de tâches. Au lieu de cela, le logiciel malveillant recherche en permanence les processus top et htop. Lorsqu'il les trouve, il met fin aux processus de minage en cours d'exécution.
Persistance
Le logiciel malveillant se copie dans /bin/systemd-worker et crée un service systemd portant le même nom. Il s'agit probablement d'imiter les services systemd légitimes pour réduire les soupçons et éviter les enquêtes.
Attribution
Un écran supplémentaire est présenté dans le panneau godmode, lors de la validation de la clé privée.
La revendication du droit d'auteur est assez intéressante : elle mentionne à la fois Panchan et a un véritable serveur Discord ! En suivant le lien, il semble que nous puissions rejoindre ce serveur, et nous obtenons également le nom d'utilisateur Discord que Panchan utilise. Nous avons supposé que ce serveur était le même que celui auquel le logiciel malveillant se rapport après une connexion SSH réussie.
Nous avons rejoint le serveur dans l'espoir de trouver des informations sur l'acteur malveillant et de voir les notifications Discord que le logiciel malveillant envoie dans le cadre du flux d'infection. Nous n'avons rien trouvé : le chat principal était vide, à l'exception d'une salutation d'un autre membre survenue en mars. Il se peut que les autres chats ne soient accessibles qu'aux membres les plus privilégiés du serveur, et c'est pourquoi nous ne les avons pas consultés. La seule information utile que nous avons trouvée est que le serveur a été créé au début du mois de mars 2022, très proche de notre première observation du logiciel malveillant.
En recherchant d'autres activités de cet utilisateur, nous avons également constaté qu'il était actif sur le serveur Discord de Privex (un fournisseur de VPS).
Outre le serveur dédié virtuel (VPS) standard, Privex propose également des machines virtuelles sur lesquelles sont préinstallées le logiciel de nœud blockchain. Cela peut signifier que l'acteur malveillant les utilise pour héberger son propre serveur, ou peut-être cible activement leurs machines virtuelles à des fins de cryptojacking.
Détection et prévention
Pour faciliter la détection, nous avons créé un référentiel avec les IOC et les signatures Yara et Snort qui peuvent être utilisées pour tester l'infection. Nous avons également développé un script bash qui peut être exécuté sur une machine virtuelle. Il recherche les indicateurs Panchan suivants :
Le processus systemd-worker ;
Le processus xinetd, s'il s'exécute à partir d'un chemin différent de /bin ou /sbin ;
Le processus d'écoute sur le port TCP 1919.
En outre, les communications sortantes sur les ports TCP 3380 et 3387 peuvent indiquer un trafic vers le pool de minage de cryptomonnaie.
Pour les lecteurs qui souhaitent défendre leurs réseaux de manière proactive, nous formulons les recommandations suivantes :
utilisez des mots de passe sécurisés et complexes. Le logiciel malveillant utilise un nombre très limité de combinaisons de noms d'utilisateur et de mots de passe par défaut qui ne devraient pas être configurées sur une machine de production. La création de mots de passe forts peut réduire considérablement l'impact du logiciel malveillant ;
configurez l'authentification multifactorielle (AMF) si possible. L'utilisation d'une AMF empêcherait toute tentative de connexion non autorisée. L'AMF d'Akamai peut également vous aider à vous protéger de la collecte de clés SSH ;
segmentez votre réseau dans la mesure du possible. Bien qu'il soit légitime d'avoir des machines ouvertes à Internet via SSH, il est judicieux de contrôler qui est autorisé à s'y connecter depuis Internet, ainsi que les personnes avec lesquelles elles sont autorisées à se connecter à l'intérieur du réseau. La configuration de ces contrôles d'accès réduit l'impact qu'une machine compromise peut avoir sur le réseau, ainsi que la surface d'attaque globale ;
surveillez l'activité des ressources de vos machines virtuelles. Les botnets tels que celui-ci, dont l'objectif final est le cryptojacking, peuvent porter l'utilisation des ressources des machines à des niveaux anormaux. Une surveillance constante peut vous alerter en cas d'activité suspecte. Dans le cas de Panchan, la surveillance de l'utilisation des ressources aurait également mis fin au minage de cryptomonnaie.
Annexe A : Petit aperçu de la rétro-ingénierie de Go
Les exécutables Go sont compilés de manière statique, ce qui signifie que toutes les dépendances de l'exécutable sont compilées directement dans le code binaire. Cela génère des programmes binaires massifs avec beaucoup de fonctions (à titre de référence, notre logiciel malveillant faisait 30 Mo avec environ 3 700 fonctions).
Pour faciliter la gestion des traces de pile, Go possède une structure pclntab qui fait correspondre les noms de fonctions et les pointeurs à l'intérieur du code binaire. Cette structure existe même dans les binaires tronqués, nous pouvons donc l'utiliser pour trouver des noms de fonction.
Dans Go 1.18, cette structure a changé. Alors qu'auparavant il contenait des pointeurs vers des emplacements dans le code binaire, il contient désormais des décalages à partir d'emplacements spécifiques : les pointeurs de fonction sont maintenant des décalages à partir de la première fonction Go (qui est pointée dans la structure pcln commentée comme text_start dans l'image ci-dessus), les pointeurs de nom sont des décalages à partir du début du tableau de nom de fonction, et les deux sont référencés par des décalages dans un tableau différent qui contient des données de fonction.