
Crack e decifra la crittografia BLE

crackle decifra la crittografia BLE (conosciuta anche come Bluetooth Smart).
crackle sfrutta una falla nel processo di pairing BLE che consente a un attaccante di indovinare o forzare molto rapidamente la TK (Temporary Key). Con la TK e altri dati raccolti durante il processo di pairing, è possibile ottenere la STK (Short Term Key) e successivamente la LTK (Long Term Key).
Con la STK e la LTK, tutte le comunicazioni tra il master e lo slave possono essere decifrate.
Prima di provare a usare crackle, consulta le FAQ per determinare se è lo strumento appropriato per la tua situazione.
crackle è stato scritto da Mike Ryan [email protected] Visita il sito web per maggiori informazioni: http://lacklustre.net/projects/crackle/
crackle ha due modalità principali di funzionamento: Crack TK e Decifra con LTK.
Questa è la modalità predefinita quando si fornisce a crackle un file di input
usando -i.
In modalità Crack TK, crackle forza bruta la TK utilizzata durante un evento di pairing BLE. crackle sfrutta il fatto che la TK in Just Works(tm) e PIN a 6 cifre è un valore nell'intervallo [0,999999] riempito a 128 bit.
crackle impiega diversi metodi per eseguire questa forza bruta: un metodo molto veloce se tutti i pacchetti di pairing sono presenti nel file di input, e un metodo più lento se è presente un insieme minimo di pacchetti.
Per usare questa modalità, avvia crackle con un file PCAP o PcapNG di input contenente una o più connessioni con una conversazione di pairing BLE. crackle analizzerà tutte le connessioni, determinerà se è possibile decifrare una determinata connessione e sceglierà automaticamente la strategia migliore per decifrarle ciascuna.
Se la TK viene decifrata con successo, crackle deriverà le chiavi rimanenti utilizzate per crittografare il resto della connessione e decifrerà qualsiasi pacchetto crittografato che segue. Se la LTK viene scambiata (tipicamente la prima cosa fatta dopo aver stabilito la crittografia) crackle restituirà questo valore su stdout. La LTK può essere utilizzata per decifrare qualsiasi comunicazione futura tra i due endpoint.
Fornisci a crackle un file di output usando -o per creare un nuovo file PCAP
contenente i dati decifrati (oltre ai dati già non crittografati).
Esempio di utilizzo:
$ crackle -i input.pcap -o decrypted.pcap
In modalità Decifra con LTK, crackle utilizza una LTK fornita dall'utente per decifrare le comunicazioni tra un master e uno slave. Questa modalità è identica alla parte di decifratura della modalità Crack TK.
Esempio di utilizzo:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
In modalità Crack TK, crackle richiede un file PCAP che contenga un evento di pairing BLE. Il modo migliore per generare un file del genere è usare un Ubertooth per catturare un evento di pairing tra un master e uno slave.
Per verificare se il tuo file PCAP contiene tutti i pacchetti necessari, esegui crackle con l'opzione -i:
crackle -i <file.pcap>
crackle analizzerà ogni connessione nel file di input e restituirà i risultati della sua analisi su stdout. Se hai tutti i componenti di una conversazione di pairing, l'output sarà simile a questo:
Analisi connessione 0:
xx:xx:xx:xx:xx:xx (pubblico) -> yy:yy:yy:yy:yy:yy (pubblico)
Trovati 13 pacchetti crittografati
Decifratura con strategia 0, 20 bit di entropia
!!!
TK trovata: 412741
!!!
Decifrati 12 pacchetti
LTK trovata: 81b06facd90fe7a6e9bbd9cee59736a7
Specifica un file di output con -o per decifrare i pacchetti!
Per decifrare tutti i pacchetti, aggiungi l'opzione -o:
crackle -i <file.pcap> -o <output.pcap>
Il file di output conterrà versioni decifrate di tutti i pacchetti crittografati del PCAP originale, oltre a tutti i pacchetti non crittografati. Nota che i CRC non vengono ricalcolati, quindi i CRC dei pacchetti decifrati saranno errati.
In modalità Decifra con LTK, crackle richiede un file PCAP che contenga almeno i pacchetti LL_ENC_REQ e LL_ENC_RSP e la LTK usata per crittografare le comunicazioni.
Il formato per la LTK è un numero esadecimale a 128 bit senza spazi o separatori, dall'ottetto più significativo al meno significativo. Esempio:
-l 81b06facd90fe7a6e9bbd9cee59736a7
Per verificare se il tuo file PCAP contiene tutti i pacchetti necessari, esegui crackle con -i e -l:
crackle -i <file.pcap> -l <ltk>
Se hai entrambi i pacchetti richiesti, il programma dovrebbe produrre un output simile a questo:
Analisi connessione 0:
xx:xx:xx:xx:xx:xx (pubblico) -> yy:yy:yy:yy:yy:yy (pubblico)
Trovati 9 pacchetti crittografati
Decifrati 6 pacchetti
Specifica un file di output con -o per decifrare i pacchetti!
Per decifrare tutti i pacchetti, aggiungi l'opzione -o:
crackle -i <file.pcap> -o <out.pcap> -l <ltk>
Il file di output sarà prodotto in modo simile al file di output descritto sopra.
I file di test inclusi nella directory tests servono come
input interessanti per giocare con crackle. Leggi i file README
inclusi in ogni sottodirectory dei test.
Scarica alcuni file di esempio per decifrare con crackle. Fai riferimento al README all'interno del tarball per maggiori informazioni:
https://lacklustre.net/bluetooth/crackle-sample.tgz
Abbiamo compilato un elenco di Domande frequenti.
Un grande ringraziamento va a Mike Ossmann e Dominic Spill del progetto Ubertooth. Senza di loro nulla di tutto ciò sarebbe possibile.
Un enorme ringraziamento va a Mike Kershaw/dragorn di Kismet per l'aiuto nella creazione e nell'elaborazione di file PCAP.
Un ringraziamento va al resto di #ubertooth su irc.freenode.net.