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

Han pasado ya algunos años desde que el estándar 802.11i fue ratificado en Junio de 2004, y algunas cosas han cambiado desde aquel entonces, dando énfasis en la capacidad de computación de las máquinas. No obstante, sobre la misma línea, nada nuevo está presente en la autenticación WPA, que como ya sabemos se encuentra dividida en dos bloques:

  • WPA Enterprise Authentication: donde se utiliza el estándar 802.1x y normalmente un servidor Radius para efectuar Authentication, Authorization y Accounting (AAA).
  • WPA Personal Authentication: donde se emplea una passphrase precompartida por todos los integrantes de la red (similar a WEP).

En esta secuencia de artículos, primeramente veremos los fundamentos del ataque sobre la autenticación PSK (Pre Shared Key), también conocida como autenticación “Personal”, y posteriormente lo pondremos en práctica sobre el Cloud de NIMBIX y de Amazon para extraer nuestras propias conclusiones.

Partiendo de la base de tener en posesión un handshake, sólo nos queda por dar una pequeña pincelada a la generación de la PTK (Pairwise Transient Key):

Diagrama generación PTK

Como podemos ver, la clave precompartida, denominada passphrase, se pasa a una función conocida como PBKDF2, utilizada en PKCS#5, conjuntamente con los siguientes parámetros:

  • El SSID y su longitud.
  • El número de iteraciones a realizar, 4096.
  • La longitud de la clave resultante, 256.

El resultado de esta función es la conocida PSK, que según la sección 5.9.2.2 del estándar 802.11i, cuando se trata de un sistema de autenticación Personal, la PMK (Pairwise Master Key) es equivalente a ésta. Posteriormente, a la PMK y al resto de atributos se les aplica un algoritmo de hash denominado HMAC-SHA1, el cual genera un conjunto de bits, conocido como PTK, que en CCMP (WPA2) tiene una longitud de 384 bits, mientras que en TKIP (WPA) una longitud de 512 bits. La PTK se divide en subclaves, donde cada una realiza una tarea específica en el proceso de establecer el cifrado de la información.

Cuando capturamos un handshake, la única parte que no podemos obtener es la PMK, por el hecho que no se transmite y que no somos capaces de generarla sin el conocimiento de la passphrase. No obstante, sí que resulta factible el conocimiento del resto de valores, los conocidos ANonce y SNonce, y las direcciones MAC del punto de acceso y la estación cliente.

Veamos la secuencia de intercambio de mensajes que se produce en el handshake de forma gráfica:

Diagrama 4 Way Handshake

Y ahora, veamos la misma secuencia interpretada por wireshark:

4-Way Handshake Wireshark

En realidad, los valores ANonce y SNonce que se intercambian en el primer y el segundo mensaje, no son nada más que un par de números aleatorios generados por el punto de acceso y la estación cliente, respectivamente, los cuales permiten la generación de claves PTK de forma temporal, es decir, que para un mismo cliente y un mismo punto de acceso, con exactamente la misma configuración de SSID y passphrase, en cada nueva conexión se derivará una PTK completamente diferente. Este hecho significa que, teóricamente, no podemos descifrar las tramas de una sesión en particular aunque tengamos en posesión la passphrase correcta.

Por otro lado, en la imagen, observamos remarcado en rojo el campo “WPA Key MIC”, un valor que es esencial para el ataque. Se trata de un resultado derivado de los primeros 0-128 bits de la clave PTK, los cuales representan una de las subclaves que hemos comentado anteriormente, conocida con el nombre de KCK (Key Confirmation Key). Este valor es utilizado por el punto de acceso para comprobar que la estación cliente tiene en posesión la passphrase correcta y, para realizar esta comprobación, simplemente verifica que el valor de ese campo sea igual al que es capaz de generar él mismo.

De esta forma, la esencia de todo el proceso del ataque a la clave PSK, queda representada por la siguiente imagen:

Diagrama generación PTK - MIC - Dict

Como vemos, se ha substituido el valor inicial de Passphrase por Dictionary, del cual se extraerán una por una las distintas palabras que contenga para posteriormente generar las PSKs a través la función PBKDF2. Además, en la imagen también se ha añadido la comprobación final del valor MIC, que es necesaria para detectar la passphrase correcta, es decir, la frase de paso precompartida por todos los integrantes de la red.

Pero, en la ilustración anterior tenemos un problema, ¿Lo detectáis?

Se trata del valor de iteración 4096, que significa que para un millón de passphrases contenidas en el diccionario, se realizarán un total de 4.096 millones de iteraciones en la función PBKDF2, con lo cual se obtendrá un escaso rendimiento en el procesamiento de las mismas. De hecho, este inconveniente se detecta fácilmente cuando aplicamos Aircrack-ng:

Aircrack-ng lentitud

Notamos que para una contraseña de 10 caracteres compuesta por mayúsculas y números, a la velocidad de 836 claves/segundo, se necesitan 143.000 años para comprobar todas las posibles combinaciones, una auténtica barbaridad. El motivo por el cual obtenemos este bajo rendimiento en gran parte es debido al cálculo derivado la función PBKDF2.

Por lo tanto, en este escenario debemos buscar alternativas, las cuales, principalmente, se centran en:

  • Mejorar el rendimiento de Keys/s.
  • Aplicar un ataque de diccionario dirigido.

La generación de un diccionario dirigido quedará pendiente, ya que en el siguiente post, nos centraremos en cómo mejorar el rendimiento de cómputo de claves aprovechando la gran potencia que podemos obtener de los servicios de computación del Cloud.

¡Que seáis muy felices!

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)