11 points par GN⁺ 2025-03-16 | 1 commentaires | Partager sur WhatsApp
  • L’auteur a réussi à récupérer les données d’une entreprise infectée par le rançongiciel Akira sans payer la rançon
  • Le code source utilisé pendant la récupération est disponible sur GitHub
  • Il existe plusieurs variantes du rançongiciel Akira, et cette variante est active depuis la fin de 2023
  • Une version antérieure (avant mi-2023) contenait un bug qui avait permis à Avast de développer un outil de déchiffrement, mais après la publication de cette information, les attaquants ont mis à jour le chiffrement
  • Les hachages des échantillons du rançongiciel peuvent être consultés sur GitHub

Résumé de la méthode de récupération de fichiers pour le rançongiciel Akira (variante Linux/ESXI 2024)

Approche de résolution

Analyse initiale

  • Le rançongiciel utilise l’heure actuelle à la nanoseconde près comme seed
  • Comme l’heure de modification des fichiers sous Linux a une résolution à la nanoseconde, l’auteur a identifié la possibilité de reconstituer la seed
  • Tentative d’une approche par brute force à partir de l’horodatage des fichiers modifiés

Processus de chiffrement complexe

  • Le rançongiciel utilise 4 valeurs de seed (des horodatages à la nanoseconde)
  • La génération de clé applique 1500 itérations du hash SHA-256
  • Le système de fichiers VMware VMFS ne stocke l’heure de modification qu’à la seconde près
  • Le chiffrement multithread rend difficile la reconstitution précise du timing

Reverse engineering

  • Le code était écrit en C++, ce qui a compliqué l’analyse, mais il n’était pas obfusqué
  • Les messages d’erreur ont permis d’identifier l’usage de la bibliothèque Nettle
  • Le générateur pseudo-aléatoire est basé sur l’algorithme Yarrow256 et utilise le code suivant
void generate_random(char *buffer, int size)  
{  
    uint64_t t = get_current_time_nanosecond();  
    char seed[32];  
    snprintf(seed, sizeof(seed), "%lld", t);  
    struct yarrow256_ctx ctx;  
    yarrow256_init(&ctx, 0, NULL);  
    yarrow256_seed(&ctx, strlen(seed), seed);  
    yarrow256_random(&ctx, size, buffer);   
}  
  • Lors de la génération de clé, generate_random() est appelé 4 fois
    • chacha8_key (32 octets)
    • chacha8_nonce (16 octets)
    • kcipher2_key (16 octets) × 2

Évaluation de la faisabilité du brute force

Stratégie principale

  • Générer deux horodatages (t3, t4), les convertir en seeds, puis produire les nombres aléatoires
  • Utiliser ces nombres aléatoires comme clé KCipher2 et IV, chiffrer, puis comparer le résultat avec le fichier chiffré

Analyse des performances

  • La conversion de 100 millions d’horodatages prend 3 heures (sur CPU)
  • Avec un GPU, ce temps tombe à moins de 6 minutes
  • Le nombre de paires possibles sur une fenêtre d’une seconde est d’environ 500 billions
  • Après optimisation GPU, une RTX 3090 peut effectuer 1,5 milliard d’opérations de chiffrement par seconde

Types de fichiers VMware et stratégie de récupération

FLAT-VMDK

  • Les 8 premiers octets d’un VMDK peuvent être récupérés depuis le bootloader
  • Les informations sur l’OS peuvent être vérifiées dans le fichier VMX, ce qui permet d’installer le même OS

SESPARSE

  • Le motif de l’en-tête du fichier a été identifié dans le code source de QEMU
  • L’en-tête commence par 0x00000000cafebabe

Autres fichiers

  • Les fichiers NVRAM, VMX, les fichiers de logs, etc. peuvent permettre d’identifier les horodatages initiaux

Récupération des horodatages

Logs ESXi

  • Les logs ESXi enregistrent le temps d’exécution avec une précision à la milliseconde
  • En l’absence de logs à la milliseconde, une estimation à partir d’une heure à la seconde près reste possible

Heure de modification du système de fichiers

  • Dans le cas d’ESXi, la résolution à la seconde rend l’estimation du temps exact difficile

Chiffrement multithread

  • Le chiffrement des fichiers est traité en parallèle selon le nombre de cœurs CPU
  • L’heure de modification d’un fichier est proche du moment où son chiffrement s’achève

Implémentation de l’outil de brute force

Algorithme KCipher2

  • Utilisation d’une version modifiée de KCipher2 plutôt que de la version standard (y compris le traitement de l’endianess)
  • Optimisation GPU réalisée avec CUDA

Améliorations des performances

  • Amélioration des performances via la mémoire partagée
  • Gain de vitesse grâce à la suppression des copies mémoire
  • Mise en œuvre d’un traitement parallèle des fichiers → environ 1,5 milliard d’opérations par seconde

