[HOWTO] Crakeando WPA/WPA2 vía fuerza bruta usando Pyrit

Iniciado por Festor, 18 Julio 2009, 20:14 PM

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

Festor

Hola a todos, hoy voy a mostraros como realizar un ataque de fuerza bruta usando Pyrit para crear tablas rainbow y Cowpatty para procesarlas.

Pyrit es una de las pocas herramientas disponibles para Unix/Linux y MacOS X que permite acelerar el pre-procesamiento una parte de la fase de autentificación de WPA/WPA2-PSK (~= creación de tablas rainbow) al explotar la potencia de computación de la GPU de nuestras tarjetas gráficas Nvida o ATi, además de la de nuestros procesadores de uno o más núcleos.

Para los que no lo sepan Pyrit, a día de hoy, constituye una de las herramientas más potentes contra WPA/WPA2-PSK, uno de protocolos de seguridad más robustos y fiables. Pyrit está escrito en python pero los módulos que permiten el acceso a la(s) GPU(s) están escritos en lenguajes de más bajo nivel (C/C++ y similares).

En resumidas cuentas, es como "darse cabezazos contra una pared" pero 5 o 6 veces (como mínimo) más rápido :laugh: de lo que conseguiríamos usando sólo nuestro(s) procesador(es). Esto bien puede traducirse a una reducción de por lo menos la mitad del tiempo necesario para crear una tabla rainbow (por ejemplo de, échale, 6 horas a quizás 2 o incluso 1), lo que resulta util para procesar diccionarios de varios gigabytes.

Vale... ya estoy viendo como a alguno se le cae la baba... sin embargo aunque no me guste puede que tenga que bajar a alguno de las nubes... :rolleyes:

Los sistemas que permiten acceder a Pyrit a las GPUs de las tarjetas gráficas son CUDA (en el caso de gráficas Nvidia) y Stream (en el caso de ATi), pues bien tanto CUDA como Stream son tecnologías relativamente recientes y sólo soportan una serie de modelos más o menos nuevos... si, no podía ser todo tan perfecto...

* Hardware soportado:
-> Modelos de Nvidia compatibles en esta web.
-> Modelos de ATi compatibles en en esta web.

