Bitcracker est le premier outil de fissuration de mot de passe open source pour les périphériques de stockage (disque dur, pendrive USB, carte SD, etc ...) cryptée avec BitLocker, une fonction de chiffrement disponible sur Windows Vista, 7, 8.1 et 10 (Ultimate, Pro et Enterprise éditions). BitLocker propose un certain nombre de méthodes d'authentification différentes pour chiffrer un périphérique de stockage comme le module de plate-forme de confiance (TPM), la carte à puce, le mot de passe de récupération, le mot de passe fourni par l'utilisateur.
Au moyen d'une attaque de dictionnaire, Bitcracker essaie de trouver le mot de passe utilisateur correct ou le mot de passe de récupération pour décrypter le périphérique de stockage crypté. Il a été mis en œuvre dans CUDA et OpenCL.
Plusieurs revues ont retardé la publication de notre document Bitcracker (près de 3 ans, avec rejet final après plusieurs révisions) qui explique les détails de notre attaque, le format de volume Bitlocker Drive Encryption (BDE) et les faiblesses possibles de la procédure de chiffrement / décryptage. Enfin, nous avons publié le document ici: https://arxiv.org/abs/1901.01337. N'hésitez pas à commenter et à partager.
Pour exécuter le Bitcracker-Cuda, les exigences minimales sont:
Pour exécuter le bitcracker-opencl, les exigences minimales sont tous les GPU ou CPU prenant en charge OpenCL (vous pouvez trouver de l'aide ici.
Bitcracker nécessite au moins 260 Mo de mémoire de l'appareil.
Nous vous recommandons fortement d'exécuter votre attaque sur un GPU plutôt que sur le processeur pour des raisons de performance (voir les performances de la section).
L'exécution du script build.sh
génère 4 exécutables à l'intérieur du répertoire build
: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
.
Afin de construire bitcracker_cuda
avec cohérent avec votre version NVIDIA GPU et CUDA, vous devez modifier le src_CUDA/Makefile
Chosant la version SM correcte. Comme référence, vous pouvez utiliser le tableau suivant:
Architecture GPU | Cuda suggéré | Makefile |
---|---|---|
Kepler | Cuda 7.5 | arch = calcul_35, code = sm_35 |
Maxwell | CUDA 8.0 | arch = calcul_52, code = sm_52 |
Pascal | Cuda 9.0 | arch = calcul_60, code = sm_60 |
Volta | Cuda 9.0 | arch = calcul_70, code = sm_70 |
Vous devez créer l'image de votre périphérique de stockage chiffré avec BitLocker en utilisant, par exemple, la commande DD :
sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 records in
4030464+0 records out
2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)
Ensuite, vous devez exécuter l'exécutable bitcracker_hash
sur votre imageEncrypted.img
afin de:
Si l'exécution se termine correctement, bitcracker_hash
produit 1 ou 2 fichiers de sortie:
Les volumes cryptés BDE pourraient avoir différents formats pour différentes méthodes d'authentification. Si bitcracker_hash
ne peut pas trouver le mot de passe de récupération sur votre image cryptée, veuillez ouvrir un problème ou me contacter
Un exemple:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Opening file ./Images/imgWin7
....
Signature found at 0x02208000
Version: 2 (Windows 7 or later)
VMK entry found at 0x022080bc
VMK encrypted with user password found!
VMK encrypted with AES-CCM
VMK entry found at 0x0220819c
VMK encrypted with Recovery key found!
VMK encrypted with AES-CCM
User Password hash:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Recovery Key hash:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
Output file for user password attack: "hash_user_pass.txt"
Output file for recovery password attack: "hash_recv_pass.txt"
Vous pouvez utiliser ce type d'attaque si le périphérique de stockage a été chiffré avec un mot de passe fourni par l'utilisateur comme indiqué dans l'image suivante. BitCracker effectue une attaque de dictionnaire, vous devez donc fournir une liste de mots de mots de passe utilisateur possibles.
Pour commencer l'attaque dont vous avez besoin:
hash_user_pass.txt
Un exemple de ligne de commande:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
Où:
-f
: Chemin vers le fichier hash_user_pass.txt
-d
: chemin vers votre liste de mots-t
: Nombre de mots de passe traités par chaque thread CUDA-b
: Nombre de blocs Cuda-g
: ID de périphérique GPU NVIDIA-u
: Spécifiez que vous voulez une attaque de mot de passe utilisateur Pour toutes les options disponibles, tapez ./build/bitcracker_cuda -h
. Afin d'avoir les meilleures performances, veuillez vous référer à la section Tableau dans les performances pour définir correctement les options t
et b
en fonction de votre GPU NVIDIA.
Les mêmes considérations peuvent être appliquées pour l'exécutable bitcracker_opencl
.
Un exemple de sortie:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
....
Reading hash file "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Attack
====================================
Type of attack: User Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 1
Max Psw per kernel: 1024
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Stream 0
Effective number psw: 12
Passwords Range:
abcdefshhf
.....
blablalbalbalbla12
Time: 28.651947 sec
Passwords x second: 0.42 pw/sec
================================================
....
Password found: paperino
================================================
Actuellement, Bitcracker est en mesure de traiter les mots de passe d'entrée d'une longueur entre 8 et 55 caractères.
Pendant le chiffrement d'un périphérique de stockage, (quelle que soit la méthode d'authentification), Bitlocker demande à l'utilisateur de stocker un mot de passe de récupération qui peut être utilisé pour restaurer l'accès au périphérique de stockage crypté en cas de délai de déverrouillage du lecteur normalement. Ainsi, le mot de passe de récupération est une sorte de parts de parts pour toutes les méthodes d'authentification et il se compose d'une clé à 48 chiffres comme celle-ci:
236808-089419-192665-495704-618299-073414-538373-542366
Voir Microsoft Docs pour plus de détails.
Quant au mot de passe de l'utilisateur, BitCracker est en mesure d'effectuer une attaque de dictionnaire pour trouver le mot de passe de récupération correct généré par BitLocker pour crypter le périphérique de stockage. Veuillez noter qu'actuellement, nous ne pouvons attaquer le mot de passe de récupération que si le périphérique de stockage n'a pas été chiffré avec le TPM.
Pour commencer l'attaque dont vous avez besoin:
hash_recv_pass.txt
Générez et stockez tous les mots de passe possibles, c'est un problème difficile. Pour cette raison, nous avons créé un générateur de mot de passe de récupération nommé bitcracker_rpgen
. Avec cet outil, vous pouvez créer un tas de listes de mots de mot de passe de récupération que vous pouvez utiliser pour vos attaques. Par exemple:
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
Cela génère:
-n
: nombre de listes de mots-p
: Nombre de mots de passe de récupération par liste de mots-s
: générer des mots de passe de récupération à partir de celui-ciVous pouvez utiliser la configuration par défaut en cours d'exécution sans options:
./build/bitcracker_rpgen
************* BitCracker Recovery Password wordlists generator *************
Running with this configuration:
### Create 100 wordlists
### Recovery Passwords per wordlist=5000000
### Allow duplicates=No
### Generate starting from=000000-000011-000022-000033-000044-000055-000066-000077
Creating wordlist "bitcracker_wlrp_0.txt" with 5000000 passwords
First password=000000-000011-000022-000033-000044-000055-000066-000077
Last password= 000000-000011-000022-000033-000044-000055-000902-217822
...
Notez que l'option -s
peut être utilisée pour redémarrer la génération à partir de votre dernier mot de passe de récupération généré (au lieu de redémarrer à chaque fois à partir de celui initial). L'option -d
permet la possibilité d'avoir des doublons dans le même mot de passe de récupération. Par exemple: 000000-000011-000055-000055-000044-000055-000902-217822
Pour toutes les options disponibles, tapez ./build/bitcracker_rpgen -h
.
Remarque: veuillez noter que la quantité de mots de passe de récupération possibles est énorme:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
Selon nos recherches, la distribution de mot de passe est uniforme et il n'y a aucun moyen de trouver des nombres "plus probables". Jusqu'à présent, nous n'avons pas trouvé de règle pour réduire la quantité de candidats possibles. Cela signifie que l'attaque de mot de passe de récupération pourrait prendre une éternité (l'attaque de l'utilisateur Passwod est toujours la préférée). Bientôt, nous modifierons l'outil bitcracker_rpgen
pour générer un mot de passe de récupération de manière décontractée plutôt que dans la séquence ordonnée.
Un exemple de ligne de commande:
./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r
Lorsque les options sont les mêmes que dans le cas de mot de passe utilisateur, mais au lieu de -u
vous devez spécifier -r
. Un exemple de sortie:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
...
Reading hash file "hash_recv_pass.txt"
$bitlocker$2$16$432dd19f37dd413a88552225628c8ae5$1048576$12$a0da3fc75f6cd30106000000$60$3e57c68216ef3d2b8139fdb0ec74254bdf453e688401e89b41cae7c250739a8b36edd4fe86a597b5823cf3e0f41c98f623b528960a4bee00c42131ef
====================================
Attack
====================================
Type of attack: Recovery Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 8
Max Psw per kernel: 8192
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Effective passwords: 6014
Passwords Range:
390775-218680-136708-700645-433191-416240-153241-612216
.....
090134-625383-540826-613283-563497-710369-160182-661364
Time: 193.358937 sec
Passwords x second: 31.10 pw/sec
================================================
CUDA attack completed
Passwords evaluated: 6014
Password found: 111683-110022-683298-209352-468105-648483-571252-334455
================================================
Par défaut, BitCracker effectue une attaque rapide (pour les modes de mot de passe utilisateur et de récupération) qui peuvent renvoyer un faux positif. Dans ce cas, vous pouvez réécrire votre attaque avec l'option -m
qui permet la vérification MAC (solution plus lente).
Pour tester Bitcracker sur votre système avant de commencer la véritable attaque, nous avons fourni plusieurs images de dispositifs de stockage chiffrés.
Vous pouvez attaquer ces images avec des modes de mot de passe utilisateur et de récupération, en utilisant les listes de mots stockées dans le dossier Dictionary
.
Ici, nous rapportons les meilleures performances BitCracker en cas d'attaque rapide (par défaut) au mot de passe utilisateur (option -U).
GPU acronim | GPU | Cambre | CC | # SM | Horloge | Cuda |
---|---|---|---|---|---|---|
GFT | Geforce Titan | Kepler | 3.5 | 14 | 835 | 7.0 |
GTK80 | Tesla K80 | Kepler | 3.5 | 13 | 875 | 7.5 |
Gftx | Geforce titan x | Maxwell | 5.2 | 24 | 1001 | 7.5 |
GTP100 | Tesla P100 | Pascal | 6.1 | 56 | 1328 | 8.0 |
Gtv100 | Tesla V100 | Volta | 7.0 | 80 | 1290 | 9.0 |
AMDM | Radeon Malte | - | - | - | - | - |
Performance:
Version | GPU | -T | -B | Mots de passe x noyau | Mots de passe / sec | Hachage / sec |
---|---|---|---|---|---|---|
Cuda | GFT | 8 | 13 | 106.496 | 303 | 635 MH / S |
Cuda | GTK80 | 8 | 14 | 114.688 | 370 | 775 MH / S |
Cuda | Gftx | 8 | 24 | 106.608 | 933 | 1,957 MH / s |
Cuda | GTP100 | 1 | 56 | 57.344 | 1.418 | 2,973 MH / s |
Cuda | Gtv100 | 1 | 80 | 81.920 | 3.252 | 6,820 MH / S |
Opencl | AMDM | 32 | 64 | 524.288 | 241 | 505 MH / S |
Opencl | Gftx | 8 | 24 | 196.608 | 884 | 1,853 MH / s |
NB chaque mot de passe nécessite environ 2,097.152 SHA-256
Nous avons publié Bitcracker comme format OpenCl-Bitlocker dans John the Ripper ( --format=bitlocker-opencl
). Les fichiers de hachage générés par bitcracker_hash
(voir comment section) sont entièrement compatibles avec le format John.
Sur le taux de mot de passe GTV100 est d'environ 3150p / s. L'équipe JTR a développé la version CPU de cette attaque ( --format=bitlocker
); Sur un CPU Intel (R) Xeon (R) V4 2,20 GHz, le taux de mot de passe est d'environ 78p / s.
Ceci est un travail en cours ...
Nov 2021: Code mis à jour pour s'exécuter sur Nvidia GPU ampère à l'aide de Cuda 11.x
Plase Partage et testez notre projet: nous avons besoin de vos commentaires!
Un merci spécial aux projets John the Ripper Team, Dislocker et Libbde.
Il s'agit d'un projet de recherche en collaboration avec le Conseil national de recherche d'Italie publié sous la licence GPLV2.
Copyright (C) 2013-2021 il y a Elena (Elena Dot il y a à Gmail Dot Com) et Massimo Bernaschi (Massimo Dot Bernaschi at gmail dot com)
Nous fournirons des informations supplémentaires sur l'attaque de Bitcracker dans un futur document.
Bien que nous utilisions la licence GPLV2, nous sommes ouverts aux collaborations. Pour toute information supplémentaire, collaborations ou rapport de bogue, veuillez nous contacter ou ouvrir un problème