Linux Shishiga, un logiciel malveillant utilisant les scripts LUA

Linux Shishiga, un logiciel malveillant utilisant les scripts LUA

L'utilisation du protocole de BitTorrent et des modules Lua distingue Linux/Shishiga des autres types de logiciels malveillants, selon cette analyse d'ESET.

L’utilisation du protocole de BitTorrent et des modules Lua distingue Linux/Shishiga des autres types de logiciels malveillants, selon cette analyse d’ESET.

Parmi tous les échantillons Linux que nous recevons chaque jour, nous avons remarqué qu’un de ceux-ci contenait un logiciel malveillant, Linux.LuaBot, que seul Dr.Web a détecté. Cette situation était suspecte, notre taux de détection des logiciels malveillants de la famille Luabot étant généralement élevé. Après analyse, il s’avère qu’il s’agissait effectivement d’un robot codé en langage Lua. Il faisait cependant partie d’une famille inédite et n’était pas lié aux logiciels malveillants Luabot connus. Nous lui avons donc donné un nouveau nom : Linux/Shishiga. Il utilise quatre protocoles différents (SSH, Telnet, HTTP et BitTorrent) et des scripts Lua aux fins de modulation.

Comment rencontrer Shishiga?

Linux/Shishiga cible les systèmes GNU et Linux. Son vecteur d’infection est très courant : subtiliser les authentifiants faibles par force brute au moyen d’une liste de mots de passe. Pour ce faire, il procède de la même façon que les logiciels malveillants de la famille Linux/Moose, mais il peut également appliquer cette méthode aux authentifiants SSH. Voici la liste complète des authentifiants utilisés par Linux/Shishiga au moment de la rédaction du présent article :

bftelnet.lua

bfssh.lua

Nous avons relevé plusieurs fichiers binaires de Linux/Shishiga compatibles avec diverses architectures courantes dans les dispositifs de l’Internet des objets (IdO), comme MIPS (tant en mode gros-boutiste que petit-boutiste), ARM (armv4l), i686, et PowerPC.  Nous croyons que d’autres architectures comme SPARC, SH-4 ou m68k pourraient également être ciblées, comme nous l’expliquerons ci-dessous.

Propriétés de Shishiga

Linux/Shishiga est un fichier binaire compressé avec l’outil UPX 3.91 (Ultimate Packer for eXecutables), qui aura cependant de la difficulté à le décompresser, puisque Shishiga ajoute des données à la fin du fichier compressé.

Une fois le fichier décompressé, nous pouvons constater qu’il est lié de façon statique à la bibliothèque d’exécution Lua et dépouillé de tous ses symboles.

$ file unpacked.i686.lmunpacked.i686.lm: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux),statically linked, stripped

Une fois exécuté, le binaire lance le module Lua du logiciel malveillant au moyen des méthodes suivantes :

Méthodes d’exécution du logiciel malveillant

Une fois exécuté, le binaire lance le module Lua du logiciel malveillant au moyen des méthodes suivantes :

Méthodes d’exécution du logiciel malveillant

La méthode getmods renvoie le grand fichier binaire (blob) archive, comme nous l’expliquerons plus tard. Le code Lua figé (malware.lua) est ensuite exécuté par l’intermédiaire des fonctions luaL_loadstring et lua_pcall. Le code Lua est assez simple, mais voici un aperçu du code source, sans aucune modification de notre part.

malware.lua

(1) Ouvre le fichier exécutable du logiciel malveillant à partir de /proc/self/exe, puis renvoie son contenu.
(2) Récupère l’archive zlib au moyen de la méthode getmods, la décompresse, l’analyse à l’aide d’étiquettes puis la stocke dans un tableau Lua.
(3) Charge le module main.lua.

La section sur les indicateurs de compromission contient une liste exhaustive de tous les scripts Lua. Leur nom de fichier est généralement explicite, mais voici un résumé de certains d’entre eux.

callhome.lua

  • Récupère le fichier de configurationbt ou servers à partir du fichier config.lua.
  • S’il est impossible d’atteindre le serveur par défaut actuel, passe à un autre serveur.
  • Envoie des fichiers (rapports ou comptes au format JSON).
  • Exécute des tâches figurant dans la liste de tâches récupérée sur le serveur de commande et de contrôle.

bfssh.lua/bftelnet.lua

  • Se module pour subtiliser les authentifiants SSH et Telnet par force brute.
  • Vérifie si la commandeecho -en « \\x31\\x33\\x33\\x37 » renvoie la valeur 1337. Dans la négative, sort, sinon continue.
  • Détermine l’architecture du dispositif à l’aide du fichier/bin/ls en exécutant cat /bin/ls et en analysant l’en-tête ELF. Voir ci-dessous.
  • Diffuse le logiciel malveillant (fichiers.lm et .dm) selon l’architecture de l’appareil.
  • Enregistre les authentifiants concluants.

Voici le code de vérification de l’architecture :

Méthode bfssh.lua, getArchELF

(1) Tous les fichiers ELF doivent commencer par \x7fELF.
(2) ftype, qui représente le type e_type (type de fichier ELF = exécutable, partagé, etc.), n’est pas utilisé.
(3) bits représente e_ident[EI_CLASS] (32 ou 64 bits), denc représente  e_ident[EI_DATA] (mode gros-boutiste ou petit-boutiste) et farch représente e_machine dans l’en-tête ELF.

Méthode bfssh.lua, getArchName

