La seguridad actual de la autenticación inalámbrica PSK (II)

Este segundo artículo, de carácter más práctico, define el conjunto de herramientas a utilizar y además, se ha esquematizado para que sea un pequeño tutorial que nos permita efectuar la instalación de las mismas en las máquinas del Cloud.

Para los lectores que no desean conocer en profundidad los detalles técnicos, se recomienda obviar esta parte y saltar directamente a la tercera.

Empecemos.

Primeramente, necesitamos localizar un herramienta que sea capaz de utilizar toda la potencia de cómputo de nuestro hardware con el fin de cumplir con nuestro objetivo, que es calcular el mayor número posible de claves PSK por segundo, tal y como hemos comentado en la primera entrega. Para lograr la tarea, se propone la utilización de Pyrit.

Pyrit

Es una herramienta muy potente que permite realizar ataques a la autenticación WPA/WPA2-PSK. Destaca por tener la propiedad, a diferencia de otras herramientas, de utilizar la potencia extra de las GPUs para acelerar de forma extraordinaria el proceso de cómputo de las claves PSK. Se encuentra escrita mayormente en Python, pero también cuenta con algunos módulos escritos en C (cpyrit-cuda, cpyrit-opencl) que se encargan de permitir el uso de las tarjetas gráficas. Además, entre otras funcionalidades, nos brinda la posibilidad de crear tablas de claves PSK precomputadas.

Por otro lado, necesitamos un software intermediario que permita la interacción con las tarjetas gráficas. En este caso, se trabajará con CUDA Toolkit.

CUDA

CUDA son las siglas de Compute Unified Device Architecture (en Castellano, Arquitectura Unificada de Dispositivos de Cómputo) y hace referencia a un framework desarrollado por NVIDIA que permite a los programadores de C y C++ aprovechar la potencia del procesamiento paralelo de sus tarjetas gráficas, con el fin de proporcionar un incremento del rendimiento del sistema.

Con las dos herramientas anteriores y conjuntamente con el Cloud, ya tenemos todos los componentes necesarios. Sólo nos queda realizar la instalación de este software a una máquina remota y en el caso del panel de NIMBIX, la secuencia de pasos a realizar es la siguiente:

1) Creamos una instancia de Ubuntu 14.04 dentro de la pestaña Images:

001 - Create Image

2) A continuación, nos vamos a la pestaña Launch y ejecutamos una máquina que cumpla con nuestras expectativas de hardware, en este caso, una instancia de dual NVIDIA M2090:

002 - Launch

3) Nos dirigimos a Dashboard para ver los parámetros de conexión de la máquina, y establecemos una sesión SSH:

003 - Conexion

4) Procedemos a la instalación de CUDA Toolkit mediante la guía de instalación que nos ofrece el propio desarrollador NVIDIA, disponible en este enlace.

Como podemos pensar, para poder operar con CUDA, debe existir el controlador de NVIDIA apropiado para el kernel que se encuentra compilado en el sistema. Normalmente, las plataformas de Cloud ya nos proporcionan esta utilidad, la cual podemos comprobar con las sentencias indicadas en la guía (las dos últimas de la imagen):

004 - Check Driver

Seguimos con la descarga de la versión de CUDA correspondiente a nuestra máquina:

005 - Download CUDA

Recordad que es posible utilizar directamente el comando wget sobre el enlace de Download para realizar la descarga sobre la máquina del Cloud. Una vez descargado el ejecutable, realizamos la instalación y obtendremos una salida similar a la siguiente:

006 - CUDA Installed

Finalmente, realizamos el último paso de la instalación de CUDA, que es la modificación de las variables de entorno PATH y LD_LIBRARY_PATH, y posteriormente verificamos la versión de CUDA Toolkit que se encuentra instalada en el sistema:

007 - Check CUDA Toolkit

5) Una vez instalado CUDA, es el turno de Pyrit. Empezamos con él instalando las dependencias:

sudo apt-get install libpcap-dev subversion python-dev libssl-dev

Seguidamente, realizamos la descarga del código fuente:

sudo svn checkout http://pyrit.googlecode.com/svn/trunk/ pyrit

Para, a continuación, efectuar su instalación:

cd pyrit/pyrit

sudo python setup.py install

En este instante, Pyrit debe ser capaz de listar las CPU disponibles:

008 - pyrit list_cores

Notamos que no detecta las tarjetas gráficas, debido a que aún no hemos instalado el módulo cpyrit:

cd ../cpyrit_cuda/

sudo python setup.py install

Una vez hecho, si volvemos a efectuar un listado de los cores disponibles, pyrit ya detecta las tarjetas de NVIDIA:

009 - pyrit list_cores with GPU

Finalmente, procedemos a lanzar una estimación de la capacidad de cómputo del hardware disponible:

010 - pyrit benchmark

En este caso, tal y como se puede observar en la imagen, sobre la configuración de nuestra máquina de NIMBIX, se ha obtenido un rendimiento total de 66324 PMKs por segundo, una diferencia importante respecto las 836 claves/s que Aircrack-ng ofrecía sobre una simple máquina virtual.

Como último paso de configuración, sólo nos queda la instalación de la herramienta Scapy, la cual Pyrit utiliza para el procesamiento de los paquetes de las capturas:

wget http://www.secdev.org/projects/scapy/files/scapy-2.3.1.zip

unzip scapy-2.3.1.zip

cd scapy-2.3.1/

sudo python setup.py install

En este instante, ya tenemos el escenario preparado y por lo tanto, en el siguiente artículo lanzaremos su ejecución para analizar los resultados obtenidos, con la diferencia que la máquina de trabajo no será de NIMBIX, sino que será una máquina del Cloud de Amazon, simplemente por el hecho de que sus instancias g2.8xlarge nos ofrecen 4 GPUs en lugar de las 2 que subministran las de NIMBIX.

Espero que haya sido de vuestro agrado.

¡Saludos!

Ferran Verdés

Enlaces:

La seguridad actual de la autenticación inalámbrica PSK (I)

La seguridad actual de la autenticación inalámbrica PSK (II)

La seguridad actual de la autenticación inalámbrica PSK (III)