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