Introduction
Le premier protocole historiquement utilisé pour sécuriser les réseaux wifi était WEP. Devant les nombreuses vulnérabilités trouvées, un protocole plus sécurisé a vu le jour en 2004 : WPA2, respectant la norme 802.11i. Depuis 2004, aucune faille n’a été trouvée sur le protocole même. Mieux, le protocole WPA2 a été prouvé formellement comme étant sécurisé.
Malgré cela, le 16 Octobre 2017, des vulnérabilités sur le protocole WPA2 accompagnées d’une preuve de concept (« KRACK ») ont été publiées. En effet une vulnérabilité dans les 4-handshake échangés lors de la connexion d’un client à un point d’accès wifi a été trouvé. Ces handshakes permettent la négociation de la clef de chiffrement utilisée pour la sécurisation des échanges sur le réseau wifi. Selon le protocole utilisé pour la protection des données sur le réseau un attaquant peut au moins déchiffrer les données transitant sur le réseau et au mieux forger lui-même des paquets.
Rappel sur le wifi
Généralités
Le wifi est un protocole de communication sans fil local régi par un ensemble de normes (normes IEEE 802.11) qui ont évoluées au fur et à mesure du temps. Ces évolutions concernent aussi les moyens mis en place pour sécuriser l’utilisation de ces réseaux. Les trois protocoles de sécurisation du Wifi sont les suivants :
- WEP, fait partie de la norme 802.11 ratifiée en 1999
- WPA respecte en grande partie la norme 802.11i et a été mis en place afin de remplacer le WEP en attendant que la norme 802.11i soit terminée
- WPA2 respecte tous les éléments obligatoires de la norme 802.11i
Le protocole le plus répandu est WPA2 mais WPA n’a pas totalement disparu. Ces deux protocoles utilisent différents algorithmes de chiffrement pour protéger les données transitant sur le réseau : TKIP (WPA), AES-CCM ou AES-GCM (WPA2).
Focus sur les algorithmes de chiffrement utilisés
Le chiffrement par WPA-TKIP n’était qu’une solution temporaire remédiant à nombre de vulnérabilités de WEP et mis en place en attendant la solution finale qui était WPA2-CCM. Bien que cette dernière solution soit la plus utilisée, le chiffrement WPA2-GCM respecte une norme plus récente et il est attendu que son implémentation soit de plus en plus respectée dans les années à venir.
Le chiffrement WPA-TKIP est un chiffrement par flot basé sur RC4 et l’intégrité des messages est contrôlé par un algorithme appelé Michael.
Les deux autres algorithmes de chiffrements sont des algorithmes opérant par bloc et respectant le même mode d’opération : un chiffrement basé sur un compteur, c’est-à-dire que la clef utilisée pour chiffrer chaque bloc est calculé en fonction d’une clef et d’un compteur (un nombre aléatoire différent pour chaque chiffrement de bloc). Ainsi le même texte clair peut être chiffré deux fois sans donner le même texte chiffré.
L’intégrité des messages est vérifiée à l’aide de CBC-MAC pour WPA-CCM et par GMAC pour WPA-GCM.
4-way handshake
Lors d’une connexion d’un client à un point d’accès Wi-Fi sécurisé, quatre messages Handshakes sont échangées et différentes clefs de chiffrements sont créés :
L’échange des quatre handshakes se fait après la demande d’authentification du client au point d’accès wifi et est initié par ce dernier.
Les deux premiers messages du handshake permettent l’échange des deux nonce (un nonce calculé par le point d’accès wifi et le deuxième calculé par le client) nécessaires à la négociation de la clef de chiffrement qui va être utilisée tout au long de la session pour les messages unicast : la clef PTK (Pairwise Transient Key).
Le troisième handshake permet de communiquer la clef GTK (Group Temporal Key), chiffrée avec la clef PTK, et utilisée pour les messages broadcast et multicast. A la suite de ce handshake le client finalise la négociation des clefs de chiffrement en envoyant un dernier handshake et en installant la clef PTK. A la réception du handshake 4 le point d’accès wifi installe à son tour la clef PTK.
Le premier handshake est le seul message dont l’intégrité n’est pas vérifiée. L’intégrité des handshakes 2,3 et 4 est vérifiée grâce au paramètre MIC (Message Integrity Check).
KRACK
L’attaque a été découverte par deux chercheurs, Mathy VANHOEF et Frank PIESSENS, qui ont rédigé un papier intitulé « Key Reinstallation Atacks : Forcing Nonce Reuse in WPA2. »
Principe de l’attaque
Le principe de l’attaque est d’intercepter les requêtes lors du 4-way handshake entre le client et le point d’accès. En bloquant le handshake 4, le client va installer la PTK et commencer à envoyer des paquets chiffrés. Néanmoins le point d’accès n’ayant jamais eu confirmation de la réception du handshake 3 par le client, le handshake 3 sera renvoyé et la clé PTK sera réinstallé sur le poste du client :
La réinstallation de la clé PTK va mener à la réinitialisation du vecteur d’initialisation utilisé dans les différents chiffrements.
Or, pour reprendre les terminologies utilisées lors du paragraphe « Focus sur les algorithmes de chiffrement utilisés», le vecteur d’initialisation est utilisé comme base du compteur. C’est-à-dire que c’est à partir du vecteur d’initialisation que les valeurs du compteur vont être générées. En réinitialisant le vecteur d’initialisation à la même valeur, le compteur va prendre deux fois la même valeur. Ainsi en réalisant un XOR entre le Msg4 (encadré en noir ci-dessus) et le Msg4 chiffré (encadré en rouge ci-dessus), on obtient la clef de chiffrement utilisé pour le message « Data » (encadré en violet).
Exploitation
Néanmoins cette attaque, dans les conditions présentées ci-dessus, reste assez théorique. En effet sans le Msg4 non chiffré (encadré en noir) il serait impossible de retrouver la clef de chiffrement et donc de retrouver le message « Data » en clair. Le nombre de paquet qu’il est donc possible de déchiffrer est très limité.
C’est dans le cas de l’utilisation du logiciel wpa_supplicant (version 2.4 et versions suivantes) que l’attaque se révèle redoutablement efficace. En effet le client va alors réinstaller une PTK nulle permettant alors à un attaquant de déchiffrer tout les paquets comme démontré dans le PoC (« proof of concept ») KRACK.
Des patchs pour wpa_supplicant sont maintenant disponibles.
Conclusion
La probabilité qu’un attaquant puisse exploiter cette vulnérabilité pour accéder à des informations sensibles reste assez faible (en dehors de wpa_supplicant), bien que la probabilité ne soit pas nulle. Il faut bien entendu mettre ces systèmes à jour aussi minime que soit le risque.
Néanmoins l’intérêt de la découverte de cette faille ne réside pas seulement dans son aspect pratique mais aussi dans ce qu’elle nous apprend. Deux leçons principales peuvent être tirées de la découverte de cette vulnérabilité. La première est l’échec de test unitaire en sécurité : le handshake et les protocoles de chiffrement sont prouvés sécurisés. Néanmoins la combinaison des deux ne l’est pas. La deuxième est qu’une manière efficace d’éprouver la sécurité en informatique est de rendre les ressources opensource. Comme le remarque justement Matthew Green sur son blog (https://blog.cryptographyengineering.com/2017/10/16/falling-through-the-kracks/), les standards IEEE sont difficiles d’accès même pour les chercheurs. Ce qui explique qu’il ait fallu pratiquement 14 ans pour découvrir la vulnérabilité.
Le standard WPA3, plus sécurisé, est en cours de rédaction et promet quatre nouvelles fonctionnalités dont une protection robuste même en cas de mot de passe faible.
Florian DESMONS
Sources
Wi-Fi Alliance. Technical Note: Removal of TKIP from Wi-Fi Devices, March 2015.