Tras la introducción teórica del funcionamiento del proceso de autenticación, comentada la semana pasada (I y II), es hora de abordar la metodología utilizada por las herramientas de seguridad inalámbricas que permiten realizar ataques de diccionario a la PSK, aplicaciones como Airolib (de la suite Aircrack) o Cowpatty. Aunque en un inicio pensamos separar esta entrada en dos, hemos llegado a la conclusión de que no tiene sentido, y que aunque sea un poco largo, aquellos interesados lo agradecerán.
El estándar 802.11i, y en concreto WPA, conforma un protocolo de seguridad complejo y fiable, si es utilizado de la manera adecuada. No obstante, no esta exento de ser susceptible a ataques de diccionario y fuerza bruta. En este post se detalla de forma teórica el principal “Talón de Aquiles” que presenta este protocolo. Éste reside en el proceso de autenticación entre las estaciones de la red y el punto de acceso, el llamado saludo a cuatro vías o “4 way-handshake“; dicho proceso consta del intercambio de 4 paquetes para la gestión del acceso a la red. La brecha de seguridad a la que nos referimos, y que un atacante podría utilizar, se encuentra tanto en el segundo como en el cuarto paquete, ya que en ambos la estación transmite al AP el MIC o control de integridad, y el mensaje EAPoL en claro. (Recordad que el valor MIC conforma el resultado de aplicar el algoritmo de control de integridad “Michael” al mensaje EAPoL. Dicha función toma como entrada el paquete de datos mismo, las direcciones MAC origen/destino, y parte de la PTK; todo ello genera mediante la función de HASH HMAC_MD5 la cadena de control de integridad.)
Así pues, un atacante podría capturar ambos valores: el MIC y el paquete sin cifrar EAPoL, para inferir la clave de cifrado mediante fuerza bruta. Para ello primero deberá calcular, realizando una estimación, la PMK’, usando para ello (a) la PSK’ o clave compartida, y (b) el ESSID. Una vez calculada una posible PMK’, su resultado es utilizado por otra función matemática que calculará la PTK’, usando para ello las direcciones MAC de los dispositivos y los dos valores aleatorios intercambiados SNonce y Anonce. En este punto, el atacante ya puede calcular un valor MIC’ estimado a partir del paquete de datos EAPoL capturado, utilizando la PTK’. El resultado de la estimación es comparado con el valor capturado, y si los valores de MIC y MIC’ son idénticos, la PSK es la correcta.
Para ayudar a comprender todo el proceso, que como se ha visto no carece de complejidad, nada mejor que utilizar una captura real para observar el valor de los términos comentados. Las siguientes imágenes muestran el proceso de autenticación “4-Way Handshake” entre una estación y un punto de acceso. Para mayor claridad, se ha eliminado todo aquel tráfico que no cumple el criterio de pertenecer a un paquete 802.1X (0x888E).
1. AP -> Estación. El primer paquete de autenticación no contiene información relevante para el atacante.
2. Estación -> AP. Este segundo paquete contiene información relevante; el atacante captura el valor aleatorio SNonce, resaltado en verde en la imagen siguiente:
3. AP -> Estación. En este tercer paquete de autenticación, la información relevante capturada es tanto el número aleatorio Anonce (color verde), como las direcciones MAC del punto de acceso y la estación suplicante (color azul y rojo respectivamente).
4. Estación -> AP. Último paquete del saludo. La información capturada es el valor MIC calculado mediante parte de la PTK y la trama de datos utilizada en la función de Hash (paquete EAPoL). Destacar que el valor del MIC es añadido posteriormente al paquete; hasta que su valor no es calculado,la trama se rellena con ceros.
A continuación, al atacante tan solo le queda seguir los pasos que a continuación se detallan para determinar si su estimación de la PSK ha sido la correcta:
1. Mediante los datos obtenidos de la captura se generará la PMK, utilizando la función de HASH SHA1. Destacar que dicha función requiere de un coste computacional elevado y representa uno de los principales escollos de los ataques de fuerza bruta y diccionario.
PMK = pdkdf2_SHA1 (frase secreta, SSID, longitud del SSID, 4096) PMK = pbkdf2_sha1 ("fraseTest","linksys",7,4096) ;Ejemplo
2. Una vez obtenida la PMK, generará la PTK mediante la función pseudo aleatoria PRF-X, donde la X indica el valor en bytes de la salida, 512 bytes para TKIP en este caso:
PTK = PRF-X (PMK, Longitud(PMK), "Expansión de la clave", Min(AP_MAC, STA_MAC) || Max(AP_MAC, STA_MAC) || Min(ANonce, SNonce) || Max(ANonce, SNonce)) PTK = SHA1_PRF( 9e99 88bd e2cb a743 95c0 289f fda0 7bc4 ;PMK 1ffa 889a 3309 237a 2240 c934 bcdc 7ddb, 32, ; Longitud del PMK "Expansión de la clave", ;cadena de texto 000c 41d2 94fb 000d 3a26 10fb 893e e551 ; MAC y valores Nonce 2145 57ff f3c0 76ac 9779 15a2 0607 2703 ; 8e9b ea9b 6619 a5ba b40f 89c1 dabd c104 d457 411a ee33 8c00 fa8a 1f32 abfc 6cfb 7943 60ad ce3a fb5d 159a 51f6, 76 ) PTK = ccbf 97a8 2b5c 51a4 4325 a77e 9bc5 7050 ; PTK resultado daec 5438 430f 00eb 893d 84d8 b4b4 b5e8 19f4 dce0 cc5f 2166 e94f db3e af68 eb76 80f4 e264 6e6d 9e36 260d 89ff bf24 ee7e
3. Al calcular la PTK, tan sólo quedaría diferir el “Hash” MIC a partir de esta. Para ello se utiliza una parte de la PTK, la llamada “Clave MIC”, que no es mas que un escisión de la PTK con una longitud “n”, pasada también como parámetro. En nuestro ejemplo su valor es 16:
MIC = HMAC_MD5(Clave MIC, 16, Paquete EAPoL) MIC = HMAC_MD5( ccbf 97a8 2b5c 51a4 4325 a77e 9bc5 7050, ; Primeros 16 bytes de la PTK 16, ; Longitud de la PTK 0103 005f fe01 0900 0000 0000 0000 0000 ; Paquete EAPoL 1400 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ) MIC = d0ca 4f2a 783c 4345 b0c0 0a12 ecc1 5f77 ; Control de integridad
4. El MIC capturado es comparado con el nuevo MIC’ estimado, y si ambos coinciden, el atacante ha obtenido la PSK:
MIC' calculado usando el cuarto paquete EAPoL con “fraseTest": d0ca 4f2a 783c 4345 b0c0 0a12 ecc1 5f77 MIC capturado: d0ca 4f2a 783c 4345 b0c0 0a12 ecc1 5f77 Los MIC calculados coinciden. Se ha conseguido la PSK: “fraseTest".
(Para más información, puede consultarse el artículo en inglés de Seth Fogie en Cisco, “Cracking Wi-Fi Protected Access (WPA), Part 2“, y el artículo de la revista Hanki9, en formato PDF, “Wi-Fi security – WEP, WPA and WPA2“)