Identificación de dispositivos Bluetooth

El proceso de identificación de dispositivos Bluetooth comprende el conjunto de actividades que permiten obtener información relevante de un dispositivo Bluetooth remoto; tanto aquella información que es mostrada públicamente como la que puede ser deducida a partir de los datos recogidos. Esta información relativa a un dispositivo Bluetooth contiene los siguientes datos:

Tabla de contenidos

Identificación del tipo (naturaleza)
   Major Device Class
   Minor Device Class
   Cálculo del Class of Device
Identificación del fabricante del chip Bluetooth
Descubrimiento de Perfiles Bluetooth
Identificación de la marca y el modelo

Identificación del tipo (naturaleza)


Cuando se realiza un escaneo de dispositivos Bluetooth con ayuda de herramientas comerciales o, simplemente, con el asistente de conexiones Bluetooth de Microsoft Windows, los dispositivos detectados se muestran mediante iconos representativos de su naturaleza, ya sean PCs, PDAs, Teléfonos móviles, Manos libres, etc.




El reconocimiento se efectúa a través de los DIACs (The General- and Device-Specific Inquiry Access Codes)




Cada dispositivo Bluetooth incorpora en la cabecera de nivel de Banda Base de sus paquetes un campo Class of Device/Service. Este campo se compone de 3 octetos organizados con el siguiente formato:

El siguiente esquema resume lo explicado:



Fuente: https://www.bluetooth.org/foundry/assignnumb/document/baseband

El campo reservado para las Device Classes permite identificar la naturaleza del dispositivo. Este campo se compone 2 subcampos: Major Device Class y Minor Device Class.


Major Device Class

El campo reservado para la Major Device Class permite identificar el tipo genérico de dispositivo. Este campo se compone de 5 bits, desde el bit 8 al 12. Cada tipo genérico de dispositivo está asociado a una representación concreta de bits dentro del campo. En la especificación de banda base 1.1 de Bluetooth se describe la siguiente correspondencia entre bits marcados en el campo Major Device Class y los tipos genéricos de dispositivos:



Fuente: https://www.bluetooth.org/foundry/assignnumb/document/baseband


Minor Device Class

El campo reservado para la Minor Device Class permite identificar el tipo específico de dispositivo. Este campo se compone de 6 bits, desde el bit 7 al 2. Cada tipo específico de dispositivo está asociado a una representación concreta de bits dentro del campo. En la especificación de banda base 1.1 de Bluetooth se describe la siguiente correspondencia entre bits marcados en el campo Minor Device Class y los tipos específicos de dispositivos, dentro de cada tipo genérico.

Fuente de referencia de las tablas: https://www.bluetooth.org/foundry/assignnumb/document/baseband

Computer Major Class




Phone Major Class




Peripheral Major Class

 


Audio / Video Major Class




Imaging Major Class




LAN/Network Access Point Major Class – Load Factor




Weareable Major Class




Toy Major Class



Cálculo del Class of Device

Conociendo el Class of Device/Service de un dispositivo Bluetooth, se puede averiguar fácilmente el tipo de dispositivo del que se trata.




En este ejemplo, la herramienta Hcitool ha detectado un dispositivo cuyo Class of Device/Service es 0x320114.

La representación de 0x320114 en binario es la siguiente:

Nº bit: 23 22 21 20 19 18 17 16 15 14 13 | 12 11 10 09 08 07 | 06 05 04 03 02 | 01 00
Valor:   0   0   1   1   0   0   1   0   0   0   0  |  0   0   0   0   1   0  |  0   0   1   0   1  |  0   0

Se observa que el bit 8 aparece activado, que,tal y como establece la tabla Major Device Classes, corresponde al siguiente tipo de dispositivo genérico:

Al mismo tiempo, los bits 4 y 2 también aparecen activados que, tal y como establece la tabla Minor Device Classes de la categoría Major Computer Class, corresponden al siguiente tipo de dispositivo específico:



Identificación del fabricante del chip Bluetooth


Todos los dispositivos Bluetooth se identifican mediante una dirección MAC, denominada BD_ADDR, que es unívoca y corresponde a un único módulo Bluetooth. Esta dirección es utilizada por el protocolo Bluetooth para el direccionamiento de dispositivos a nivel de red.

La dirección MAC de un dispositivo Bluetooth se compone de 6 bytes que responden a la siguiente notación: FF:FF:FF:XX:XX:XX. Los tres primeros bytes se asocian al fabricante del chip y los tres últimos identifican al dispositivo.

A continuación se presenta un ejemplo de relación entre los tres primeros bytes de la dirección MAC con el fabricante del chip:

00:0B:AC ..... 3Com Europe Ltd.
00:80:37 ..... Sony-Ericsson Group
00:0A:D9 ..... Sony Ericsson Mobile Communications AB
00:60:57 ..... Murata Manufacturing Co., Ltd. (Nokia)

