domingo, 19 de enero de 2014

¿Estáis seguros que vuestra Wifi es segura?

Conocéis el dicho de “en casa del herrero, cuchillo de palo”? Pues el más claro exponente de ello soy yo.

Una parte de mi trabajo está dedicada a instalar/mantener/reparar sistemas de pago electrónico. Como podréis imaginar, la seguridad en estos sistemas es primordial. No me cabe en la cabeza que un TPE (terminal de pago electrónico) se pueda conectar al servidor de pago mediante una red Wifi abierta, por poner un ejemplo. Si pasáis por algún comercio de los que haya instalado (perdonar que no ponga nombres, pero el acuerdo de confidencialidad es importante) podréis comprobar que no os conectáis a la red Wifi ni aunque sepáis la clave.

El caso es que venía comprobando últimamente un descenso en la calidad de mi navegación por Internet. Hace ya meses que Frannoe publicó una entrada en la que describía el uso de una aplicación (Wifi Guard) que permitía saber quién estaba conectado a nuestra red (Aqui). Incluso está añadida en el Repo de DMDc. Y yo, tan pancho, sin usarla. Hasta que me cansé. Y me puse a revisar un poco mi instalación. De los equipos de mi mujer no voy a hablar. Ha leído el último post que publiqué y me ha echado una bronca de campeonato. Me ha prohibido hablar de ella en el Blog. Y como yo me casé para que me mandaran… pues eso.

Primero revisé los ordenadores de los niños. En el sobremesa del mayor, que tiene W7 (sin comentarios), encontré bastantes malwares y rootkits. Bueno, procedí a acordarme de los ancestros del Windows, y lo limpié. Ni quise mirar el historial de navegación... Ojos que no ven...

De su portátil estoy tranquilo. Tiene montado Linux. Y pasé al sobremesa de la niña. Ella tiene XP montado, y sólo lo usa para jugar en páginas de juegos on-line. Curiosamente, estaba limpio. Va a ser que el niño navega por sitios oscuros... Me apunto para otra restringir acceso a páginas “oscuras”.

Aún así, la cosa no iba todo lo bien que yo deseaba. Así que acudí al meollo de la cuestión, mi Wifi.

Hace ya unos años que se rompió el router que me dió mi proveedor. Llamé en su momento y después de una discusión de dos horas con el técnico de soporte, les mandé a buscar tréboles de cuatro hojas. Otro día entraré en detalles de cómo hablar con una Help-Desk.

El caso es que tenía otro router monopuesto en casa, así que lo utilicé y le conecté un Access Point para dar servicio Wifi. Hay varios métodos para asegurar una red Wifi. Lo primero de todo, lógicamente, asegurarla con una contraseña. Como ya debéis saber a estar alturas, utilizar encriptación WEP en la clave, es como poner un cerrojo en la puerta por la parte de fuera... 

Así que nos decantamos por encriptación WPA, o WPA2 si nuestro adaptador lo soporta. No es infalible, pero sólo existen ataques de fuerza bruta para desencriptarla, así que con poner una clave larga y complicada, estamos bastante seguros.

Hay muchos manuales por Internet que indican que se oculte el SSID de la red (el nombre que le ponemos a la red). La verdad es que eso no sirve para nada. Cualquier escaneo de redes wifi te mostrará la red, sin nombre, pero podréis ver la BSSID del emisor, que es por donde se atacan.

Por último, hablando de redes domésticas, podemos utilizar una ACL o Access Control List, que no es más que una lista de las MAC Address de los dispositivos a los que damos acceso a nuestra red. Así, si os compráis un nuevo dispositivo (tablet, smartphone, etc) y queréis conectarlo a la red, teneis que saber la MAC Address del dispositivo. 

Como en mi casa entran continuamente aparatos nuevos que voy probando, esto último lo tengo desactivado. Tampoco es la panacea de la seguridad, ya que cualquier atacante con unos conocimientos medios, puede “clonar” la dirección MAC de nuestra tarjeta de red cuando no estemos.

En fin, este no es un manual de configuración de redes Wifi. Os supongo ya enterados de cómo se hace.

Aquí fue donde me acorde del post de Frannoe. Lo ejecuté, y ... et voilà... Allí estaba el culpable. Un bonito ladrón de Wifi. Ea, asunto arreglado. Será hijo de mil p... Tengo un chorizo robándome la Wifi. Entenderme bien, no me molesta que se use mi ADSL. Yo lo hago con la de otros en montones de ocasiones, pero hago un uso responsable. Consulto correo, un par de páginas, y adiós muy buenas. No se me ocurrirá en la vida conectarme a una ADSL ajena para bajarme la última temporada de Big Bang Theory...

La verdad es que me quedé más perplejo que Frannoe con el Metro de W8. ¿ Cómo se me ha colado el mierdecilla este? Mi clave de acceso tiene 47 caracteres, mezcla mayúsculas, minúsculas, números, símbolos, y alguna palabra en bable… No me podía creer que me la hubiesen reventado. ¿Cuánto tiempo ha estado para descubrir la clave?

