mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
68 lines
4.2 KiB
Markdown
68 lines
4.2 KiB
Markdown
# Pentesting BLE - Bluetooth Low Energy
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Introducción
|
|
|
|
Disponible desde la especificación Bluetooth 4.0, BLE utiliza solo 40 canales, cubriendo el rango de 2400 a 2483.5 MHz. En contraste, el Bluetooth tradicional utiliza 79 canales en ese mismo rango.
|
|
|
|
Los dispositivos BLE se comunican enviando **paquetes de publicidad** (**beacons**), estos paquetes transmiten la existencia del dispositivo BLE a otros dispositivos cercanos. Estos beacons a veces **envían datos**, también.
|
|
|
|
El dispositivo que escucha, también llamado dispositivo central, puede responder a un paquete de publicidad con una **solicitud SCAN** enviada específicamente al dispositivo que publicita. La **respuesta** a ese escaneo utiliza la misma estructura que el paquete de **publicidad** con información adicional que no pudo caber en la solicitud de publicidad inicial, como el nombre completo del dispositivo.
|
|
|
|
.png>)
|
|
|
|
El byte de preámbulo sincroniza la frecuencia, mientras que la dirección de acceso de cuatro bytes es un **identificador de conexión**, que se utiliza en escenarios donde múltiples dispositivos intentan establecer conexiones en los mismos canales. A continuación, la Unidad de Datos de Protocolo (**PDU**) contiene los **datos de publicidad**. Hay varios tipos de PDU; los más comúnmente utilizados son ADV_NONCONN_IND y ADV_IND. Los dispositivos utilizan el tipo de PDU **ADV_NONCONN_IND** si **no aceptan conexiones**, transmitiendo datos solo en el paquete de publicidad. Los dispositivos utilizan **ADV_IND** si **permiten conexiones** y **dejan de enviar publicidad** una vez que se ha **establecido** una **conexión**.
|
|
|
|
### GATT
|
|
|
|
El **Perfil de Atributo Genérico** (GATT) define cómo el **dispositivo debe formatear y transferir datos**. Cuando estás analizando la superficie de ataque de un dispositivo BLE, a menudo concentrarás tu atención en el GATT (o GATTs), porque es cómo se **activa la funcionalidad del dispositivo** y cómo se almacenan, agrupan y modifican los datos. El GATT lista las características, descriptores y servicios de un dispositivo en una tabla como valores de 16 o 32 bits. Una **característica** es un valor de **datos** **enviado** entre el dispositivo central y el periférico. Estas características pueden tener **descriptores** que **proporcionan información adicional sobre ellas**. Las **características** a menudo están **agrupadas** en **servicios** si están relacionadas con la realización de una acción particular.
|
|
|
|
## Enumeración
|
|
```bash
|
|
hciconfig #Check config, check if UP or DOWN
|
|
# If DOWN try:
|
|
sudo modprobe -c bluetooth
|
|
sudo hciconfig hci0 down && sudo hciconfig hci0 up
|
|
|
|
# Spoof MAC
|
|
spooftooph -i hci0 -a 11:22:33:44:55:66
|
|
```
|
|
### GATTool
|
|
|
|
**GATTool** permite **establecer** una **conexión** con otro dispositivo, listando las **características** de ese dispositivo y leyendo y escribiendo sus atributos.\
|
|
GATTTool puede lanzar un shell interactivo con la opción `-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
|
|
[A4:CF:12:6C:B3:76][LE]> characteristics
|
|
handle: 0x0002, char properties: 0x20, char value handle:
|
|
0x0003, uuid: 00002a05-0000-1000-8000-00805f9b34fb
|
|
handle: 0x0015, char properties: 0x02, char value handle:
|
|
0x0016, uuid: 00002a00-0000-1000-8000-00805f9b34fb
|
|
[...]
|
|
|
|
# Write data
|
|
gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --char-write-req <characteristic handle> -n <value>
|
|
gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n "04dc54d9053b4307680a"|xxd -ps)
|
|
|
|
# Read data
|
|
gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --char-read -a 0x16
|
|
|
|
# Read connecting with an authenticated encrypted connection
|
|
gatttool --sec-level=high -b a4:cf:12:6c:b3:76 --char-read -a 0x002c
|
|
```
|
|
### Bettercap
|
|
```bash
|
|
# Start listening for beacons
|
|
sudo bettercap --eval "ble.recon on"
|
|
# Wait some time
|
|
>> ble.show # Show discovered devices
|
|
>> ble.enum <mac addr> # This will show the service, characteristics and properties supported
|
|
|
|
# Write data in a characteristic
|
|
>> ble.write <MAC ADDR> <UUID> <HEX DATA>
|
|
>> ble.write <mac address of device> ff06 68656c6c6f # Write "hello" in ff06
|
|
```
|
|
{{#include ../../banners/hacktricks-training.md}}
|