Durant la deuxième moitié de l’année 2016, les chercheurs d’ESET ont relevé un ensemble unique d’outils malveillants qui a été utilisé au cours de cyberattaques visant des cibles importantes du secteur financier ukrainien. Nous croyons que le but principal des pirates qui utilisent ces outils est le cybersabotage. Ce billet de blogue décrit les renseignements que nous avons découverts au sujet de cette campagne.

Nous allons appeler le groupe à l’origine de ce logiciel malveillant les « TeleBots » (télérobots). Toutefois, nous tenons à dire que ces pirates, de même que les outils qu’ils utilisent, partagent de nombreux éléments communs avec le groupe BlackEnergy, qui a mené des attaques contre l’industrie de l’énergie ukrainienne en décembre 2015 et en janvier 2016. En effet, nous croyons que le groupe BlackEnergy a évolué pour devenir le groupe TeleBots.

Point d’infection

Au même titre que les campagnes attribuées au groupe BlackEnergy, les assaillants ont utilisé comme point d’infection initial des documents Microsoft Excel joints à des courriels de harponnage et renfermant des macros malveillantes. Cette fois, les documents nuisibles ne font appel à aucune ingénierie sociale indiquant aux victimes potentielles de cliquer sur un bouton pour activer la modification. Il semble que les pirates se fient à ce que les victimes décident elles-mêmes de cliquer sur le bouton.

Figure 1 : Exemple de fichier XLS malveillant utilisé au cours de l’attaque d’hameçonnage.

Figure 1 : Exemple de fichier XLS malveillant utilisé au cours de l’attaque d’hameçonnage.

D’habitude, les documents malveillants ne contiennent pas des renseignements utiles sur les métadonnées, mais cette fois, les métadonnées du document contiennent le pseudonyme de la personne responsable de sa modification. D’ailleurs, ce pseudonyme correspond à celui d’une personne qui communique activement au sein d’une communauté russophone de cybercriminels. Toutefois, il faut dire qu’il pourrait s’agir d’une fausse piste ou d’une coïncidence.

Figure 2 : Les métadonnées révèlent ce qui pourrait être le pseudonyme du pirate.

Figure 2 : Les métadonnées révèlent ce qui pourrait être le pseudonyme du pirate.

Dès que la victime clique sur le bouton pour activer la modification, Excel exécute la macro malveillante. Notre analyse démontre que le code de la macro utilisé dans les documents de TeleBots correspond à celui utilisé par le groupe BlackEnergy en 2015. La figure 3 illustre ces ressemblances.

Le but principal de cette macro est de verser un fichier binaire malveillant sous le nom explorer.exe, puis de l’exécuter. Le fichier binaire versé appartient à une famille de chevaux de Troie téléchargeurs. Son but principal est de télécharger et d’exécuter un autre logiciel malveillant. Ce cheval de Troie téléchargeur est écrit en langage de programmation Rust.

Fait à noter : durant les premières étapes de l’attaque, le groupe TeleBots s’en prend à divers serveurs légitimes afin de dissimuler ses activités malveillantes dans le réseau. Par exemple, le cheval de Troie téléchargeur recueille des données à partir d’une URL figée dans le code qui mène à un fichier texte situé dans le service putdrive.com (qui permet à n’importe qui de téléverser et de partager des fichiers en ligne). Le fichier texte est une charge finale chiffrée à l’aide de l’algorithme Base64.

La charge finale est une porte dérobée écrite en langage Python et détectée sous la forme de cheval de Troie Python/TeleBot.AA. Cette porte dérobée constitue le principal logiciel malveillant utilisé par ces pirates, ce qui explique qu’on l’ait baptisé TeleBots.

Figure 3 : Ressemblances entre le code de macro utilisé par BlackEnergy et celui utilisé par TeleBots.

Figure 3 : Ressemblances entre le code de macro utilisé par BlackEnergy et celui utilisé par TeleBots.

Porte dérobée Python/TeleBot.AA

En janvier 2016, nous avons publié notre analyse d’une attaque de harponnage ciblant des entreprises énergétiques en Ukraine. Cet incident est sans doute lié aux fameuses attaques de BlackEnergy en 2015, puisque les assaillants ont utilisé exactement le même serveur de messagerie pour envoyer les messages de harponnage. Toutefois, les attaques de janvier 2016 ont été différentes. Au lieu d’utiliser des logiciels malveillants de la famille BlackEnergy, les pirates ont utilisé une porte dérobée relativement simple appelée GCat, programmée en langage Python. Le code Python de la porte dérobée GCat était obscurci, puis converti en fichier exécutable autonome à l’aide du programme PyInstaller.

