Le piratage façon 1999 - l'automatisation façon 2021 - Lacework

Le piratage façon 1999 – l'automatisation façon 2021

Lacework Labs

June 14, 2021

Jared Stroud
Cloud Security Researcher – Lacework Labs
 

Points essentiels

  • Lacework Labs publie un script Ghidra pour automatiser l'extraction des adresses IP/domaines IRC, des canaux et des identifiants de canaux utilisés par les bots de Katien IRC et ses variantes.
  • Lacework Labs Ghidra Scripts

Résumé

Par le passé, Lacework Labs a signalé l'utilisation de bots IRC dans le cadre d'attaques de cryptojacking. Ces bots IRC permettent aux attaquants d'accéder à distance aux hôtes cibles via le protocole IRC. En publiant ce script Ghidra, nous espérons aider les chercheurs et les premiers intervenants en cas d'incident à automatiser l'extraction d'informations critiques sur les variantes Katien/Tsunami/Ziggystartux.

 

RFC 1459 – Un protocole de chat dans un monde C2

Le protocole IRC a été initialement défini dans la RFC 1459 en mai 1993. Alors qu'il offrait initialement un protocole de discussion simple et léger, il est rapidement devenu un protocole de commande et de contrôle (TA0011) commun à divers échantillons de malwares au fil des années. En 2021, on compte parmi les exemples notables exploitant l'IRC « FreakOut », un ver exploitant les attaques de VMWare vCenter pour un accès initial ainsi que le malware axé sur les containers Windows « Siloscape ». Ce protocole vieux de 28 ans est toujours présent dans le paysage des malwares.

Kaiten est un bot IRC prolifique que Lacework Labs utilise souvent. L'utilisation de Kaiten et de ses variantes associées (ziggystartux, Tsunami, etc…) s'accompagne souvent d'un script d'exploitation qui se sert des attaques connues visant des accès initiaux ainsi que d'une fonctionnalité de cryptojacking. La variante Tsumani de Kaiten a par exemple été intégrée dans des images ISO de Linux Mint en 2016, lorsque le site de Linux Mint a été attaqué.

Lacework Labs a repéré les variantes Tsunami intégrées dans les images Docker ou agissant comme agents autonomes. Compte tenu de la fréquence de ces échantillons, nous avons automatisé l'extraction des informations de configuration clés des agents via Ghidra. Si vous pouviez écrire un script dans votre langage de programmation préféré pour repérer et définir des informations précieuses à partir d'un binaire, avec Ghidra, vous avez accès à un écosystème puissant de rétroconception qui vous donne plus d'informations sur les variantes de malware auxquelles votre organisation pourrait être confrontée. 

 

La structure de configuration de Katien et ses variantes

Le tout début du bot IRC Kaiten (et de ses variantes) contient une section de configuration définie par les macros #define pour le nom du processus (#define FAKENAME), le canal IRC à rejoindre (#define CHAN) et la clé pour rejoindre le canal IRC (#define KEY), le cas échéant. Heureusement, le code source est disponible pour les chercheurs (et leurs adversaires). Si nous prenons l'exemple de code et le compilons, nous obtiendrons les symboles de débogage qui nous permettront de comprendre comment ces valeurs codées de manière irréversible sont stockées dans le binaire sous-jacent.

Figure 1 – Configuration de Katien IRC

La structure de fichiers ELF contient une section appelée « .rodata » où des chaînes existent. Les valeurs codées de manière irréversible évoquées ci-dessus y sont stockées. Passer à la section .rodata une fois que Ghidra (ou votre désassembleur préféré) a terminé l'analyse du binaire constitue un excellent point de départ pour repérer les informations de configuration requises pour se connecter à un serveur IRC. La figure 2 ci-dessous montre le début du code .rodata dans Ghidra en révélant trois domaines IRC différents.

Figure 2 – Ghidra IRC rodata

Référençant de nouveau le code source Kaiten.c, les macros de la section de configuration sont des références à partir de la ligne 904. La section de configuration de la figure 3 ci-dessous contient une fonction con() suivie d'une commande IRC envoyée sur la socket créée.

Figure 3 – Configuration Katien au sein de la fonction principale

