Ataque de Reinstalación de llaves: Forzando el reuso de «Nonce» en WPA2

Por André Mitsutake

(18 de octubre, 2017).- KRACK es un ataque que aprovecha la vulnerabilidad del protocolo WPA2 (WiFi Protect Access), el cual se encuentra en el mercado por más de 10 años. El protocolo WPA2 fue una mejora realizada tras las explotacion del WEP y su consecutiva mejora WPA-TKIP.

El protocolo WPA2 implementa AES-CCMP actualmente como protocolo de seguridad, la implementacion del AES-GCMP es inminente para las futuras conecciones como sucesor del AES-CCMP.

El inminente ataque KRACK explota una vulnerabilidad en el protocolo WPA2 en el flujo del intercambio de llaves entre el suplicante y un Access Point (AP). Este flujo consta de cuatro vías para establecer un canal seguro entre en usuario y el AP.

Antes de proseguir con la explicacion de cómo se realizo el ataque, cabe resaltar que esta vulnerabilidad no tiene como fin robar las contraseñas de autenticacion entre el suplicante y el AP; el objetivo es modificar la llave (re-usar una llave anterior la cual el atacante tiene conocimiento) que se emplea para transmitir información entre el suplicante y AP de manera que sea posible observar lo transmitido desde el usuario al AP legiblemente, a excepcion de los cifrados punto a punto tales como HTTPS y VPN.

¿Cómo funciona?

La explicación del flujo de mensajes para establecer la autenticación y asociación en el protocolo WPA2, está basado en el protocolo Extensible Authentication Protocol over LAN (EAPOL).”,
se indica en la investigación de Mathy Vanhoef Frank Piessens.

Cuando el suplicante desea conectarse a una red WiFi, comienza la autenticación y asociación con el AP. En este paso las llaves PMK son negociadas usando el estandar 802.1x, y luego negocian una nueva llave el Pairwise Transient Key (PTK) la cual es derivada del PMK.

La derivacion del PTK es realizado en el lado del suplicante. PTK se distribuye en tres llaves Key Confirmation Key (KCK), Key Encryption Key (KEY) y Temporal Key (TK); cada una con una respectiva funcion (vease en anexos).

Imagen 1. Estructura de EAPOL frame

El header (cabecera) define qué tipo de negociación se realizará (esto difiere dependiendo del suplicante, Peer Key, Group Key y Fast BSS Transition).

El Replay Counter (Contador de recepción), es un campo usado como contador de respuestas del autenticador (AP) el cual incrementará en uno después de cada retransmisión. Si el suplicante es el que responde, el contador no aumentará.

Nonce (Números impares aleatorios), son números aleatorios impares generados en ambas partes.

Receive Sequence Counter (RSC), es el campo es el encargado de llevar el contador de paquetes en los cuales se transmite la llave secreta para cifrar los futuros datos a transmitir.

Message Integrity Check (MIC), es el campo que tiene la función de manter la autenticación del frame, usando KCK derivado del PTK, el cual usa un algoritmo hash con llave como el MAC para la autenticación de los frames.

En el campo Key Data se cifra la llave Group Key con la ayuda de KEK, derivado del PTK.

+ Los mensajes seran identificados con el MsgN, donde N es el orden de los mensajes.

+ “r” representa el contador de recepción más “nonce”

+ Lo que se encuentra luego del “;” es el campo de Key Data.

MsgN(r,Nonce;GTK)

[1] El primer mensaje es enviado del AP al suplicante {Msg1}, “r” y “ANonce” (AP Nonce).

[2] Con la recepción de este mensage el suplicante genera su “SNonce” (Supplicant Nonce) y el PTK, que es una derivación del PMK. De esta manera el suplicante manda el {Msg2} que consta del mismo “r” del Msg1 y SNonce.

[3] El autenticador, AP, recibe el SNonce, y deriva el PTK correspondiente. Y en el Msg3 se envía el “r+1” y Group Key.

[4] El suplicante recibe el mensage del autenticador y responde con una confirmación aceptando ambas llaves, el PTK y el GTK (Group Transient Key).

En resumen los primeros dos mensajes son unicamente para transportar los “nonces” y los dos últimos mensajes son usados para transportar la llave grupal que es usada para transmitir multicast y broadcast.

Hay que tomar en cuenta que la llave PTK no es una llave constante, esta puede ser actualizada por más que el suplicante ya se encuentre conectado a la red WiFi.