Le logiciel malveillant Python/TeleBot utilise exactement la même approche : le code Python de la porte dérobée est obscurci, puis converti en exécutable autonome à l’aide de PyInstaller. De plus, le code Python est chiffré à l’aide de l’algorithme ROT13, chiffré à l’aide de la norme de chiffrement avancé, compressé à l’aide de la bibliothèque zlib, puis chiffré en Base64.

Toutefois, ce qui fait la particularité de cette porte dérobée, c’est la façon dont elle communique avec les pirates afin de recevoir des commandes, en utilisant Telegram Bot API de Telegram Messenger. Telegram Bot API est hébergé sur HTTP et dirigé par un administrateur d’un réseau corrompu. La communication entre l’ordinateur infecté et les pirates ressemble à une communication HTTP(S) avec un serveur légitime, soit api.telegram.org. Nous avons avisé Telegram de cette utilisation abusive de leur plateforme de communication.

Figure 4 : Le code du logiciel malveillant Python/TeleBot.AA utilise Telegram Bot API.

Figure 4 : Le code du logiciel malveillant Python/TeleBot.AA utilise Telegram Bot API.

Chaque échantillon que nous avons découvert possède un jeton unique inscrit dans son code, ce qui signifie qu’un compte de Telegram Messenger distinct est utilisé à chaque attaque. Python/Telebot recourt à des cyberbavardages privés pour communiquer avec les criminels. Ainsi, il est possible de prendre le contrôle des ordinateurs infectés à l’aide de n’importe quel appareil sur lequel Telegram Messenger est installé, tout simplement en entrant des commandes dans une conversation.

Le logiciel malveillant Python/TeleBot prend en charge les commandes suivantes :

SHA-1 Filename Type ESET detection name
1b7380d283ceebcabb683464ba0bb6dd73d6e886 Office 2016 Patcher.zip ZIP of App bundle OSX/Filecoder.E
a91a529f89b1ab8792c345f823e101b55d656a08 Adobe Premiere Pro CC 2017 Patcher.zip ZIP of App bundle OSX/Filecoder.E
e55fe159e6e3a8459e9363401fcc864335fee321 Office 2016 Patcher Mach-O OSX/Filecoder.E
3820b23c1057f8c3522c47737f25183a3c15e4db Adobe Premiere Pro CC 2017 Patcher Mach-O OSX/Filecoder.E

De plus, le logiciel malveillant enregistre tous les fichiers provenant du pirate dans son propre dossier. Ainsi, les attaquants peuvent ajouter d’autres outils malveillants dans un ordinateur infecté. Pendant nos recherches, nous avons pu trouver un compte Telegram appartenant à un des pirates.

Figure 5 : Profil d’un des pirates dans Telegram Messenger.

Figure 5 : Profil d’un des pirates dans Telegram Messenger.

À noter que Telegram Bot API n’était pas le seul protocole légitime utilisé par ces assaillants. Nous avons vu au moins un échantillon de cette porte dérobée utiliser une boîte de messagerie Outlook.com comme serveur de commande et de contrôle.

Des outils malveillants qui volent les mots de passe

Après avoir attaqué le réseau avec succès, les pirates utilisent divers outils malveillants afin de recueillir des mots de passe, ce qui leur permet ensuite d’obtenir une vue générale du réseau local touché.

Une chaîne, qui contient un chemin d’accès PDB vers des symboles de débogage, suggère que les pirates ont nommé un de ces outils « CredRaptor ». Cet outil recueille des mots de passe enregistrés dans divers navigateurs comme Google Chrome, Internet Explorer, Mozilla Firefox et Opera.

Figure 6 : Le chemin d’accès PDB révèle le nom du voleur de mots de passe.

Figure 6 : Le chemin d’accès PDB révèle le nom du voleur de mots de passe.

Les pirates utilisent un outil appelé plainpwd afin de vider les mots de passe Windows de la mémoire. Cet outil est une version légèrement modifiée du projet à code source libre mimikatz.

En plus des outils CredRaptor et plainpwd, l’ensemble d’outils comprend un enregistreur de frappe. Cet enregistreur utilise une technique standard afin d’enregistrer la saisie de clavier : il s’agit de la fonction SetWindowsHookEx.

