En publicaciones anteriores se han explicado los mecanismos más comunes para conseguir crackear una clave WEP, sin embargo en todos los casos, siempre ha sido necesario capturar una cantidad considerable de IV contenidos en los paquetes cifrados por el AP, para posteriormente utilizarlos en el proceso de crackeo con herramientas como aircrack-ng. Sin embargo, pueden existir algunas circunstancias que impiden capturar un numero de IV lo suficientemente elevado como para conseguir la clave de una red determinada y es en esos casos donde la mayoría de atacantes pierden el interés en un objetivo dado y suelen afirmar, simplemente que no es posible crackear una clave WEP por las dificultades presentadas. En estos puntos la creatividad y las técnicas de hacking/cracking conocidas puede ser en muchos casos de gran utilidad.
BRUTE FORCE Y AIRDECAP-NG
Ahora bien, una de las principales premisas que se aprende cuando de crackear claves WEP se trata, es que es necesario capturar un número significativamente alto de IV para que posteriormente sea posible “romper” dicha clave con aircrack-ng. Hasta este punto todo resulta bastante familiar, sin embargo, que ocurre cuando no se logra capturar un número de paquetes lo suficientemente alto como para crackear una clave WEP? Aun así es posible hacerlo? Las respuestas a las anteriores preguntas radica principalmente en el nivel de conocimientos que tenga un atacante y que tanto conozca el funcionamiento de WEP desde un punto de vista teórico y practico. Para llevar a cabo una prueba de concepto simple de como podrá llevarse a cabo un ataque con un número limitado de paquetes (en este caso concreto, un paquete de datos cifrados y los paquetes de autenticación intercambiados entre cliente y AP). Con estos 3 paquetes será posible realizar ataques de fuerza bruta basados en el funcionamiento del algoritmo WEP, dado que se cuenta con un paquete de datos cifrados y su correspondiente IV, solamente hace falta la clave para descifrar dicho paquete, en este orden de ideas, es posible probar múltiples combinaciones posibles para clave y en el caso de que el ICV del paquete descifrado con la clave probada, coincida con el IV del paquete cifrado, podrá determinarse que la clave es correcta. Ahora, todo esto llevado a la practica puede resumirse en los siguientes pasos.
-
Se desconoce la longitud de la clave, sin embargo en el caso de WEP, esta podrá ser de 64 bits (en realidad 40 restando el segmento IV) o de 128 bits (en realidad 104 restando el segmento IV). Por este motivo, la clave puede ser de 5 o 13 caracteres respectivamente.
-
Se han capturado 3 paquetes, 2 de los cuales corresponden a la petición de autenticación del cliente (Challenge Response) y la respuesta correcta que del AP a dicho intento de autenticación, estos paquetes se pueden capturar y almacenar en un fichero PCAP tal como se enseña en las siguientes imágenes.
-
Para ejecutar el ataque por fuerza bruta es necesario tener un buen diccionario de claves, el cual deberá estar filtrado en claves de 5 caracteres y 13 caracteres para claves WEP con longitud de 64 y 128 bits respectivamente.
-
Conocer el uso de airdecap-ng para descifrar paquetes cifrados con WEP o WPA/WPA2. Esta utilidad necesita como parámetro de entrada la clave en formato hexadecimal para descifrar un paquete determinado.
-
Crear un script simple que permita automatizar el proceso de leer el diccionario de claves, leer cada una de las claves, verificar la longitud (que debe ser de 5 o 13 caracteres), convertir cada una de las claves en formato hexadecimal para enviar dicho valor a la ejecución de airdecap-ng y finalmente verificar la salida generada por la ejecución del comando airdecap-ng con la clave WEP.
Se trata de pasos bastante simples y su éxito/fracaso realmente depende de la cantidad de claves y lo robusto que sea el diccionario que se este utilizando. Como en cualquier tipo de ataque de fuerza bruta, el éxito del ataque depende directamente del diccionario utilizado, entre más completo, evidentemente las probabilidades de éxito serán mayores, sin embargo el ataque consumirá más recursos y tiempo.
Ahora bien, tal como se indicaba anteriormente, el uso de airdecap-ng permite descifrar paquetes que se encuentran cifrados con WEP/WPA, su uso es bastante sencillo, dado que solamente es necesario declarar como parámetro la clave en formato hexadecimal y el fichero PCAP con los paquetes capturados. Por ejemplo, en el caso de que se defina una clave en formato hexadecimal que no corresponde con utilizada para el cifrado del paquete, se obtendrá el siguiente resultado
>airdecap-ng -w 3132333436 PCAPFILES_DATA_AUTH
Total number of packets read 3 Total number of WEP data packets 1 Total number of WPA data packets 0 Number of plaintext data packets 0 Number of decrypted WEP packets 0 Number of corrupted WEP packets 0 Number of decrypted WPA packets 0 |
Como puede apreciarse, no se ha conseguido descifrar ningún paquete del fichero de captura. Por otro lado, las opciones disponibles en esta opción son las siguientes
>airdecap-ng –help
Airdecap-ng 1.1 – (C) 2006, 2007, 2008, 2009 Thomas d’Otreppe Original work: Christophe Devine usage: airdecap-ng [options] <pcap file> Common options: -l : don’t remove the 802.11 header -b <bssid> : access point MAC address filter -e <essid> : target network SSID WEP specific option: -w <key> : target network WEP key in hex WPA specific options: -p <pass> : target network WPA passphrase -k <pmk> : WPA Pairwise Master Key in hex –help : Displays this usage screen |
Las opciones disponibles permiten manipular de varias formas los paquetes que se especifican por parámetro, además de que es también posible utilizar una clave WPA para descifrar un paquete cifrado con WPA del mismo modo que se ha explicado anteriormente con WEP.
Como puede imaginarse, el uso de esta herramienta da la opcion a un atacante de realizar un script o cualquier rutina de código que le permita ejecutar esta utilidad de forma automatizada y dinámica utilizando por ejemplo, un diccionario de claves para realizar un ataque “offline” simplemente con un fichero PCAP con los paquetes descritos anteriormente. Para esto, el script que puede utilizarse es el siguiente:
import sys, binascii, re from subprocess import Popen, PIPE dictionary = open(sys.argv[1], ‘r’) for line in dictionary: key = re.sub(r’\W’, », line) if(len(key) != 13) : continue; hexkey = binascii.hexlify(key) print «WEP Key: «+key+» in Hex: «+hexkey p = Popen([‘airdecap-ng’, ‘-w’, hexkey, ‘PCAPFILES_DATA_AUTH’], stdout=PIPE) output = p.stdout.read() result = output.split(‘\n’)[4] if(result.find(‘1’) != -1) : print «WEP Key Encontrada: «+key sys.exit(0) print «WEP Key No Encontrada :(« [/sourcecode |
Este fichero puede guardarse con extensión “py” dado que se trata de un programa escrito en Python, se trata de un script bastante simple, en el que solamente se envia por parametro el diccionario de palabras, se filtran aquellas que no contengan caracteres validos y que contengan una longitud de 13 caracteres dado que se asume que se intenta crackear una clave con WEP a 128 bits (104 reales), en el caso de que se trate de una clave a 64 bits (40 reales) la longitud debe de ser de 5 caracteres. Se obtiene la representación en hexadecimal de cada una de las palabras que cumplen con los filtros anteriores y finalmente se ejecuta el comando airdecap-ng utilizando la función Popen incluida en el interprete de Python.
La salida de cada una las ejecuciones del comando airdecap-ng, son comparadas para determinar si el paquete en cuestion ha podido ser descifrado, para ello se lee la posición 4 de array devuelto por la ejecución y se busca que contenga el valor de “1” lo que indica que se ha podido descifrar correctamente 1 paquete de datos que se encuentra contenido en el fichero PCAP. La posición 4 corresponde a la salida del comando airdecap-ng de la siguiente forma
Linea |
Resultado airdecap-ng |
0 |
Total number of packets read 3 |
1 |
Total number of WEP data packets 1 |
2 |
Total number of WPA data packets 0 |
3 |
Number of plaintext data packets 0 |
4 |
Number of decrypted WEP packets 1 |
5 |
Number of corrupted WEP packets 0 |
6 |
Number of decrypted WPA packets 0 |
Dado que los resultados devueltos por la ejecución de airdecap-ng al interprete de python tienen la forma de la tabla anterior (un array cuya primera linea se ubica en la posición 0) es necesario acceder a la información contenida en la posición 4.
Ahora bien, se deben tener en cuenta algunas consideraciones antes de ejecutar el script anterior, tales como cambiar el nombre del fichero PCAP que se encuentra establecido directamente en el script (cambiar el nombre si es oportuno) además de que también es necesario cambiar el número de caracteres que debe contener cada palabra (5 o 13 dependiendo de la longitud de la clave WEP). Como recomendación, podría establecerse estos dos valores como parámetros, así como se hace con el fichero correspondiente al diccionario de palabras.
Finalmente la ejecución de este sencillo script es la siguiente:
>python WEPCracker.py dict.txt ……………………. WEP Key: A6A86370D0A9A in Hex: 41364138363337304430413941 WEP Key No Encontrada 😦 |
>python WEPCracker.py dict2.txt ……………… WEP Key: A6A86370D0A9A in Hex: 41364138363337304430413941 WEP Key: KEOPSMYSTERY1 in Hex: 4b454f50534d59535445525931 WEP Key Encontrada: KEOPSMYSTERY1 |
Clave WEP descifrada correctamente. Recordar que el mismo procedimiento puede aplicar de igual forma para claves WPA con pocas modificaciones (principalmente relacionadas con la longitud de la clave).
Como se puede apreciar, pueden existir muchísimos métodos para realizar un ataque exitoso contra WEP (e incluso contra WPA) solamente es necesario tener un poco de imaginación y creatividad y recordar en todos los casos que las herramientas solamente son validas para asistir a un hacker en sus actividades, desde ningún punto de vista deben sustituir su imaginación y su capacidad de crear. Dicho esto, es importante resaltar (como ya lo he dicho en anteriores ocasiones) que es muy importante tener conocimientos profundos en programación (sin importar el lenguaje utilizado) ya le permite a un atacante expandir considerablemente su abanico de posibilidades y no encontrarse limitado solamente por lo que otras personas han programado en las herramientas de su arsenal. Como lo he dicho en anteriores publicaciones, no conozco ningún hacker que no sea también, un buen programador.
Dicho lo anterior, (y especialmente dedicado a todos aquellos que aman la programación) intentaré compaginar todas estas publicaciones sobre Wireless Hacking con el desarrollo de rutinas útiles con Python y Scapy. Todo esto próximamente.
Por ahora, es el momento de hablar sobre WPA/WPA2! Introducción en la próxima publicación.