Diccionario claves WPA2 / WEP en TP-LINK_XXXXXX

Iniciado por AlexAltea, 8 Marzo 2013, 12:15 PM

0 Miembros y 3 Visitantes están viendo este tema.

AlexAltea

Aquí tenéis el programa final para generar los diccionarios para estos routers. Ejecutad TPLink-GenKeysFinal y seguid las instrucciones. Introducid la BSSID del router o la fecha de lanzamiento al mercado del router si la sabeis como argumento para obtener un diccionario reducido específico para el modelo del router que estáis atacando, eso puede reducir el tiempo de crackeo a unos pocos minutos. Si no sabeis ninguno de estos datos, no metais argumentos y listo.  :P

Descarga: http://www.mediafire.com/download.php?vtu146u849ogueq

Si quereis más velocidad aún, no protestéis y ayudad a completar la tabla de abajo aportando la información de estos routers.
;D






Post original:
Recientemente TP-Link ha sacado unos routers al mercado, los TD-W8970, TD-W8968, y TD-W8961ND 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.

En WPA/WPA2 que es lo que interesa, un ataque de fuerza bruta acelerado por una GPU media a unos 20000 keys/s tardaría 3610 / 20000 = 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 resulta que 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:

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

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, ya spameé hace tiempo anunciando que hacía algunos humildes tutoriales sobre cracking; pues como esto trae OllyDbg de por medio, pues hice un tutorial en YouTube acerca de cómo encontrar estos fallos usando este como ejemplo, quizás a alguien le resulte interesante. ¡Que lo disfrutéis!
:D
Post: http://functionmixer.blogspot.com.es/2013/03/vulnerabilidad-de-tp-link-al-generar.html

Tutorial:
[youtube=560,315]http://www.youtube.com/watch?v=-M0naAtUZM0[/youtube]

AlexAltea

Novedades! ;D
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.
*Con todos los que he probado hasta ahora, que vienen a ser el 90% del total. En los routers restantes tuve problemas en la descarga del EasySetupAssistant, pero me jugaría un baneo por bocazas a que tambien están afectados. XD

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: 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.


PD: La semana que viene traeré la lista de claves para estos routers...  ;)

AlexAltea

#2
NOTICIÓN!!!  ;D Dicho brevemente: Se puede reducir 95,595% el tiempo necesario en el peor caso.
Dicho soltando una parrafada:
CitarTambié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.
Definitivamente, no es sano. Se me pasó una cosa muy importante por alto y no me la perdonaré jamás. Esa cosa que me mosqueaba, era que la seed es un número que crece linealmente en función del tiempo del ordenador, obtenido a través de un KERNEL32.GetSystemTimeAsFileTime. Es decir, la seed NO es aleatoria, sino que es un valor fijo que aumenta en 1 cada segundo. El código en Python para generar una seed ahora mismo es:

import datetime

def genSeed(t1):
   dt = t1 - datetime.datetime(1601, 1, 1, 0, 0, 0)
   t = dt.days*864000000000 + dt.seconds*10000000 + dt.microseconds*10

   tA = (t/2**32 + 0xFE624E21)
   tB = (t%2**32 + 0x2AC18000) % (1<<32)

   if tA >= (1<<32):
       tA += 1
       tA %= 1<<32

   r = (tA % 0x989680) * (2**32)
   r = ((r + tB) / 0x989680) % (2**31)
   return r

print genSeed(datetime.datetime.utcnow())


Creo que después de esto, me atrevería a decir que la generación de claves en los TP-Link ha sido un FAIL total. Estábamos contentos por haber reducido las claves que necesitábamos comprobar de 3610 a 231. Pues ahora, gracias a esto podemos reducir las combinaciones de 231 a los segundos transcurridos en un periodo de tiempo determinado.

Me explico, supongamos que sabemos que una persona instaló el router en 2012, independientemente del mes, día, etc... Gracias a este método sabemos que sólo hay que comprobar las seeds entre 0x4EFFA3AD y 0x50E22700. Es decir:
genSeed(datetime.datetime(2012, 1, 1, 0, 0, 0)) #0x4EFFA3AD
genSeed(datetime.datetime(2013, 1, 1, 0, 0, 0)) #0x50E22700


En un año hay aprox. 365*24*60*60 = 31536000 seg. (o dicho de otra manera 0x50E22700 - 0x4EFFA3AD). Es decir, solo hay que comprobar 31536000 claves, las generadas por las seeds de ese intervalo de tiempo. Eso son 26 minutos con aceleración por GPU o 5 horas solo con CPU. La cosa se vuelve más grave si de la noche a la mañana "aparece" un nuevo TP-LINK_XXXXXX a nuestro alrededor, podría tratarse de router recién instalado ese día con la clave aleatoria de turno, por lo que solo tendríamos que probar con 24*60*60 = 86400 combinaciones, lo cual es algo ridículo.

Mientras escribo esto se me ocurren varias optimizaciones posibles para este sistema:
1. Escoger un intervalo que nos asegurase un éxito sería cuestión de obtener el modelo del router TP-Link a través de la BSSID, compararlo con una base de datos que tuviera la release date de estos y hallar el rango de seeds entre la release y ahora mismo.
2. Otra optimización sería descartar seeds provenientes de entre las 2 y las 6 de la mañana. No soy quien para meterme con las costumbres de otros, pero hay que tenerlos cuadrados para montarte el chiringuito a esas horas.
3. Etc...  ;)