Afin de renifler des mots de passe dans le trafic réseau, les assaillants utilisent une version console d’Intercepter-NG. Puisque l’installation de ce logiciel nécessite l’installation de pilotes WinPcap, les pirates ont créé un outil personnalisé afin de l’installer sans laisser de trace.

Figure 7 : Outil de reniflage de mots de passe Intercepter-NG.

Figure 7 : Outil de reniflage de mots de passe Intercepter-NG.

En rassemblant tous ces outils, les assaillants peuvent établir leur présence dans un réseau infecté afin d’y exercer un contrôle absolu en obtenant les privilèges d’administrateur de domaine.

Outil de requête LDAP

Une autre découverte intéressante a été celle d’un outil utilisé durant les attaques afin de lancer des requêtes dans Active Directory à l’aide de LDAP. Cet outil, adapté au domaine d’une victime précise, est en mesure de créer une image de renseignements détaillés sur les ordinateurs et les noms d’utilisateur.

Figure 8 : Code désassemblé de l’outil de requête LDAP.

Figure 8 : Code désassemblé de l’outil de requête LDAP.

Une autre porte dérobée

Des recherches plus approfondies ont permis de révéler que les pirates ont déployé un autre type de porte dérobée afin de recouvrer l’accès au réseau infecté si leur porte dérobée principale Python/TeleBot venait à être découverte et effacée. Cette porte dérobée supplémentaire est écrite en langage VBScript, et certains échantillons que nous avons trouvés ont été convertis à l’aide du programme script2exe.

Figure 9 : Code source de la porte dérobée additionnelle écrite en VBScript.

Figure 9 : Code source de la porte dérobée additionnelle écrite en VBScript.

On trouve divers exemples de cette porte dérobée en langage VBScript, mais leur fonctionnement est toujours très simple. La porte dérobée envoie à son serveur de commande et de contrôle le nom de l’ordinateur qui l’exécute et son adresse MAC sous HTTP. La variable « timeout » définit le temps (en minutes) entre les requêtes envoyées au serveur. Le serveur peut envoyer d’autres commandes à exécuter. Voici une liste des commandes prises en charge :

Package Name Hash Detection
goodish.weather A69C9BAD3DB04D106D92FD82EF4503EA012D0DA9 Android/Spy.Banker.HU

BCS-server

Les pirates ont également utilisé un outil malveillant qu’ils appelaient BCS-server. Cet outil leur permet d’ouvrir une voie dans un réseau interne. Dans cette voie, des données pourront être échangées entre le serveur de commande et de contrôle et des ordinateurs du réseau, qu’ils soient infectés ou non. En général, le fonctionnement de cet outil suit les mêmes principes que le logiciel malveillant XTUNNEL dont se sert le groupe Sednit.

Durant notre analyse, nous avons découvert que les attaquants ont utilisé un guide pour utiliser cet outil en particulier. Fait intéressant, ce guide était écrit en russe.

Figure 10 : Guide de BCS-server en russe.

Figure 10 : Guide de BCS-server en russe.

Ce guide en russe se traduit un peu comme suit :

Paramètres
-saddr – adresse du serveur BCS
-hport – port d’un hôte, que nous avons réussi à régler sur le serveur (c’est de cette façon que nous contournons le pare-feu)
Exemples :
phost_win.exe –saddr=10.10.10.10 –hport=80
Versions de débogage :
phost_cnv.exe – version console
phost_win_log.exe – version qui se connecte au fichier

Les pirates désignent donc un serveur de commande et de contrôle externe dans la ligne de commande, ce qui permet à l’outil de se connecter à ce serveur au moyen d’une adresse HTTP. Les assaillants utilisent ce serveur comme serveur mandataire : l’outil redirige la connexion qui est établie avec ce serveur vers le réseau interne, et toute réponse qu’il obtient d’un ordinateur dans ce réseau interne est acheminée au serveur de commande et de contrôle. De cette façon, les pirates peuvent communiquer avec des serveurs internes qui sont normalement inaccessibles sur internet.

Les communications entre l’outil BCS-server et le serveur de commande et de contrôle sont codées en base64 et renfermées entre balises HTML.

Figure 11 : Saisie de l’établissement de la liaison entre l’outil BCS-server et le serveur de commande et de contrôle.

