
Romper y descifrar la encriptación BLE

crackle descifra el cifrado BLE (también conocido como Bluetooth Smart).
crackle explota una falla en el proceso de emparejamiento BLE que permite a un atacante adivinar o forzar bruscamente muy rápidamente la TK (Clave Temporal). Con la TK y otros datos recopilados del proceso de emparejamiento, se pueden obtener la STK (Clave a Corto Plazo) y posteriormente la LTK (Clave a Largo Plazo).
Con la STK y la LTK, se pueden descifrar todas las comunicaciones entre el maestro y el esclavo.
Antes de intentar usar crackle, revise las Preguntas Frecuentes (FAQ) para determinar si es la herramienta adecuada para su situación.
crackle fue escrito por Mike Ryan [email protected] Vea el sitio web para más información: http://lacklustre.net/projects/crackle/
crackle tiene dos modos principales de operación: Descifrar TK y Descifrar con LTK.
Este es el modo predeterminado cuando se proporciona a crackle un archivo de entrada
usando -i.
En el modo Descifrar TK, crackle fuerza bruta la TK utilizada durante un evento de emparejamiento BLE. crackle aprovecha el hecho de que la TK en Just Works(tm) y PIN de 6 dígitos es un valor en el rango [0,999999] rellenado a 128 bits.
crackle emplea varios métodos para realizar este fuerza bruta: un método muy rápido si todos los paquetes de emparejamiento están presentes en el archivo de entrada, y un método lento si está presente un conjunto mínimo de paquetes.
Para usar este modo, ejecute crackle con un archivo PCAP o PcapNG de entrada que contenga una o más conexiones con una conversación de emparejamiento BLE. crackle analizará todas las conexiones, determinará si es posible descifrar una conexión dada y elegirá automáticamente la mejor estrategia para descifrar cada una.
Si la TK se descifra con éxito, crackle derivará las claves restantes utilizadas para cifrar el resto de la conexión y descifrará cualquier paquete cifrado que le siga. Si se intercambia la LTK (típicamente lo primero que se hace después de establecer el cifrado), crackle mostrará este valor en la salida estándar. La LTK se puede utilizar para descifrar cualquier comunicación futura entre los dos extremos.
Proporcione a crackle un archivo de salida usando -o para crear un nuevo archivo PCAP
que contenga los datos descifrados (además de los datos ya no cifrados).
Ejemplo de uso:
$ crackle -i input.pcap -o decrypted.pcap
En el modo Descifrar con LTK, crackle utiliza una LTK proporcionada por el usuario para descifrar comunicaciones entre un maestro y un esclavo. Este modo es idéntico a la parte de descifrado del modo Descifrar TK.
Ejemplo de uso:
$ crackle -i encrypted.pcap -o decrypted.pcap -l 81b06facd90fe7a6e9bbd9cee59736a7
En el modo Descifrar TK, crackle requiere un archivo PCAP que contenga un evento de emparejamiento BLE. La mejor manera de generar dicho archivo es usar un Ubertooth para capturar un evento de emparejamiento entre un maestro y un esclavo.
Para comprobar si su archivo PCAP contiene todos los paquetes necesarios, ejecute crackle con la opción -i:
crackle -i <archivo.pcap>
crackle analizará cada conexión en el archivo de entrada y mostrará los resultados de su análisis en la salida estándar. Si tiene todos los componentes de una conversación de emparejamiento, la salida se verá así:
Analizando conexión 0:
xx:xx:xx:xx:xx:xx (público) -> yy:yy:yy:yy:yy:yy (público)
Se encontraron 13 paquetes cifrados
Descifrando con estrategia 0, 20 bits de entropía
!!!
TK encontrada: 412741
!!!
Se descifraron 12 paquetes
LTK encontrada: 81b06facd90fe7a6e9bbd9cee59736a7
¡Especifique un archivo de salida con -o para descifrar paquetes!
Para descifrar todos los paquetes, agregue la opción -o:
crackle -i <archivo.pcap> -o <salida.pcap>
El archivo de salida contendrá versiones descifradas de todos los paquetes cifrados del PCAP original, así como todos los paquetes no cifrados. Tenga en cuenta que los CRC no se recalculan, por lo que los CRC de los paquetes descifrados serán incorrectos.
En el modo Descifrar con LTK, crackle requiere un archivo PCAP que contenga como mínimo paquetes LL_ENC_REQ y LL_ENC_RSP y la LTK utilizada para cifrar las comunicaciones.
El formato para la LTK es un número hexadecimal de 128 bits sin espacios ni separadores, del octeto más significativo al menos significativo. Ejemplo:
-l 81b06facd90fe7a6e9bbd9cee59736a7
Para comprobar si su archivo PCAP contiene todos los paquetes necesarios, ejecute crackle con -i y -l:
crackle -i <archivo.pcap> -l <ltk>
Si tiene ambos paquetes requeridos, el programa debería producir una salida similar a esta:
Analizando conexión 0:
xx:xx:xx:xx:xx:xx (público) -> yy:yy:yy:yy:yy:yy (público)
Se encontraron 9 paquetes cifrados
Se descifraron 6 paquetes
¡Especifique un archivo de salida con -o para descifrar paquetes!
Para descifrar todos los paquetes, agregue la opción -o:
crackle -i <archivo.pcap> -o <salida.pcap> -l <ltk>
El archivo de salida se generará de manera similar al archivo de salida descrito anteriormente.
Los archivos de prueba incluidos en el directorio tests sirven como
entrada interesante para jugar con crackle. Revise los archivos README
incluidos en el subdirectorio de cada prueba.
Obtenga algunos archivos de muestra para descifrar con crackle. Consulte el README dentro del tarball para más información:
https://lacklustre.net/bluetooth/crackle-sample.tgz
Hemos compilado una lista de Preguntas Frecuentes (FAQ).
Un gran agradecimiento a Mike Ossmann y Dominic Spill del proyecto Ubertooth. Nada de esto sería posible sin ellos.
Un enorme agradecimiento a Mike Kershaw/dragorn de Kismet por ayudar a crear y trabajar con archivos PCAP.
Gracias al resto de #ubertooth en irc.freenode.net.