+38 067 569 61 50

info@clapkey.com

Contourner BitLocker et extraire les clés de la mémoire sous Windows 11

L'équipe Clapkey est de nouveau tombée sur quelque chose d'intéressant dans le monde de l'IT et a traduit cet article pour vous.

Introduction

Dans cet article, je vais montrer comment on peut contourner le chiffrement BitLocker sous Windows 11 (version 24H2) et extraire de la mémoire les clés de chiffrement du volume (full volume encryption key, FVEK) à l'aide de mon outil Memory-Dump-UEFI.

Brève présentation

Si un attaquant dispose d'un accès physique à l'appareil, il peut potentiellement obtenir un accès en redémarrant brutalement l'ordinateur et en effectuant un dump de la RAM des instances Windows récemment exécutées. Le dump mémoire peut ensuite être analysé pour trouver des informations sensibles, par exemple les clés FVEK. Cette technique ne fonctionne pas de façon garantie, car après la coupure d'alimentation le contenu de la RAM se dégrade rapidement.

Il existe de nombreuses techniques pour ralentir cette dégradation de la mémoire, par exemple le refroidissement physique de la RAM ou l'utilisation de sources d'alimentation externes pour maintenir l'apport d'énergie. Pour ma démonstration, j'ai court-circuité les contacts de réinitialisation sur la carte mère de l'appareil, ce qui force le système à s'éteindre brutalement sans perte d'alimentation.

Un autre problème potentiel réside dans le secure boot - une norme de sécurité qui limite ce qui peut s'exécuter au démarrage du système. Cette protection a ses propres limites et a déjà été contournée à l'aide de shim et de bien d'autres méthodes, qui ne sont pas pertinentes pour notre démonstration.

Étape 1 : création d'une clé USB amorçable

Pour cette étape, nous aurons besoin d'une clé USB dont la taille est supérieure à la quantité de RAM du système cible. Pour simplifier cette étape, j'ai écrit un script flashimage.sh.

Suivez les instructions pour créer et appliquer l'application amorçable.

Étape 2 : redémarrage brutal du système cible

Cette étape peut être réalisée de nombreuses façons différentes ; notre objectif principal est de minimiser l'intervalle de temps pendant lequel l'alimentation de l'ordinateur est complètement coupée. D'après mon expérience, le meilleur taux de réussite est obtenu en redémarrant le système pendant que Windows est encore en train de démarrer, mais n'a pas encore atteint l'écran de connexion ; c'est en tout cas vrai dans le cas de la recherche des clés FVEK.

Étape 3 : démarrage depuis la clé USB

Nous lançons immédiatement Memory-Dump-UEFI depuis la clé USB. Nous nous retrouvons dans un shell UEFI, dans lequel on peut exécuter app.efi. Pour plus de détails sur la marche à suivre, consultez le fichier README du programme. Le temps nécessaire dépend de la quantité de RAM à dumper et de la vitesse de la clé USB. Je recommande à cette étape de débrancher tous les autres périphériques USB, afin que le programme n'écrive pas accidentellement sur le mauvais support.

La capture d'écran montre à quoi doit ressembler une entrée réussie dans le shell. Le dump mémoire commencera à générer des fichiers de dump jusqu'à épuisement de la mémoire. Une fois terminé, on peut éteindre l'ordinateur sans risque de manière normale.

Étape 4 : analyse des dumps

Préparation

Il est probable que l'application crée de nombreux dumps. Cela est dû à la limite de 4 Go sur la taille de fichier imposée par le système de fichiers FAT32. Pour respecter la spécification UEFI, il est nécessaire d'utiliser ce système de fichiers. Pour plus de commodité, j'ai ajouté dans le dossier des outils le programme concatDumps, qui assemble dans l'ordre chronologique plusieurs dumps en un seul. Le dump consistera en données brutes présentes en mémoire au moment de sa création ; pour faciliter la lecture, je recommande donc d'utiliser un outil comme xxd. Pour faciliter la recherche dans les dumps, j'ai écrit le programme searchMem, qui permet de rechercher des motifs hexadécimaux dans le dump. Il trouve les décalages (offsets) des occurrences de ces motifs hexadécimaux, vers lesquels on peut ensuite se déplacer avec la commande xxd -s <offset> <dump>. (remplacer les lettres ukrainiennes par des lettres anglaises)

Pool Tag