Una lista más extensa de códigos MAC asignados a fabricantes de productos IEEE 802 está disponible en:
http://standards.ieee.org/regauth/oui/oui.txt

BlueZScanner incluye un algoritmo capaz de obtener el código de tres bytes de una dirección MAC de un dispositivo y encontrar el fabricante del chip Bluetooth asociado a ese código. De esta forma, aunque el nombre del dispositivo no aporte información, su dirección MAC permite identificar la marca de manufactura.

Descubrimiento de Perfiles Bluetooth


El descubrimiento de perfiles en dispositivos Bluetooth remotos corre a cargo del protocolo SDP (Service Discovery Protocol).




El siguiente código fuente para BlueZ permite obtener los perfiles Bluetooth soportados por un dispositivo con una determinada dirección MAC:

void getServicios(char MAC_dev[])
{

      bdaddr_t bdaddr;
       sdp_list_t *attrid, *search, *seq;
       uint32_t range = 0x0000ffff;
       sdp_session_t *sess;
       struct hci_dev_info di;
       uuid_t root_uuid;

      if(hci_devinfo(0, &di) < 0)
       {
             printf("[!] Error. Fallo en HCI device info.\n");
             exit(1);
       }

      str2ba(MAC_dev,&bdaddr);

      sess = sdp_connect(&di.bdaddr, &bdaddr, SDP_RETRY_IF_BUSY);

      if(!sess)
       {
             printf("Error. Imposible conectar con el servidor SDP.\n");
             exit(1);
       }

      printf("\tPerfiles Bluetooth disponibles:\n", MAC_dev);

      sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
       attrid = sdp_list_append(0, &range);
       search = sdp_list_append(0, &root_uuid);

      if(sdp_service_search_attr_req(sess, search, SDP_ATTR_REQ_RANGE, attrid, &seq) < 0)
       {
            perror("SDP service search");
             sdp_close(sess);
             exit(1);
       }

      sdp_list_free(attrid, 0);
       sdp_list_free(search, 0);

      //Imprimimos la lista de Perfiles Bluetooth encontrados
       for(; seq; seq = seq->next)
       {
             sdp_record_t *rec = (sdp_record_t *) seq->data;
             sdp_list_t *access = NULL;

            int channel;
             sdp_data_t *d = sdp_data_get(rec, SDP_ATTR_SVCNAME_PRIMARY);

            if (d)
             {
                   printf("\t\t· %s ", d->val.str);
             }

            sdp_get_access_protos(rec, &access);

            //Obtenemos el channel correspondiente al Perfil
             if(access)
             {
                   channel = sdp_get_proto_port(access, RFCOMM_UUID);
                   printf("(Channel: %d)\n", channel);
             }
       }

free(seq);

sdp_close(sess);

}

Identificación de la marca y el modelo


En principio, no es posible identificar inequívocamente la marca y modelo de un dispositivo Bluetooth detectado atendiendo a la información pública que ofrece. En algunos casos, es posible identificar la marca y modelo de un dispositivo realizando peticiones a ciertos servicios protegidos que ofrece el mismo y que requieren autenticación, como a través de comandos AT (en teléfonos móviles) o servicios de Sync ML DM Device Description (en dispositivos que soporten este protocolo).

Sin embargo, se puede afirmar que cada dispositivo incorpora una firma personal (fingerprint) en la información que muestra en su perfil público. La información disponible de forma pública en un dispositivo Bluetooth es la siguiente:

Si se realiza un análisis conjunto de los datos obtenidos, es posible obtener una relación casi unívoca por cada dispositivo como se detalla a continuación:

Se puede calcular un resumen (hash) de la información obtenida al realizar una petición SDP (Service Discovery Protocol) en un dispositivo y asociarlo con la información del fabricante del chip para conseguir un registro identificativo (firma o fingerprint) del dispositivo en cuestión. Por lo general, un registro calculado con este procedimiento puede asociarse unívocamente a un único dispositivo (marca y modelo), aunque puede que un único dispositivo disponga de varios registros asociados al mismo, debido fundamentalmente a que existen distintas versiones en el firmware del modelo y cada una puede soportar un conjunto diferente de perfiles Bluetooth.


Fuente: http://trifinite.org/Downloads/Blueprinting.pdf


Para conseguir una base de datos suficientemente completa, sería necesario escanear multitud de dispositivos Bluetooth y obtener registros identificativos por coincidencia de resúmenes calculados sobre el conjunto de perfiles Bluetooth. Mediante esta base de datos sería posible identificar con una alta probabilidad un nuevo dispositivo Bluetooth detectado en base a la experiencia recogida en anteriores escaneos.

Actualmente, dos proyectos de herramientas Bluetooth incorporan un mecanismo de aprendizaje para obtener registros identificativos de dispositivos Bluetooth y emplear esa experiencia recogida para poder identificar nuevos dispositivos detectados con una probabilidad bastante elevada. Estos proyectos son:

© 2005 - 2009 Alberto Moreno Tablado