Wild Wild WiFi "Dancing with Wolves": 2.- SSID Pinning
Continuando el trabajo realizado años atrás con la herramienta Mummy en el paper de "Living in the jungle", y viendo cómo había evolucionado el mundo de las redes Wi-Fi, decidimos hace casi un año probar una idea. En este caso consistía en modificar el cliente Wi-Fi para NO conectarse a redes Wi-Fi cuando estas estuvieran lejos de la ubicación donde se conectaron inicialmente.
El objetivo de esta protección es evitar que una red Wi-Fi almacenada en la "Lista de Redes Preferidas" en un sistema operativo - móvil o de escritorio - hiciera una conexión de manera automática. La pregunta que nos surgía era sobre cómo resolver esta comprobación.
3.- La comprobación de la ubicación
La primera opción, evidente, es utilizar el servicio GPS que viene en los smartphones. Crear un cliente Wi-Fi para un smartphone que almacene la ubicación GPS cuando se conecta por primera vez a una red Wi-Fi, y comprobar la ubicación GPS cuando el terminal quiere conectarse automáticamente parecía una solución muy directa. Si la distancia entre la ubicación GPS de la primera conexión y la ubicación GPS actual fuera mayor que un umbral, entonces el cliente Wi-Fi cancelaría la conexión.
Sin embargo, es conocido que el sistema GPS es susceptible a un ataque de GPS Spoofing, como ya vimos en el trabajo que hizo JAEP Erratum con la suplantación de las ubicaciones en un terminal iPhone. Se puede ver en este vídeo cómo realizando un ataque SDR/RTL es posible configurar el GPS a gusto de cualquier posible adversario remoto.
Figura 12: Ataque GPS Spoofing a un terminal iPhone
No obstante, existen más formas de situar un determinado terminal sin utilizar el servicio GPS, como ya hemos visto en el pasado. En la conferencia de "You are where you are" yo recorría todos ellas en el año 2016. Estas podrían ser:
Figura 13: You are where you are
- Sistema GPS en smartphone: Disponible en terminales iOS o Android. Ya comentado.
- Dirección IP pública de conexión: Existen bases de datos de Geo-Localización IP en las que se conoce dónde se encuentra una determinada dirección IP. Si el AP legítimo da una dirección IP fija de conexión a Internet, se puede utilizar ésta como forma de ubicar dónde se encuentra el cliente Wi-Fi. Como ejemplo de uso, cuando el iPad de Steve Jobs fue robado de su casa, se localizó al ladrón por medio de la dirección IP de conexión que utilizó dicho iPad para conectarse a Apple.
- Wardriving Wi-Fi: La opción que utilizan los sistemas operativos iOS y Android para ubicar correctamente dónde se encuentra un terminal, se basa en analizar los SSID/BSSID próximos al terminal que se quiere localizar. Esa información se envía una base de datos de Wardriving que ubica las redes vistas en una posición GPS del mapa. Además, cada terminal iOS y Android reporta todas las redes Wi-Fi que ve con su ubicación GPS para mantener la base de datos actualizada. Herramientas como iSniff-GPS explicaban este funcionamiento en detalle para iOS.
Figura 14 : iSniff-GPS ubica tu posición en un mapa por las redes Wi-Fi |
- Antenas de conexión de telefonía móvil: Una de las formas más seguras de saber dónde se encuentra un terminal móvil en concreto es conocer a qué antena de la red de telefonía móvil está conectado y con que potencia (lo que indica más o menos la distancia a la antena). Esto, con herramientas como Signal de Cydia se podría utilizar para ubicar un dispositivo.
- Patron de descarga de baterías: Este trabajo, titulado PowerSpy, se basa en el uso de analítica predictiva con técnicas de Machine Learning. La idea es entrena un sistema con un montón de terminales móviles haciendo rutas por la ciudad y reportando dos valores (carga de batería y ubicación GPS). Una vez entrenado el sistema, el algoritmo de ML es capaz de, dado un patrón de descarga de batería (es decir, la carga inicial y los delta de descarga a lo largo del tiempo), devolver la ruta GPS que ha seguido por la ciudad.
Figura 15: PowerSpy |
Se basa en que, dependiendo lo cerca o lejos que estén los terminales de las señales de telefonía móvil se emite con más fuerza o menos, la señal de conexión a la red de telefonía móvil, lo que incide en un consumo mayor o menor de batería.
Vistas todas estas técnicas, un cliente Wi-Fi avanzado podría utilizar diferentes mecanismos para asegurarse de que está conectándose al mismo AP al que se conectó inicialmente y no a uno falso con los mismo datos que el cliente Wi-Fi que viene por defecto en el sistema tomaría como legítimo. Y por eso trabajamos en el concepto de SSID Pinning.
4.- Las protecciones por redes vecinas y BSSID
Con la idea de enriquecer la información que un cliente Wi-Fi almacena de una red cuando se conecta a ella por primera vez, para poder verificarla cuando el sistema se conecte automáticamente por ser parte de las Preferred Network List comenzamos a trabajar en parámetros fácilmente verificables, como almacenar el BSSID (protección que los sistemas operativos Windows tenían al principio y luego quitaron), o el del Espectro de redes Wi-Fi vecinas.
El concepto de Espectro de redes Wi-Fi vecinas es fácil de explicar. En el punto anterior se explica cómo un dispositivo con iOS o Android envía las redes Wi-Fi vecinas - es decir, las que ve en su alcance - a una base de datos centralizada para saber exactamente dónde está y mantener activa la base de datos. En ese proceso se utilizan los nombres de las redes SSID, los BSSID y las ubicaciones GPS para determinar la posición exacta.
En nuestro caso, no contamos con la base de datos centralizada de Wardriving, pero sí que el cliente puede guardar el espectro de todas las redes Wi-Fi que ve alrededor, con su SSID/BSSID y la potencia de señal. Esto sería una lista de redes vecinas que estarían cerca de la red Wi-Fi a la que el cliente se conecta de forma legítima, y podrá utilizarse como parámetro de seguridad la próxima vez que el sistema operativo quiera auto-conectarse a esta red Wi-Fi. Si el Espectro de redes Wi-Fi vecinas cambia sustancialmente, entonces no se debería realizar la conexión automática.
5.- SSID Pinning
****************************************************************************
- Wild, Wild, WiFi: 1.- Mummy
- Wild, Wild, WiFi: 2.- SSID Pinning
- Wild, Wild, WiFi: 3.- PsicoWifi
- Wild, Wild, WiFi: 4.- WEP/WPA*-TOTP
- Wild, Wild, WiFi: 5.- WEP/WPA/WPA2-TOTP-Biometry
****************************************************************************
El concepto de Pinning es ya muy conocido en el mundo de la seguridad informática. El Certificate Pinning es uno de los mecanismos de seguridad más utilizados por apps y/o navegadores para evitar utilizar certificados digitales falsos en una conexión SSL. En el mundo de las redes Wi-Fi podíamos hacer algo similar, y a la hora de realizar la primera conexión y meter una red Wi-Fi en la Lista de Redes Preferidas, pinnear, o guardar, una serie de parámetros para verificar la autenticidad de la red Wi-Fi cuando en el futuro se vaya a realizar una conexión automática.
En la PoC que creamos, y veremos en la siguiente parte de este
artículo, utilizamos valores configurables por el usuario, pero si se
detectan cambios significativos, el cliente Wi-Fi no permite la conexión
automática.
Saludos Malignos!
****************************************************************************
- Wild, Wild, WiFi: 1.- Mummy
- Wild, Wild, WiFi: 2.- SSID Pinning
- Wild, Wild, WiFi: 3.- PsicoWifi
- Wild, Wild, WiFi: 4.- WEP/WPA*-TOTP
- Wild, Wild, WiFi: 5.- WEP/WPA/WPA2-TOTP-Biometry
****************************************************************************
No hay comentarios:
Publicar un comentario