Servicios GATT Bluetooth ocultos

BR/EDR

BLE

En Bluetooth, un servicio se refiere a una funcionalidad o característica específica que un dispositivo ofrece a otros dispositivos dentro de una red Bluetooth. Cada servicio se identifica por un Identificador Único Universal (UUID), y puede ser descubierto y utilizado por otros dispositivos Bluetooth que soportan ese servicio en particular.

En Bluetooth existen múltiples formas de descubrir los servicios disponibles en un dispositivo. Uno de los mecanismos para realizar este descubrimiento es el Perfil de Atributos Genéricos o GATT y permite la comunicación entre dispositivos mediante el intercambio de atributos (datos organizados en un formato específico).

Es obligatorio que GATT esté presente, es importante que se configure correctamente y que liste todos los servicios disponibles en el dispositivo. No listar un servicio en GATT no impide que los usuarios lo accedan y no lo asegura.

De igual manera, si un servicio está correctamente asegurado, no es necesario ocultarlo y configurar GATT correctamente para listarlo estará en conformidad con las Especificaciones de Bluetooth, lo que permitirá una mejor interoperabilidad entre dispositivos.

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.