El gráfico de abajo describe el flujo de intercambio de paquetes entre el Suplicante y el Autenticador.

En la siguiente sección se mostrará cómo se ejecuta la reinstalación de la llave, en otras palabras la explotación de la vulnerabilidad.

[1] El atacante usa MiTM para poder visualizar el flujo de 4 vías que se usa para establecer el canal seguro.

[2] El atacante bloquea el Msg4, el cual corresponde a la afirmación del proceso de intercambio de llaves. Envía las llaves PTK y GTK manipuladas por el mismo atacante, las cuales son instaladas en el suplicante. Hay que tomar en cuenta que el Msg4 no fue recibido por el autenticador y tiene un contador “r+1”.

[3] El autenticador retransmite el Msg3, dado que nunca recibió el Msg4. El atacante deja pasar el nuevo mensaje Msg3. El suplicante instala el nuevo Msg3 con las nuevas llaves PTK y GTK. Por consiguiente el suplicante envía el Msg4 con el contador “r+2”.

Después de enviar el Msg4, los contadores se reinician, por lo que el siguiente frame comenzará con el contador “r+1”.

Dado que el cifrado en WPA2 usa la siguiente sintaxis, con dos dependencias “n” el valor del “nonce” más el contador y la llave PTK.

Al tener el contador inicial en 1 el atacante puede decifrar el contenido ya que conoce la llave del contador 1 y las llaves mismas.

[4] El Msg4 enviado por el suplicante el cual debe llegar al AP, se encuentra cifrado, y dado que el autenticador no instaló el PTK del anterior mensaje (Msg3 intervenido) este instala el nuevo PTK, el cual es manipulado por el atacante.

En conclusión es una ataque relativamente similar a un “race condition” el cual aprovecha el tiempo de la ejecución de los paquetes para sacar provecho del protocolo.

NOTA:

– Los suplicantes aceptan una retransmisión del Msg3 por más que se hayan completado las cuatro vías, en otras palabras si el PTK y el GTK ya fueron establecidos, el suplicante puede aceptar una retransmisión del Msg3.

– El atacante deberá encontrarse entre el AP y el suplicante, man-in-the-middle (MiTM).

– El ataque realizado evita que el Msg4 llegue al autenticador AP, de este modo nunca se concretan los cuatro pasos y el atacante puede transmitir el Msg3 para reinstalar una llave conocida.

– *wpa_supplicant, acepta estos mensages en texto plano.

– Existen tres variables de ataque que se pueden ejecutar, una de ellas es el Peer Key utilizado para tranmisiones unicast y el otro es el Fast BSS Transition para rooming.

Glosario

Supplicant/suplicante = Usuario y/o cliente como también puede ser un AP en modo rooming.

PMK = Pairwise Master Key, es una derivación de la contraseña usada para conectarse a la red WiFi.

PTK = Pairwise Transient Key ==> Llave intermediaria de PMK. PTK es separada en tres llaves como se muestra en la figura de encima.

KCK = Key Confirmation Key ==> prueba que tiene la llave PMK.

KEK = Key Encryption Key ==> es usado para distribuir el GTK.

TK = Temporal Key ==> Usado para cifrar la data.

De igual manera se genera el GMK, creado en el AP y el cual genera una llave intermedia GTK.

GTK = Group Transient Key ==> Transmisiones Multicast y Broadcast.

RSC = Receive Sequence Counter ==> Contiene el contador de recepcion del GTK.

AES-CCMP = Algoritmo que usa CBC empleado en WPA2, seguro mientras el Vector de Inicialización (IV) no se repita. El IV esta compuesto por MAC (Cifrado hash con llave) y número randónico “nonce” y un contador inicializado en 0.

Group Key = Esta llave es usada para transmitir entre clientes dentro de misma red AP.

MIC = Message Integrity Check ==> Usa el algoritmo MAC, un hash con llave, verificar integridad y autenticación.

EAPOL = Extensible Authentication Protocol over LAN. Usado mayormente con una compañía consta de servidores RADIUS y/o TACAS. En caso de no presentar esta infraestructura se emplea el protocol PSK (Pree Shared Key).

Fast BSS Transition = Estandar usado para conecciones de rooming.

Peer Key = Estandar usado para comunicaciones entre dos clientes conectados al mismo AP.

Group Key = Estandar usado para transmisiones multicast y Broadcast.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *