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:
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:
3) Nos dirigimos a Dashboard para ver los parámetros de conexión de la máquina, y establecemos una sesión SSH:
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):
Seguimos con la descarga de la versión de CUDA correspondiente a nuestra máquina:
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:
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:
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:
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:
Finalmente, procedemos a lanzar una estimación de la capacidad de cómputo del hardware disponible:
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)