Ataque clientless a WPA/WPA2 usando PMKID

Ilana MT
Hacking/Security
Published in
4 min readAug 2, 2019

Veremos como realizar un ataque de diccionario a una red WiFi WPA/WPA2 sin necesidad de capturar el handshake, es decir, sin necesidad de que haya un cliente en la red. Esto es posible en algunos routers ya que envían el PMKID en el primer mensaje del handshake, con el objetivo de permitir roaming. Con esto se obtiene la misma información que se calcula al capturar los datos del handshake completo.

En este caso el ataque se logró para un router ASUS RT-NP10P.

Requisitos

Hardware:

  • Máquina con distro de Linux instalada (Ubuntu/Kali). En este ejemplo se utilizó una Virtual Box con Kali Linux.
  • Adaptador inalámbrico USB. En este ejemplo se utilizó un Alfa AWUS036NHA.

Software:

  • Aircrack-ng
  • Hashcat
  • Hxcdumptool
  • Hcxtools

Procedimiento

Para comenzar, es necesario instalar las herramientas necesarias. Hcxdumptool y Hcxtools se encuentran en repositorios de GitHub y se pueden instalar descargando el archivo comprimido de los links a continuación o clonarlos utilizando git. Además se deben compilar los archivos necesarios. Para ello se utilizan los siguientes comandos:

Hcxdumptool

> git clone https://github.com/ZerBea/hcxdumptool> make> sudo make install

Hcxtools

> git clone https://github.com/ZerBea/hcxtools> make> sudo make install

Luego es necesario conectar el adaptador al computador y revisar el nombre de la interfaz inalámbrica asociada a éste. Para ello ejecutamos el comando ifconfig:

En este caso el nombre de la interfaz es wlan0. En adelante, cuando yo escriba wlan0, debes reemplazarlo por el nombre de la interfaz.

A continuación configuraremos el adaptador en modo monitor utilizando los siguientes comandos:

> ifconfig wlan0 down> iwconfig wlan0 mode monitor> ifconfig wlan0 up

Para que Hcxdumptool funcione correctamente, es necesario utilizar además los comandos :

> airmon-ng check kill> airmon-ng start wlan0

De esta forma se detiene cualquier proceso que pueda intervenir en el uso de esta herramienta. Ahora utilizaremos Hcxdumptool para capturar los PMKIDs de las redes cercanas. Usamos el comando:

> hcxdumptool -o attack.pcap -i wlan0 --enable_status=1

Y esperamos unos minutos. Con lo que se debería obtener algo como esto:

Salida de hcxdumptool.

Se observa que se capturan PMKIDs de manera clientless (sin necesidad de que los AP tengan clientes). Los PMKIDs capturados se guardarán en el archivo attack.pcap. A continuación convertiremos el archivo capurado a un archivo legible por Hashcat (hashes). Para ello utilizamos Hcxtools. Una vez dentro de la carpeta hcxtools clonada de GitHub, ejecutamos:

> hcxtools/hcxpcaptool -z myhash.txt attack.pcap

Con esto además veremos un resumen de los datos capturados:

Resumen de datos capturados

Para ver los hashes se puede utilizar:

> cat myhash.txt

Un hash válido debe tener 4 partes separadas por un *, como los que se observan a continuación:

Hashes capturados válidos

En cada línea hay un hash. La segunda parte de cada hash corresponde al BSSID de la red de la cual se capturó el PMKID, por lo que se puede determinar si se capturó o no el PMKID de la red objetivo.

En este caso buscamos conseguir la clave de la red con BSSID 40167ec43b8c, que corresponde al último hash capturado.

En caso de que tengan sólo 3 partes, estos son inválidos y no permitirán llevar a cabo el ataque. Normalmente, los PMKIDs capturados por Hcxdumptool son válidos; a diferencia de otras herramientas que permiten capturarlos como Wireshark o Bettercap, en que se capturan PMKIDs que no son más que una secuencia de ceros.

A continuación se muestran capturas válidas e inválidas en Wireshark. Esto no es necesario para el ataque, es sólo para mostrar que el hecho de que se capture un PMKID no significa que este vaya a ser útil.

PMKID inválido
PMKID válido

Una vez que se tiene un archivo con hashes válidos, basta utilizar hashcat para realizar el ataque de diccionario. Para ello se utiliza el comando:

> hashcat -m 16800 --force myhash.txt <diccionario>

Si el diccionario contiene la clave, eventualmente se mostrará los siguiente:

Una alternativa a Hashcat es utilizar gpuhash.me, donde se pueden copiar los hashes directamente (de a uno). Se debe apretar Add new task y seleccionar la opción WPA/WPA2 PMKID.

Con esto se concluye el ataque. Éste permite precalcular el PMK y por lo tanto puede llegar a ser significativamente más rápido que el ataque en que se captura el handshake. Además, como se mencionó anteriormente, este ataque no necesita que existan clientes en la red conectándose. No obstante, la mayoría de los routers no tienen roaming y por lo tanto no envían el PMKID al principio del handshake, por lo que este ataque no es posible en cualquier red WPA/WPA2.

Espero que esta información les sirva, no olviden dejar un aplauso.

¡Gracias!

--

--