Desplegar beacons Bluetooth en entornos de produccion introduce superficies de ataque que muchos tutoriales de protocolo BLE pasan por alto. Este articulo analiza amenazas practicas: suplantacion de direcciones, intercepcion de paquetes ADV y ataques de repeticion, y proporciona contramedidas de ingenieria con margenes de seguridad cuantitativos. La audiencia son ingenieros RF y profesionales de seguridad embebida que despliegan beacons en escenarios de venta minorista, industrial y seguimiento de activos.

Modelo de amenaza: que puede hacer realmente un atacante

BLE esta disenado para la comodidad de bajo consumo, no para fortificaciones criptograficas. Comprender el panorama de amenazas realista es el punto de partida para cualquier despliegue:

Tipo de ataqueCapaEquipo requeridoDificultadImpacto
Suplantacion de direccion MACLink LayerUSB dongle ($20) + hcitoolBajaReportes de presencia falsa
Intercepcion de paquetes ADVLink LayerUbertooth / nRF Sniffer ($50)Baja-MediaSeguimiento de ubicacion, fuga de ID de activo
Ataque de repeticionApplicationCapture + retransmitMediaEntrada no autorizada a zona
MitM (conexion)L2CAP2x dongles + BT VS HCI commandsAltaIntercepcion de datos
JammingPHYSDR ($300+) o firmware modificadoMediaHacer DoS al beacon

Suplantacion de direccion MAC: deteccion y mitigacion

Las direcciones BLE vienen en cuatro tipos (Public, Random Static, Random Private Resolvable (RPA), Random Private Non-Resolvable). La mayoria de los beacons de produccion usan direcciones Public o Random Static: ambas son trivialmente suplantables. Un atacante con un dongle USB de $20 puede clonar la MAC de un beacon e inyectar paquetes ADV falsos:

# Attacker: spoofing a beacon's MAC

sudo hciconfig hci0 down

sudo hciconfig hci0 leadrand # or set static BD_ADDR

sudo hciconfig hci0 up

hcitool -i hci0 cmd 0x08 0x0008 # set ADV data

hcitool -i hci0 cmd 0x08 0x000a # enable ADV

Estrategia de deteccion: Cruce con huella RSSI. Si la misma MAC aparece a -45 dBm en la Zona A y a -82 dBm en la Zona B en menos de 3 segundos, es una suplantacion. Implementacion del lado del servidor:

MAX_SPEED_MS = 30  # m/s (human running)

MIN_RSSI_DELTA = 25 # dBm for physically distinct positions

def detect_spoofing(mac, rssi, gateway_id, timestamp):

prev = db.get_last_seen(mac)

if prev:

time_delta = timestamp - prev['ts']

rssi_delta = abs(rssi - prev['rssi'])

# Physical impossibilty: RSSI jump >25dBm in <2s

if time_delta < 2.0 and rssi_delta > MIN_RSSI_DELTA:

return "SPOOF_DETECTED"

return "OK"

Intercepcion de paquetes ADV: analisis de fuga de informacion

Los paquetes ADV se difunden en texto claro. Cualquier oyente pasivo dentro del alcance captura:

  • Direccion MAC del beacon (identidad del dispositivo)
  • Carga util del paquete ADV (incluidos datos de fabricante personalizados)
  • RSSI (implicitamente, en el receptor)

Cuantificacion de riesgo: Un sniffer nRF52840 captura el 100% de los paquetes ADV de beacons dentro de 40 metros (aire libre, potencia TX de 0 dBm). El atacante extrae IDs de activo, versiones de firmware y, si estan presentes, etiquetas de ubicacion sin cifrar.

Contramedida 1: Eliminar identificadores de la carga ADV. Use IDs efimeros (EID) rotados diariamente mediante un secreto compartido:

# Beacon: daily EID rotation

import hmac, hashlib, time

DAILY_KEY = hmac.new(SECRET, str(int(time.time())//86400).encode(), hashlib.sha256).digest()[:8]

# ADV manufacturer data = DAILY_KEY[:4] + rotating_counter[:4]

# Server resolves: lookup table of EID -> asset_id

Contramedida 2: Minimizar la carga ADV. No incluya numeros de serie de activos, versiones de firmware ni cadenas legibles por humanos en los datos ADV. Use codificacion binaria compacta con un nonce rotatorio.

Ataques de repeticion: prevencion de entrada no autorizada a zonas

En el control de acceso basado en proximidad (p. ej., «desbloquear la puerta cuando el beacon con ID X este a menos de 1 metro»), un atacante captura un paquete ADV valido y lo reproduce mas tarde. Sin un desafio-respuesta limitado en el tiempo, el sistema concede acceso.

Mitigacion: desafio-respuesta firmado. En lugar de una deteccion pasiva solo ADV, la pasarela inicia una conexion y solicita una respuesta firmada:

MetodoNivel de seguridadCosto de energia (μAh extra/evento)Latencia
Solo ADV (sin autenticacion)Ninguno (suplantable)00 ms
ADV + conexion + lectura de caracteristica firmadaMedio (ECDSA P-256)~180 μAh~120 ms
ADV cifrado (LE Secure Connections OOB)Alto~60 μAh (sin conexion necesaria)~15 ms

LE Secure Connections con emparejamiento Out-of-Band (OOB) distribuye un secreto compartido via NFC o una clave precompartida. El beacon cifra ADV usando AES-CCM con un IV rotatorio. La pasarela descifra y valida la marca de tiempo dentro de ±500 ms para prevenir la repeticion.

Publicidad cifrada: LE Secure Connections y mas alla

Bluetooth 5.4 introdujo los datos de publicidad cifrados (EAD). El beacon y la pasarela comparten una clave secreta (distribuida via GATT tras un emparejamiento seguro). Los paquetes ADV transportan cargas cifradas con AES-128-CCM. Incluso si se interceptan, la carga es indescifrable sin la clave.

Implementacion en nRF52 (SoftDevice S140):

// Configure EAD in SoftDevice

ble_ead_config_t ead_config = {

.p_key = pre_shared_key_16byte,

.key_id = 1,

.nonce_mode = BLE_EAD_NONCE_INCREMENTING

};

sd_ble_ead_enable(&ead_config);

// ADV data now encrypted

ble_advdata_t advdata = { .p_ead_data = &encrypted_payload };

Impacto en el rendimiento: EAD anade ~8 bytes de sobrecarga por paquete ADV. Con el limite ADV de 31 bytes, esto deja 23 bytes para la carga real. Planee la fragmentacion de mensajes si su carga excede esto.

Seguridad fisica: deteccion de manipulacion

Mas alla de los ataques RF, la manipulacion fisica de beacons es una amenaza real en despliegues de venta minorista y almacenes. Contramedidas:

  • Interruptor de intrusion de carcasa: un interruptor de lengueta magnetico activa el borrado del MCU (interrupcion GPIO → borrar claves BLE en flash)
  • Epoxi de borrado UV: encapsule la PCB; la remocion fisica expone el die a la UV, corrompiendo las claves almacenadas
  • Latido activo: el beacon envia un mensaje firmado «alive» cada 15 minutos; la ausencia de 3 latidos consecutivos dispara una alerta

Seguridad vs. consumo: compromiso cuantitativo

Nivel de seguridadIntervalo ADVPotencia TXVida de bateria (CR2477)Suplantable?
Ninguno (ADV en texto claro)100 ms0 dBm14 meses
Basico (rotacion EID)500 ms0 dBm28 mesesDificil (requiere compromiso de clave)
Medio (conexion firmada ECDSA)1000 ms0 dBm18 mesesNo (requiere clave privada)
Alto (EAD + emparejamiento seguro)500 ms-8 dBm36 mesesNo (cifrado AES-CCM)

El equilibrio optimo de produccion: rotacion EID + cifrado EAD, con un intervalo ADV de 500 ms. Esto logra una seguridad robusta con mas de 28 meses de vida de bateria en CR2477.

Lista de verificacion de despliegue

  • ✅ Rotar claves EID diariamente via OTA (o preaprovisionar ventana de clave de 90 dias)
  • ✅ Habilitar EAD (Bluetooth 5.4+) para cargas sensibles
  • ✅ Validar la consistencia RSSI del lado del servidor para detectar suplantacion MAC
  • ✅ Usar direcciones MAC aleatorias (direccion privada resoluble) con rotacion de 15 minutos
  • ✅ Para control de acceso: requerir desafio-respuesta firmado (no solo presencia ADV)
  • ✅ Asegurar fisicamente el beacon (interruptor de manipulacion + epoxi de borrado UV)

La seguridad para los despliegues de Bluetooth Beacon no es opcional en 2026: es un requisito de diseno. Las tecnicas anteriores (rotacion EID, cifrado EAD, huella RSSI y desafio-respuesta firmado) proporcionan defensa en profundidad contra los vectores de ataque mas comunes. Nuestro equipo de ingenieria puede ayudar con la implementacion de firmware de beacon seguro y la revision de seguridad de su arquitectura de despliegue. Contactenos para una inmersion tecnica en su caso de uso que involucre Bluetooth Beacon.