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