
Craquer et décrypter le chiffrement BLE

crackle cracke le chiffrement BLE (alias Bluetooth Smart).
crackle exploite une faille dans le processus d'appairage BLE qui permet à un attaquant de deviner ou de forcer très rapidement la TK (Temporary Key). Avec la TK et d'autres données collectées lors de l'appairage, la STK (Short Term Key) et plus tard la LTK (Long Term Key) peuvent être collectées.
Avec la STK et la LTK, toutes les communications entre le maître et l'esclave peuvent être déchiffrées.
Avant d'essayer d'utiliser crackle, consultez la FAQ pour déterminer si c'est l'outil approprié à votre situation.
crackle a été écrit par Mike Ryan [email protected] Voir le site web pour plus d'informations : http://lacklustre.net/projects/crackle/
crackle a deux modes principaux de fonctionnement : Cracker la TK et Déchiffrer avec la LTK.
C'est le mode par défaut utilisé lorsque l'on fournit un fichier d'entrée à crackle avec -i.
En mode Cracker la TK, crackle force la TK utilisée lors d'un appairage BLE. crackle exploite le fait que la TK en mode Just Works(tm) et PIN à 6 chiffres est une valeur dans l'intervalle [0,999999] complétée à 128 bits.
crackle utilise plusieurs méthodes pour effectuer ce force brute : une méthode très rapide si tous les paquets d'appairage sont présents dans le fichier d'entrée, et une méthode lente si un ensemble minimal de paquets est présent.
Pour utiliser ce mode, lancez crackle avec un fichier PCAP ou PcapNG contenant une ou plusieurs connexions avec une conversation d'appairage BLE. crackle analysera toutes les connexions, déterminera s'il est possible de craquer une connexion donnée, et choisira automatiquement la meilleure stratégie pour craquer chacune d'elles.
Si la TK est craquée avec succès, crackle dérivera les clés restantes utilisées pour chiffrer le reste de la connexion et déchiffrera tous les paquets chiffrés qui suivent. Si la LTK est échangée (généralement la première chose faite après l'établissement du chiffrement), crackle affichera cette valeur sur stdout. La LTK peut être utilisée pour déchiffrer toute communication future entre les deux points de terminaison.
Fournissez un fichier de sortie à crackle avec -o pour créer un nouveau fichier PCAP contenant les données déchiffrées (en plus des données déjà non chiffrées).
Exemple d'utilisation :
$ crackle -i input.pcap -o decrypted.pcap
En mode Déchiffrer avec la LTK, crackle utilise une LTK fournie par l'utilisateur pour déchiffrer les communications entre un maître et un esclave. Ce mode est identique à la partie déchiffrement du mode Cracker la TK.
Exemple d'utilisation :
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
En mode Cracker la TK, crackle nécessite un fichier PCAP contenant un événement d'appairage BLE. La meilleure façon de générer un tel fichier est d'utiliser un Ubertooth pour capturer un événement d'appairage entre un maître et un esclave.
Pour vérifier si votre fichier PCAP contient tous les paquets nécessaires, exécutez crackle avec l'option -i :
crackle -i <file.pcap>
crackle analysera chaque connexion dans le fichier d'entrée et affichera les résultats de son analyse sur stdout. Si vous avez tous les composants d'une conversation d'appairage, la sortie ressemblera à ceci :
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 13 encrypted packets
Cracking with strategy 0, 20 bits of entropy
!!!
TK found: 412741
!!!
Decrypted 12 packets
LTK found: 81b06facd90fe7a6e9bbd9cee59736a7
Specify an output file with -o to decrypt packets!
Pour déchiffrer tous les paquets, ajoutez l'option -o :
crackle -i <file.pcap> -o <output.pcap>
Le fichier de sortie contiendra les versions déchiffrées de tous les paquets chiffrés du PCAP original, ainsi que tous les paquets non chiffrés. Notez que les CRC ne sont pas recalculés, donc les CRC des paquets déchiffrés seront incorrects.
En mode Déchiffrer avec la LTK, crackle nécessite un fichier PCAP contenant au minimum les paquets LL_ENC_REQ et LL_ENC_RSP ainsi que la LTK utilisée pour chiffrer les communications.
Le format de la LTK est un nombre hexadécimal de 128 bits sans espaces ni séparateurs, de l'octet le plus significatif au moins significatif. Exemple :
-l 81b06facd90fe7a6e9bbd9cee59736a7
Pour vérifier si votre fichier PCAP contient tous les paquets nécessaires, exécutez crackle avec -i et -l :
crackle -i <file.pcap> -l <ltk>
Si vous avez les deux paquets requis, le programme devrait produire une sortie similaire à celle-ci :
Analyzing connection 0:
xx:xx:xx:xx:xx:xx (public) -> yy:yy:yy:yy:yy:yy (public)
Found 9 encrypted packets
Decrypted 6 packets
Specify an output file with -o to decrypt packets!
Pour déchiffrer tous les paquets, ajoutez l'option -o :
crackle -i <file.pcap> -o <out.pcap> -l <ltk>
Le fichier de sortie sera produit de la même manière que le fichier de sortie décrit ci-dessus.
Les fichiers de test inclus dans le répertoire tests constituent une entrée intéressante pour jouer avec crackle. Consultez les fichiers README inclus dans chaque sous-répertoire de test.
Récupérez des exemples de fichiers pour craquer avec crackle. Référez-vous au README dans l'archive pour plus d'informations :
https://lacklustre.net/bluetooth/crackle-sample.tgz
Nous avons compilé une liste de Foire aux questions.
Un grand merci à Mike Ossmann et Dominic Spill du projet Ubertooth. Rien de tout cela ne serait possible sans eux.
Un immense merci à Mike Kershaw/dragorn de Kismet pour son aide dans la création et le travail avec les fichiers PCAP.
Merci au reste de #ubertooth sur irc.freenode.net.