Los programas para calcular las seeds correspondientes a un intervalo de tiempo, y las claves asociadas a un intervalo de seeds próximamente...
PD: Juro que no estoy separando mis mensajes para hacer bumps, lo que pasa es que escribo segun descubro cosas. XD

AlexAltea




Aquí están los dos programas que prometí. No soy muy original con los nombres, pero funcionan bien:

TPLink-GenSeeds: 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 rapida, 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
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, tendréis dicha lista en "./output.txt".

Con estos dos programas y algún programa para crackear handshakes como aircrack-ng o pyrit (si teneis una GPU compatible), tenéis todo lo necesario para llevar el ataque a la práctica. Es engorroso lo sé, pero me voy a poner desde ya manos a la obra en un todo-en-uno con una bonita GUI que reduzca todo a un par de clicks.


:D
Si alguien quiere colaborar, en mi blog hay indicaciones de como ayudar con este tema:
http://functionmixer.blogspot.com/2013/03/vulnerabilidad-tp-link-obteniendo.html

maffiuss

     Muy Buenas.

     Como veis no soy dado a escribir... Soy de letras... leidas.

     Lo 1º y sin entender la mitad de lo que comentas/explicas (gente con mas conocimientos que yo hay) no puedo mas que felicitarte y añadir una cosita sin "acritud" a los webmaster:

     ¿Donde está esa CHINCHETA tipo como un gnomo de grande que se ha ganado AlexAltea y que parece que se ha declarado la Omertá por ser DEMASIADO EXPLÍCITO y se espera que se disipe este FAIL total en medio de los temas tipo tengo un handshake que hago? o cuantas datas necesito para llenar mi ordenador o cuantos gigas de diccionarios necesito para sacar la clave de el vecino que el muy cab#&* la ha cambiado..... WEBMASTERS... MODERADORES..... HELLOOO... ¿.Ahi alguien ahí?

     No lo entiendo... Supongo que andarán de vacaciones o puente largo.

     Felicidades y gracias por tu tiempo y conocimientos compartidos...
     Un saludo a todo este gran foro...

AlexAltea

#5
@maffiuss
Lo primero, muchas gracias!  ;D
Además has dicho lo mismo que estaba pensando yo también.. suerte que por otros sitios ha habido más apoyo en conseguir algo más de información para explotar este fallo. Por otra parte entiendo que a mucha gente solo les interesa lo que voy a postear aquí abajo independientemente de los detalles técnicos. Pero en fin, todo lo digo con cariño y sin acritud. :P




Aquí tenéis el programa final para generar los diccionarios para estos routers. Ejecutad TPLink-GenKeysFinal y seguid las instrucciones. Introducid la BSSID del router o la fecha de lanzamiento al mercado del router si la sabeis como argumento para obtener un diccionario reducido específico para el modelo del router que estáis atacando, eso puede reducir el tiempo de crackeo a unos pocos minutos. Si no sabeis ninguno de estos datos, no metais argumentos y listo.  :P

Descarga: http://www.mediafire.com/download.php?vtu146u849ogueq

Si quereis más velocidad aún, no protestéis y ayudad a completar la tabla de abajo aportando la información de estos routers.
;D (También he colocado este mensaje en el primer post del hilo).


En otro orden de cosas, creo que hay aún más routers de TP-Link afectados. Supongo que son modelos algo más antiguos y no aparecen en la página de TP-Link, pero el asistente aún es posible descargarlo de otros sitios. Por ejemplo:
http://www.softpedia.com/dyn-search.php?search_term=Easy+Setup+Assistant&x=-529&y=-45
CitarTD-W340G
TD-W300KIT
TD-W8101G
TD-W8960N
TL-WR2543ND

Hacelo

Que pena no tener uno de estos routers para poder probar esta aplicacion.

Saludos y gracias por compartir...... :)

AlexAltea

Cita de: Hacelo en 18 Marzo 2013, 22:48 PM
Que pena no tener uno de estos routers para poder probar esta aplicacion.

Puedes probar también con routers D-Link o Linksys con el programa que postee en el otro hilo. Ambos funcionan de forma muy parecida.


Por si no queda claro como usar el programa que he posteado al comienzo del hilo, he hecho un tutorial.
[youtube=640,360]http://www.youtube.com/watch?v=sJDuDWIhdGc[/youtube]

Hacelo

Muchas gracias AlexAltea, ya venia siguiendo tambien tu otro hilo  ;);  por otro lado decirte que cualquier info que consiga de estos routers te la hare llegar para que puedas ir mejorando tu programa.

Saludos...

PacoA

Red TP_LINK_XXXXXX en Valencia de la empresa Procono, red de un amigo que me deja trastear.

Clave consistente en sólo 8 números. Parece la clave por defecto, pues el WPS pin es el mismo número.

Leí por ahí que algunas redes TP_LINK tienen 8 números como password. Así que construí un diccionario solo de números y solo de longitud 8. La clave ha caído.