Figure 11 : Saisie de l’établissement de la liaison entre l’outil BCS-server et le serveur de commande et de contrôle.

KillDisk

Le logiciel malveillant KillDisk est un composant destructeur utilisé par les assaillants au cours de l’étape finale de leur attaque. Des versions antérieures de ce logiciel ont servi au cours d’attaques visant des entreprises médiatiques en novembre 2015, puis des fournisseurs de réseau électrique en Ukraine en décembre 2015.

KillDisk est conçu pour s’exécuter avec un niveau de privilèges élevé. Dans le cas présent, il se connecte en tant que service portant le nom Plug-And-Play Support. À l’étape finale, les pirates ont probablement mis la main sur les authentifiants d’administrateur. C’est pourquoi ils emploient Microsoft PsExec afin d’exécuter KillDisk – avec le niveau de privilège le plus élevé – sur les serveurs et les postes de travail.

Les pirates peuvent régler une date d’activation de KillDisk à partir de la ligne de commande. Toutefois, un des échantillons comportait une date d’activation prédéfinie du 6 décembre 2016 à 9 h 30.

Le nouveau code contient des améliorations, mais le fonctionnement de KillDisk n’a pas beaucoup changé : il supprime des fichiers de système importants et empêche le démarrage de l’ordinateur. De plus, le logiciel écrase des fichiers munis de certaines extensions. Les extensions définies dans cette version de KillDisk sont les suivantes :

  • .kdbx .bak .back .dr .bkf .cfg .fdb .mdb .accdb .gdb .wdb .csv .sdf .myd .dbf .sql .edb .mdf .ib .db3 .db4 .accdc .mdbx .sl3 .sqlite3 .nsn .dbc .dbx .sdb .ibz .sqlite .pyc .dwg .3ds .ai .conf .my .ost .pst .mkv .mp3 .wav .oda .sh .py .ps .ps1 .php .aspx .asp .rb .js .git .mdf .pdf .djvu .doc .docx .xls .xlsx .jar .ppt .pptx .rtf .vsd .vsdx .jpeg .jpg .png .tiff .msi .zip .rar .7z .tar .gz .eml .mail .ml .ova .vmdk .vhd .vmem .vdi .vhdx .vmx .ovf .vmc .vmfx .vmxf .hdd .vbox .vcb .vmsd .vfd .pvi .hdd .bin .avhd .vsv .iso .nrg .disk .hdd .pmf .vmdk .xvd

Le logiciel malveillant KillDisk peut remplacer les fichiers supprimés par de nouveaux petits fichiers qui contiennent l’une ou l’autre des chaînes suivantes : mrR0b07 ou fS0cie7y à la place du contenu original. Il ne s’agit pas de la seule référence que l’on fait à l’émission télévisée Mr. Robot. En effet, cette variante de KillDisk affiche l’image illustrée à la figure 12.

Figure 12 : Image affichée par KillDisk.

Figure 12 : Image affichée par KillDisk.

Il est intéressant de noter que le logiciel malveillant KillDisk n’enregistre pas cette image à un endroit en particulier : il comporte plutôt un code qui dessine cette image en temps réel à l’aide de l’interface de périphériques graphiques de Windows. Il semble que les pirates aient déployé beaucoup d’efforts seulement pour écrire le code qui permet à cette image de se dessiner.

Conclusion

Les cybercriminels à l’origine de ces attaques ciblées font preuve d’une ferme intention d’effectuer du cybersabotage. Pour être en mesure d’organiser de telles attaques, ils inventent constamment de nouveaux logiciels et de nouvelles techniques. Par exemple, ils ont recours à Telegram Bot API au lieu d’un serveur de commande et de contrôle plus traditionnel.

Nous tenons à remercier David Gabris pour l’aide qu’il a apportée durant l’analyse.

Indicateurs de compromission

Les indicateurs de compromission de TeleBots sont aussi disponibles dans le dépôt d’archives GitHub d’ESET.

Noms répertoriés par ESET :

