BluetoothCiberseguridadProgramación

Detector de proximidad Bluetooth o cómo encontrar a gente por sus dispositivos conectados

Normalmente solemos portar con nosotros una cantidad ingente de dispositivos: móvil, cascos, reloj… y esto, quizá sea poco. Por supuesto, muchos de estos dispositivos son todos inteligentes o «smart». Es decir: «hola, soy X_DISPOSITIVO y necesito conectarme si o si». Lo cual para nosotros es una gran ventaja, pues esa conexión establecida nos va a dar información y, gracias a esto, podemos encontrar a personas de interés, personas desaparecidas en catástrofes naturales como nos sugería un suscriptor, o recoger información sobre posibles «víctimas» u objetivos. Al final es como dejar un puerto abierto del ordenador al alcance de cualquiera y revelando información.

Hace unos años, siempre y cuando no nos falle la memoria, hubo una charla en las jornadas STIC del CCN-Cert que explicaba algo similar a esto que os vamos a contar. Hemos intentado replicarlo con nuestras propias manos, tampoco recordamos si era esto exactamente lo que contaban o no, pero algo parecido hacía, y hemos llegado a la conclusión de que podemos incluso «geolocalizar» a una persona mediante el Bluetooth. Ponemos la palabra geolocalizar entre comillas porque lo que podemos hacer es saber a qué distancia está el dispositivo con respecto a nosotros, pero no la dirección en la que se encuentra. Vamos a verlo en detalle desde el inicio.

¿Qué es el Bluetooth?

Bluetooth es una tecnología inalámbrica estándar para el intercambio de datos a corta distancia entre dispositivos fijos y móviles, creando redes de área personal (PANs). Utiliza ondas de radio UHF en la banda ISM de 2.4 GHz y puede conectar varios dispositivos al mismo tiempo, superando los problemas de sincronización.

Información que Muestra el Bluetooth

Cuando un dispositivo Bluetooth está en modo de descubrimiento, emite y puede recibir información que incluye:

  • Dirección MAC: Un identificador único para el dispositivo.
  • Nombre del dispositivo: Un nombre legible por humanos asignado al dispositivo.
  • RSSI (Indicador de Fuerza de Señal Recibida): Una medida de la potencia de la señal recibida, que se puede utilizar para estimar la distancia.
  • Servicios disponibles: Conjuntos de funcionalidades que el dispositivo ofrece.
  • Características de los servicios: Detalles específicos sobre los servicios, como la capacidad de leer o escribir datos.

Cálculo de la Distancia Basada en RSSI

El cálculo de la distancia basado en el RSSI es un método bastante extendido para estimar la distancia a la que se encuentra un dispositivo Bluetooth de otro, generalmente el receptor. RSSI, que significa «Indicador de Fuerza de Señal Recibida», es decir, es una medida de la potencia de la señal recibida en el receptor desde el transmisor, en este caso, el dispositivo Bluetooth.

La fórmula matemática para calcular esto sería:

distancia = 10 ^ ((RSSI_REF - RSSI) / (10 * n))

donde:

  • distancia es la distancia estimada entre el dispositivo y el receptor.
  • RSSI_REF es el RSSI medido a un metro de distancia del transmisor.
  • RSSI es el RSSI actualmente medido.
  • n es el exponente de pérdida de trayectoria, que es aproximadamente 2 en un espacio abierto.

Por ejemplo, si el RSSI_REF es -60 dBm (el RSSI a un metro), el RSSI medido es -70 dBm, y asumiendo un entorno de espacio libre donde n es 2, entonces la distancia sería calculada como:

distancia = 10 ^ ((-60 - (-70)) / (10 * 2)) = 10 ^ (10 / 20) = 10 ^ 0.5 ≈ 3.16 metros

