El proceso de detección de
dispositivos permite descubrir dispositivos Bluetooth situados dentro
del radio de cobertura de nuestro equipo. Dependiendo de la potencia de
transmisión que tenga nuestro módulo Bluetooth, seremos capaces de
encontrar un mayor o menor número de dispositivos Bluetooth cercanos.
Detección de dispositivos en modo visible o discoverable
El proceso de detección de dispositivos Bluetooth forma parte
de las funciones de la capa HCI.
- Inicialmente, el dispositivo origen envía paquetes inquiry
y se mantiene en espera de recibir respuestas de otros dispositivos
presentes en su zona de cobertura.
- Si los dispositivos destino están configurados en modo
visible (discoverable) se encontrarán en estado inquiry_scan
y en predisposición de atender estos paquetes. En este caso, al recibir
un paquete inquiry cambiarán a estado inquiry_response
y enviarán una respuesta al dispositivo origen con sus direcciones MAC
y otros parámetros.
- Los dispositivos que estén configurados en modo no visible (non
discoverable) nunca entrarán en modo inquiry_response
y, por tanto, no responderán al dispositivo origen y permanecerán
ocultos.
El siguiente código fuente para BlueZ permite escanear y
detectar dispositivos Bluetooth en modo visible.
Código
fuente: BlueFinder
Detección de dispositivos en modo oculto o non discoverable
Como ya se ha comentado anteriormente, durante el proceso de
HCI inquiry, los dispositivos configurados en modo oculto no
responderán a los paquetes inquiry del dispositivo origen.
Sin embargo, el hecho de no ver un dispositivo oculto, no significa que
no esté ahí y que no se pueda detectar con otros medios.
Existen ciertos paquetes Bluetooth que, enviados a una dirección MAC
determinada, obligan al dispositivo que los recibe a devolver una
respuesta independientemente del modo de visibilidad establecido. Una
de estos paquetes es el utilizado en la función de resolución de nombre
de dispositivo hci_read_remote_name. Esta
función, implementada en BlueZ, permite obtener el nombre de un
dispositivo Bluetooth a partir de su dirección MAC. Es decir,
conociendo la dirección MAC de un dispositivo Bluetooth remoto podemos
resolver su nombre con la función hci_read_remote_name,
aunque el dispositivo haya sido configurado en modo oculto e ignore
paquetes HCI inquiry.
La técnica que permite descubrir dispositivos Bluetooth en modo oculto,
dado que, a priori, la dirección MAC del dispositivo es desconocida,
consiste en realizar un ataque por fuerza bruta sobre un determinado
rango de direcciones MAC permitidas esperando encontrar alguna que
responda a la petición de resolución de nombre de dispositivo, lo que
indicaría que existe un dispositivo Bluetooth configurado en modo
oculto detrás de esa dirección MAC.
Esta misma técnica es la empleada por RedFang,
una herramienta desarrollada por @stake Inc. que
permite encontrar dispositivos Bluetooth en modo oculto realizando
fuerza bruta sobre los 6 bytes de la dirección BD_ADDR Bluetooth.
Herramienta:
Redfang