Podŕia haber acabado con la historia insertando autenticación por RADIUS, pero me parecía excesivo… Tener que montar un servidor para ello, la verdad es que no me apetecía nada. Bueno, pues cambio la clave, y listo. Genero una nueva, más larga y más complicada. ¡Anda, listillo… inténtalo ahora!

Pues a los cinco minutos ya estaba allí otra vez mi amigo… ¡Pero bueno! Este tío qué tiene en su casa, ¿el Deep Blue?

Pues no. El mierdecilla que me robaba la Wifi (y digo me robaba, porque ya lo he echado, dejándole un regalito...), lo hacía gracias a que los desarrolladores no se pueden estar quietos… No conocen la primera ley de la informática: Si funciona, no toques nada. Así que en el 2007 (como véis, bastante reciente), como la cosa iba bien, se dedicaron a desarrollar un nuevo estándar, para “facilitar al usuario la conexión a una red Wireless con encriptación WPA2”... Sin palabras...

A este engendro lo llamaron WPS, que son las iniciales de Wifi Protected Setup. En pocas palabras, WPS es un mecanismo que se encarga de configurar los dispositivos para conectarse a una red wireless, minimizando la intervención del usuario. Define cuatro tipos de configuraciones distintas para realizar el proceso de autenticación: USB, NFC, PBC y PIN

USB se refiere a que las credenciales se transfieren al dispositivo a través de dicho puerto.
NFC se refiere al intercambio de información mediante radiofrecuencia. Es decir, acercamos por ejemplo el smartphone al Access Point, y se transfieren las credenciales. El alcance es muy corto, 20-30 cms.
PBC está referido a que el proceso de autentificación se produce al pulsar un botón físico en el Access Point.

Y llegamos al meollo de la cuestión: el PIN (Personal Identification Number).

Pues sí, resulta que con un simple número PIN, podemos conectarnos a nuestra red Wifi. En sí no parecería malo, pero es que salió a la calle con una vulnerabilidad importante; tanto, que a día de hoy sigue sin resolverse, debido a cómo está construído. ¿No es para correrlos a gorrazos?

Esta vulnerabilidad permire conectarse a cualquier red Wifi que tenga activado WPS en unas pocas horas. ¿No os lo creéis? Vale, como soy de la opinión que el movimiento se demuestra andando, vamos a ver en este post cómo averiguar la clave WPA2 de mi Access Point.

ACLARACION: Antes de escribir este post, estuve hablando con Frannoe. Es evidente que a partir de aquí este post se convierte en un manual de crackeo de claves WPA/WPA2. Frannoe me ha hecho ver que no es distinto lo que voy a hacer yo, que lo que se hace en multitud de webs, donde se publican los password por defecto de determinado tipo de routers, o incluso aplicaciones para descubrirlos. Además, yo lo voy a utilizar para enseñaros cómo protegeros de esta vulnerabilidad. Si alguien lo utiliza para lo que no debe, allá su conciencia. Lo que tiene que hacer la gente es leer este blog, y así no hay problemas.

Bien, para saber cómo funciona el procedimiento de "descubrir" la clave, tenemos que conocer cómo funciona el proceso de autentificación. Vamos a ver si soy capaz de explicarlo sin aburriros. Vamos a centrarnos en la última opción de conexión descrita, utilizando el número PIN. A su vez, este sistema se divide en dos, que se pueden defiir como registro interno y registro externo.

En el registro interno, a través de una interface Web, introducimos en el router el número PIN del dispositivo a conectar, y entre ellos se encargan de configurarse adecuadamente. A priori, una excelente idea, y no pongo objeciones a ello. La cagada viene ahora, con el registro externo.

En él, introducimos el número PIN del router en el dispositivo que queremos conectar. El dispositivo se encarga de comunicarse con el router y darle el PIN. El router lo reconoce, y le transmite las credenciales. ¿A que parece bueno? PUES NO. Si lo haces, hazlo bien. Me explico.

El descubrimiento de la clave se realiza con un ataque de fuerza bruta. Como es un número, no necesitamos un diccionario de palabras, se generan los números secuencialmente, y a correr.

[Frannoe dixit]
Pero… ¿de cuantos números estamos hablando?

[Jose respondere]
El código PIN de un dispositivo es de 8 dígitos. Bueno, miento. El octavo dígito es de control, un check-sum de los 7 anteriores.

[Frannoe dixit] ¿8 dígitos? ¿Estamos hablando de un número que va del 0 al 99.999.999? Son 100 millones de combinaciones…. Eso tarda un poco, ¿no?

[Jose respondere]
Un poco no, tarda un huevo... Pero vaya, que seguro que en menos de una semana está listo. Pero no me interrumpas, que sigo.

