miércoles, junio 15, 2011

Un iPhone, un iPad, un rogue AP y un error de seguridad histórico

Una de las características más destacables que tiene el sistema iOS de Apple es su sencillez de uso. Esta manera de ser hace que para muchos usuarios sea una herramienta perfecta, que pueden aprender a utilizar de forma rápida, lo que es parte de la popularidad que ha adquirido el teléfono iPhone y el popular Tablet iPad.

Sin embargo, esta simplicidad, en muchos casos está reñida con la seguridad los usuarios y así se ha visto en varias ocasiones. El no poder configurar una política de carga de imágenes o no en los correos electrónicos personalizada por mensaje, el no poder ver el código original de un mensaje de correo electrónico o el que una página web pueda quitar la barra de direcciones en el navegador, abren vectores a los atacantes. Vectores, que en sistemas operativos con más solera, hace tiempo que son conocidos, por tener mucha historia ya tras de sí, y se configuran con cuidado.

Hoy voy a hablaros de otro vector de ataque clásico que ya es conocido, pero que iOS no configura correctamente, y es la política de conexión a redes conocidas, que puede dar como resultado un ataque Man in The Middle en WiFi por medio de un rogue AP, es decir, por un falso punto de acceso WiFi que simula ser la red “habitual” de la conexión.

El primer fallo: La lista de redes conocidas

Hay que destacar que la primera característica de falta de seguridad es la no posibilidad de ver cuál es la lista de redes que conoce un iPhone o un iPad. Esta lista se encuentra almacenada en un fichero que se encuentra en la ruta /private/var/Keychains/keychain-2.db, pero que no puede ser visualizada desde ninguna opción del dispositivo, lo que deja al usuario “ciego” ante esta configuración.


Figura 1: Conectar automáticamente a las redes conocidas

La única forma de eliminar una red conocida es encontrase cerca de ella, y mediante una opción “olvidar esta red”. En cualquier caso, frente a un ataque de Rogue AP, esto sería inútil, ya que utilizaría el nombre de una red que el usuario sí quiere tener en su configuración, lo que no ayuda en mucho.

La opción de "Preguntar al conectar" es una de las menos entendibles opciones de la WiFi, ya que, se seleccione preguntar o no, siempre hace referencia a nuevas redes y no, a las redes conocidas, a las que se conectará de forma automática.


Figura 2: En cualquier caso, conectar automáticamente a las redes conocidas

El segundo Fallo: ¿Cuál es la política de conexión a las redes conocidas?

Esta es una de las preguntas con la que más hemos estado jugando. Supongamos un entorno en el que nuestro usuario tiene un alto movimiento geográfico y se conecta a 20 redes conocidas con asiduidad.. ¿cuál es la política de conexión de redes que sigue iPad? En el caso de clientes Wifi de Ubuntu en la versión 8.0.4 utilizaba una política de orden alfabético, mientras que en Windows y las nuevas versiones de Linux se puede elegir el orden manualmente. En el caso de iOS hemos visto que aplica una política LIFO, es decir, la última red conectada es la que tiene prioridad, pero en ningún caso el usuario puede configurar esta política.

El tercer fallo: y más importante ¿Cómo reconoce a una red conocida?

Pues hemos podido constatar que esta política ha cambiado en las diferentes versiones, pero sigue siendo mala. En las versiones probadas inferiores a iOS 4.2.1, el reconocimiento de una red se hace solo por el SSID, es decir, únicamente por el nombre de la red. Esto abre muchos vectores de ataque, ya que bastaría con saber cuál es el nombre de la red utilizada en un entorno para crear una con el mismo nombre totalmente abierta, para que los usuarios de iPad, iPod Touch o iPhone con versiones anteriores se conecten automáticamente a ellas.

Lo curioso es que, ante la existencia de las dos redes en el mismo entorno físico, prevalece la que tiene más potencia de señal. Así, como se puede ver en este entorno, tenemos un iPad con 4.2.1 conectado a una red WPA2-PSK, en la que se puede ver el candadito.


Figura 3: iPad conectado a red segura

