
Framework Man-in-the-Middle BLE qui intercepte, rejoue et modifie le trafic GATT entre les appareils Bluetooth Smart et les applications mobiles via un proxy d'interception basé sur le web.
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 se compose 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 de npm. Ensuite, assurez-vous d'installer toutes les dépendances requises :
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
### Fedora / autres distributions basées sur RPM
sudo yum install bluez bluez-libs bluez-libs-devel npm
Enfin, installez BtleJuice à l'aide de npm :
sudo npm install -g btlejuice
Si tout s'est bien passé, BtleJuice est prêt à l'emploi !
BtleJuice est composé de deux composants principaux : un proxy d'interception et un cœur. Ces deux composants doivent être exécutés sur des machines indépendantes afin de faire fonctionner 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 dispose d'une adresse IP joignable 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
L'option -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 cœur d'interception, comme illustré ci-dessous.

Tout d'abord, cliquez sur le bouton Sélectionner la cible et une boîte de dialogue s'affichera, affichant tous les appareils Bluetooth Low Energy disponibles détectés par le cœur d'interception :

Double-cliquez sur la cible souhaitée, puis attendez que l'interface soit prête (l'apparence 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 Connecté s'affichera 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 pris en charge par BtleJuice.
Il est possible de rejouer toute opération GATT en faisant un clic droit dessus, puis en sélectionnant l'option Rejouer, comme illustré ci-dessous :


Cliquez sur le bouton Write (ou Read) pour rejouer l'opération GATT correspondante. Cette opération sera journalisée dans l'interface principale.
Dernier point, mais non des moindres, 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 Intercepter 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 fournit une fonctionnalité d'exportation de données permettant des exports lisibles et au format 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 Exporter est cliqué, la boîte de dialogue suivante s'affiche :

Cliquez sur le bouton Exporter 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 a affaire à des appareils qui ne sont actifs que pendant une courte durée.

Cliquer sur le bouton Sélectionner la cible en haut à droite lorsque le proxy est actif l'arrêtera et permettra de sélectionner à nouveau une 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 merci tout particulier à Slawomir Jasek qui a indiqué de nombreuses astuces noble/bleno pour éviter les problèmes avec les applications mobiles, et a partagé des stratégies BLE MITM lors de DEF CON 24 =). Il est également l'auteur de Gattacker.
Copyright (c) 2016 Econocom Digital Security
La permission est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), de traiter le Logiciel sans restriction, y compris, sans limitation, les droits d'utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et/ou vendre des copies du Logiciel, et de permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du Logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER, LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES AUTEURS OU TITULAIRES DU DROIT D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DU LOGICIEL, DE SON UTILISATION OU D'AUTRES INTERACTIONS AVEC LE LOGICIEL.