Aquí viene la cagada de los desarrolladores. Cuando se produce la autentificación PIN, se realiza en dos pasos, dividiendo el PIN en dos grupos de 4 dígitos. Primero se verifica que la primera mitad es correcta, y una vez verificada, se procede a verificar la segunda mitad del PIN...

Estos tíos estaban fumaos, fijo. Acaban de reducir las combinaciones del PIN de 100.00.000 millones a 20.000 e incluso menos... Fijaos bien. Primera parte del código PIN: 4 dígitos (o 10.000 combinaciones, si incluímos el 0000). Segunda parte, 3 dígitos, ya que el último dígito es una suma de control. O lo que es lo mismo, 1000 combinaciones, si incluimos al 0. Hemos pasado de 100.000.000 millones a 11.000... Si yo hago algo parecido en mi trabajo, me corren a gorrazos, amén de mandarme a la p... calle, claro.

[Frannoe dixit]
Entonces, ¿de cuanto tiempo estamos hablando?

[Jose respondere]
Pues mira, esto no es una ciencia exacta. El proceso de autentificación tarda de 0.5 a 3 segundos por clave en condiciones óptimas, ya que una vez verificado el PIN, hay que generar la key que se devuelve al dispositivo, y otros procesos. El caso es que por eso introdujeron un PIN tan bajo, y sólo numérico. Pero echando unos cálculos simples, podemos asegurar que en unas 4-5 horas tenemos el código PIN.

[Frannoe dixit]
Joooder…. Pero el router hará algo si ve que estamos intentando hackear la clave, ¿no?

[Jose respondere]
Hombre... Qué te diría yo para tenerte tranquilo... Pues queee... NO.
El WPS se implantó allá por el 2007. Y esta vulnerabilidad fue descubierta por Stefan Viehböck en el 2011. Ahí tienes 4 años de limbo. Además, lo único que se puede hacer es implementar un tiempo de espera después de cada n intentos fallidos, para hacer más largo el proceso, ya que el PIN del router o Access Point no se puede cambiar... Y eso en los routers y Access Point nuevos. En los antiguos, hay que actualizar el firmware... ¿Conoces a mucha gente que actualice el firmware de su router?

[Frannoe]
¡Pues desactivo el WPS!

[Jose respondere]
¡Coño Fran! ¡¡Te acabas de cargar mis conclusiones!! ¿Ves por qué no quiero que me preguntes en medio de un post?

[Frannoe dixit]
Vaaale, vaaale... Perdona... Pero habías dicho que lo ibas a demostrar, ¿no?

[Jose respondere]
Venga, va... al lío.

¿Qué necesitamos para “descubrir” el PIN de nuestro router o Access Point? Pues una serie de paquetería, pero tampoco para matarse. Alguna está en los repos, y otra hay que bajársela y compilarla o buscar el deb ya compilado. En concreto, tenemos que tener instalado aircrack-ng (que se descarga desde aquí para versiones de 32 bits o de aquí para versiones de 64 bits),  y reaver (que se encuentra en los repos y lo podemos instalar desde synaptic).



Así que pasamos a nuestro router, en el que se supone que tenemos configurada una clave WPA/WPA2 segura:


En esta otra imagen, tenéis la pestaña de WPS. Como se puede apreciar, no existe opción para cambiar el PIN del router, o desactivar esa opción. Sólo podemos desactivar todo el sistema WPS.


Venga, que se hace tarde. Abrimos una consola y ponemos nuestra tarjeta de red en modo monitor. Eso se hace con el comando airmon-ng start wlan0, en mi caso.


Los errores son típicos y tienen fácil solución, pero como he avisado que esto no es un manual de crackeo, no voy a entrar a describir cómo hacerlo funcionar.

Una vez puesta mi tarjeta en modo monitor, pasamos a escanear las redes a las que tenemos acceso. Para ello, desde consola, tecleamos airodump-ng mon0


Bien, ya tenemos los datos que necesitamos para proceder a preguntarle amablemente a nuestro router (como mucho, 11.000 veces), si el código PIN que le mandamos es correcto.

Nos apuntamos la BSSID de la red en cuestión y el canal por el que transmite. Y desde consola, tecleamos reaver -i mon0 -b [BSSID] -c [CANAL] -a


Y vemos cómo va trabajando. El mismo proceso, unas dos horas después, antes de irme a la cama...


Y a la mañana siguiente...


...vemos como nos indica el PIN del router, y la clave WPA para poder conectarnos a la red.

Podéis comprobar que el PIN es 21846267. Eso quiere decir que ha probado 2184 PIN's hasta dar con la primera mitad, y 626 hasta dar con la segunda. Total, 2810 combinaciones. Tiempo, menos de 5 horas. Ya puedes cambiar la clave WPA, que como yo ya sé el PIN, me vuelvo a conectar a los cinco minutos.

Conclusión. ¡¡¡ Desactivar el WPS insensatos!!!

No hay comentarios:

Publicar un comentario