
BitCracker è il primo strumento di cracking delle password open source per unità di memoria crittografate con BitLocker
BitCracker è il primo strumento open source per il cracking delle password per dispositivi di archiviazione (Hard Disk, Pendrive USB, scheda SD, ecc...) cifrati con BitLocker, una funzionalità di crittografia disponibile su Windows Vista, 7, 8.1 e 10 (edizioni Ultimate, Pro e Enterprise). BitLocker offre diversi metodi di autenticazione per cifrare un dispositivo di archiviazione, come Trusted Platform Module (TPM), Smart Card, Password di ripristino, Password fornita dall'utente.
Tramite un attacco a dizionario, BitCracker cerca di trovare la corretta Password Utente o Password di Ripristino per decifrare il dispositivo di archiviazione cifrato. È stato implementato in CUDA e OpenCL.
Diverse riviste hanno ritardato la pubblicazione del nostro articolo su BitCracker (quasi 3 anni, con rifiuto finale dopo diverse revisioni), che spiega i dettagli del nostro attacco, il formato del volume BitLocker Drive Encryption (BDE) e le possibili debolezze nella procedura di crittografia/decifratura. Alla fine, abbiamo pubblicato l'articolo qui: https://arxiv.org/abs/1901.01337 . Sentitevi liberi di commentare e condividere.
Per eseguire BitCracker-CUDA, i requisiti minimi sono:
Per eseguire BitCracker-OpenCL, i requisiti minimi sono qualsiasi GPU o CPU che supporti OpenCL (puoi trovare aiuto qui.
BitCracker richiede almeno 260 MB di memoria del dispositivo.
Consigliamo vivamente di eseguire l'attacco su una GPU piuttosto che su una CPU per motivi di prestazioni (vedi sezione Prestazioni).
Eseguendo lo script build.sh vengono generati 4 eseguibili nella directory build: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl.
Per compilare bitcracker_cuda in modo coerente con la tua GPU NVIDIA e la versione CUDA, devi modificare il file src_CUDA/Makefile scegliendo la corretta versione SM. Come riferimento, puoi usare la seguente tabella:
| Architettura GPU | CUDA suggerita | Makefile |
|---|---|---|
| Kepler | CUDA 7.5 | arch=compute_35,code=sm_35 |
| Maxwell | CUDA 8.0 | arch=compute_52,code=sm_52 |
| Pascal | CUDA 9.0 | arch=compute_60,code=sm_60 |
| Volta | CUDA 9.0 | arch=compute_70,code=sm_70 |
Devi creare l'immagine del tuo dispositivo di archiviazione cifrato con BitLocker usando, ad esempio, il comando dd:
sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 record in
4030464+0 record out
2063597568 byte trasferiti in 292.749849 sec (7049013 byte/sec)
Poi devi eseguire l'eseguibile bitcracker_hash sulla tua imageEncrypted.img per:
Se l'esecuzione viene completata correttamente, bitcracker_hash produce 1 o 2 file di output:
I volumi cifrati BDE possono avere formati diversi a seconda dei diversi metodi di autenticazione. Se bitcracker_hash non riesce a trovare la Password di Ripristino sulla tua immagine cifrata, apri un issue o contattami
Un esempio:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Apertura file ./Images/imgWin7
....
Firma trovata a 0x02208000
Versione: 2 (Windows 7 o successivo)
Voce VMK trovata a 0x022080bc
VMK cifrato con password utente trovato!
VMK cifrato con AES-CCM
Voce VMK trovata a 0x0220819c
VMK cifrato con chiave di ripristino trovato!
VMK cifrato con AES-CCM
Hash password utente:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Hash chiave di ripristino:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
File di output per attacco password utente: "hash_user_pass.txt"
File di output per attacco password di ripristino: "hash_recv_pass.txt"
Puoi usare questo tipo di attacco se il dispositivo di archiviazione è stato cifrato con una password fornita dall'utente come mostrato nell'immagine seguente.
BitCracker esegue un attacco a dizionario, quindi devi fornire una wordlist di possibili password utente.
Per avviare l'attacco hai bisogno:
hash_user_pass.txtUn esempio da riga di comando:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
Dove:
-f : percorso del file hash_user_pass.txt-d : percorso della tua wordlist-t : numero di password processate da ogni thread CUDA-b : numero di blocchi CUDA-g : ID del dispositivo GPU NVIDIA-u : specifica che vuoi un attacco password utentePer tutte le opzioni disponibili, digita ./build/bitcracker_cuda -h.
Per ottenere le migliori prestazioni, fai riferimento alla tabella nella sezione Prestazioni per impostare correttamente le opzioni t e b in base alla tua GPU NVIDIA.
Le stesse considerazioni valgono per l'eseguibile bitcracker_opencl.
Un esempio di output:
====================================
Dispositivo selezionato: GPU Tesla K80 (ID: 0)
====================================
....
Lettura file hash "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Attacco
====================================
Tipo di attacco: Password Utente
Thread CUDA: 1024
Blocchi CUDA: 1
Password per thread: 1
Max Password per kernel: 1024
Dizionario: wordlist.txt
Controllo rigoroso (-s): No
Confronto MAC (-m): No
Esecuzione kernel CUDA:
Stream 0
Numero effettivo di password: 12
Intervallo password:
abcdefshhf
.....
blablalbalbalbla12
Tempo: 28.651947 sec
Password al secondo: 0.42 pw/sec
================================================
....
Password trovata: paperino
================================================
Attualmente BitCracker è in grado di elaborare password in input con una lunghezza compresa tra 8 e 55 caratteri.