Alternativas a este método que podríamos usar

  1. Wi-Fi RTT (Tiempo de Ida y Vuelta): Calcula la distancia basada en el tiempo que tardan los paquetes de datos en ir y volver entre dispositivos Wi-Fi, adecuado para interiores.
  2. NFC (Comunicación de Campo Cercano): Comunicación a muy corta distancia, útil para transacciones o identificación cuando los dispositivos están a pocos centímetros.
  3. RFID (Identificación por Radiofrecuencia): Detecta la presencia de etiquetas RFID cercanas, común en control de inventarios y seguridad.
  4. UWB (Banda Ultra Ancha): Muy precisa para medir distancias cortas, ideal para seguimiento en interiores y aplicaciones que requieren gran exactitud.
  5. Sonido: Puede utilizar señales de audio para calcular la distancia, pero es sensible a variables ambientales y ruido.
  6. Visión por Computadora: Estima la distancia a través de imágenes, requiriendo visión directa y siendo eficaz en entornos controlados.
  7. GPS (Sistema de Posicionamiento Global): Ofrece localización global con buena precisión al aire libre, pero con limitaciones en interiores.
  8. LIDAR (Detección de Luz y Rango): Mide distancias con alta precisión mediante láser, usado en topografía y vehículos autónomos.
  9. Infrarrojo: Permite comunicación a corta distancia y puede detectar proximidad, pero es limitado en funcionalidad y alcance.

Pero nosotros no vamos a usar esto… vamos a usar Bluetooth Low Energy o BLE.

Bluetooth Low Energy o BLE

Si vamos a la teoría pura y aburrida, pero necesaria, veremos que BLE se destaca como una opción para geolocalizar personas o dispositivos debido a su bajo consumo de energía Esto permite a los dispositivos funcionar durante largos periodos sin necesidad de recargar o cambiar baterías.

Además, BLE es una tecnología ampliamente adoptada en smartphones y dispositivos wearables, lo que facilita su integración en aplicaciones de geolocalización personales y comerciales. Su capacidad para medir la proximidad con una precisión razonable, ajustable mediante el cálculo del RSSI, la convierte en una herramienta versátil para una variedad de casos de uso, desde la localización de empleados en un entorno de trabajo hasta la búsqueda de dispositivos perdidos.

La infraestructura de BLE también permite la implementación de redes de balizas (beacons) que pueden servir para la orientación en interiores, donde las señales GPS no son efectivas. La combinación de estas características hace de BLE una solución robusta y eficiente para la geolocalización en una amplia gama de situaciones.

Vamos ahora a ver cómo podemos liarla, lo divertido, la chicha. Pero claro, para romper cosas primero había que ver como funcionaban.

Teatralidad y engaño, poderosas armas para el no iniciado, ¿pero somos iniciados no Bruce?

¿Es oro todo lo que reluce? Pues sinceramente, no. Es tan simple como usar una librería de Python y la imaginación que le queramos poner en el proceso de desarrollo. En nuestro caso queríamos meter una interfaz visual y fácil de usar para todo el mundo, independientemente de que sepan ejecutar una consola de comandos o no. Esto ha resultado un poco más tedioso a la hora de desarrollar pero hemos aprendido a hacer interfaces de forma básica en Python. La explicación en texto del código que luego podréis encontrar más abajo, sería la siguiente (haremos uso de la librería Bleak):

Escaneo de Dispositivos Bluetooth

El primer paso en cualquier interacción con dispositivos Bluetooth es detectar qué dispositivos están disponibles en el área. Esto se realiza mediante el escaneo, que busca señales BLE y recopila información sobre los dispositivos que las emiten.

Con bleak, el escaneo se realiza utilizando la función BleakScanner.discover(), que devuelve una lista de objetos BLEDevice. Cada uno de estos objetos contiene información vital sobre el dispositivo, como su dirección (MAC), nombre y RSSI (Received Signal Strength Indicator), que es una medida de la potencia de la señal del dispositivo.

El RSSI puede usarse para estimar la distancia entre el dispositivo y el receptor utilizando un modelo de propagación de señales, aunque esta estimación puede ser afectada por factores ambientales y, por lo tanto, debe tomarse como una aproximación.

Manejo de Conexiones

Una vez que se detecta un dispositivo, se puede intentar establecer una conexión con él. En bleak, esto se realiza creando una instancia de BleakClient con la dirección del dispositivo deseado y utilizando el método connect() para iniciar la conexión.

