Servicios GATT Bluetooth ocultos

BR/EDR

BLE

En Bluetooth existen varios mecanismos para descubrir los servicios disponibles en un dispositivo. Uno de ellos es el perfil (GATT), que permite la comunicación mediante atributos estructurados. GATT es obligatorio en dispositivos compatibles con BLE y debe configurarse correctamente para listar todos los servicios disponibles.

No listar un servicio en GATT no impide el acceso ni proporciona beneficios de seguridad. Del mismo modo, si un servicio está adecuadamente protegido, ocultarlo no es necesario. Asegurar que GATT liste correctamente todos los servicios mejora la interoperabilidad y cumple con las especificaciones.

Descripción del proceso

Para verificar si existen servicios ocultos, es importante realizar un descubrimiento de GATT. Este es un procedimiento estándar de Bluetooth que se puede realizar con las herramientas estándar del sistema.

Después de tener una lista de servicios disponibles en GATT, es necesario realizar formas alternativas de descubrir servicios Bluetooth. Esto puede incluir los siguientes procedimientos:

  • Capturar comunicaciones Bluetooth mientras se opera el dispositivo para descubrir comunicaciones con servicios previamente desconocidos.
  • Realizar escaneos de fuerza bruta de servicios en un dispositivo.
  • Realizar escaneos de servicios utilizando diferentes protocolos de descubrimiento de servicios, como SDP si está disponible.

Si hay servicios ocultos al servicio GATT, no está configurado correctamente.

Recursos relacionados

Para verificar este control, los siguientes recursos pueden ser útiles:

ID Descripción
BSAM-RES-04 Sniff de una conexión Bluetooth
BSAM-RES-05 Captura de una conexión Bluetooth

Caso de ejemplo

Se va a comprobar la existencia de servicios GATT ocultos en un dispositivo con conectividad BLE. Las pruebas se llevarán a cabo con un ordenador. Usaremos Wireshark con BTVS (btvs.exe -Mode wireshark) para realizar la captura de paquetes para su análisis.

Para este control será necesario contar con python 3 instalado. Desde un terminal será necesario instalar los paquetes asyncio y bleak con el asistente de instalación de python pip.

pip install asyncio

pip install bleak

Para realizar la búsqueda de los servicios Service expuestos por GATT se usará el script de bleak: service_explorer.py.

Para ejecutarlo es necesario conocer la dirección MAC del dispositivo objetivo y escribir el comando:

python service_explorer.py --address XX:XX:XX:XX:XX:XX >> gatt_explorer.txt

Se dispone de un archivo (gatt_explorer.txt) con las trazas generadas por el script service_explorer.py que se ordena para facilitar su lectura.

gatt_explorer.txt ordenado

Para cada servicio (Service) hay una o varias características (Characteristic) que contiene uno o varios descriptores (Descriptor) y un valor (Value). Los servicios, características y descriptores tienen dos campos adicionales: el Handle y el UUID.

El controlador de Bluetooth internamente lista los servicios GATT mediante el campo Handle o UUID. El estándar ha limitado, para un dispositivo, el número de servicios, características y descriptores a 65.535 (0xFFFF), equivalente a recorrer desde el valor 1 hasta el 65.535 el Handle. A cada Handle le corresponde un UUID y viceversa.

Para comprobar si existen servicios ocultos, se realizará una petición de lectura con Scapy, o alguna herramienta similar como gatttool, para cada Handle, en función de la respuesta obtenida para cada consulta existirá o no el Handle. Los posibles casos de respuesta a una petición de lectura , según el protocolo ATT, permitirán saber si existe o no un Handle.

Respuesta de lectura Existe el Handle
Respuesta afirmativa a la lectura SI
Error por Autorización insuficiente SI
Error por Autenticación insuficiente SI
Error por longitud de clave de cifrado demasiado corta SI
Error por cifrado insuficiente SI
Error por Handle invalido NO
Error por lectura no permitida SI

Una vez se tiene la salida de las dos herramientas, se comparan los resultados y si existen Handle que no aparecen listados con el script de bleak, quiere decir que es un servicio oculto.

El resultado del control será FAIL cuando se encuentran más Handle existentes que los descubiertos en la exploración del GATT.