
BtleJuice : framework Bluetooth Smart (LE) Man-in-the-Middle
BtleJuice est un framework complet pour effectuer des attaques Man-in-the-Middle sur les appareils Bluetooth Smart (également connus sous le nom de Bluetooth Low Energy). Il est composé de :
Installer BtleJuice est un jeu d'enfant. Tout d'abord, assurez-vous que votre système utilise une version récente de Node.js (>=4.3.2) et npm. Ensuite, assurez-vous d'installer toutes les dépendances nécessaires :
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
Enfin, installez BtleJuice en utilisant npm :
sudo npm install -g btlejuice
Si tout s'est bien passé, BtleJuice est prêt à être utilisé !
BtleJuice est composé de deux composants principaux : un proxy d'interception et un noyau. Ces deux composants doivent être exécutés sur des machines indépendantes afin d'exploiter simultanément deux adaptateurs Bluetooth 4.0+. BtleJuice Proxy ne fonctionne pas dans un conteneur Docker.
L'utilisation d'une machine virtuelle peut aider à faire fonctionner ce framework sur un seul ordinateur.
Depuis votre machine virtuelle, installez btlejuice et assurez-vous que votre adaptateur USB BT4 est disponible depuis la machine virtuelle :
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
Ensuite, assurez-vous que votre machine virtuelle a une adresse IP accessible depuis l'hôte.
Lancez le proxy dans votre machine virtuelle :
$ sudo btlejuice-proxy
Sur votre machine hôte, n'oubliez pas d'arrêter le service bluetooth et de vous assurer que le périphérique HCI reste ouvert/initialisé :
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Enfin, exécutez la commande suivante sur votre machine hôte :
$ sudo btlejuice -u <Proxy IP address> -w
Le drapeau -w indique à BtleJuice de démarrer l'interface web tandis que l'option -u spécifie l'adresse IP du proxy.
L'interface utilisateur web est maintenant disponible à l'adresse http://localhost:8080. Notez que le port du serveur web peut être modifié via la ligne de commande.
L'interface web de BtleJuice fournit dans le coin supérieur droit un ensemble de liens pour contrôler le noyau d'interception, comme illustré ci-dessous.

Tout d'abord, cliquez sur le bouton Select target et une boîte de dialogue s'affichera montrant tous les appareils Bluetooth Low Energy disponibles détectés par le noyau d'interception :

Double-cliquez sur la cible souhaitée, et attendez que l'interface soit prête (l'aspect du bouton bluetooth changera). Une fois le périphérique factice prêt, utilisez l'application mobile associée ou un autre appareil (selon ce qui est attendu) pour vous connecter au périphérique factice. Si la connexion réussit, un événement Connected sera affiché sur l'interface principale.

Toutes les opérations GATT interceptées sont ensuite affichées avec les UUID des services et caractéristiques correspondants, et bien sûr les données qui leur sont associées. Les données sont affichées par défaut au format HexII (une variante du format conçu par Ange Albertini), mais vous pouvez passer de HexII à Hex (et inversement) en cliquant sur les données elles-mêmes. Les formats Hex et HexII sont tous deux supportés par BtleJuice.
Il est possible de rejouer toute opération GATT en effectuant un clic droit dessus puis en sélectionnant l'option Replay, comme illustré ci-dessous :


Cliquez sur le bouton Write (ou Read) pour rejouer l'opération GATT correspondante. Cette opération sera enregistrée dans l'interface principale.
Last but not least, l'interface peut intercepter localement ou globalement toute opération GATT et permettre la modification des données à la volée. Vous pouvez soit utiliser l'interception globale en cliquant sur le bouton Intercept dans le coin supérieur droit, soit utiliser le menu contextuel pour activer ou désactiver un hook sur un service et une caractéristique donnés. Chaque fois qu'une opération GATT est interceptée, la boîte de dialogue suivante s'affiche :

Depuis la version 1.0.6, l'interface offre une fonctionnalité d'exportation de données permettant des exports lisibles et JSON. Ces exports sont générés à partir des opérations GATT interceptées, mais incluent également des informations sur le périphérique cible. Lorsque le bouton Export est cliqué, la boîte de dialogue suivante s'affiche :

Cliquez sur le bouton Export en bas de la boîte de dialogue pour télécharger une version JSON (ou texte) des données interceptées.
La boîte de dialogue des paramètres propose actuellement une seule option permettant de reconnecter automatiquement le proxy lorsque le périphérique cible se déconnecte. Cela peut être utile lorsqu'on traite avec des appareils qui sont actifs pendant une courte durée.

Cliquer sur le bouton Select Target dans le coin supérieur droit lorsque le proxy est actif l'arrêtera et permettra à nouveau la sélection de cible.
Les bindings Node.js de BtleJuice peuvent également être installés via npm :
$ sudo npm install -g btlejuice-bindings
Plus d'informations sur l'utilisation des bindings Node.js dans la documentation du package.
Un remerciement spécial à Slawomir Jasek qui a souligné de nombreuses astuces noble/bleno pour éviter des problèmes avec les applications mobiles, et a partagé des stratégies BLE MITM lors de la DEF CON 24 =). Il est également l'auteur de Gattacker.
Copyright (c) 2016 Econocom Digital Security