Antes de nada debo daros un consejo, sobre todo si estáis pensando en comprar una tarjeta gráfica pronto, el rendimiento de Nvidia usando CUDA es notablemente superior al de los modelos de ATi que soporta Stream. La diferencia es tal que, en el caso de que vuestra gráfica sea una ATi, si no disponéis de una modelo de la serie Radeon HD38xx o superior (preferiblemente la serie Radeon HD48xx) os aconsejo que no sigáis con el manual ya que es probable que os llevéis una gran decepción. Lo digo en serio, yo tengo una Radeon HD3470... :-(

Este gráfico puede daros una idea de la diferencia de potencia entre ATi y Nvidia y, en especial, entre los modelos de Nvidia:


Como ya dije, tengo una Radeon HD3470 y el equipo en el que estoy actualmente no es que digamos una maquina bestial por lo que para hacer este manual utilizaré datos estadísticos de este otro, el cual también me sirvió de referencia para aprender a manejar Pyrit y poder escribir este documento.

Enhorabuena para los afortunados y otra vez será para los demás (o ir ahorrando para actualizar vuestra tarjeta gráfica :-\ ) y sin más dilación vamos con la parte "divertida" ;D .

* Requisitos indispensables:
- Es imprescindible tener instalados los controladores propietarios de tu tarjeta gráfica ATi/Nvidia, preferiblemente los más actuales, ya que tanto Stream (ATi) como CUDA (Nvidia) hacen uso de bibliotecas del controlador propietario de la tarjeta gráfica.
- Disponer de un diccionario en texto plano a partir del cual crearemos las tablas rainbow.
- Capturar un handshake de una red wifi protegida con WPA-PSK o WPA2-PSK.
- Tener instalado cowpatty, pyrit y el módulo de Pyrit correspondiente a tu tarjeta gráfica (pyrit-stream para ATi o pyrit-cuda para Nvidia).

Si tenéis Ubuntu 9.04 podéis encontrar las herramientas cowpatty y pyrit empaquetadas en formato deb en este enlace:

http://foro.elhacker.net/gnulinux/lista_de_repositorios_de_paquetes_deb_para_ubuntu_ppas_que_mantengo-t261488.0.html

Una vez que tengamos todo instalado, podemos comprobar la potencia de nuestra maquina ejecutando esta orden en una terminal:

Código (bash) [Seleccionar]
pyrit benchmark

Esto lanzará una prueba de testeo que nos dará una idea aproximada de la potencia de tu sistema teniendo en cuenta tu(s) procesador(es) (CPUs) y la(s) GPU(s) de tu(s) tarjeta(s) gráfica(s). Pues bien, según pureh@te, en su sistema (un Q6600 Quad Core funcionando 3.6 GHz y una GeForce 8800 GT) la salida es esta:

CitarThe Pyrit commandline-client (C) 2008 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3

The ESSID-blobspace seems to be empty; you should create an ESSID...
Available cores: 'Standard CPU', 'Nvidia CUDA'
Testing CPU-only core 'Standard CPU' (4 CPUs)... 1294.58 PMKs/s

Testing GPU core 'Nvidia CUDA' (Device 'GeForce 8800 GT')... 5409.43 PMKs/s

En resumen, la GPU de su 8800 GT es casi 5 veces más rápida que sus 4 CPUs.... :rolleyes:

Otro ejemplo es el caso de oscar, que con un Pentium Dual Core E5200 a 2.50 GHz y una Nvidia GeForce 9800 GT con 1 Gb GDDR3 tiene estos resultados:

Citaroscar@ubuntu:~$ pyrit benchmark
Pyrit 0.2.2 (C) 2008, 2009 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3

The ESSID-blobspace seems to be empty; you should create an ESSID...

Running benchmark for at least 60 seconds...

CUDA-Device #1 'GeForce 9800 GT': 5120.71 PMKs/s, 85.34% occupancy
CPU-Core (x86): 231.16 PMKs/s, 98.46% occupancy

Benchmark done. 5351.86 PMKs/s total.

Seguimos con el manual... Primero debemos crear el essid de la red que queremos crakear ya que es una variable necesaria para crear las tablas rainbow a partir del diccionario en texto plano. Para ello escribimos en una terminal:

Código (bash) [Seleccionar]
pyrit -e Fenix88 create_essid

Mi red se llama Fenix88, por lo que cambia ese nombre por el de la red deseada.

Pyrit puede administrar la creación de tablas rainbow de 2 formas distintas: batchprocess (o batch) el cual procesa el diccionario y almacena las tablas en el disco duro para un uso posterior, y passthrough el cual procesa el diccionario escribiendo las tablas en la salida estándar (standard output o simplemente "stdout") para un uso inmediato, es decir, permite automatizar el ataquete por diccionario.

Sin embargo también se puede batchprocess y passthrough para usarlos al mismo tiempo. Tal como nos explica lukas en su blog:
Cita de: ebfeAl parecer, a menudo he pasado por alto una forma que te permite utilizar batchprocess (calcular y escribir los resultados en el disco para su uso posterior) y passthrough (calcular y escribir los resultados a la salida para su uso inmediato) al mismo tiempo. Todo lo que tienes que hacer es especificar '-f - ' como una opción para el comando batchprocess.

Lo que ocurre es que Pyrit procesa las contraseñas para un único ESSID (usando '-e'), almacena los resultados en el disco y las escribe en la salida estándar (stdout). Los datos que ya se han procesado inmediatamente por escrito al stdout. Batchprocess continua funcionando si stdout si no está disponible (por ejemplo, porque el programa/shell destino cerró la tubería). Si todos los resultados ya han sido computados, batchprocess casi se comporta exactamente como hace passthrough.

De esta forma se puede detener y reanudar passthrough con bastante facilidad. También evita la necesidad de volver a procesar todos los datos en el caso de que Pyrit sufra una caída.

Si quieres usar passthrough en Pyrit con cowpatty debes introducir algo como esto:

Código (bash) [Seleccionar]
pyrit -e Fenix88 -f wpa.lst passthrough | cowpatty -d - -r handshake-01.cap -s Fenix88

Pero si por el contrario quieres usar el batchprocess entonces debemos importar primero el archivo diccionario donde residen las contraseñas a procesar (cambia wpa.lst por la ruta completa a tu diccionario).

Código (bash) [Seleccionar]
pyrit -f wpa.lst import_passwords

Creado el essid e importadas las contraseñas sólo nos queda dar inicio al proceso de creación de las tablas rainbow.

Código (bash) [Seleccionar]
pyrit batchprocess

Bien, si has llegado hasta aquí es que todo ha salido sin problemas, continuamos. Pyrit permite exportar la tabla rainbow en formato compatible con Cowpatty o con airolib-ng (de la suite aircrack-ng). De momento usaremos Cowpatty ya que parece ser algo más rápido que airolib-ng aunque este último también tiene sus ventajas.

Procedemos a exportar el diccionario desde Pyrit

Código (bash) [Seleccionar]
pyrit -e Fenix88 -f rainbowtable.cow export_cowpatty

Luego procedemos a importar el diccionario desde cowpatty para procesarlo.

Código (bash) [Seleccionar]
cowpatty -d rainbowtable.cow -s Fenix88 -r handshake-01.cap

Donde handshake-01.cap es el archivo cap que contiene el handshake capturado, naturalmente debes substituirlo por la ruta completa a tu archivo cap. Bueno, si has tenido suerte y la clave estaba en el diccionario debería aparecerte algo parecido a esto:

Código (bash) [Seleccionar]
festor@sniper-win:~$ cowpatty -d DicCowpatty.cow -s Fenix88 -r handshake-01.cap
cowpatty 4.6 - WPA-PSK dictionary attack. <jwright@hasborg.com>

Collected all necessary data to mount crack against WPA2/PSK passphrase.
Starting dictionary attack. Please be patient.
key no. 10000: elipkcot
key no. 20000: queerness
key no. 30000: bynumber
key no. 40000: neuheikendorferweg
key no. 50000: biologistic
key no. 60000: loessoid
key no. 70000: surreverence
key no. 80000: consalvi
key no. 90000: needputenv
key no. 100000: yratenom
key no. 110000: fire-fly
key no. 120000: schweikardt
key no. 130000: cardphone
key no. 140000: nighness
key no. 150000: XXX/Operator
key no. 160000: hydroxyzine
key no. 170000: tectocephaly
key no. 180000: dux/SimCity
key no. 190000: nibelungenstr
key no. 200000: ResolveAlias

The PSK is "IWill51Try01Shoot9The32Web".

205478 passphrases tested in 1.64 seconds: 125473.71 passphrases/second


Si quieres puedes probar a saltarte el proceso de creación del rainbow table y trabajar directamente con el diccionario en texto plano (para ello cambia "-d DicCowpatty.cow" por "-f RutaCompletaATuDiccionario". Si haces esto comprobarás la tremenda diferencia de velocidad que implica usar o no Pyrit para preprocesar el diccionario.

Fin de la guía (por ahora... ;D )

Festor

#1
Me reservo este post por si quiero extender el manual.

Por último quería dejaros una pequeña opinión: aunque el uso de las GPUs representa una mejora considerable en la capacidad de procesamiento de nuestros ordenadores, tanto WPA-PSK como WPA2-PSK siguen siendo seguros si se utilizan buenas contraseñas y una configuración adecuada. El uso de la(s) GPU(s) en la fuerza bruta contra WPA(2)-PSK puede ser útil para acelerar la creación de rainbow tables de diccionarios del estilo "claves por defecto de las redes JAZZTEL_XX" o para realizar ataques a estaciones protegidas con estos sistemas con una contraseña débil.

La fuerza bruta en mi opinión no es divertida ni eficiente  :-\  sin embargo en este caso sentía curiosidad por comprobar la potencia de las tarjetas gráficas que muchas veces estamos infrautilizando.

Lo entretenido es averiguar los algoritmos de creación de las claves por defecto de un ISP o encontrar un error en WPA-TKIP....  :silbar:

Sin embargo de momento esto es de lo más potente que hay contra WPA(2)-PSK :-\ .

Bueno si tengo tiempo procuraré escribir otros manuales que tengo en mente  ;D

|FluiD|

Muchas gracias por tu tiempo, el tuto esta muy muy bien...

Yo estuve haciendo pruebas con la herramienta que hay para windows (de elcomsoftware) y no me atrevi ha hacerlo con pyrit por falta de tiempo...

Ahora no tengo excusa, habra que probarlo...

Un saludo

FluiD

|FluiD|

Tengo una duda, normalmente antes de postear algo, lo he trasteado antes, le he preguntado a mi amigo google, he leido los "reedme" y con mi medio spanglish y un traductor suelo aclarar mi duda, pero hoy voy a intentarlo por la via vaga  ;D (es verano y domingo)...

Como se haria para probar directamente el diccionario sobre handshake sin crear las tablas usando pyrit? 


Saludos

P.D Me da hasta cosa preguntar "asin", es como preguntar los numeros de la primitiva del jueves que viene  ;D

FluiD

Festor

Cita de: fluid2 en 19 Julio 2009, 18:22 PM
Tengo una duda, normalmente antes de postear algo, lo he trasteado antes, le he preguntado a mi amigo google, he leido los "reedme" y con mi medio spanglish y un traductor suelo aclarar mi duda, pero hoy voy a intentarlo por la via vaga  ;D (es verano y domingo)...

Como se haria para probar directamente el diccionario sobre handshake sin crear las tablas?

Saludos

P.D Me da hasta cosa preguntar "asin", es como preguntar los numeros de la primitiva del jueves que viene  ;D

FluiD

Muy simple, así:

cowpatty -f ArchivoDiccionario -s Fenix88 -r handshake-01.cap

Aunque siempre es recomendable crear las tablas rainbow ya que ganas mucha más velocidad.

¿Preguntas esto porque tu tarjeta gráfica no está soportada por pyrit? ¿o simplemente por curiosidad?

Si es lo primero debo decirte que pyrit funciona sin necesidad de los módulos adicionales que permiten el acceso a la GPU(s) de tu gráfica. De esta forma pyrit se convierte en un homologo de genpmk (la herramienta de generación de tablas rainbow de Cowpatty) pero sorprendentemente es mucho más veloz que genpmk aun sin usar la GPU de tu gráfica.

¿Posible motivo? Pyrit 0.2.3-dev incorpora el soporte para SSE2 lo que supone una mejora notable del rendimiento de nuestra CPU (ten en cuenta que != GPU). Por el otro lado desconozco si genpmk usa las instrucciones SSE2 de tu procesador pero por lo que he podido comprobar en mi máquina pyrit-0.2.3-dev es mucho más rápido que genpmk aun si usar la potencia de la GPU de tu gráfica.

|FluiD|

Si si, mi tarjeta esta soportado por CUDA, es una 8800GTX y si no recuerdo mal comprobaba a unos 8000 y pico pal/seg como muestra el grafico, sobre la herramienta de elcom software.

Por pruebas que hice hace tiempo (sin pyrit) se que el proceso de crear las tablas era mas lento que pasar un diccionario directamente sin ellas, con lo cual el crearla es (o era) interesante para intercambiarlas fijando un ESSID y/o  luego pasarlo en unos seg/min las veces que quisieras por ejemplo, por eso el interes de hacerlo sin las tablas, por que igual para algo puntual no seria (o era) productivo.

Me explico a donde quiero llegar (o por lo menos lo intento):

Usando pyrit basicamente como dices se convierte en un homologo de gempmk, es aqui donde realmente esta la aceleracion de la GPU, no en cowpatty al comprobarlas, con lo cual el usar el diccionario en texto plano directamente contra un handshake con cowpatty (o aircrack)  no implica mejora.

¿Es correcto o de alguna forma que se me escapa cowpatty usaria las GPU's tambien con las contraseñas en texto plano?

Por cierto ChimoC el tuto se merece como minimo una entrada en la chincheta de  "Temas de interes"  ;-)

Saludos

FluiD

Festor

Cita de: fluid2 en 20 Julio 2009, 00:53 AM¿Es correcto o de alguna forma que se me escapa cowpatty usaria las GPU's tambien con las contraseñas en texto plano?

Hasta lo que yo sé, a día de hoy Pyrit es la única aplicación, para Unix/Mac, que utiliza la potencia de las GPUs para acelerar el ataque por diccionario contra WPA(2)-PSK. Es por eso que aunque no me entusiasma demasiado la fuerza bruta sentí curiosidad por probar y empaquetar esta herramienta.

No tengo noticias de que Cowpatty use la potencia de las GPUs y menos para procesar diccionarios en texto plano.

|FluiD|

Entendido, muchas gracias, a ver si esta semana tengo un rato y lo pruebo...

Saludos.

FluiD

Festor

Bien, he actualizado y reordenado un poco la información de la guía.

Ahora sólo me falta algunas cosas como el uso con airolibg-ng o la creación de clusters con pyrit y ya estaría casi completa  ;D

Tiempo al tiempo...  ;)

ChimoC

Buenas:

Este fin de semana me lo he tomado sabático (cervecita, tapitay nada de "internés")  ;D

Chincheta al canto en Temas de interés y muchas gracias  ;-)

Un saludo

ChimoC