Après une première partie présentant, techniquement, les méthodes exploitées par les pirates pour gérer leur ransomware, voici la suite avec l’analyse d’un ordinateur infecté sur lequel des fichiers ont été chiffrés.
par Antoine Quélard et Adrien Luyé
Laboratoire (C + V) O – Laboratoire de Cryptologie et Virologie Opérationnelles – Esiea
Nettoyage
Nous avons commencé par supprimer de manière fiable le ransomware présent sur la machine infectée. Nous avons démarré la machine en mode sans échec, afin de limiter le démarrage des processus Windows, et ainsi éviter que les processus malveillants ne se relancent également.
Nous avons ensuite scanné le pc à l’aide de deux anti-malwares différents afin de garantir une meilleure détection et suppression de la menace.
Analyse des traces
Nous avons noté la présence de fichiers chiffrés portant l’extension « *.vvv ». Nous avons également observé la présence de fichier « how_recover+obc.html », « how_recover+obc.txt », « how_recover+sau.html », et « how_recover+sau.txt ». Ces informations nous ont permis de déterminer qu’il s’agissait du ransomware TeslaCrypt 2.0. En revanche, nous ne savions pas précisément à quelle version nous avions à faire.
Le ransomware TeslaCrypt 2.0 est une version mise à jour du ransomware TeslaCrypt. C’est un ransomware qui a été découvert au début de l’année 2015. Sa principale caractéristique est qu’il cible les fichiers en rapport avec les jeux en ligne en plus des fichiers habituels (images, vidéos, PDF, documents textes). Les d’instruction indiquent qu’il faut payer une rançon (500 $) par l’intermédiaire de Bitcoin.
Nous avons ensuite scanné l’ensemble du disque afin de récupérer la totalité des fichiers chiffrés par le ransomware.
Dans un premier temps, nous avons essayé tous les outils de récupération / déchiffrement de Kaspersky sans résultat. Après plusieurs recherches sur internet, nous avons décidé d’utiliser l’outil TeslaCrack Master (https://github.com/Googulator/TeslaCrack) pour essayer de déchiffrer l’ensemble des données chiffrées. Nous sommes partis légèrement défaitistes, car comme vous pouvez le voir dans les images ci-dessous, le pirate annonce que le chiffrement utilisé est RSA-2048, soit des longueurs de clés telles qu’il est illusoire de vouloir tenter quoi que ce soit à l’heure actuelle.
Après analyse, il est apparu que l’algorithme de chiffrement utilisé n’était pas « RSA-2048 » comme indiqué dans le « how_recover », mais l’algorithme symétrique « AES » en mode « CBC » (chiffrement par bloc) exploitant une clé de 256 bits.
Nous avons donc exploité un premier script python (teslacrack.py) de TeslaCrack, qui permet de récupérer une suite de chiffres dans les fichiers chiffrés. Nous avons alors récupéré deux suites de chiffres différentes. Selon nous, le logiciel malveillant a créé une clé différente à chaque lancement de celui-ci, ce qui correspond à notre cas (premier chiffrement lors de l’infection, et deuxième chiffrement lors d’un redémarrage de la machine).
Attention : Dans la procédure donnée par TeslaCrack, il est fait mention de clé publique et de clé privée AES (ce qui est bien sûr totalement erroné). Le script est néanmoins fonctionnel. Il permet de récupérer la clé symétrique qui est cachée (codée) à l’intérieur de chaque fichier chiffré. Les scripts python permettent de retrouver cette clé. Le terme clé publique fait référence à la chaîne hexadécimale, et le terme clé privée à la clé AES.
La prochaine étape est de calculer les facteurs premiers qui composent la chaîne hexadécimale. Il existe un site où sont enregistrés les facteurs premiers de certains grands nombres, http://factordb.com/, mais nos nombres n’étaient pas renseignés dans sa base de données.
Nous avons donc utilisé YAFU (https://sourceforge.net/projects/yafu/) pour calculer les facteurs premiers composant les clés publiques. Il est nécessaire d’obtenir une factorisation complète de la chaîne hexadécimale pour permettre de retrouver la clé AES.
Nous avons réussi à obtenir la factorisation via YAFU uniquement pour la première clé, car il utilise la méthode du crible quadratique efficace uniquement si les facteurs composant la clé sont inférieurs à 100 chiffres décimaux. Pour la deuxième, nous avons utilisé un autre logiciel, MSIEVE (https://sourceforge.net/projects/msieve/) utilisant la méthode du crible général de corps de nombres permettant de calculer efficacement des facteurs supérieurs à 100 chiffres décimaux.
Cette étape peut prendre plus ou moins de temps, en fonction de la chance qui est avec vous. Pour notre première suite de chiffres, la factorisation complète a pris 20 minutes. En revanche, pour la deuxième suite de chiffres, la factorisation complète a duré 15 heures avec une machine performante.
Nous avons ensuite étudié le script python permettant de retrouver la clé (unfactor.py), afin de déterminer précisément le rôle des facteurs premiers de la chaîne hexadécimale extraite des fichiers chiffrés.
Nous avons déterminé qu’afin de camoufler la clé AES, elle est décomposée en facteurs premiers, qui sont ensuite multipliés à d’autres facteurs premiers choisis aléatoirement, afin d’obtenir en résultat une chaîne de 128 caractères hexadécimaux (soit 512 bits). Cette chaîne est ensuite stockée dans l’entête des fichiers. Nous avons remarqué que le vecteur d’initialisation de l’AES était également stocké dans l’entête du fichier toujours au même emplacement.
Nous avons donc utilisé le deuxième script python, avec en entrée un fichier PDF chiffré et les facteurs premiers calculés précédemment.
Le script nous donne en résultat une série de clés candidates pour déchiffrer les fichiers.
Déchiffrement
Nous sommes donc maintenant en possession de toutes les informations nécessaires pour déchiffrer nos fichiers.
Il faut donc éditer le premier script python (teslacrack.py) afin de lui rajouter les clés que nous venons de récupérer. Nous avons ensuite relancé ce script en lui indiquant l’emplacement de nos fichiers chiffrés en argument.
L’opération de déchiffrement est automatique et assez rapide. En python l’opération de chiffrement et déchiffrement AES se fait avec une seule commande :
Par exemple :
AES.new(clé, mode_de_chiffrement, Vecteur_Initialisation).decrypt(data) pour le déchiffrement.
Conclusion
Au moment de l’écriture de cet article, le ransomware Teslacrypt a déjà évolué et de nouvelles versions ont déjà été diffusées. De plus, les pirates ont donné lors des dernières semaines les clés afin de déchiffrer les fichiers. On peut s’attendre à une nouvelle version de Teslacrypt.
Nous avons réussi à récupérer nos informations, car la version du malware nous ayant infectés présentait plusieurs failles. Le chiffrement utilisé n’est pas mis en cause, mais plutôt sa piètre implémentation ainsi que la présence de nombreuses informations sur la machine qui nous ont permis de déchiffrer nos fichiers.
On peut penser que toutes les informations présentes sur la machine attaquée impliquent que le pirate ne stocke aucune clé ou information de son côté. Cela lui permettrait d’éviter de stocker et gérer localement les clés et informations nécessaires aux déchiffrements. D’un autre côté, cela lui permet également de limiter son interaction avec les machines ciblées, et ainsi éviter une quelconque tentative de traçage.
Nous pensons que part la suite, comme le pirate connaît la méthode utilisée pour camoufler ces informations, il lui est beaucoup plus simple de les retrouver et ainsi de les déchiffrer.
Nous pouvons également supposer que le code d’identification propre à chaque infection qui est fourni dans le fichier how_recover, peut potentiellement donner aux pirates des informations lui permettant de retrouver les données nécessaires au déchiffrement. N’ayant pas analysé le malware pendant son exécution, nous ne pouvons que faire des suppositions sur les choix faits par celui-ci.
Il est également nécessaire de préciser que le premier vecteur d’infection n’est pas forcément une faille logicielle, mais une faille dans le comportement des utilisateurs (ouvertures de pièces jointes, exécution de macro, crédulité, ouverture de lien suspicieux, visite de site internet non sécurisé et/ou malveillant).
A suivre…
Les ransomwares sont une menace importante actuellement. Une perte de données pour un particulier ou une entreprise peut s’avérer désastreuse. Aujourd’hui, avec les méthodes de chiffrement utilisées par les pirates, il est possible de restaurer un système et ainsi de retrouver les fichiers chiffrés.
Cette possibilité n’existera bientôt plus, car les pirates utilisent de plus en plus des techniques de chiffrement impossible à contourner avec une implémentation de plus en plus forte.
Pour un particulier, il est donc nécessaire afin d’éviter une perte totale d’effectuer régulièrement des sauvegardes des fichiers importants. Ainsi, il sera simple de limiter la perte de données malgré un verrouillage total du système. En entreprise, seul un dispositif de type « Plan de Continuité d’Activité » / « Plan de Reprise d’Activités » (PCA/PRA) permet de retravailler après une attaque. Ce dispositif doit être appliqué en test au moins une fois dans l’année afin de vérifier son efficacité et que la restauration est fonctionnelle.
Un prochain article présentera la démarche pour mettre en place un tel dispositif.