Cette chaîne codée de manière irréversible peut servir d'« ancre » pour créer un script Ghidra. Par exemple, si nous identifions d'abord cette chaîne codée de manière irréversible, nous pouvons alors remonter d'un certain nombre d'octets et nous retrouver dans la section configuration de la section .text (où le code réel du binaire est stocké). Des variantes telles que Tsunami et Ziggystartux disposent également de cette valeur codée de manière irréversible sous la section de configuration.

La figure 4 montre la référence de la chaîne NICK de la section .rodata (à gauche) à la section .text (à droite), ce qui nous amène exactement là où nous devons être pour identifier les informations de configuration.

Figure 4 – Référence de la chaîne NICK

Un aspect essentiel de cette méthodologie est qu'elle crée également des scripts « fragiles ». Par exemple, si la chaîne n'est pas trouvée, le script Ghidra terminera son exécution. Il est essentiel de comprendre les outils et les scripts de rétro-ingénierie, ainsi que les limites qui leur sont associées, pour déterminer où les problèmes peuvent survenir. Il peut s'agir d'outils qui se détériorent, qui vous « mentent » en n'affichant pas les données que vous attendez ou même d'une tactique criminelle, comme des techniques d'anti-retour/anti-débogage souvent employées par les auteurs de logiciels malveillants. 

 

Analyse de scripts avec Ghidra – PwnKatien

Maintenant que la méthodologie manuelle a été abordée, nous pouvons nous pencher sur la documentation de l'API de Ghidra sur la manière de scripter et d'automatiser notre analyse. L'appel API find dans l'interface FlatAPI de Ghidra permet de rechercher une chaîne de caractères spécifique dans tout l'espace d'adressage. Il existe d'autres définitions de fonction de « find » qui permettent de limiter la portée de « find » à une adresse de début et de fin spécifique. En utilisant la chaîne utilisateur IRC NICK, nous identifierons la fonction main dans la section .text du binaire (si elle n'est pas déjà étiquetée) ainsi que les informations de configuration dans la section .rodata. La figure 5 montre que si la chaîne a été repérée, les références à cette chaîne remplissent un tableau de références.

Figure 5 – Identifier les références à la chaîne NICK

Ensuite, le script Ghidra parcourt les références obtenues via la fonction getReferencesTo et imprime les références aux divers éléments de configuration dans le binaire. Si votre binaire n'a pas identifié de fonction « main », ce script tentera de l'étiqueter.

Enfin, les décalages des informations de configuration seront affichés dans la console Ghidra. Selon la configuration du bot IRC, il peut y avoir des écarts de quelques octets dans certains cas. Cependant, lors de tests internes sur différents bots, l'équipe de Lacework Labs s'est toujours retrouvée dans les bonnes sections pour extraire les données.

Figure 6 – Identification des références et des décalages

L'exécution de ce script Ghidra affichera le contenu dans la console Ghidra. La figure 7 ci-dessous illustre le script Ghidra qui s'exécute le long des adresses pour différentes valeurs de configuration. Les adresses de la console sont cliquables, ce qui permet d'accéder rapidement aux ressources des sections .text et .rodata du binaire.

Figure 7 – Sortie de la console Ghidra

 

Conclusion

Après avoir suivi ce processus manuel d'identification d'une chaîne « d'ancrage » sur laquelle baser les références, il est assez facile d'automatiser l'analyse et l'identification des adresses/valeurs qui vous intéressent à l'aide de l'API de script de Ghidra. 

Il faut également tenir compte des modifications apportées au code source par les auteurs des logiciels malveillants. Lacework Labs a identifié des situations où la section de configuration des domaines et des adresses IP est chiffrée ou obscurcie d'une autre manière et contient de nombreux serveurs IRC, ce qui entraîne un calcul incorrect dans le décalage de ce script Ghidra spécifique. Tenez toujours compte de la capacité de vos outils et de la façon dont ils peuvent être contournés par un attaquant.

Pour plus de contenus de ce type, abonnez-vous à @LaceworkLabs sur les réseaux sociaux Twitter ou LinkedIn pour rester au courant de nos dernières recherches.