Introducción
A la hora de comprobar la vulnerabilidad del WPA, a día de hoy continúa siendo imposible de romper el cifrado. En cuanto a puntos débiles, el ataque contra la clave PSK es la práctica habitual, donde se centran los programas como Aircrack y coWPAtty.
Así pues, si el sistema goza de buena robustez en la actualidad, nos planteamos... hay algún otro punto débil que afecte el sistema? Pues si, estudiar el proceso de generación de los datos preconfigurados en los equipos subministrados por los fabricantes y/o ISPs.
Hay un dato relevante para este planteamiento: La mayoría de gente que dispone de una red inalámbrica mantiene los parámetros preconfigurados en los equipos, tanto WEP/WPA, ya sea por el desconocimiento de la materia, o simplemente por dejadez. Y si no, para comprobarlo basta con hacer un escaneo de redes en el que observarás que un alto porcentaje de las redes encontradas mantienen los parámetros de fábrica o establecidos por el ISP en su ESSID, lo que da a pensar que con la contraseña pasa lo mismo.
Con esto, pensaréis que los fabricantes y/o ISPs utilizan un proceso muy complejo para la generación de estos parámetros, con el fin de evitar que toda la fortaleza del protocolo de cifrado (al menos en el WPA) se vea mermada por culpa de este proceso. Pues no es del todo así.
De todos es conocido la fragilidad de los algoritmos de generación de estos datos en redes tipo como las Wlan-XX, Dlinkwireless, adsl-xxxx, ..., que han llevado a la generación de aplicaciones que utilizan la fuerza bruta y/o la aplicación inversa del algoritmo facilitando el descubrimiento de la clave.
En este caso, nos propusimos aplicar esta prueba en las redes WEP/WPA SpeedTouchXXXXXX de routers del fabricante Thomson.
El protagonista: Router Thomson.
Como veremos, en este caso la fragilidad en la implementación de los datos preconfigurados afecta al router, con lo que puede verse afectado no uno solo, sino otros ISPs e incluso de otros países.
Estas redes son generadas por routers Thomson modelos 580i i 585v6. A la vista del proceso de instalación y configuración de estos routers, se aprecia que en el propio software se encontraba el algoritmo para la generación de los datos preconfigurados. En este caso, el único dato introducido durante el proceso que haga única una red, es el número de serie del router. Esto ya da una pista importante.
Anteriormente, había leído algo sobre Kevin Devine, sobre un descubrimiento similar que había hecho en el caso de las redes Eircom, en las que había descifrado el algoritmo que utilizaba para la generación de la clave WEP con que vienen configuradas.
Por lo que me puse en contacto con el, le expuse el caso, y nos pusimos a investigar. Mediante ingeniería inversa, Kevin pudo establecer un primer apunte de cómo eran generados los parámetros basándose en el número de serie. A partir de ahí, era necesario disponer de un router para las "practicas", dado que si no el programa de instalación se paraba.
Así que me puse a buscar un "donante". Gracias a Pazienzia, dispusimos de uno. Luego nos dimos cuenta que hubiera ido bien enviarle también la tarjeta wifi usb que acompaña el router (ver texto completo de Kevin), pero no fue necesario dado que el asunto tenía expectación y contó también con la colaboración de otra gente. A partir de aquí, la cosa fue rodando y rodando...
El algoritmo al descubierto. Caso redes SpeedTouchXXXXXX.
Como he dicho, se pudo comprobar que la base del proceso es el número de serie. Así que, vamos a analizar por ejemplo CP0615JT109 (53). De las observaciones realizadas se llegó al siguiente planteamiento:
CP YY WW PP XXX (CC)
Donde, que significa cada cosa?...
YY es el año de fabricación. ( 2006 ) ?
WW es la semana del año. ( 15 ) una semana de Abril ?
PP es el código de producción/fabricación. ( JT ) ?
CC es el código de configuración. ( 53 ) ? del estilo 00 - ZZ (0-9/A-Z)
Sobre el valor XXX, solo especular. Quizá representa el número de unidad?
Con esto, y tomando como ejemplo "CP0615JT109 (53)" el proceso es el siguiente:
Se eliminan los valores CC y PP del número de serie
"CP0615109"
Convertimos los valores de XXX a hexadecimal.
"CP0615313039"
Procesamos mediante el algoritmo SHA-1
742da831d2b657fa53d347301ec610e1ebf8a3d0
Los últimos 3 bytes hexadecimales se convierten en una cadena ASCII de 6 bytes, los añadimos a la palabra "SpeedTouch", con lo que tenemos el ESSID por defecto.
"SpeedTouchF8A3D0"
Los primeros 5 bytes hexadecimales se convierten en una cadena ASCII de 10 bytes, con lo que tenemos la clave WEP/WPA por defecto.
"742DA831D2"
Y esto es todo...
Recuperación.
El método desarrollado aquí utilizando la fuerza bruta es un poco simple... pero suficiente por el momento. Se utilizan los datos del ESSID para averiguar el hash entero, mediante la aplicación del algoritmo sobre los posibles números de serie y por comparación.
Teóricamente, con los 3 octetos del ESSID en el caso de estas redes, no se requieren más de 2 intentos para tener acceso satisfactoriamente a la red.
En casos en que solo se utilizan 2 octetos en el ESSID se generan muchas más claves potenciales, así como tentativas a realizar (siendo una media de 80).
Aún así, esto mejora notablemente las posibilidades a un atacante de acceder al router, aún protegido con WPA - más si este puede capturar un handshake y utiliza el Aircrack, Cain&Abel o incluso el coWPAtty en modo offline para descifrarlo.
En todo caso, hay que recordar que esta herramienta la podemos utilizar para que podamos comprobar en nuestra red este punto débil, o con el permiso del propietario.
La herramienta: stkeys (actualizado: 19/04/08)
- Descarga del código fuente en español (compilable en linux/windows):
http://download.wifislax.com:8080/stkeys_ES_src.zip
m5d: 6472d51a88010754756154d93d7fb2be
- Linux (compilado+instalador+lanzador). Desde cónsola teclead:
- Windows (compilado):
http://download.wifislax.com:8080/SpeedTouchKeys-v0.1.zip
MD5: 2b5ea7d4539ea5b02fc8ea569e5566f6
(ver "notas del programa" al final de este mensaje, sobre cambios de parámetros antes de compilar)
Para compilar el código en linux, usar gcc:
Es posible que al compilar os lance unos errores tipo "implicit declaration...", que no afectan al proceso. Destacar que en el código se ha utilizado la implementación del algoritmo OpenSSL SHA-1, que es por lo que realiza el proceso muy rápido.
Al ejecutar el programa, os saldrá:
Caso práctico
Ejemplo de uso en un router Thomson modelo ST585v6 con ESSID "SpeedTouchF8A3D0":
En este ejemplo, la clave correcta es la obtenida en la primera opción.
Créditos:
En primer lugar, a Kevin Devine, por el fantástico trabajo realizado para hallar el algoritmo y desarrollar esta aplicación. En el siguiente enlace, podréis hallar (en inglés) un "howto" del proceso técnico y otros datos. Incluye una animación en flash en la que se comprueba la velocidad del proceso:
http://weiss.u40.hosting.digiweb.ie/stech/
También agradecer a Pazienzia (miembro del foro Elhacker.net) por prestarnos su "olvidado" router para las pruebas, así como a Renzo y bonebag por el adaptador USB.
Y por último, a los foros y foreros de seguridadwireless y Elhacker.net, que sin la aportación de los datos necesarios no hubiera sido posible contrastar dicha información, así como a Hwagm por prestarme un hueco para alojar el programa; y por supuesto, a la esencia de Pianista
Notas sobre el proyecto:
Este proyecto continúa vivo. A los que tengáis ganas de investigar el tema mas a fondo, en el enlace indicado en los créditos encontraréis curiosidades como que se han hallado más algoritmos, parece que relacionados con el sistema de cifrado WEP y posiblemente antiguos.
Es por esto que aunque lo aquí desarrollado sirve para redes WEP o WPA, es posible que para las WEP no sea 100% fiable.
De todas formas, para comprender un poco el alcance del proyecto, recomiendo visitar el siguiente link:
http://www.gnucitizen.org/blog/default-key-algorithm-in-thomson-and-bt-home-hub-routers/
Notas del programa: (actualizado 17/04/08)
No lleva control de versiones. Considérala la versión 0. Si hay futuras actualizaciones se indicará en ellas.
Esta versión en español es idéntica a la inglesa, salvo en un punto: por defecto está implementada para tener en cuenta el período 2005-2007 en cuanto a la fabricación del router (mientras que la inglesa solo abarca hasta el 2006).
Aunque es poco probable que sea aplicable el año 2007, me he permitido el lujo de ampliarlo; el tiempo de más empleado en un pc normal en procesar el código por añadirlo creo que compensa el asegurar la obtención de la clave (estamos hablando de tardar 5sg a tardar 8sg, y no implica obtener más falsos positivos).
Este parámetro es modificable. Basta antes de compilar de realizar el cambio en el fichero stkeys.c
17/04/08.- Confirmado que hay modelos del 2004. Por lo tanto, recompilad el código, modificando en el stkeys la línea donde se introduce el parametro de los años, y recompilad:
A la hora de comprobar la vulnerabilidad del WPA, a día de hoy continúa siendo imposible de romper el cifrado. En cuanto a puntos débiles, el ataque contra la clave PSK es la práctica habitual, donde se centran los programas como Aircrack y coWPAtty.
Así pues, si el sistema goza de buena robustez en la actualidad, nos planteamos... hay algún otro punto débil que afecte el sistema? Pues si, estudiar el proceso de generación de los datos preconfigurados en los equipos subministrados por los fabricantes y/o ISPs.
Hay un dato relevante para este planteamiento: La mayoría de gente que dispone de una red inalámbrica mantiene los parámetros preconfigurados en los equipos, tanto WEP/WPA, ya sea por el desconocimiento de la materia, o simplemente por dejadez. Y si no, para comprobarlo basta con hacer un escaneo de redes en el que observarás que un alto porcentaje de las redes encontradas mantienen los parámetros de fábrica o establecidos por el ISP en su ESSID, lo que da a pensar que con la contraseña pasa lo mismo.
Con esto, pensaréis que los fabricantes y/o ISPs utilizan un proceso muy complejo para la generación de estos parámetros, con el fin de evitar que toda la fortaleza del protocolo de cifrado (al menos en el WPA) se vea mermada por culpa de este proceso. Pues no es del todo así.
De todos es conocido la fragilidad de los algoritmos de generación de estos datos en redes tipo como las Wlan-XX, Dlinkwireless, adsl-xxxx, ..., que han llevado a la generación de aplicaciones que utilizan la fuerza bruta y/o la aplicación inversa del algoritmo facilitando el descubrimiento de la clave.
En este caso, nos propusimos aplicar esta prueba en las redes WEP/WPA SpeedTouchXXXXXX de routers del fabricante Thomson.
El protagonista: Router Thomson.
Como veremos, en este caso la fragilidad en la implementación de los datos preconfigurados afecta al router, con lo que puede verse afectado no uno solo, sino otros ISPs e incluso de otros países.
Estas redes son generadas por routers Thomson modelos 580i i 585v6. A la vista del proceso de instalación y configuración de estos routers, se aprecia que en el propio software se encontraba el algoritmo para la generación de los datos preconfigurados. En este caso, el único dato introducido durante el proceso que haga única una red, es el número de serie del router. Esto ya da una pista importante.
Anteriormente, había leído algo sobre Kevin Devine, sobre un descubrimiento similar que había hecho en el caso de las redes Eircom, en las que había descifrado el algoritmo que utilizaba para la generación de la clave WEP con que vienen configuradas.
Por lo que me puse en contacto con el, le expuse el caso, y nos pusimos a investigar. Mediante ingeniería inversa, Kevin pudo establecer un primer apunte de cómo eran generados los parámetros basándose en el número de serie. A partir de ahí, era necesario disponer de un router para las "practicas", dado que si no el programa de instalación se paraba.
Así que me puse a buscar un "donante". Gracias a Pazienzia, dispusimos de uno. Luego nos dimos cuenta que hubiera ido bien enviarle también la tarjeta wifi usb que acompaña el router (ver texto completo de Kevin), pero no fue necesario dado que el asunto tenía expectación y contó también con la colaboración de otra gente. A partir de aquí, la cosa fue rodando y rodando...
El algoritmo al descubierto. Caso redes SpeedTouchXXXXXX.
Como he dicho, se pudo comprobar que la base del proceso es el número de serie. Así que, vamos a analizar por ejemplo CP0615JT109 (53). De las observaciones realizadas se llegó al siguiente planteamiento:
CP YY WW PP XXX (CC)
Donde, que significa cada cosa?...
YY es el año de fabricación. ( 2006 ) ?
WW es la semana del año. ( 15 ) una semana de Abril ?
PP es el código de producción/fabricación. ( JT ) ?
CC es el código de configuración. ( 53 ) ? del estilo 00 - ZZ (0-9/A-Z)
Sobre el valor XXX, solo especular. Quizá representa el número de unidad?
Con esto, y tomando como ejemplo "CP0615JT109 (53)" el proceso es el siguiente:
Se eliminan los valores CC y PP del número de serie
"CP0615109"
Convertimos los valores de XXX a hexadecimal.
"CP0615313039"
Procesamos mediante el algoritmo SHA-1
742da831d2b657fa53d347301ec610e1ebf8a3d0
Los últimos 3 bytes hexadecimales se convierten en una cadena ASCII de 6 bytes, los añadimos a la palabra "SpeedTouch", con lo que tenemos el ESSID por defecto.
"SpeedTouchF8A3D0"
Los primeros 5 bytes hexadecimales se convierten en una cadena ASCII de 10 bytes, con lo que tenemos la clave WEP/WPA por defecto.
"742DA831D2"
Y esto es todo...
Recuperación.
El método desarrollado aquí utilizando la fuerza bruta es un poco simple... pero suficiente por el momento. Se utilizan los datos del ESSID para averiguar el hash entero, mediante la aplicación del algoritmo sobre los posibles números de serie y por comparación.
Teóricamente, con los 3 octetos del ESSID en el caso de estas redes, no se requieren más de 2 intentos para tener acceso satisfactoriamente a la red.
En casos en que solo se utilizan 2 octetos en el ESSID se generan muchas más claves potenciales, así como tentativas a realizar (siendo una media de 80).
Aún así, esto mejora notablemente las posibilidades a un atacante de acceder al router, aún protegido con WPA - más si este puede capturar un handshake y utiliza el Aircrack, Cain&Abel o incluso el coWPAtty en modo offline para descifrarlo.
En todo caso, hay que recordar que esta herramienta la podemos utilizar para que podamos comprobar en nuestra red este punto débil, o con el permiso del propietario.
La herramienta: stkeys (actualizado: 19/04/08)
- Descarga del código fuente en español (compilable en linux/windows):
http://download.wifislax.com:8080/stkeys_ES_src.zip
m5d: 6472d51a88010754756154d93d7fb2be
- Linux (compilado+instalador+lanzador). Desde cónsola teclead:
Citar
wget http://www.wifiway.org/stkeys/install.sh.gz
gzip -d install.sh.gz
chmod +x install.sh
./install.sh
- Windows (compilado):
http://download.wifislax.com:8080/SpeedTouchKeys-v0.1.zip
MD5: 2b5ea7d4539ea5b02fc8ea569e5566f6
(ver "notas del programa" al final de este mensaje, sobre cambios de parámetros antes de compilar)
Para compilar el código en linux, usar gcc:
Citargcc -fomit-frame-pointer -O3 -funroll-all-loops stkeys.c sha1.c -ostkeys
Es posible que al compilar os lance unos errores tipo "implicit declaration...", que no afectan al proceso. Destacar que en el código se ha utilizado la implementación del algoritmo OpenSSL SHA-1, que es por lo que realiza el proceso muy rápido.
Al ejecutar el programa, os saldrá:
Caso práctico
Ejemplo de uso en un router Thomson modelo ST585v6 con ESSID "SpeedTouchF8A3D0":
En este ejemplo, la clave correcta es la obtenida en la primera opción.
Créditos:
En primer lugar, a Kevin Devine, por el fantástico trabajo realizado para hallar el algoritmo y desarrollar esta aplicación. En el siguiente enlace, podréis hallar (en inglés) un "howto" del proceso técnico y otros datos. Incluye una animación en flash en la que se comprueba la velocidad del proceso:
http://weiss.u40.hosting.digiweb.ie/stech/
También agradecer a Pazienzia (miembro del foro Elhacker.net) por prestarnos su "olvidado" router para las pruebas, así como a Renzo y bonebag por el adaptador USB.
Y por último, a los foros y foreros de seguridadwireless y Elhacker.net, que sin la aportación de los datos necesarios no hubiera sido posible contrastar dicha información, así como a Hwagm por prestarme un hueco para alojar el programa; y por supuesto, a la esencia de Pianista
Notas sobre el proyecto:
Este proyecto continúa vivo. A los que tengáis ganas de investigar el tema mas a fondo, en el enlace indicado en los créditos encontraréis curiosidades como que se han hallado más algoritmos, parece que relacionados con el sistema de cifrado WEP y posiblemente antiguos.
Es por esto que aunque lo aquí desarrollado sirve para redes WEP o WPA, es posible que para las WEP no sea 100% fiable.
De todas formas, para comprender un poco el alcance del proyecto, recomiendo visitar el siguiente link:
http://www.gnucitizen.org/blog/default-key-algorithm-in-thomson-and-bt-home-hub-routers/
Notas del programa: (actualizado 17/04/08)
No lleva control de versiones. Considérala la versión 0. Si hay futuras actualizaciones se indicará en ellas.
Esta versión en español es idéntica a la inglesa, salvo en un punto: por defecto está implementada para tener en cuenta el período 2005-2007 en cuanto a la fabricación del router (mientras que la inglesa solo abarca hasta el 2006).
Aunque es poco probable que sea aplicable el año 2007, me he permitido el lujo de ampliarlo; el tiempo de más empleado en un pc normal en procesar el código por añadirlo creo que compensa el asegurar la obtención de la clave (estamos hablando de tardar 5sg a tardar 8sg, y no implica obtener más falsos positivos).
Este parámetro es modificable. Basta antes de compilar de realizar el cambio en el fichero stkeys.c
17/04/08.- Confirmado que hay modelos del 2004. Por lo tanto, recompilad el código, modificando en el stkeys la línea donde se introduce el parametro de los años, y recompilad:
Citarpor...
// generate values only for 2005/2007..change if you want.
for(year = 5;year <= 7;year++) {
Citar
// generate values only for 2004/2007..change if you want.
for(year = 4;year <= 7;year++) {