Creamos una red abierta, sin cifrado alguno ni autenticación, y lo que se consigue es iOS se desconecte de esa red y pase a conectarse al falso Rogue AP.


Figura 4: iPad se desconecta de la segura y se conecta a la insegura

Para iOS en versiones 4.3.1, hemos podido hacer las mismas pruebas, y esto no funciona de la misma manera, sin embargo, sigue abriendo un vector de ataque.

El cuarto Fallo: Reconocimiento de la red por nombre y descripción, pero no por el ESSID.

Una red puede identificarse por el SSID (nombre), el BSSID ( solo para un único punto de acceso) o el ESSID (Extended SSID), para aquellas redes que tiene más de un AP que da servicio al mismo SSID. Es por ello que si en un edificio hay muchos AP con el mismo nombre para la red WiFi, el equipo puede ir saltando de uno a otro con normalidad. Si una red es de infraestructura debe ser reconocida por su ESSID, sin embargo iOS en la versión 4.3.1 (la que hemos podido probar) permite conectarse a cualquier AP que tenga el mismo SSID y la misma configuración de cifrado y autenticación. Y esto es un fallo de seguridad.

¿Por qué?

Pues es un fallo porque cualquier miembro conectado conoce la configuración de la red, por lo que puede crear un rogue AP con la configuración esperada por un iPhone o un iPad y hacer un man in the middle perfecto.

¿Solución?

El primer paso, evidentemente es actualizar a la última versión de iOS todos los dispositivos, ya que el funcionamiento en 4.3.1 es mejor que en el resto de los casos. En el caso de las empresas, utilizar sistemas NIDS para detectar los AP que se conectan en los alrededores y en el resto de los entornos (aeropuertos, cafés, hogares)… tener mucho cuidadito, ya que, al no poderse ver las redes WiFi conocidas, es muy probable que alguna vez se haya conectado a alguna red Default, Public, Wifi, o similar, que pueda ser fácilmente suplantada.

Saludos Malignos!

5 comentarios:

  1. Cómo funciona Windows Mobile? Tiene las mismas opciones que has mencionado de Windows?

    ResponderEliminar
  2. la misma forma lo he comprobado con wm 6.5

    ResponderEliminar
  3. Android no lo hace mucho mejor, la verdad... es cuanto menos sorprendente ver que dispositivos tan avanzados obvian cosas como esta...

    A mi Android le da igual el BSSID/ESSID de la red, sólo mira el SSID para decidir si es una red conocida.

    La cosa es que recuerdo que al principio, Windows XP también lo hacía, aunque al final en las opciones avanzadas tenías las opción de forzar el BSSID.

    ResponderEliminar
  4. Al margen de terminales, marcas y que tengamos más o menos cariño hacia unos u otras... la comunidad de seguridad y, sobre todo, los profesionales que trabajan en seguridad nos enfrentamos con un riesgo GRAVE.

    Los usuarios de nuestras empresas y organizaciones quieren usar tablets, iPads, Galaxies, ... lo que quiere decir que van a presionar para que les permitan utilizarlos como elemento corporativo.

    Como normalmente, al que le gusta este tipo de aparato tiene más perfil VIP que otra cosa, no vas a tener mucha fuerza para oponerte, a no ser que tus VIP sean personas muy concienciada y con un alto nivel de cultura en seguridad (cosa rara, la verdad).

    Así que, te enfrentas a una serie de dispositivos que (lo podemos ver) son complicados de corporativizar, pero tu usuario lo quiere usar con documentos, correo y otras informaciones de empresa.

    Por supuesto, que sea muy simple de utilizar, que sea "transparente" y que ellos nunca tengan responsabilidad alguna si les roban una oferta de mil millones de euros que hayan dejado en el dropbox desde un iPad que se conecte al WiFi de la cafetería "Nikolai y Sergei Cafeterías asociadas"; al punto de acceso "Corporativo_WPA2, eso sí (aunque no ponga cifrado por ninguna parte).

    ¡Arrepentíos! Pues el fin de los tiempos se acerca (:DD)

    ResponderEliminar