RTX 3090 vs RTX 4090

  • La RTX 4090 est environ 2,3 fois plus rapide → environ 7 jours
  • RTX 3090 → environ 16 jours

Étapes de récupération

1. Extraction des horodatages

  • Vérifier l’heure de modification avec la commande stat
  • Extraire l’heure de début d’exécution depuis les logs ESXi

2. Extraction des données chiffrées

  • Extraire les blocs chiffrés depuis les VMDK, SESPARSE, etc.

3. Mesure de la vitesse du serveur

  • Utiliser l’outil timing-patch disponible sur GitHub

4. Découpage du travail

  • Créer et fractionner le fichier de configuration
  • Régler l’exécution pour permettre un traitement parallèle sur GPU

5. Location de GPU et exécution

  • Runpod → environ 116 dollars pour 7 jours
  • Vast.ai → moins cher, mais la vitesse peut varier selon l’état de la machine

6. Exécution du brute force KCipher2

./akira-bruteforce run2 config.json  

7. Exécution du brute force Chacha8

  • Nécessaire dans le cas de gros fichiers

8. Exécution du déchiffrement

./decrypt filename.vmdk <t1> <t2> <t3> <t4>  

Résultats de performance

  • RTX 3090 → 1,5 milliard d’opérations par seconde
  • RTX 4090 → 3,5 milliards d’opérations par seconde
  • Avec 16 RTX 4090 → récupération possible en moins de 10 heures

Probabilité de récupération et limites

  • La probabilité de réussite de la récupération est inférieure à 0,1 %
  • Une récupération reste possible si certaines conditions sont réunies
  • La méthode de chiffrement peut changer selon la variante du rançongiciel

Conclusion

  • La récupération après rançongiciel est extrêmement difficile, mais peut réussir dans certaines conditions
  • Le brute force basé sur GPU est l’outil clé
  • L’auteur a publié le code de récupération en open source, mais il lui est difficile de fournir une aide supplémentaire

Remarques complémentaires

  • Voir le fichier README.md sur GitHub
  • Le code a été écrit pour la situation spécifique d’un client → ce n’est pas un outil générique
  • La création du fichier de configuration, l’ajustement du timing, etc. exigent des compétences de niveau administrateur système

1 commentaires

 
GN⁺ 2025-03-16
Commentaires sur Hacker News
  • Quelqu’un a mentionné la « durée de vie limitée » du rançongiciel. Cela a conduit à la suppression d’un commentaire affirmant que cela n’affecterait pas d’autres victimes, mais une réponse a été publiée à ce sujet

    • C’est faux. Ce qui est limité, c’est le nombre d’attaques pour lesquelles la victime peut récupérer ses fichiers
    • Si vous pensez que l’auteur est la seule personne à avoir utilisé cette attaque, c’est également faux
    • Recommande le livre The Ransomware Hunting Team. C’est un ouvrage intéressant sur les coulisses de la manière dont les victimes récupèrent leurs fichiers
  • Une question a été posée sur la raison de l’utilisation des horodatages

    • Sans vouloir manquer de respect, je suis heureux qu’ils ne l’utilisent pas, mais cela ressemble à une erreur de débutant
    • Je me demande si j’ai raté quelque chose, ou s’il y a simplement plus de gens qui choisissent de ne pas devenir criminels
  • Cet article était agréable à lire et contenait juste assez de détails pour satisfaire la curiosité sur le processus

    • Grand bravo à l’auteur pour avoir conçu ce processus et fourni des détails intéressants
  • Si les applications étaient sandboxées par défaut, le problème des rançongiciels diminuerait

  • « J’ai estimé que sur le CPU de mon mini PC, je pouvais calculer 100 000 horodatages par seconde en octets aléatoires (en utilisant tous les cœurs) »

    • J’aimerais avoir plus de détails sur le mini PC. Je suis curieux de connaître le processeur, la RAM, le prix et s’il est fanless
  • Je me demande pourquoi les 65 premiers ko sont chiffrés avec KCipher2 et le reste avec autre chose. Cela paraît étrange

  • « Je m’attends à ce qu’après la publication de ceci, les attaquants modifient à nouveau le chiffrement »

    • S’ils vont s’en rendre compte, je me demande pourquoi le publier. Fournir un décrypteur aussi détaillé pour la gloire sur Internet paraît irresponsable
    • C’est une lecture intéressante et cela stimule la curiosité intellectuelle, mais il serait préférable pour l’ensemble de la communauté de garder les détails non publics
  • « Chaque fois que j’écris sur les rançongiciels sur mon blog indonésien, beaucoup de gens demandent de l’aide à propos des rançongiciels »

    • Le simple fait de vérifier si un rançongiciel est récupérable peut déjà demander des heures d’efforts et de temps (par exemple si le malware est obfusqué/protégé)
    • Donc, il ne faut pas demander que cela soit fait gratuitement
    • Alors il faut facturer ce travail