Saltearse al contenido

Bluetooth y BLE

Bluetooth Low Energy (BLE) está en todas partes: wearables, cerraduras inteligentes, dispositivos médicos, llaves de coche, juguetes, sensores IoT. Muchos se diseñaron priorizando la facilidad y el bajo consumo sobre la seguridad, así que es común encontrar comunicación sin cifrar, autenticación débil o inexistente, y datos sensibles expuestos. Auditar BLE consiste en descubrir dispositivos, mapear sus servicios y características, y leer/escribir/interceptar lo que no debería ser accesible.

GATT estructura de datos: Servicios -> Características -> Valores
Característica un dato leíble/escribible/notificable (p. ej. "estado de la cerradura")
MAC dirección del dispositivo (a veces aleatorizada)
Advertising tramas que el dispositivo emite para anunciarse
Pairing/Bonding emparejamiento (con o sin cifrado/autenticación)
# modos de seguridad: Just Works (sin auth, común y débil), Passkey, OOB, LE Secure Connections
# adaptador BLE (el integrado del portátil suele servir para empezar)
# para más alcance/capacidad: dongles CSR/Nordic, Ubertooth One (sniffing avanzado)
# teléfono con apps (nRF Connect) para exploración rápida
# escanear dispositivos cercanos
hcitool lescan ; bluetoothctl -> scan on
# explorar servicios y características (GATT)
gatttool -I -b <MAC> # modo interactivo
# o herramientas modernas
bettercap -> ble.recon on ; ble.enum <MAC>
# apps: nRF Connect (Android/iOS) -> ver y escribir características cómodamente

Mapea qué servicios/características expone el dispositivo y cuáles permiten lectura/escritura/notificación.

# leer/escribir características sin autenticación
gatttool -b <MAC> --char-write-req -a <handle> -n <valor>
# -> abrir una cerradura, cambiar un ajuste, enviar un comando no autorizado
# replay: capturar un comando legítimo (sniffing) y reenviarlo
# falta de cifrado -> sniffing del tráfico BLE revela comandos/datos
# Just Works pairing -> MITM del emparejamiento
# fuzzing de características -> provocar fallos/comportamientos inesperados
# dispositivos que exponen todo sin ninguna autenticación (muy común en IoT barato)

El patrón recurrente: una característica que ejecuta una acción sensible (abrir, encender, cambiar config) sin comprobar autenticación → cualquiera en rango la invoca.

# capturar tráfico BLE (requiere hardware que soporte sniffing)
Ubertooth One + ubertooth-btle ; nRF Sniffer (Wireshark)
# analizar el emparejamiento y los comandos en claro
# MITM de BLE: GATTacker, BtleJuice (proxy entre app y dispositivo)
  • LE Secure Connections con emparejamiento autenticado (Passkey/OOB), no “Just Works” para acciones sensibles.
  • Cifrar la comunicación y autenticar los comandos a nivel de aplicación (no confiar solo en el pairing).
  • No exponer características sensibles sin autenticación; validar quién escribe.
  • Protección anti-replay (nonces, contadores); rotación de claves.
  • Aleatorización de MAC para privacidad; mínima superficie en advertising.
  • Hardware BLE y herramientas (bluetoothctl/gatttool/nRF Connect)
  • Descubrir dispositivos y mapear GATT (servicios/características)
  • Leer características sin autenticación
  • Escribir características sensibles (abrir/comando) sin auth
  • Sniffing del tráfico (¿sin cifrar?) y replay de comandos
  • Modo de emparejamiento (Just Works vs autenticado)
  • MITM del emparejamiento (GATTacker/BtleJuice)
  • Blue: ¿LE Secure Connections, auth a nivel de app, anti-replay?