(1) bits n’est pas utilisé.
(2) Vérifie si le fichier est compatible avec une architecture MIPS en mode petit-boutiste (e_machine == EM_MIPS et e_ident[EI_DATA] == ELFDATA2LSB).
(3) Vérifie si le fichier est compatible avec une architecture Intel 80386, Intel 80860 ou AMD x86-64 (e_machine == EM_386, e_machine == EM_860 ou e_machine == EM_X86_64).

config.lua

  • Contient la clépublicKey afin de vérifier la signature du fichier binaire (.lm ou .dm).
  • Contient la liste des nœuds d’amorçage.
  • Contient le nom des fichiers .bt et le numéro des ports des serveurs SOCKS et HTTP.
  • Contient l’adresse IP du serveur (probablement du serveur de commande et de contrôle).

persist.lua

  • Méthode de menace persistante, selon le privilège (racine ou utilisateur).

scanner.lua

  • Sert à générer des adresses IP /16 aléatoires de réseaux non locaux.

worm.lua (Ce script a été supprimé de la dernière version de Linux/Shishiga.)

  • Permet de lancer un balayage à partir d’un port donné.
  • Permet le téléversement du logiciel malveillant.
  • Obtient de l’information du nouveau serveur infecté.

Le script readme.lua contient un message qui attirera votre attention, si vous parlez le russe :

This translates to:

L’auteur du logiciel malveillant semble avoir été inspiré par E. Letov et son album ВСЁ ИДЁТ ПО ПЛАНУ (tout se passe comme prévu) – voir le dernier couplet de la chanson du même nom.

Au cours des dernières semaines, nous avons observé quelques changements mineurs, comme la réécriture partielle de certains modules, l’ajout de modules d’essai et la suppression de fichiers redondants – rien de particulièrement digne d’intérêt.

Bien que le fichier binaire principal soit nommé <architecture>.lm, nous sommes également parvenus à récupérer des fichiers binaires portant le nom <architecture>.dm – une porte dérobée simple qui espionne l’adresse IP 0.0.0.0 (toutes les adresses IPv4) à partir du port 2015. L’un des changements mineurs concernait le nom de ce fichier binaire de type « porte dérobée », qui est passé de dl à dm.

Communications de Shishiga

Linux/Shishiga peut communiquer à l’aide de n’importe lequel des modules httpproto.lua, btloader.lua ou server.lua. Le module httpproto.lua contient des fonctions permettant de coder et de décoder les données en question et de lancer des requêtes HTTP POST et GET. Le code source ci-dessous montre le processus de codage des données.

httpproto.lua

Le script btloader.lua utilise le module torrent.lua (enveloppeur de fonctions BitTorrent) pour enregistrer ou charger des nœuds à partir du fichier nodes.cfg. Il récupère également ses données de configuration à partir des fichiers {server,update,script}.bt (en format Bencode) et utilise le protocole BitTorrent pour rechercher de nouvelles versions de ces fichiers. Le fichier script.bt permet l’exécution d’un script Lua, tandis que le fichier update.bt permet le lancement du fichier binaire .lm. Voici des exemples de fichiers .bt décodés sous la forme de dictionnaires Python.

script.bt
(1) Signature
(2) Clé publique

update.bt

server.bt

Finalement, la fonction principale du module server.lua consiste à créer un serveur HTTP au moyen du port défini dans le fichier config.lua. Dans tous les échantillons analysés jusqu’à présent, il s’agit du port 8888.

Le serveur ne répond qu’aux requêtes /info et /upload. Vous trouverez ci-dessous une version (embellie) de la réponse du serveur à la requête /info. Tous les fichiers ci-après peuvent être facilement téléchargés à partir du dispositif infecté.

(1) Scripts Lua
(2) Porte dérobée (ancien nom : .dl)
(3) Scripts BitTorrent
(4) Version du logiciel malveillant
(5) Chargeur de modules

L’interrogation de la racine / sur le port 8888 renverra la réponse HTTP/1.0 404 OK, ce qui sert d’indicateur de compromission simple.

Fonction de la réponse http.lua


À ce point dans notre enquête, nous avons demandé à l’équipe Censys d’effectuer un balayage exhaustif de l’Internet sur le port TCP 8888. Elle a trouvé environ 10 adresses IP correspondant à cette réponse HTTP. Celles-ci appartiennent potentiellement à des machines infectées.

Conclusion

À première vue, Linux/Shishiga peut sembler similaire aux autres logiciels malveillants, tirant profit de faibles authentifiants Telnet et SSH pour se propager. Il se distingue cependant du lot par son utilisation du protocole BitTorrent et des modules Lua. Nous avons observé l’an dernier un ver inspiré par Mirai, Hajime, qui employait le protocole BitTorrent, et nous ne pouvons que supposer que ce procédé sera de plus en plus fréquent à l’avenir.

Il se peut que Shishiga continue d’évoluer et de se propager. Cependant, le faible nombre de victimes, l’addition, la suppression et la modification constantes de composants, les commentaires dans le code et même les données de débogage indiquent clairement qu’il s’agit d’un travail inachevé. Pour protéger vos dispositifs contre les infections par Shishiga et d’autres vers similaires, n’utilisez pas les authentifiants Telnet et SSH par défaut.

Nous tenons à remercier l’équipe Censys pour sa collaboration.

Indicateurs de compromission

Serveur de commande et de contrôle

93.117.137.35

Hachage des fichiers SHA1 (.lm)

Hachage des fichiers SHA1 (.dl)

Nom de fichier des scripts Lua

Fichiers susceptibles de dénoter une infection


et

Discussion