Pero sin entrar tanto en detalle y con un primer pequeño script veremos lo siguiente:

Esta es una primera versión del código y es la versión que vamos a compartiros a tod@s los que queráis cacharrear con la herramienta en vuestra casa. En nuestro caso esto fue un paso más y pudimos hacer pruebas intentando saber el nombre de los servicios activos así como intentar conectarnos al dispositivo. Esta parte no la vamos a compartir pero os animamos a trastear con ello.

Hay que decir que cuanto más le pidamos al programa más va a tardar en ejecutarse, lo cual supone mayor capacidad de procesamiento también.

En esta segunda foto tomada instantes después con el otro script, vemos que ahora hay alguien cerca con un reloj de Amazfit que antes no estaba (y que, además, tiene todas las propiedades disponibles aparentemente abiertas…). Interesante haber podido ver esto, porque así se comprueba que estas pruebas son realmente en directo. Como puede verse siempre sale cerca del punto central nuestro dispositivo «h3st4k3r». De esta forma vemos que la proximidad es bastante precisa con respecto al origen. En nuestro caso, tras múltiples pruebas, hemos podido comprobar que es una buena precisión, al menos dentro de una misma habitación.

Ya tenemos la fase de recolección y de escaneo realizadas y además hemos intentado una primera conexión de forma automática. Ahora solo quedaría ver si realmente podemos explotar alguna vulnerabilidad gracias a esta información, por ejemplo, saber la batería que tiene, enviar notificaciones, saber la marca y modelo lo cual nos ayuda a identificarlo mejor y mil cosas más… ¿qué se te ocurre a ti? ¡Déjanos tus comentarios!

Cómo puedo protegerme ante esto

Pues usando el sentido común y siguiendo algunas buenas prácticas, como por ejemplo:

  1. Desactivar Bluetooth: La forma más simple es desactivar la función Bluetooth en tus dispositivos cuando no se esté usando.
  2. Gestión de la Visibilidad: Configura tus dispositivos para que no sean «visibles» o «encontrables» para otros cuando no estés emparejando dispositivos intencionalmente.
  3. Control de Permisos de la Aplicación: Revisa y gestiona los permisos de las aplicaciones en tus dispositivos móviles. Asegúrate de que solo las aplicaciones en las que confías tengan permiso para acceder a tus servicios de localización.
  4. Actualizaciones de Seguridad: Mantén tus dispositivos actualizados con las últimas actualizaciones de software y parches de seguridad para protegerte contra vulnerabilidades conocidas.
  5. Aplicaciones de Seguridad: Utiliza aplicaciones diseñadas para detectar y alertar sobre intentos de rastreo o dispositivos sospechosos.
  6. Revisión de Configuraciones de Fábrica: Algunos dispositivos pueden venir con la configuración Bluetooth activada por defecto. Es importante revisar y ajustar la configuración según tus preferencias de privacidad.
  7. Evitar Balizas Bluetooth Desconocidas: Ten precaución con las redes de balizas en lugares públicos y evita interactuar con señales desconocidas.
  8. Uso de Funciones de Anonimato: Algunos sistemas de BLE tienen funciones para cambiar regularmente las direcciones MAC y otras identificaciones para hacer más difícil el rastreo.
  9. Cifrado y Autenticación: Asegúrate de que cualquier transferencia de datos realizada a través de Bluetooth esté cifrada y que los dispositivos que se conectan estén debidamente autenticados.
  10. Apagar la Localización en el Dispositivo: Cuando no necesites servicios basados en la ubicación, apaga la localización en tu dispositivo.

¿Dónde puedo encontrar el código para probar esto?

Lo primero, si has llegado hasta aquí, gracias, gracias por leernos y ser parte de esta comunidad. Agradecemos mucho vuestra compartición en redes sociales y vuestro apoyo, es nuestra única forma de saber que os gusta este contenido. Por ello, os dejamos el código para trastear aquí: https://github.com/h3st4k3r/bluetooth-proximity-detector/



4 comentarios en «Detector de proximidad Bluetooth o cómo encontrar a gente por sus dispositivos conectados»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *