
Preuve de concept des vulnérabilités Sweyntooth Bluetooth Low Energy (BLE).
Ce dépôt fait partie des résultats de recherche du ASSET Research Group.

SweynTooth regroupe une famille de 18 vulnérabilités dans différents kits de développement logiciels (SDK) Bluetooth Low Energy (BLE) de six grands fournisseurs de systèmes sur puce (SoC). Ces vulnérabilités exposent des défauts dans des implémentations BLE SoC spécifiques qui permettent à un attaquant à portée radio de déclencher des interblocages, des crashs et des dépassements de tampon ou de contourner complètement la sécurité selon les circonstances. (Mise à jour) Nous avons également inclus un script de test pour vérifier les appareils contre la variante BLE KNOB.
Vous pouvez trouver plus d'informations sur les vulnérabilités, les correctifs disponibles et les appareils concernés sur le site de divulgation SweynTooth de l'ASSET Research Group.
Fitbit, August Smart Lock, Eve Energy, CubiTag ainsi que d'autres objets « intelligents » sont concernés.
Ce PoC utilise des bibliothèques bien maintenues telles que Scapy et Colorama. La construction et l'analyse des paquets BLE sont réalisées via des couches de protocole Scapy personnalisées (bluetooth4LE et bluetooth.py). Une fusion est en cours pour inclure nos ajouts dans le dépôt principal de Scapy.
Tout d'abord, vous devez vous assurer d'avoir Python2.7 sur votre système ainsi que les paquets Python listés dans le fichier requirements.txt.
Si vous utilisez Ubuntu, exécutez les commandes suivantes :
sudo apt-get install python2.7
sudo pip install -r requirements.txt
Ensuite, SweynTooth utilise le Dongle Nordic nRF52840 pour envoyer/recevoir des paquets bruts de la couche de liaison vers et depuis le périphérique vulnérable par radio. Il est nécessaire de flasher le firmware du pilote sur la carte avant de lancer les scripts Python 2.7.
Le binaire de notre code firmware se trouve dans le fichier nRF52_driver_firmware.zip. Vous devez installer l'outil nrfutil pour flasher le firmware sur la carte. N'oubliez pas de mettre le nRF52840 en mode DFU avant de flasher (réinitialisez la clé USB pendant qu'elle est connectée à votre PC en appuyant sur le petit bouton de réinitialisation).
Vous pouvez exécuter les commandes suivantes pour installer les dépendances Python et flasher le firmware :
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
Les scripts fonctionnent sur Linux ou Windows. Il vous suffit de modifier le paramètre COM_PORT pour qu'il corresponde au nom du port du nRF52840.
Si la méthode de flashage précédente n'a pas fonctionné, vous pouvez également flasher le firmware à l'aide de l'application nRF Connect for Desktop, qui offre une interface agréable pour flasher le firmware hex (nRF52_driver_firmware.hex).
Une fois les prérequis installés, vous pouvez exécuter un script d'exploitation en lançant la commande suivante :
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
Le premier argument est le nom du port série (généralement /dev/ttyACM0 sous Linux) et le second est l'adresse du périphérique BLE vulnérable. Vous pouvez utiliser n'importe quel scanner BLE ou l'application nRF Connect pour découvrir cette adresse.
En prenant l'exemple de la vulnérabilité Key Size Overflow, le script produit la sortie suivante si le périphérique vulnérable se bloque après le crash :

Si vous souhaitez utiliser SweynTooth via une image Docker pour éviter d'installer les dépendances Python, vous pouvez utiliser le script d'assistance docker.sh pour construire et exécuter l'instance Docker, ou télécharger l'image Docker préconstruite (lien) disponible sur la page des releases. L'utilisation de docker.sh est décrite ci-dessous.
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
Chaque script d'exploitation correspond à une faille. Le tableau récapitulatif suivant montre la correspondance entre la vulnérabilité et le script permettant de l'exploiter sur les SoC concernés.