- Nombre del dispositivo.
- Fabricante del chip Bluetooth incorporado en el dispositivo.
- Naturaleza del dispositivo: PC, teléfono móvil, equipo Manos Libres, etc.
- Servicios ofrecidos por el dispositivo.
- Perfiles Bluetooth disponibles en el dispositivo
Identificación de dispositivos Bluetooth
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:
- 11 últimos bits reservados para las Service Classes.
- 11 bits siguientes reservados para las Device
Classes.
- 6 bits reservados para las Major Device Classes.
- 5 bits reservados para las Minor Device Classes.
- 2 primeros bits para el campo Format Type, por defecto a 0.
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:
- bit 8: Computer (desktop,notebook, PDA, organizers, .... )
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:
- bits 4 y 2: Palm sized PC / PDA

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:
- Campo Class of Device/Service
- Dirección MAC
- Perfiles Bluetooth ofrecidos por el dispositivo
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:
- A través del campo Class of Device/Service se puede identificar el tipo y naturaleza del dispositivo, es decir, averiguar si se trata de un PC, de un teléfono móvil o de una PDA.
- Los tres primeros bytes de la dirección MAC del dispositivo identifican el fabricante del chip Bluetooth. En algunos casos, el nombre del fabricante permite una identificación explícita, como por ejemplo el código del fabricante “Sony Ericsson Mobile Communications AB”, que corresponde a teléfonos móviles de marca Sony-Ericsson. En otros casos, la identificación es implítica, como por ejemplo el código del fabricante “Murata Manufacturing Co., Ltd.”, que habitualmente responde a teléfonos móviles de marca Nokia.
- Cada dispositivo Bluetooth ofrece un determinado conjunto de perfiles Bluetooth. En algunos casos, dos teléfonos móviles de una misma marca pueden soportar distintos perfiles o, a pesar de soportar los mismos perfiles, difieren en el contenido de algunos campos informativos del Service Record.
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:
- Blueprinting, de Trifinite Group : http://trifinite.org/
- XBlue, de Endorasoft: http://www.xblue.es/
