
BLE-Man-in-the-Middle-Framework, das GATT-Datenverkehr zwischen Bluetooth-Smart-Geräten und mobilen Apps über einen webbasierten Abfang-Proxy abfängt, wiedergibt und modifiziert.
BtleJuice ist ein vollständiges Framework zur Durchführung von Man-in-the-Middle-Angriffen auf Bluetooth-Smart-Geräte (auch bekannt als Bluetooth Low Energy). Es besteht aus:
BtleJuice zu installieren ist kinderleicht. Stellen Sie zunächst sicher, dass Ihr System eine aktuelle Version von Node.js (>=4.3.2) und npm verwendet. Stellen Sie dann sicher, dass alle erforderlichen Abhängigkeiten installiert sind:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
Installieren Sie BtleJuice zuletzt mit :
sudo npm install -g btlejuice
Wenn alles gut gegangen ist, ist BtleJuice bereit zur Verwendung!
BtleJuice besteht aus zwei Hauptkomponenten: einem Interception-Proxy und einem Core. Diese beiden Komponenten müssen auf unabhängigen Maschinen laufen, um gleichzeitig zwei Bluetooth-4.0+-Adapter betreiben zu können. BtleJuice Proxy funktioniert nicht in einem Docker-Container.
Die Verwendung einer virtuellen Maschine kann helfen, dieses Framework auf einem einzelnen Computer zum Laufen zu bringen.
Installieren Sie btlejuice auf Ihrer virtuellen Maschine und stellen Sie sicher, dass Ihr USB-BT4-Adapter von der virtuellen Maschine aus verfügbar ist:
$ 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
Stellen Sie dann sicher, dass Ihre virtuelle Maschine eine vom Host aus erreichbare IP-Adresse hat.
Starten Sie den Proxy in Ihrer virtuellen Maschine:
$ sudo btlejuice-proxy
Vergessen Sie auf Ihrem Host-Rechner nicht, den Bluetooth-Dienst zu stoppen und sicherzustellen, dass das HCI-Gerät geöffnet/initialisiert bleibt:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Führen Sie schließlich den folgenden Befehl auf Ihrem Host-Rechner aus:
$ sudo btlejuice -u <Proxy-IP-Adresse> -w
Das -w-Flag teilt BtleJuice mit, die Weboberfläche zu starten, während die -u-Option die IP-Adresse des Proxys angibt.
Die Webbenutzeroberfläche ist nun unter http://localhost:8080 verfügbar. Beachten Sie, dass der Port des Webservers über die Befehlszeile geändert werden kann.
Die Weboberfläche von BtleJuice bietet in der oberen rechten Ecke eine Reihe von Links zur Steuerung des Interception-Cores, wie unten gezeigt.

Klicken Sie zunächst auf die Schaltfläche Select target. Daraufhin wird ein Dialog angezeigt, der alle verfügbaren Bluetooth-Low-Energy-Geräte auflistet, die vom Interception-Core erkannt wurden:

Doppelklicken Sie auf das gewünschte Ziel und warten Sie, bis die Oberfläche bereit ist (das Erscheinungsbild der Bluetooth-Schaltfläche ändert sich). Sobald das Dummy-Gerät bereit ist, verwenden Sie die zugehörige mobile Anwendung oder ein anderes Gerät (je nachdem, was erwartet wird), um eine Verbindung zum Dummy-Gerät herzustellen. Wenn die Verbindung erfolgreich ist, wird ein Connected-Ereignis auf der Hauptoberfläche angezeigt.

Alle abgefangenen GATT-Operationen werden dann mit den entsprechenden Service- und Characteristic-UUIDs sowie natürlich den zugehörigen Daten angezeigt. Die Daten werden standardmäßig im HexII-Format angezeigt (einer Variante des von Ange Albertini entworfenen Formats). Sie können jedoch von HexII zu Hex (und zurück) wechseln, indem Sie auf die Daten selbst klicken. Sowohl das Hex- als auch das HexII-Format werden von BtleJuice unterstützt.
Es ist möglich, jede GATT-Operation wiederzugeben, indem Sie mit der rechten Maustaste darauf klicken und dann die Option Replay auswählen, wie unten gezeigt:


Klicken Sie auf die Schaltfläche Write (oder Read), um die entsprechende GATT-Operation wiederzugeben. Dieser Vorgang wird in der Hauptoberfläche protokolliert.
Nicht zuletzt kann die Oberfläche jede GATT-Operation lokal oder global abfangen und eine Datenänderung in Echtzeit ermöglichen. Sie können entweder die globale Abfangfunktion verwenden, indem Sie auf die Schaltfläche Intercept in der oberen rechten Ecke klicken, oder das Kontextmenü verwenden, um einen Hook für einen bestimmten Service und eine bestimmte Characteristic zu aktivieren oder zu deaktivieren. Jedes Mal, wenn eine GATT-Operation abgefangen wird, erscheint der folgende Dialog:

Seit Version 1.0.6 bietet die Oberfläche eine Datenexportfunktion, die lesbare und JSON-Exporte ermöglicht. Diese Exporte werden auf der Grundlage der abgefangenen GATT-Operationen erzeugt, enthalten aber auch Informationen über das Zielgerät. Wenn die Schaltfläche Export angeklickt wird, erscheint der folgende Dialog:

Klicken Sie auf die Schaltfläche Export am unteren Rand des Dialogfelds, um eine JSON- (oder Text-)Version der abgefangenen Daten herunterzuladen.
Der Einstellungsdialog bietet derzeit eine einzige Option, mit der der Proxy automatisch neu verbunden werden kann, wenn sich das Zielgerät trennt. Dies kann nützlich sein, wenn Sie es mit Geräten zu tun haben, die nur für kurze Zeit aktiv sind.

Wenn Sie auf die Schaltfläche Select Target oben rechts klicken, während der Proxy aktiv ist, wird dieser gestoppt und die Zielauswahl wieder ermöglicht.
Die Node.js-Bindings von BtleJuice können ebenfalls über npm installiert werden:
$ sudo npm install -g btlejuice-bindings
Weitere Informationen zur Verwendung der Node.js-Bindings finden Sie in der Paketdokumentation.
Ein besonderer Dank geht an Slawomir Jasek, der viele noble/bleno-Tricks aufgezeigt hat, um Probleme mit mobilen Anwendungen zu vermeiden, und während der DEF CON 24 BLE-MITM-Strategien geteilt hat =). Er ist auch der Autor von Gattacker.
Copyright (c) 2016 Econocom Digital Security
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, die Software ohne Einschränkung zu nutzen, einschließlich und ohne Beschränkung der Rechte zur Verwendung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Verteilung, Unterlizenzierung und/oder zum Verkauf von Kopien der Software, und Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen zu gestatten:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD "OHNE MÄNGELGEWÄHR" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER IMPLIZITE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG VERANTWORTLICH, SEI ES AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ERGEBEN.