
BtleJuice Bluetooth Smart (LE) Man-in-the-Middle-Framework
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:
Die Installation von BtleJuice ist ein Kinderspiel. 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
Zuletzt installieren Sie BtleJuice mit npm:
sudo npm install -g btlejuice
Wenn alles gut gegangen ist, ist BtleJuice einsatzbereit!
BtleJuice besteht aus zwei Hauptkomponenten: einem Abhör-Proxy und einem Kern. 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 einzigen Computer zum Laufen zu bringen.
Installieren Sie von Ihrer virtuellen Maschine aus btlejuice 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 IP-Adresse hat, die vom Host aus erreichbar ist.
Starten Sie den Proxy in Ihrer virtuellen Maschine:
$ sudo btlejuice-proxy
Vergessen Sie nicht, auf Ihrem Host-Rechner 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 address> -w
Das Flag -w weist BtleJuice an, die Weboberfläche zu starten, während die Option -u die IP-Adresse des Proxys angibt.
Die Weboberflä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 Abhörkerns, wie unten gezeigt.

Klicken Sie zuerst auf die Schaltfläche Select target und ein Dialogfeld wird angezeigt, das alle vom Abhörkern erkannten Bluetooth-Low-Energy-Geräte auflistet:

Doppelklicken Sie auf das gewünschte Ziel und warten Sie, bis die Oberfläche bereit ist (das Aussehen 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 nach Erwartung), 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 Dienst- und Charakteristik-UUIDs sowie natürlich den zugehörigen Daten angezeigt. Die Daten werden standardmäßig im HexII-Format (einer Variante des von Ange Albertini entworfenen Formats) angezeigt, aber Sie können durch Klicken auf die Daten selbst von HexII zu Hex (und zurück) wechseln. Sowohl das Hex- als auch das HexII-Format werden von BtleJuice unterstützt.
Es ist möglich, jede GATT-Operation durch Rechtsklick und Auswahl der Option Replay zu wiederholen, wie unten gezeigt:


Klicken Sie auf die Schaltfläche Write (oder Read), um die entsprechende GATT-Operation zu wiederholen. Dieser Vorgang wird in der Hauptoberfläche protokolliert.
Nicht zuletzt kann die Oberfläche lokal oder global jede GATT-Operation abfangen und dynamische Datenänderungen ermöglichen. Sie können entweder die globale Abfangfunktion durch Klicken auf die Schaltfläche Intercept in der oberen rechten Ecke verwenden oder das Kontextmenü nutzen, um einen Hook für einen bestimmten Dienst und eine bestimmte Charakteristik zu aktivieren oder zu deaktivieren. Immer wenn eine GATT-Operation abgefangen wird, erscheint das folgende Dialogfeld:

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

Klicken Sie auf die Schaltfläche Export am unteren Rand des Dialogfelds, um eine JSON- (oder Text-)Version der abgefangenen Daten herunterzuladen.
Das Einstellungsdialogfeld bietet derzeit eine einzige Option, die das automatische Wiederverbinden des Proxys ermöglicht, wenn das Zielgerät die Verbindung trennt. Dies kann nützlich sein, wenn man es mit Geräten zu tun hat, die nur für kurze Zeit aktiv sind.

Das Klicken auf die Schaltfläche Select Target oben rechts, während der Proxy aktiv ist, stoppt ihn und ermöglicht erneut die Zielauswahl.
Die Node.js-Bindungen von BtleJuice können ebenfalls über npm installiert werden:
$ sudo npm install -g btlejuice-bindings
Weitere Informationen zur Verwendung der Node.js-Bindungen finden Sie in der Paketdokumentation.
Ein besonderer Dank gilt Slawomir Jasek, der viele noble/bleno-Tricks zur Vermeidung von Problemen mit mobilen Anwendungen aufgezeigt 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 Einschränkung der Rechte zur Verwendung, Vervielfältigung, Änderung, Zusammenführung, Veröffentlichung, Weiterverteilung, 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 IM IST-ZUSTAND BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE 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 HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER SONSTIGE HAFTUNG, OB AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ENTSTEHEN.