hacktricks/radio-hacking/pentesting-ble-bluetooth-low-energy.md

6.3 KiB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

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 de publicidad. 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.

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 están tratando de 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 se agrupan en servicios si están relacionadas con la realización de una acción particular.

Enumeración

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:

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

# 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

{% hint style="success" %} Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks
{% endhint %}