Les Pool tags sont des identifiants à 4 caractères indiquant où sont situés les pools de mémoire du noyau Windows. Les pools sont alloués par le noyau Windows, ce qui en fait un excellent endroit pour rechercher des informations sensibles. Il existe un grand nombre de ces pool tags ; j'ai compilé un fichier texte pooltag.txt contenant la liste de tous les pool tags ainsi que des détails sur leur usage.

Avant d'aller plus loin, je tiens à remercier Microsoft d'avoir clairement indiqué où se trouvent les clés cryptographiques en mémoire. Sous Windows 7, pour récupérer la clé, il suffisait de trouver le pool tag FVEc, correspondant aux allocations cryptographiques de fvevol.sys. Sous Windows 8.1 et 10, la clé se trouve dans le pool mémoire marqué Cngb ; il correspond au module ksecdd.sys. Au cours de mon analyse du dump mémoire de Windows 11, je n'ai pas réussi à trouver la clé à ces deux emplacements, mais je l'ai trouvée à deux autres endroits.

Récupération de la clé FVEK

Le premier emplacement de la clé FVEK se trouvait sous le pool tag dFVE, qui désigne l'allocation mémoire de dumpfve.sys, appartenant au filtre de dump d'urgence de chiffrement de volume pour le chiffrement de disque BitLocker. Ce pool tag est surligné en bleu, et la clé FVEK en rouge. C'était l'emplacement le plus simple à trouver parmi ceux que j'ai identifiés ; de plus, il est précédé du motif 0x0480, qui indique le type de chiffrement utilisé (dans mon cas, XTS-AES-128).

Le second emplacement se trouve sous le pool tag None, qui correspond aux appels de la procédure ExAllocatePool. Cette fois, la première moitié de la clé apparaît deux fois, et la seconde une fois.

Étapes suivantes

Il est important de noter que la clé obtenue doit être précédée de l'indication de l'algorithme utilisé. Autrement dit, si la clé se présente sous la forme b2cbcc06071931b7cc50b59f878789571f4dd815c2008e93c02d5c6cd98c83ef54b, vous devez ajouter au début de la clé 0x8004 (ou l'indicateur d'un autre algorithme) au format little endian :

0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b

Ensuite, il faut écrire cette valeur hexadécimale dans un fichier. Cela peut se faire ainsi :

echo «0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b» | xxd -r -p > output.fvek

Je recommande vivement d'utiliser la suite d'outils dislocker pour déterminer l'algorithme/la valeur nécessaires et déverrouiller le disque. Si tout est fait correctement, vous pourrez utiliser output.fvek pour déverrouiller la partition protégée par BitLocker et accéder à toutes les données du volume.

Conclusions

La meilleure façon de comprendre comment Microsoft a implémenté BitLocker est d'effectuer un débogage au niveau du noyau à l'aide de windbg. Cela peut se faire assez facilement à l'aide de machines virtuelles ou d'un câble croisé USB 3.0 A/A. Trouver la clé a d'abord été possible grâce à l'exécution pas à pas du processus de démarrage de Windows et à l'observation des actions de BitLocker. Microsoft s'efforce de supprimer les clés à l'aide de fonctions telles que SymCryptSessionDestroy, mais elle ne parvient pas à détruire toutes les clés, comme le prouve leur présence dans le tas (heap).

Liens

https://tribalchicken.net/recovering-bitlocker-keys-on-windows-8-1-and-10/

https://github.com/libyal/libbde/blob/main/documentation/BitLocker%20Drive%20Encryption%20(BDE)%20format.asciidoc

https://github.com/Aorimn/dislocker

https://github.com/microsoft/SymCrypt

https://github.com/libyal/libbde

https://github.com/zodiacon/PoolMonX/blob/master/res/pooltag.txt

https://techcommunity.microsoft.com/blog/askperf/an-introduction-to-pool-tags/372983

Et pour protéger votre serveur ou votre ordinateur de bureau, vous pouvez vous adresser à nous en suivant ce lien : https://clapkey.com/contact-us

Cette page a été traduite partiellement ou entièrement à l'aide de l'IA. Merci d'envoyer vos remarques sur la traduction à info@clapkey.com.

#StandWithUkraine

Soutenir les Forces armées d'Ukraine pendant l'invasion russe

Contacts

Bureau

4e étage, CC Metropoliten (rue Gogolia 38), Poltava, Ukraine, 36000