
Ein Tool zur Informationssammlung für Bluetooth-Hacking.
Bluing (früher bluescan) ist ein hauptsächlich in Python geschriebenes Bluetooth Intelligence Gathering-Tool. Es hilft uns, die interne Struktur von Bluetooth – einem komplexen Protokoll – auszuspionieren oder Bluetooth-Geräte zu hacken. Hier sind die Hauptfunktionen des Tools:
Bluing ist teilweise auf BlueZ, den offiziellen Linux-Bluetooth-Protokollstack, angewiesen. Daher läuft es nur unter Linux. Der folgende Befehl wird verwendet, um Abhängigkeiten zu installieren:```sh
sudo apt install python3-pip python3-dev libcairo2-dev libgirepository1.0-dev
libbluetooth-dev libdbus-1-dev bluez-tools python3-cairo-dev
rfkill meson patchelf bluez ubertooth adb python-is-python3
Derzeit wird bluing über [PyPI](https://pypi.org/project/bluing/) vertrieben und **unterstützt nur Python 3.10**. Im Folgenden finden Sie einen Installationsbefehl:```sh
sudo pip3.10 install bluing
- Gott sprach: »Es werde bunt«, und es ward bunt.
- Vielleicht möchten Sie eine kurze Übersicht über die empfohlene Hardware.
$ bluing --helpEin Tool zur Informationssammlung zum Hacken von Bluetooth
Verwendung:
bluing [-h | --help]
bluing (-v | --version)
bluing [-i <hci>] --clean BD_ADDR
bluing --flash-micro-bit
bluing <command> [<args>...]
Argumente:
BD_ADDR Bluetooth-Geräteadresse
Optionen:
-h, --help Diese Hilfe anzeigen und beenden
-v, --version Versionsinformationen anzeigen und beenden
-i <hci> HCI-Gerät
--clean Gecachte Daten eines entfernten Geräts löschen
--flash-micro-bit Die dedizierte Firmware auf micro:bit(s) herunterladen
Befehle:
br Basic Rate-System, inklusive optionaler Enhanced Data Rate (EDR)-Erweiterung
le Low Energy-System
android Android Bluetooth-Stack
spoof Mit neuen lokalen Geräteinformationen spoofen
plugin Plugins verwalten
Führen Sie `bluing <command> --help` für weitere Informationen zu einem Befehl aus.
br-Befehl: Basic Rate-System$ bluing br --helpVerwendung:
bluing br [-h | --help]
bluing br [-i <hci>] [--inquiry-len=<n>] --inquiry
bluing br [-i <hci>] --sdp BD_ADDR
bluing br [-i <hci>] --local --sdp
bluing br [-i <hci>] --lmp-features BD_ADDR
bluing br [-i <hci>] --local --lmp-features
bluing br [-i <hci>] --stack BD_ADDR
bluing br [-i <hci>] --local --stack
bluing br [-i <hci>] [--inquiry-scan] --mon-incoming-conn
bluing br --org=<name> --timeout=<sec> --sniff-and-guess-bd-addr
Argumente:
BD_ADDR BR/EDR Bluetooth-Geräteadresse
Optionen:
-h, --help Diese Hilfe anzeigen und beenden
-i <hci> HCI-Gerät
--local Ein lokales BR/EDR-Gerät statt eines entfernten anvisieren
--inquiry Andere nahegelegene BR/EDR-Controller entdecken
--inquiry-len=<n> Maximale Zeit (addiert zu --ext-inquiry-len=<n>),
die vor dem Beenden der Inquiry angegeben wird.
Zeit = n * 1,28 s
Zeitbereich: 1,28 bis 61,44 s
Bereich von n: 0x01 bis 0x30 [Standard: 8]
--ext-inquiry-len=<n> Extended_Inquiry_Length, gemessen in Anzahl
Baseband-Slots.
Intervall-Länge = n * 0,625 ms (1 Baseband-Slot)
Zeitbereich: 0 bis 40,9 s
Bereich von n: 0x0000 bis 0xFFFF [Standard: 0]
--sdp Informationen aus der SDP-Datenbank eines
entfernten BR/EDR-Geräts abrufen
--lmp-features LMP-Funktionen eines entfernten BR/EDR-Geräts auslesen
--stack Den Bluetooth-Stack-Typ eines entfernten BR/EDR-Geräts bestimmen
--mon-incoming-conn Eingehende Verbindungen von anderen nahegelegenen BR/EDR-Geräten anzeigen
--inquiry-scan Den Inquiry Scan aktivieren
--sniff-and-guess-bd-addr SAPs von BD_ADDRs über die Luft mitschneiden und dann die
Adresse basierend auf dem Organisationsnamen erraten. Benötigt mindestens
ein Ubertooth-Gerät
--org=<name> Ein Organisationsname in der OUI.txt
--timeout=<sec> Timeout in Sekunden
--inquiry: Andere nahegelegene BR/EDR-Controller entdecken$ sudo bluing br --inquiry[INFO] Entdecke andere nahegelegene BR/EDR-Controller auf hci0 für 10,24 s BD_ADDR: B0:C9:52:45:33:13 (GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD) Page scan repetition mode: 1 (R1) Reserved: 0x02 CoD: 0x5a020c Service Class: 0b1011010000 Telephony Object Transfer Capturing Networking Major Device Class: 0b00010, Phone Clock offset: 0x50D5 RSSI: -61 Extended inquiry response: Complete Local Name: old man phone Complete List of 16-bit Service Class UUIDs 0x1105 OBEXObjectPush 0x110a AudioSource 0x110c A/V_RemoteControlTarget 0x110e A/V_RemoteControl 0x1112 Headset - Audio Gateway (AG) 0x1115 PANU 0x1116 NAP 0x111f HandsfreeAudioGateway 0x112d SIM_Access 0x112f Phonebook Access - PSE 0x1200 PnPInformation 0x1132 Message Access Server Complete List of 32-bit Service Class UUIDs None Complete List of 128-bit Service Class UUIDs A49EAA15-CB06-495C-9F4F-BB80A90CDF00 00000000-0000-0000-0000-000000000000 ... ... [INFO] Fordere die Namen aller entdeckten Geräte an... B0:C9:52:45:33:13 : old man phone ... ...
--sdp: Informationen aus der SDP-Datenbank eines entfernten BR/EDR-Geräts abrufen$ sudo bluing br --sdp 34:13:46:23:6A:4DScanning ⠋ Anzahl der Service-Datensätze: 18 Service-Datensatz 0x0000: ServiceRecordHandle (uint32) 0x0001000d 0x0001: ServiceClassIDList (sequence) 0x1105: OBEXObjectPush 0x0004: ProtocolDescriptorList (sequence) 0x0100: L2CAP 0x0003: RFCOMM channel: 0x0c 0x0008: OBEX 0x0005: BrowseGroupList (sequence) 0x1002: PublicBrowseRoot 0x0009: BluetoothProfileDescriptorList (sequence) 0x1105: OBEXObjectPush v1.2 0x0100: ServiceName (guess) (text) OBEX Object Push 0x0200: GoepL2CapPsm (guess) (uint16) 0x1023 0x0303: SupportedFormatsList (guess) (sequence) 0x01: vCard 2.1 0x02: vCard 3.0 0x03: vCal 1.0 0x04: iCal 2.0 0xff: Beliebiger Objekttyp ... ...
--lmp-features: LMP-Funktionen eines entfernten BR/EDR-Geräts auslesen$ sudo bluing br --lmp-features 6A:8D:99:33:56:AEVersion Version: Bluetooth Core Specification 5.2 (LMP) Bluetooth Core Specification 5.2 (LL) Herstellername: HiSilicon Technologies CO., LIMITED Subversion: 33561 LMP-Funktionen 3 slot packets: True 5 slot packets: True Encryption: True Slot offset: True Timing accuracy: True Role switch: True Hold mode: False Sniff mode: True Previously used: False Power control requests: True Channel quality driven data rate (CQDDR): True ... ... Erweiterte LMP-Funktionen Page 1 Secure Simple Pairing (Host Support): True LE Supported (Host): True Simultaneous LE and BR/EDR to Same Device Capable (Host): True Secure Connections (Host Support): True Page 2 Connectionless Slave Broadcast - Master Operation: False Connectionless Slave Broadcast - Slave Operation: False Synchronization Train: False Synchronization Scan: False HCI_Inquiry_Response_Notification event: True ... ...
--mon-incoming-conn: Eingehende Verbindungen von anderen nahegelegenen BR/EDR-Geräten anzeigen$ sudo bluing br --inquiry-scan --mon-incoming-conn[INFO] Inquiry_Scan_Interval: 4096, 2560,0 ms Inquiry_Scan_Window: 4096, 2560,0 ms [INFO] Inquiry Scan und Page Scan aktiviert A0:DE:0F:99:EF:78 eingehend CoD: 0x5a020c Service Class: 0b1011010000 Telephony Object Transfer Capturing Networking Major Device Class: 0b00010, Phone link type: 0x01 - ACL ... ...
--sniff-and-guess-bd-addr: BD_ADDRs über die Luft mitschneiden und erraten$ bluing br --org='Huawei Device Co., Ltd.' --timeout=600 --sniff-and-guess-bd-addr[INFO] Mögliche BD_ADDR für ??:??:99:4C:45:C3 24:A7:99:4C:45:C3 [INFO] Mögliche BD_ADDR für ??:??:E4:2D:69:EE BC:1A:E4:2D:69:EE D0:05:E4:2D:69:EE 30:AA:E4:2D:69:EE [INFO] Mögliche BD_ADDR für ??:??:15:60:81:7F 64:23:15:60:81:7F D4:74:15:60:81:7F ... ...
le-Befehl: Low Energy-System$ bluing le --helpVerwendung:
bluing le [-h | --help]
bluing le [-i <hci>] [--scan-type=<type>] [--timeout=<sec>] [--sort=<key>] --scan
bluing le [-i <hci>] --pairing-feature [--timeout=<sec>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --ll-feature-set [--timeout=<sec>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --gatt [--io-cap=<name>] [--addr-type=<type>] PEER_ADDR
bluing le [-i <hci>] --local --gatt
bluing le [-i <hci>] --mon-incoming-conn
bluing le [--device=</dev/tty>] [--channel=<num>] --sniff-adv
Argumente:
PEER_ADDR LE Bluetooth-Geräteadresse
Optionen:
-h, --help Diese Hilfe anzeigen und beenden
-i <hci> HCI-Gerät
--scan Werbende Geräte in der Nähe entdecken
--scan-type=<type> Die Art des durchzuführenden Scans. active oder passive [Standard: active]
--sort=<key> Die entdeckten Geräte nach Schlüssel sortieren, unterstützt derzeit nur RSSI
[Standard: rssi]
--ll-feature-set LL FeatureSet eines entfernten LE-Geräts auslesen
--pairing-feature Die Pairing-Funktion eines entfernten LE-Geräts anfordern
--timeout=<sec> Dauer des LE-Scans, kann jedoch ungenau sein [Standard: 10]
--gatt GATT-Profilhierarchie eines entfernten LE-Geräts entdecken
--io-cap=<name> IO-Fähigkeit des Agents festlegen. Verfügbare Werte:
DisplayOnly, DisplayYesNo, KeyboardOnly, NoInputNoOutput,
KeyboardDisplay (KeyboardOnly) [Standard: NoInputNoOutput]
--addr-type=<type> Typ der LE-Adresse, public oder random
--sniff-adv Advertising-Physical-Channel-PDU mitschneiden. Benötigt mindestens
ein micro:bit (oder ein anderes unterstütztes NRF51-Gerät, angegeben mit --device)
--channel=<num> LE Advertising-Physical-Channel, 37, 38 oder 39 [Standard: 37,38,39]
--device=</dev/tty> Zu verwendendes Gerät, kommagetrennt (z.B. /dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2)
Nur erforderlich bei Verwendung von NRF51-Geräten außer micro:bit (z.B. Bluefruit)
--scan: Werbende Geräte in der Nähe entdecken$ sudo bluing le --scan[WARNUNG> Es wird empfohlen, Ihre LE-Adresse zu spoofen, bevor Sie einen aktiven Scan durchführen [INFO] LE-active-Scan auf hci0 für 10 s Scannen ⠴ ----------------Ergebnis des LE-Gerätescans---------------- Addr: 74:A3:4A:D4:78:55 (ZIMI CORPORATION) Addr type: public Connectable: True RSSI: -68 dBm General Access Profile: Flags: LE General Discoverable Mode BR/EDR Not Supported Service Data - 16-bit UUID: UUID: 0x95FE Data: 9055990701b743e34aa3740e00 Appearance: 0000 Tx Power Level: 0 dBm (pathloss 68 dBm) Complete Local Name: Mesh Mi Switch ... ...
--ll-feature-set: LL FeatureSet eines entfernten LE-Geräts auslesen$ sudo bluing le --ll-feature-set --addr-type=public 18:D9:8F:77:24:F1[INFO] Lese LL-FeatureSet von 18:D9:8F:77:24:F1 auf hci0 Lese ⠼ LE LL-Features: LE Encryption: True Connection Parameters Request Procedure: False Extended Reject Indication: False Slave-initiated Features Exchange: False LE Ping: False LE Data Packet Length Extension: True LL Privacy: False Extended Scanner Filter Policies: False LE 2M PHY: False Stable Modulation Index - Transmitter: False Stable Modulation Index - Receiver: False ... ...
--pairing-feature: Die Pairing-Funktion eines entfernten LE-Geräts anfordern$ sudo bluing le --pairing-feature --addr-type=public 18:D9:8F:77:24:F1[INFO] Fordere Pairing-Funktion von 18:D9:8F:77:24:F1 auf hci0 Anfordern ⠧ Pairing-Antwort IO Capability: 0x03 - NoInputNoOutput OOB data flag: 0x00 - Not Present AuthReq: 0x01 Maximum Encryption Key Size: 16 Initiator Key Distribution: 0x00 EncKey: False IdKey: False SignKey: False LinkKey: False RFU: 0b0000 Responder Key Distribution: 0x01 EncKey: True IdKey: False SignKey: False LinkKey: False RFU: 0b0000
--gatt: GATT-Profilhierarchie eines entfernten LE-Geräts entdecken$ sudo bluing le --gatt --addr-type=public 18:D9:8F:77:24:F1----------------GATT-Scan Ergebnis---------------- Number of services: 6
Service (0x0100 - 0x0112, 7 characteristics) Declaration Handle: 0x0100 Type: 2800 (Primary Service declaration) Value: 1812 (Human Interface Device) Permissions: Read (no authen/author)
<span style="font-weight: bold; color: #ecc179">Characteristic</span> (2 descriptors)
<span style="font-weight: bold; color: #ecc179">Declaration</span>
Handle: 0x010d
Type: 2803 (Characteristic declaration)
Value:
Properties: <span style="font-weight: bold; color: #9fab76">Read, Write Without Response, Write, Notify</span>
Handle: <span style="font-weight: bold; color: #9fab76">0x010e</span>
UUID: <span style="font-weight: bold; color: #9fab76">2A4D</span> (<span style="font-weight: bold; color: #9fab76">Report</span>)
Permissions: Read (no authen/author)
<span style="font-weight: bold; color: #ecc179">Value</span>
Handle: 0x0302
Type: 4A02 (Unknown)
Value: <span style="font-weight: bold; color: #c35956">Read Not Permitted</span>
Permissions: Higher layer specific
<span style="font-weight: bold; color: #ecc179">Descriptor</span>
Handle: <span style="font-weight: bold; color: #9fab76">0x010f</span>
Type: <span style="font-weight: bold; color: #9fab76">2902</span> (<span style="font-weight: bold; color: #ecc179">Client Characteristic Configuration declaration</span>)
Value: <span style="font-weight: bold; color: #9fab76">b'\x00\x00'</span>
Permissions: Read (no authen/author), Write (higher layer specifies authen/author)
--sniff-adv: Werbe-PDU auf physikalischen Kanälen abhören$ sudo bluing le --sniff-adv[INFO] Nutze micro:bit /dev/ttyACM2 auf Kanal 37 [INFO] Nutze micro:bit /dev/ttyACM1 auf Kanal 38 [INFO] Nutze micro:bit /dev/ttyACM0 auf Kanal 39 [INFO] micro:bit 38 < Bereit -> Start [INFO] micro:bit 37 < Bereit -> Start [INFO] micro:bit 39 < Bereit -> Start [38] [ADV_NONCONN_IND] random AdvA: 28:7A:88:B2:35:0B [39] [ADV_IND] public AdvA: A4:E4:72:B1:CB:8D [37] [SCAN_REQ] random ScanA: 6A:90:0C:07:3E:14 random AdvA: 7D:9B:A8:5A:F2:81 ... ...
android Befehl: Android Bluetooth-Stack$ bluing android --helpUsage:
bluing android [-h | --help]
bluing android [-t <id>] --collect-btsnoop-log [-o <datei>]
Options:
-h, --help Diese Hilfe anzeigen und beenden
-t <id> Android-Gerät mit angegebener Transport-ID verwenden. Diese Option
wird ignoriert, wenn nur ein Gerät verfügbar ist.
--collect-btsnoop-log Sammle das erzeugte btsnoop-Log in einer lokalen Datei,
standardmäßig ./btsnoop_hci.log
-o <datei> Ausgabe in platzieren [Vorgabe: ./btsnoop_hci.log]
--collect-btsnoop-log: Sammle das erzeugte btsnoop-Log$ bluing android -t 3 --collect-btsnoop-log -o btsnoop_hci.log; file btsnoop_hci.logbtsnoop_hci.log: BTSnoop version 1, HCI UART (H4)
spoof Befehl: Spoofen mit neuen lokalen Geräteinformationen$ bluing spoof --helpUsage:
bluing spoof [-h | --help]
bluing spoof [-i <hci>] --bd-addr=<BD_ADDR>
bluing spoof [-i <hci>] --cls-of-dev=<num>
bluing spoof --host-name=<name>
bluing spoof [-i <hci>] --alias=<alias>
Options:
-h, --help Diese Hilfe anzeigen und beenden
-i <hci> HCI-Gerät
--bd-addr=<BD_ADDR> Spoofen mit neuer BD_ADDR
--cls-of-dev=<num> Spoofen mit neuer Geräteklasse
--host-name=<name> Spoofen mit neuem Hostnamen
--alias=<alias> Spoofen mit neuem Alias
--bd-addr=<BD_ADDR>: Spoofen mit neuer BD_ADDRDiese Funktion basiert derzeit auf spooftooph, das mit sudo apt install spooftooph installiert werden kann, wenn Sie Kali Linux verwenden. Wenn Sie diese Funktion jedoch unter Ubuntu nutzen, müssen Sie spooftooph manuell kompilieren und installieren.
$ sudo bluing spoof --bd-addr=AA:BB:CC:DD:EE:FF[WARNING] Die ursprüngliche HCI-Gerätenummer wurde möglicherweise geändert [INFO] BD_ADDR geändert: 11:22:33:44:55:66 -> AA:BB:CC:DD:EE:FF
--cls-of-dev=<num>: Spoofen mit neuer Geräteklasse$ sudo bluing spoof --cls-of-dev=0x6c0100Keine Ausgabe bei Erfolg
--host-name=<name>: Spoofen mit neuem Hostnamen$ sudo bluing spoof --host-name=BluingKeine Ausgabe bei Erfolg
--alias=<alias>: Spoofen mit neuem Controller-Alias$ sudo bluing spoof --alias='Bluing Alias'Keine Ausgabe bei Erfolg
plugin Befehl: Plugins verwalten$ bluing plugin --helpUsage:
bluing plugin [-h | --help]
bluing plugin <command> [<args>...]
Options:
-h, --help Diese Hilfe anzeigen und beenden
Commands:
list Installierte Plugins auflisten
install Ein Plugin installieren
uninstall Ein Plugin deinstallieren
run Ein Plugin ausführen
Viele Funktionen von bluing benötigen Zugriff auf mindestens einen Bluetooth-Adapter. Obwohl es möglich ist, den mit dem Linux-Physikalischen Rechner mitgelieferten Adapter zu verwenden oder den Linux-Virtuellen Rechner exklusiv auf einen Adapter des Host-Rechners zu legen, wird dennoch empfohlen, einen externen USB-Bluetooth-Adapter für mehr Stabilität zu verwenden, wie z.B. den Parani UD100-G03.
Bluing benötigt mindestens 1 original micro:bit beim Abhören von Werbe-PDUs auf physikalischen Kanälen (le --sniff-adv), und es wird empfohlen, 3 davon gleichzeitig zu verwenden. Diese micro:bits müssen die von bluing bereitgestellte dedizierte Firmware ausführen. Nach dem Anschließen der micro:bits an Linux kann die vorab erstellte Firmware durch Ausführen des folgenden Befehls geflasht werden:
bluing --flash-micro-bit
Weniger bequem zu verwenden als der micro:bit, aber leichter zu kaufen, können auch generische NRF51-Adapter unterstützt werden. Es wurde Unterstützung für den Adafruit Bluefruit LE Friend und die BLE400-Boards hinzugefügt. Um diese zu verwenden, müssen sie über SWD geflasht werden. Dieses Tool unterstützt das Flashen dieser Geräte nicht. Zudem kann das Tool diese Geräte nicht automatisch identifizieren. Stattdessen muss die Option --devices die mit dem Computer verbundenen Ports identifizieren.
Beim Abhören und Erraten nahegelegener BD_ADDRs (br --sniff-and-guess-bd-addr) benötigt bluing ein Ubertooth One.
rfkill findet hci0 nichtDie folgende Fehlermeldung erscheint:```txt Exception: Can't find the ID of hci0 in rfkill
Diese Ausnahme kann durch die fehlende Unterstützung der Optionen `-r` und `-n` in der alten Version von rfkill verursacht werden, zum Beispiel:
<pre>
$ <span style="font-weight: bold; color: #9fab76">cat</span> /etc/os-release | <span style="font-weight: bold; color: #9fab76">head</span> -n 2
NAME="Ubuntu"
VERSION="16.10 (Yakkety Yak)"
$ <span style="font-weight: bold; color: #9fab76">rfkill</span> --version
rfkill 0.5-1ubuntu3 (Ubuntu)
</pre>
Zu diesem Zeitpunkt kann ein Upgrade von rfkill auf eine neuere Version das Problem lösen, wie zum Beispiel:
<pre>
$ <span style="font-weight: bold; color: #9fab76">cat</span> /etc/os-release | <span style="font-weight: bold; color: #9fab76">head</span> -n 2
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
$ <span style="font-weight: bold; color: #9fab76">rfkill</span> --version
rfkill from util-linux 2.38.1
</pre>
### Der Management-Befehl `scanend` konnte nicht ausgeführt werden
Die folgende Fehlermeldung wird angezeigt:```txt
ERROR: Failed to execute management command 'scanend' (code: 11, error: Rejected)
Versuche, den Bluetooth-Dienst neu zu starten, um das Problem zu lösen:
sudo systemctl restart bluetooth.service
... ...