miércoles, 25 de agosto de 2010

Vulnerabilidad routers telefónica

Antes de empezar, quiero decir que el siguiente artículo lo escribo a modo de divulgación, para advertir a todos aquellos usuarios que tengan routers proporcionados por telefónica. Todas las pruebas que he hecho han sido sobre mi propio router y routers cuyos dueños me han aurotizado a testear. Sólo pretendo demostrar la posibilidad de romper la clave de acceso para que los usuarios puedan prevenirlo, no quiero promover el acceso a redes ajenas lo cual es ilegal y cuya práctica no apoyo.


Detección del problema

El otro día estaba anotando la contraseña para acceder vía wifi a mi router proporcionado por telefónica. Todas las redes de telefónica se pueden detectar porque todas se llaman WLAN_XX siendo XX dos dígitos hexadecimales. Junto al router está anotada la dirección MAC del mismo. Me di cuenta de que ambas secuencias tienen mucho en común, os copio ambas para que lo veáis:

Dirección MAC: 00:01:c8:ec:34:f2
Clave del router: Z0001c8ef52204

Si quitamos la Z (con esto volveremos luego) del principio y comparamos el principio de ambas cadenas, podemos ver la similitud:

MAC: 0001c8ec34f2
Clave: 0001c8ef5204

Pero todavía hay más, el nombre de la red es WLAN_04. Curioso, ¿verdad? los dos dígitos que muestra el nombre de la red son misteriosamente los dos últimos dígitos de la clave:

Clave: 0001c8ef5204

Dado que la dirección MAC de un router se puede saber sin estar conectado a la red (por ejemplo, con Wireshark se pueden ver las MACs de los routers que están emitiendo).

Así pues, sin haber interaccionado con una red, podemos sacar 36 de los 48 bits que son su clave. Esto nos deja sin saber 12 bits, con lo cual, las posibles claves restantes son 2¹², es decir 4096, lo que desde el punto de vista de computación resulta risible. (En realidad la clave es ASCII por lo que serían más posibilidades, pero como sólo usa carateres ASCII que son dígitos hexadecimales podemos reducir mucho el número de posibilidades. Además, estos dígitos hexadecimales siempre van escritos en mayúsculas aunque en los ejemplos los ponga en minúsculas).


Poniéndonos en marcha

Con un script super simple podemos generar todas estas claves, a continuación os pongo un programita que he hecho en python, volcando su salida sobre un fichero podemos tener todas las posibles claves ahí guardadas.

(Véase el código bien tabulado, sobre todo en python)

import string

digitos_hexa = ['0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F']


for d1 in digitos_hexa:
for d2 in digitos_hexa:
for d3 in digitos_hexa:
print 'Z0001C8E' + d1 + d2 + d3 + '04'


Ejecutando este programa de la forma: python programa.py > diccionario ya tenemos las claves guardadas
.

Con esto, se podría hacer algún programita simple que intentara validar la clave, en un tiempo relativamente corto podríamos acceder (incluso no sería algo descarado ir probando a mano, en unos días podría dar resultado), pero como informáticos siempre intentamos buscar la solución óptima.

Los routers de imagenio por defecto usan encriptación WEP. Esta encriptación tiene sus vulnerabilidades (en las que no voy a entrar). Hace tiempo yo mismo probé a romper alguna clave pero el tiempo de cálculo es relativamente elevado (puede que hagan falta unas horas). Sin embargo, teniendo ya parte de la clave, esta tarea se puede hacer mucho más ligera.

Para poder romper la encriptación WEP, es bastante útil tener paquetes de datos generados en la red (los cuales, evidentemente, veremos encriptados). Con estos paquetes encriptados es más fácil sacar la clave. Podríamos capturar (de nuevo) paquetes con Wireshark pero hay herramientas que nos facilitan más el trabajo.

Para nuestros propósitos (nunca malignos, todo sea dicho) usaremos airmon, airodump y aircrack (herramientas fácilmente instalables. Además, todo lo que intenté hace años de romper WEP con las herramientas existentes encontes daba problemas con tarjetas Intel, en este caso, teniendo tarjeta intel, no he tenido ningún problema).

Lo primero es ejecutar:

sudo airmon-ng start wlan0

Esto crea una especie de interfaz de red virtual llamado mon0, que es sobre el que escucharemos.

Para ver un poco lo que pasa por el vecindario, ejecutaremos

sudo airodump-ng mon0

Esto nos mostrará un listado de MACs (que son los routers) y el tráfico que generan. Para poder romper la clave necesitaremos que haya tráfico de datos, cuando veáis que la columna #Data empieza a crecer es el momento de ponerse manos a la obra.
Para capturar el tráfico asociado a una MAC, basta con ejecutar:

sudo airodump-ng --bssid
00:01:c8:ec:34:f2 -w captura mon0

Poniendo como segundo argumento la MAC del router. Esto nos dará una pantalla parecida a la que daba el comando anterior solo que irá guardando el tráfico. Cuando veamos que los paquetes de datos son unos cuantos (a mí con 300 me ha valido de sobra) paramos el programa.

El programa habrá generado varios ficheros pero el que nos interesa es el que se llama captura-01.cap (o 0i si habéis ejecutado el programa varias veces, siendo i el número de ejecución)

Ya tenemos todo lo que necesitamos, ahora sólo queda ir probando las claves sobre el tráfico capturado hasta que demos con la correcta. Para ello utilizaremos el siguiente comando:

aircrack-ng -w diccionario captura-01.cap

Y ¡voilá! En mi caso ha tardado menos de un segundo en dar con la clave. Ya disponemos de acceso a la red.

Volviendo al tema de la letra inicial, en este caso hemos usado la Z, pero he leído que eso depende del modelo del router (en mi caso Zyxel). He leído que las posibles letras con los routers de telefónica son Z, X y C. Así que si falla la Z probad a generar el diccionario con alguna de las otras dos letras. Estas letras siempre van escritas en mayúsculas.

Hemos probado como romper la clave de este tipo de router en cuestión de minutos.


Recomendaciones para evitar el acceso ilegítimo a nuestra red

A continuación algunos consejos deducidos de esta vulnerabilidad para todos aquellos que tengan un router proporcionado por telefónica para no tener problemas:

  • Cambiar el nombre de la red: el hecho de que sepan que estamos usando un router de telefónica ya puede dar pistas, aunque siempre se puede saber el nombre del router, es algo que recomiendo (quitando por supuesto los dos últimos dígitos hexadecimales).
  • Cambiar la contraseña: para no complicarnos, si cambianos la contraseña entera mejor que mejor, además al ser ASCII no hace falta que pongamos todo dígitos hexadecimales.
  • Usar WPA o WPA2. Aunque tengamos en cuenta las consideraciones anteriores, WEP sigue siendo vulnerable (aunque lo harán menos vulnerable). Es mejor migrar la seguridad de la red a WPA o WPA2 que nos garantizarán mayor seguridad que WEP.