Cheval de Troie VBA/TrojanDropper.Agent.SD
Cheval de Troie Win32/TrojanDownloader.Agent.CWY
Cheval de Troie Python/TeleBot.AA
Cheval de Troie Python/Agent.Q
Cheval de Troie Python/Agent.AE
Cheval de Troie Python/Agent.AD
Cheval de Troie VBS/Agent.AQ
Cheval de Troie VBS/Agent.AO
Cheval de Troie VBS/Agent.AP
Cheval de Troie Win32/HackTool.NetHacker.N
Cheval de Troie Win32/HackTool.NetHacker.O
Cheval de Troie Win32/PSW.Agent.OCO
Application Win64/Riskware.Mimikatz.H
Application Win32/RiskWare.Mimikatz.I
Cheval de Troie Win32/PSW.Delf.OQU
Cheval de Troie Win32/PSW.Agent.OCP
Cheval de Troie Win64/Spy.KeyLogger.G
Cheval de Troie Win32/KillDisk.NBH
Cheval de Troie Win32/KillDisk.NBI

Serveurs de commande et de contrôle :

93.190.137.212
95.141.37.3
80.233.134.147

Serveurs légitimes détournés par les auteurs du logiciel malveillant :

srv70.putdrive.com (IP : 188.165.14.185)
api.telegram.org (IP : 149.154.167.200, 149.154.167.197, 149.154.167.198, 149.154.167.199)
smtp-mail.outlook.com (IP : 65.55.176.126)

Hachage SHA-1 des documents XLS comportant la macro malveillante :

7FC462F1734C09D8D70C6779A4F1A3E6E2A9CC9F
C361A06E51D2E2CD560F43D4CC9DABE765536179

Hachage SHA-1 de Win32/TrojanDownloader.Agent.CWY :

F1BF54186C2C64CD104755F247867238C8472504

Hachage SHA-1 de la porte dérobée Python/TeleBot.AA :

16C206D9CFD4C82D6652AFB1EEBB589A927B041B
1DC1660677A41B6622B795A1EB5AA5E5118D8F18
26DA35564D04BB308D57F645F353D1DE1FB76677
30D2DA7CAF740BAAA8A1300EE48220B3043A327D
385F26D29B46FF55C5F4D6BBFD3DA12EB5C33ED7
4D5023F9F9D0BA7A7328A8EE341DBBCA244F72C5
57DAD9CDA501BC8F1D0496EF010146D9A1D3734F
68377A993E5A85EB39ADED400755A22EB7273CA0
77D7EA627F645219CF6B8454459BAEF1E5192467
7B87AD4A25E80000FF1011B51F03E48E8EA6C23D
7C822F0FDB5EC14DD335CBE0238448C14015F495
86ABBF8A4CF9828381DDE9FD09E55446E7533E78
9512A8280214674E6B16B07BE281BB9F0255004B
B2E9D964C304FC91DCAF39FF44E3C38132C94655
FE4C1C6B3D8FDC9E562C57849E8094393075BC93

Hachage SHA-1 des portes dérobées en langage VBScript :

F00F632749418B2B75CA9ECE73A02C485621C3B4
06E1F816CBAF45BD6EE55F74F0261A674E805F86
35D71DE3E665CF9D6A685AE02C3876B7D56B1687
F22CEA7BC080E712E85549848D35E7D5908D9B49
C473CCB92581A803C1F1540BE2193BC8B9599BFE

Hachage SHA-1 de BCS-server :

4B692E2597683354E106DFB9B90677C9311972A1
BF3CB98DC668E455188EBB4C311BD19CD9F46667

Hachage SHA-1 de la version modifiée de mimikatz :

B0BA3405BB2B0FA5BA34B57C2CC7E5C184D86991
AD2D3D00C7573733B70D9780AE3B89EEB8C62C76
D8614BC1D428EBABCCBFAE76A81037FF908A8F79

Hachage SHA-1 de l’outil de requête LDAP :

81F73C76FBF4AB3487D5E6E8629E83C0568DE713

Hachage SHA-1 du voleur de mot de passe CredRaptor :

FFFC20567DA4656059860ED06C53FD4E5AD664C2
58A45EF055B287BAD7B81033E17446EE6B682E2D

Hachage SHA-1 du cheval de Troie Win64/Spy.KeyLogger.G :

7582DE9E93E2F35F9A63B59317EBA48846EEA4C7

Hachage SHA-1 d’Intercepter-NG et de l’installateur silencieux de WinPCAP :

64CB897ACC37E12E4F49C4DA4DFAD606B3976225
A0B9A35675153F4933C3E55418B6566E1A5DBF8A

Hachage SHA-1 de Win32/KillDisk :

71A2B3F48828E4552637FA9753F0324B7146F3AF
8EB8527562DDA552FC6B8827C0EBF50968848F1A