Télécharger le dossier PDF
Sécurité des réseaux WIFI
PTUT
Année universitaire 2019 - 2020
DUT Informatique - Année 1 - Semestre 2
IUT d’Aix en Provence
Florian Ancelin - Lucas Duval - Clément Mathieu–Drif
Jean-Christophe Nguyen - Nils Ponsard - Hugo
Tritz
Tuteur
Samuele Anni
02/06/2020
Auteurs des parties
Éléments du WEP, Authentification, Chiffrement avec
WEP, Spécificité
du protocole, Fin de vie
: Lucas Duval et Jean-Christophe Nguyen
RC4, KSA, PRGA, Fin de l’exemple, Déchiffrement
: Florian Ancelin et Clément Mathieu–Drif
WPA2 (Historique, Modes de chiffrement, AES)
: Clément Mathieu–Drif
Détection des intrusions
: Lucas Duval, Jean-Christophe Nguyen et Nils Ponsard
Failles de sécurité du WEP
: Lucas Duval, Jean-Christophe Nguyen
Description du 4-way handshake
: Florian Ancelin
Failles de sécurité du WPA2 (KRACK, KR00K, autres attaques)
: Clément Mathieu–Drif
Liens utiles
Site internet du projet : https://hugo_harkness.gitlab.io/JPP-de-PTUT Dépôt GitLab : https://gitlab.com/Hugo_Harkness/JPP-de-PTUT (diagramme de Gantt disponible sur ce dépôt)
Table des matières
Protocoles
2 WEP
2.1 Éléments du WEP
2.2 Authentification
2.2.1 Open System auth
2.2.2 Shared Key auth
2.3 Spécificités du protocole
2.3.1 Différents types de WEP
2.4 Fin de vie
2.5 RC4
2.6 KSA
2.7 PRGA
2.8 Fin de l’exemple
2.9 Déchiffrement
2.9.1 Une fonction involutive est bijective
2.9.2 Application au RC4
2.9.3 Conséquence
3 WPA2
3.1 Historique
3.2 Chiffrement et modes de chiffrement
3.2.1 TKIP
3.2.2 CCMP
3.2.3 CTR - Counter mode
3.2.4 CBC - Cipher Block Chaining
3.2.5 CBC-MAC - Message Authentication Code
3.3 AES
3.3.1 Opérations
3.3.2 SubBytes
3.3.3 ShiftRows
3.3.4 MixColumns
3.3.5 Préparation de la clé - Key Schedule
3.3.6 Add RoundKey
3.3.7 Algorithme de haut niveau
Détection des intrusions
4 Pourquoi détecter les intrusions ?
4.1 Quels sont les risques d’une intrusion ?
5 Les méthodes de détection
5.1 Détection par adresse MAC
5.2 Détection d’usurpation d’adresse MAC
5.3 Détection de "Brutforce"
5.4 Détection d’injections WEP
5.5 Détection des injection VLAN
5.6 Détection d’usurpation de point d’accès
Failles de sécurité
6 WEP
6.1 Introduction aux failles du protocole
6.2 Différentes attaques sur le protocole
7 Authentification : 4-way handshake
7.1 Les différentes clés et outils utilisés
7.2 Utilisation du 4-Way Handshake
8 WPA2
8.1 Faille KRACK
8.1.1 Résumé de la situation
8.1.2 Outils de détection
8.1.3 Attaque de l’homme du milieu (man in the middle : MITM)
8.1.4 Associativité du XOR (eXclusive OR)
8.1.5 Fonctionnement de l’attaque
8.1.6 Cas particuler : wpa_supplicant 2.4 et 2.5
8.1.7 Impact
8.1.8 Informations complémentaires
8.1.9 Correctifs
8.2 Faille Kr00k
8.2.1 Fonctionnement
8.2.2 Appareils concernés
8.2.3 Correctifs
8.3 Autres attaques
Conclusion
1 Introduction
Les technologies sans fil (WIFI, Bluetooth, NFC, etc) sont
utilisés tous les jours et par tous mais ne sont maitrisées
que par une minorité de leurs utilisateurs.
Étant nous même utilisateurs, nous avons décidé dans le
cadre du projet tutoré du second semestre de DUT
informatique de nous interesser À l’une d’entre elles et
plus particulièrement à la manière dont elle sécurise les
données transmisses. Le travail effectué durant ce projet
aura donc pour but de comprendre comment fonctionne la
sécurisation des connexions WIFI.
Les sujets principaux traités dans le cadre de ce projet sont :
- Étude de protocoles WEP et WPA2
- Description des failles de ces deux protocoles
- Présentation des méthodes de détection des intrusions
Première partie
Protocoles
2 WEP
WEP (Wired Equivalent Privacy) est un protocole réseau qui protège les données circulant sur un réseau WIFI. Le WEP est employé dans un WLAN (Wireless Local Area Network) pour rendre inintelligible à un tiers non autorisé les données encapsulées dans des trames.
Le WEP a pour objectif de garantir la confidentialité, l’authentification et l’intégrité des données et il est inclus dans la norme IEE 802.11 (1997). Le but recherché est d’atteindre le niveau de sécurité d’une communication filaire.
Le WEP utilise une clé RC4 (Rivest Cipher 4 : algorithme de chiffrement symétrique décrit plus loin dans ce dossier) composée d’une partie de 40 bits et d’un vecteur d’initialisation de 24 bits. Un contrôle de redondance cyclique (CRC-32) est également utilisé pour assurer l’intégrité des données. Quand le WEP est activé sur un réseau local sans fil, chaque trame est chiffrée dans un flux codé RC4, généré par une clé 64 bits. Ce protocole a été remplacé par le WPA (Wi-Fi Protected Access) en 2003 (Wifi Alliance) puis déprécié en 2004.
2.1 Éléments du WEP
- WEP utilise une clé secrète qui est partagée entre les clients ; elle sert au chiffrement, au déchiffrement et à l’authentification. Cette clé contient une séquence "secrète" de 40 bits ou 104 bits. Elle peut être composée de caractères ASCII (5 pour 40bits) ou des caractères hexadécimaux (10 pour 40 bits). Les caractères ASCII doivent être affichables, ce qui réduit les possibilités par rapport à l’hexadécimal.
- Les clés de chiffrement supportées et principalement utilisées sont composées de 64 bits avec 40 bits pour la clé et 24 bits pour le vecteur d’initialisation ou de 128 bits dont 104 bits pour la clé et 24 bits pour le vecteur d’initialisation. La clé peut être considérée comme une suite de caractères qui changent selon les bits. Pour WEP-64, c’est 5 caractères ASCII pour 40 bits ou 10 caractères hexadécimaux pour 40 bits. Pour WEP-128, ce sont 13 caractères ASCII pour 104 bits ou 26 caractères hexadécimaux pour 104 bits.
- Le vecteur d’initialisation (IV) est une séquence de bits qui change régulièrement. Combiné à la clé statique, il introduit une notion aléatoire au chiffrement. Ainsi, deux messages identiques ne donneront pas le même contenu chiffré, puisque l’IV est dynamique. Le vecteur d’initialisation peut avoir 224=16 777 216 combinaisons différentes ce qui permettra d’obtenir des clés de chiffrement "uniques" rendant le déchiffrement plus difficile. Plus la clé est longue, plus la sécurité est optimisée (une clé de 128 bits mettra plus de temps à être trouvée qu’une clé de 64 bits).
-
Le WEP utilise un mécanisme nommé Integrity Check Value
(ICV), destiné à contrôler l’intégrité des trames. Pour
cela, un code équivalent au CRC32 est calculé. Il
résulte du message en clair
et non du contenu chiffré. Le CRC32 correspond en fait au reste de la division en binaire du message par un diviseur fixé à l’avance (polynôme de degré 32).
2.2 Authentification
2.2.1 Open System auth
- Cette méthode peut-être considérée comme une authentification nulle car pas d’authentification. La clé doit être utilisée lors de l’appairage.
2.2.2 Shared Key auth
4 étapes :
- Le client envoie une requête d’authentification
- Le point d’accès répond avec un challenge (non chiffré)
- Le client chiffre le challenge et le renvoie
- Le point d’accès déchiffre le challenge chiffré et regarde si le texte est le même
Si le réseau est perturbé l’authentification échouera.
Il y a une faille plutôt évidente : si on intercepte le challenge non chiffré puis la réponse chiffrée, un simple XOR (OU exclusif) permet à un attaquant de recueillir suffisamment d’informations pour s’authentifier à son tour.
2.3 Spécificités du protocole
2.3.1 Différents types de WEP
Il y a deux types de WEP :
-
Le WEP statique : il ne
doit être pas être utilisé n’importe quand et n’importe
comment, c’est une solution qui n’est pas la meilleure
mais qui reste adaptée dans certains cas.
Le WEP statique est capable de contrer des attaques peu intenses et occasionnelles mais pas de grosses attaques. Cependant des appareils tels que des lecteurs de code-barres portables supportent exclusivement le WEP statique, c’est donc la seule option viable pour sécuriser la couche de liaison.
-
Le WEP dynamique : les
meilleures solutions sont basées sur le WEP dynamique.
Chaque station utilise 2 clés au lieu d’une :
-La 1ère clé est une clé de mappage partagée entre la station et le point d’accès, elle protège les trames unicast.
-La 2ème clé est une clé par défaut, partagée entre toutes les stations, elle protège les trames multicast et broadcast.
Il suffit de quelques minutes pour reconstituer tous les morceaux de la clé WEP qui circulent de temps à autres sur votre réseau. La raison pour laquelle ils circulent est intimement liée à l’algorithme utilisé car celui-ci doit être initialisé à chaque échange pour ne pas utiliser deux fois la même clé.
Nous verrons dans ce dossier la raison pour laquelle une clé de chiffrement ne doit pas être réutilisée lorsque l’on fait appel à un algorithme de chiffrement qualifié de "One time pad".
2.4 Fin de vie
- Le protocole WEP est donc composé de plusieurs éléments, se décline sous plusieurs formes et a été beaucoup utilisé entre 1999 et 2004 car il était l’un des protocoles les plus sécurisés. Mais aujourd’hui, s’il n’est (quasiment) plus utilisé c’est parce qu’il a été remplacé par le WPA puis le WPA2, des protocoles plus performants et moins vulnérables.
2.5 RC4
RC4 (Rivest Cipher 4) est un algorithme de chiffrement par
flot crée en 1987 par Ronald Rivest. Ce document décrit son
fonctionnement au travers d’un exemple.
RC4 utilise deux fonction, KSA (Key Scheduling Algorithm) et
PRGA (Pseudo Random Generation Algorithm) pour générer un
flot de bits pseudo aléatoire qui sera utilisé pour le
chiffrement. De manière générale, la taille du tableau à
initialiser est de
. Les éléments de ce tableau sont des mots de
bits Dans notre cas, le tableau contiendra donc 256 éléments
de 1 octet
"For real applications, n=8 is used as it is a
good trade-off between security and
memory requirements, and it is also natural and easy to
implement" Evaluation of RC4
Stream Cipher - Ed Dawson, Helen Gustafson, Matt
Henricksen, Bill Millan
Remarque 1 : les implémentations fournies dans ce document
(en C++) utilisent n = 256.
Remarque 2 : les tableaux représentés dans ce document le
sont avec l’élément d’indice
à gauche et celui d’indice
à droite.
Avant l’exécution de ces deux fonctions, le tableau est initialisé ainsi :
soit la permutation identité de
,
les
sont les caractères de la clé K de taille
2.6 KSA
Après initialisation, le vecteur est parcouru une première
fois par l’indice
afin d’appliquer une série de permutations. Les permutations
effectuées par KSA sont calculées en fonction de la clé
.
Les permutations sont définies par ces relations :


l’implémentation du KSA est la suivante :
for(unsigned i(0); i < tab.size(); ++i)
{
j = (j + tab[i] + cle[i % cle.size()]) % 256;
swap(tab[i], tab[j]);
}
où
correspond à

Puisque
et que cela correspond à la première initialisation du
tableau, la boucle peut commencer à
. La
permutation effectuée par le programme lorsque
correspond donc à
. Le
programme effectue alors
permutations. La
permutation de l’algorithme correspond alors à la
permutation calculée avec la relation précédente. L’indice


Voici un exemple avec
|
|
|
4 | 2 | 1 |
|
|
|
|
|
|
0 | 1 | 2 |
|
|
|
ce qui correspond donc à :
|
|
|
|
|
0 | 1 | 2 | 3 | 4 |
|
|
|
|
|
-
|
|
|
|
|
4 | 1 | 2 | 3 | 0 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 1 | 3 | 0 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 0 | 3 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 3 | 0 | 2 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 3 | 0 | 2 | 1 |
|
|
|
|
|
les valeurs de j calculées par l’algorithme pour ce même
exemple sont :
i = 0, j = 4
i = 1, j = 2
i = 2, j = 4
i = 3, j = 1
i = 4, j = 4
et les permutations qui en découlent sont de la forme :
2.7 PRGA
PRGA (Pseudo-Random Generation Algorithm) est un générateur pseudo aléatoire qui effectue des permutations sur un tableau

implémentation en C++ :
vector<uint8_t> tab2;
for(unsigned i(0); i < chaine.size(); ++i)
{
a = (a + 1) % 256;
b = (b + tab[a]) % 256;
swap(tab[a], tab[b]);
tab2.push_back((tab[(tab[a] + tab[b]) % 256]));
}
Les permutations appliquées sur


les
sont les éléments du second tableau :

La taille finale du tableau

Suite de l’exemple avec
|
|
|
4 | 2 | 1 |
|
|
|
|
|
|
0 | 1 | 2 |
|
|
|
les différents états de
|
|
|
|
|
4 | 3 | 0 | 2 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 0 | 3 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 3 | 0 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 3 | 0 | 1 |
|
|
|
|
|
-
|
|
|
|
|
4 | 2 | 3 | 0 | 1 |
|
|
|
|
|
2.8 Fin de l’exemple
Calculons les valeurs des éléments de

Après
|
|
|
4 | 0 | 4 |
|
|
|
la fin du processus de chiffrement consiste en un XOR bit à bit (défini plus loin) entre
Les implémentations du PRGA et de l’étape finale (XOR) peuvent être regroupées ainsi :
vector<uint8_t> tab2;
for(unsigned i(0); i < chaine.size(); ++i)
{
a = (a + 1) % 256;
b = (b + tab[a]) % 256;
swap(tab[a], tab[b]);
tab2.push_back((tab[(tab[a] + tab[b]) % 256]) ^ chaine[i]);
}
Le XOR (ou exclusif) est noté
(et
|
|
|
a | b | a XOR b |
|
|
|
0 | 0 | 0 |
|
|
|
0 | 1 | 1 |
|
|
|
1 | 0 | 1 |
|
|
|
1 | 1 | 0 |
|
|
|
|
|
|
4 | 0 | 4 |
|
|
|
|
|
|
0 | 1 | 2 |
|
|
|
message chiffré :
|
|
|
4 XOR 0 | 0 XOR 1 | 4 XOR 2 |
|
|
|
message chiffré :
|
|
|
4 | 1 | 6 |
|
|
|
2.9 Déchiffrement
Le déchiffrement est très simple dans la mesure où il utilise la même fonction que celle que nous venons de décrire. La raison pour laquelle le chiffrement et le déchiffrement utilisent le même algorithme découle du fait que la fonction correspondante est involutive.
2.9.1 Une fonction involutive est bijective
Soit
une fonction involutive.
Soient
et
deux éléments de E

est injective

est surjective et donc
est bijective
2.9.2 Application au RC4
Soit
avec
et E l’ensemble des messages (chiffrés ou non chiffrés).
M est le message a chiffrer, G est le tableau pseudo
aléatoire dépendant de la clé de chiffrement (sortie du PRGA)
et C est le message chiffré donc
.
La fonction
est utilisée dans le chiffrement RC4 de la manière suivante
:

Montrons que
Nous avons donc :

et

donc la fonction est involutive.

Dans RC4, la fonction de chiffrement est la même que celle de déchiffrement.
2.9.3 Conséquence
Nous avons vu précédemment qu’une application involutive est bijective. De ce fait, dans le cas de RC4, deux messages différents ne peuvent pas donner lieu au même message chiffré pour un keystream donné. Cette propriété découle de l’injectivité.
3 WPA2
3.1 Historique
Suite à la découverte des vulnérabilités du WEP une nouvelle version du système de sécurisation des réseaux WIFI était nécessaire. La norme IEEE 802.11i est alors rédigée. Une première version, le WPA a été publiée en 2003 alors que la nouvelle norme était encore en rédaction. Finalement en 2004 la norme IEEE 802.11i est terminée et donne naissance au WPA2 encore largement utilisé aujourd’hui.
Il existe deux versions de WPA2 :
- WPA2 personnel qui se base sur un secret partagé
- WPA2 entreprise qui utilise un serveur d’authentification (comme eduroam).
En 2018 la wifi Alliance a annoncé WPA3 corrigeant des problèmes de sécurité de WPA2 (voir à ce sujet la partie consacrée à la faille KRACK). WPA3 a cependant déjà été compromis par Mathy Vanhoef (à l’origine de la faille KRACK du WPA2) et Eyal Ronen, qui ont présenté en avril 2019 l’attaque DragonBlood se basant sur le Dragonfly Handshake utilisé par ce protocole. Des correctifs ont depuis été publiés.
3.2 Chiffrement et modes de chiffrement
3.2.1 TKIP
Temporal Key Integrity Protocol, utilise le chiffrement RC4. Ce type de connexion est considérée comme non sécurisée et est uniquement utilisé pour assurer la compatibilité avec de vieux équipements. TKIP n’est pas traité en détail dans ce document.
3.2.2 CCMP
Counter Mode with Cipher Block Chaining Message
Authentication Code Protocol (CCMP), basé sur le standard
AES (Advanced Encryption Standard), permet une protection
supérieure et une vérification d’intégrité plus efficace que
TKIP. L’utilisation de cette méthode de chiffrement est
nécessaire pour dépasser un débit de 54 Mbit/s (spécification
802.11n).
CCMP utilise une clé de 128 bits et un
numéro de paquet
de 48 bits qui n’est jamais réutilisé et évite les attaques
de type rejeu. Ce protocole encapsule les données dans un
MPDU (MAC Protocol Data Unit).
CCMP utilise le mode CTR pour le
chiffrement des données avec AES et CBC-MAC pour contrôler
l’intégrité des messages. Commençons par décrire ces deux
modes.
1
3.2.3 CTR - Counter mode
Ce mode ne crée pas de lien entre les blocs de données contrairement au mode CBC décrit dans la partie suivante. Cette particularité peut permettre d’effectuer le chiffrement en parallèle car le traitement d’un bloc ne dépend pas de celui des blocs précédents.
Notons
le
bloc non chiffré,
le
bloc chiffré. La fonction de chiffrement est notée
avec
la clé de chiffrement.
source : Wikipédia

Où ||
est l’opérateur de concaténation. Et
représente l’opérateur XOR.
source : Wikipédia

Dans ce mode, comme pour le chiffrement RC4 par exemple, la fonction de chiffrement est la même que celle de déchiffrement (voir la partie sur RC4).

ce qui nous donne donc :


CCMP utilise une valeur appelée
CTR Preload, elle correspond
à la concaténation
présente sur les descriptions. Cette valeur est composée
d’un octet de drapeaux (flags), d’un octet provenant du
champs QoS, de l’adresse de l’émetteur sur 6 octets, d’un
(6 octets) et d’un compteur
sur deux octets initialisé à 1 et qui sera incrémenté pour
chaque nouveau chiffrement. Soit un total de 128 bits. Ce qui
donne finalement :


l’indice
n’apparaît pas ici mais le compteur
est bien présent dans le
. Ce compteur est incrémenté à chaque nouveau chiffrement. Notons
également que lors du chiffrement du MAC (défini dans la partie suivante), le
compteur
du
est égal à
.
3.2.4 CBC - Cipher Block Chaining
Chaque bloc à chiffrer subit un XOR avec le bloc chiffré
précédent. Pour le premier bloc, un vecteur d’initialisation
est utilisé.
Illustration : à gauche, les données non chiffrées, au centre, le chiffrement utilise le mode ECB et à droite, un autre mode tel que CBC (source : Wikipédia)
Avec le mode ECB (Electronic codebook), deux blocs identiques donnent le même bloc chiffré (ce qui permet de trouver les blocs clairs réutilisés), ce qui n’est pas le cas avec le mode CBC puisque le bloc chiffré dépend des blocs précédents. De plus, l’interdépendance des blocs permet d’assurer qu’un bloc de la chaîne ne peut pas être modifié sans conséquences sur les suivants.
source : Wikipédia
Notons
le
bloc non chiffré,
le
bloc chiffré avec
et
.
La fonction de chiffrement est notée
et le déchiffrement
avec
la
clé de chiffrement.





3.2.5 CBC-MAC - Message Authentication Code
Ce calcul a pour but de construire un code d’authentification (MAC) en se basant sur le mode CBC afin de contrôler l’intégrité du message ainsi que l’authentification car le processus nécessite de connaitre la clé de chiffrement.
Dans ce cas le vecteur d’initialisation est le résultat du
chiffrement par AES d’un
très similaire au
. Ce
est construit par concaténation avec un octet de drapeaux,
un octet provenant du champ QoS, l’adresse de l’émetteur sur
6 octets, un
sur 6 octets et deux octets contenant la longueur totale du
message à chiffrer.
Les 64 premiers bits (bits de poids fort) du dernier bloc chiffré de 128 bits sont conservés pour former le MAC.
Ce MAC permet de vérifier l’intégrité de l’intégralité du message (en-tête comprise) mais dans la trame finale, l’en-tête n’est pas chiffrée.
Lors de la réception, le destinataire déchiffre le message (mode CTR) puis calcule le MAC (mode CBC) qu’il compare au MAC reçu, si les deux résultats correspondent, les données n’ont pas été modifiées et peuvent donc être conservées.
Voici un schéma résumant le fonctionnement de CCMP 2 .
3.3 AES
Advanced Encryption Standard (AES) est une spécification de chiffrement symétrique par blocs définie par la National Institute of Standards and Technology. La taille des blocs est de 128 bit et la taille de clé peut être de 128,192 ou 256 bits.
Ce document traite de la version AES-128
AES utilise une matrice carrée d’ordre 4 pour représenter les données à chiffrer (128 bits soit 16 octets, ce qui correspond au nombre d’éléments de la matrice). Notons que dans une implémentation, il est également possible de représenter les données comme un tableau unidimensionnel à 16 éléments.
- indices 0 à 3 : première colonne
- indices 4 à 7 : deuxième colonne
- indices 8 à 11 : troisième colonne
- indices 12 à 15 : quatrième colonne
Quelle que soit la représentation utilisée, les octets sont
considérés comme des éléments de
.
Dans la suite de ce document nous utiliserons la
représentation matricielle et la matrice sera notée
.
3.3.1 Opérations
Le corps fini
est muni de deux opérations : l’addition et la
multiplication.
est l’élément neutre pour l’addition et est l’élément
absorbant pour la multiplication.
est l’élément neutre pour la multiplication.
La multiplication est distributive par rapport à l’addition.
L’addition dans
est simple à comprendre et à implémenter car elle est
équivalente à un XOR (OU exclusif). Ainsi
est équivalent à
donc
.
La multiplication, quant à elle,
est moins directe. Ici, il est nécessaire de représenter les
éléments de
comme étant des polynômes dans
(le polynôme
est irréductible). La multiplication se fait en deux étapes
:
- multiplication des polynômes
-
recherche du reste de la division par
Le résultat est le reste de la seconde étape. La recherche
du reste étant similaire à celle utilisée dans le calcul de
CRC (Contrôle de redondance cyclique), voici un cours
expliquant son fonctionnement :
https://ensiwiki.ensimag.fr/images/f/f3/Tp∖_crc16.pdf
Un programme en C++ permettant de réaliser ce calcul de
reste est disponible dans le répertoire CPP du dépôt GitLab
(lien au début de ce dossier).
Calculons
. dans un premier temps voici les polynômes correspondants
:
donc
donc


dans
, 1 + 1
= 0 ce qui nous donne :

cherchons le reste de la division par

le polynôme trouvé est
soit
Notons que la représentation utilisant les polynômes peut être utilisée pour l’addition
également, c’est ce qui a été fait pour calculer ceci :


Les opérations décrites dans cette partie sont utilisées tout au long de ce document.
3.3.2 SubBytes
La première étape de l’algorithme consiste à calculer
l’inverse multiplicatif de chaque élément de la matrice de
départ dans
et à appliquer la transformation affine suivante dans
(chaque élément de cet ensemble représente un octet dont les
bits sont :
avec
le bit de poids faible et
le bit de poids fort) :

Notons que la matrice utilisée est circulante.








ce qui correspond à :

avec
. Il est ici question d’associer à la valeur
de chaque octet une nouvelle valeur
.
D’après le théorème de Lagrange sur les groupes, l’ordre
d’un élément d’un groupe est un diviseur du cardinal de ce
groupe. donc pour un élément
d’ordre
, dans
un groupe de cardinal
, on a
. donc
. Alors
est l’inverse de
car
. Dans le cas d’AES nous cherchons des inverses dans
(groupe par rapport à la multiplication car tous les
éléments ont un inverse).
est de cardinal 255. Donc pour tout
, nous avons
Puisque 0 n’a pas d’inverse, nous considérons que sa valeur
reste inchangée lors de cette étape et nous avons donc
.
Exemple :
dans cet exemple, un élément de la matrice S est
.
Nous cherchons l’inverse multiplicatif de
noté
. Comme nous l’avons vu,
et
donc
Calculer des produits d’éléments de
peut être fait avec une fonction de ce type
3 qui utilise la technique de
multiplication dite Russe :
{
uint8_t p = 0;
while (a && b)
{
if (b & 1)
p ^= a;
if (a & 0x80)
a = (a << 1) ^ 0x11b; // x^8 + x^4 + x^3 + x + 1
else
a <<= 1;
b >>= 1;
}
return p;
}
Élevons
à la puissance 254 :
resultat = gmul(resultat, 90); // 3
uint8_t p3 = resultat;
resultat = gmul(resultat,resultat); // 6
resultat = gmul(resultat, resultat); // 12
uint8_t p15 = gmul(resultat, p3); // 15
resultat = gmul(resultat, resultat); // 24
resultat = gmul(resultat, resultat); // 48
resultat = gmul(resultat, p15); // 63
resultat = gmul(resultat, resultat); // 126
resultat = gmul(resultat, 90); // 127
resultat = gmul(resultat, resultat); // 254
Après exécution, nous trouvons
.
ce qui nous donne :








soit
. ce qui correspond bien à la valeur trouvée dans la S-box
:
source : Wikipédia
En pratique, il est possible de conserver la S-box dans le code source d’un programme pour éviter les calculs, c’est ce qui a été fait dans le noyau Linux 4 par exemple :
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
...
};
Toutes les valeurs de la S-box sont différentes et il
n’existe aucun
telle que
.
L’application décrite ici est donc une bijection sans point
fixe. Notons également qu’il n’existe pas non plus d’élément
tel que
(soit
.
3.3.3 ShiftRows
Cette étape modifie les lignes de la matrice obtenue après l’étape SubBytes. Pour cela, des décalages circulaires vers la gauche sont appliqués sur les lignes selon les données suivantes :
- ligne 0 : reste inchangée
- ligne 1 : 1 rang
- ligne 2 : 2 rangs
- ligne 3 : 3 rangs (équivalent à un décalage d’un rang vers la droite)
À gauche, la matrice après l’étape SubBytes et à droite le résultat de l’étape ShiftRows.
3.3.4 MixColumns
Une fois les rotations appliquées sur les lignes, nous
représentons une colonne de la matrice avec un élément de
.

donne
,
,
et
.
La transformation suivante est
appliquée pour toutes les colonnes :

Exemple :
Considérons une matrice dont une des colonnes serait
représentée par

Les valeurs notées ici sont en hexadécimal.
Ceci nous donne donc :


calculons
,
,
,
,
et
.
=
.
=
.
=
.
=
.
=
.
ce qui nous donne :













3.3.5 Préparation de la clé - Key Schedule
L’objectif de cette étape est d’obtenir 11 clés (la clé
initiale plus une clé par tour, soit un total de 176 octets)
à partir de la clé initiale (16 octets). Comme pour les
données à chiffrer, la clé peut être représentée comme une
matrice carrée d’ordre 4 et le résultat par une matrice à 4
lignes et 44 colonnes dont les 4 premières colonnes sont
celles de la clé initiale.
Nous allons voir comment calculer les
colonnes suivantes.
Il est nécessaire de définir les
(Round constants) qui sont des éléments de
.
Chaque
correspond à un tour, il est donc nécessaire d’en calculer
10.
pour
.
Représentons ceci sous la forme
d’une matrice à 4 lignes et 10 colonnes.

Il est nécessaire de trouver le reste de la division de
par
. Il en est de même pour
(les autres polynômes ont déjà un degré inférieur à 8).
Pour
on a

le reste est
Pour
on a

le reste est
Voici la matrice finale obtenue :

La
colonne est utilisée comme RCon pour le
tour.
Calcul
pour calculer la
(
) colonne de la matrice finale :
-
si
pour B, lacolonne de la matrice représentée ainsi :
A, la
colonne :
La
colonne C se calcule ainsi :
remarquons l’ordre des éléments dans :
ceci sera expliqué plus précisément dans l’exemple suivant.
-
sinon
pour B, lacolonne et A la
de la matrice (A et B définis comme précédemment).
Lacolonne C se calcule ainsi :
Exemple Choisissons la clé initiale suivante :

représentée ainsi :

colonne 5 :
Nous
considérons ici la
colonne.

Nous appliquons une rotation de 1 octet vers la gauche (la forme matricielle n’est qu’une représentation), ce qui nous donne :

Effectuons maintenant la même substitution que celle opérée lors de l’étape SubBytes. Pour cela, cherchons les éléments correspondants dans la S-box.

Ici, nous sommes au premier tour donc la valeur RCon
recherchée correspond à la première colonne de la matrice
.

colonne 6 :

colonne 7 :

colonne 8 :

colonne 9 :



colonne 10 :

colonne 11 :

colonne 12 :




Le résultat final est :

3.3.6 Add RoundKey
Cette étape consiste simplement à additionner La matrice
et une matrice représentant une clé (clé initiale ou clé de
tour).

Le résultat est ensuite affecté à la matrice
.
3.3.7 Algorithme de haut niveau
Tous les composants d’AES étant maintenant décrits, voici son fonctionnement général :
pour i variant_de 1 a 9 faire
SubBytes;
ShiftRows;
MixColumns;
AddRoundKey; //avec la clé du i-ème tour et la matrice S
ffaire
//le tour final est différent (10ème tour)
SubBytes;
ShiftRows;
//pas de MixColumns dans le dernier tour
AddRoundKey;
Le déchiffrement est effectué en faisant toutes ces étapes dans le sens inverse.
Deuxième partie
Détection des intrusions
4 Pourquoi détecter les intrusions ?
Les réseaux WIFI privés sont construits pour être sécurisés et empêcher des connexions non voulues au réseau ; malgré cette "sécurité" il existe des failles qui permettent d’y accéder sans autorisation.
4.1 Quels sont les risques d’une intrusion ?
Avoir accès au réseau facilite la pénétration des systèmes connectés. L’attaquant peut aussi observer les données échangées entre les périphériques, et il lui est d’autre part possible d’utiliser le réseau dans le but d’usurper l’identité de la victime.
Pour éviter ces risques il faut détecter les intrusions malveillantes dans le réseau.
5 Les méthodes de détection
5.1 Détection par adresse MAC
L’adresse MAC est un identifiant particulier à la carte réseau qui permet d’identifier chaque périphérique (cette carte peut être sans fil ou filaire).
On peut détecter une intrusion en obtenant régulièrement les adresses MAC (on peut pour cela utiliser l’outil nmap) des périphériques connectés au réseau et comparer la liste d’adresse obtenue à une liste d’adresses autorisées. Si une adresse n’est pas dans la liste des adresses autorisées alors un nouveau périphérique s’est connecté.
Cette méthode a quelques problèmes :
- Il faut autoriser chaque nouveau périphérique que l’on veut ajouter au réseau.
- Il est possible de changer manuellement l’adresse MAC d’un périphérique (spoofing) et donc d’usurper l’identité d’un périphérique autorisé.
5.2 Détection d’usurpation d’adresse MAC
Les numéros de séquence servent à indiquer quel fragment (en cas de fragmentation) est envoyé dans le paquet. Si ce numéro de séquence change plusieurs fois rapidement (moins d’une seconde), il peut y avoir une usurpation d’adresse MAC, et cette technique peut donner des "faux positifs" à cause du grand nombre de paquets envoyés.
Les paramètres optionnels sont des données dépendantes de la carte réseau utilisée ainsi que du driver, du firmware et de la configuration. Elles sont difficiles à modifier ; si ces paramètres optionnels changent rapidement (dans la seconde), il y a sûrement usurpation d’adresse MAC.
La qualité du signal reçu dépend de la distance entre le périphérique et le routeur ; ce paramètre n’est pas constant même si les deux équipements restent immobiles (du fait des interférences). Cependant si cette valeur change beaucoup plus que d’habitude et très rapidement (par exemple passer de -80dBm à -20dBm dans la même seconde) on peut suspecter une usurpation d’adresse MAC. Avec cette méthode il est possible d’obtenir des résultats "faux positifs".
Les systèmes d’exploitation ont des façons différentes de générer les trames réseau, ils laissent une «empreinte» qui peut être détectable. Si cette empreinte change rapidement plusieurs fois (moins d’une seconde) alors il y a sûrement usurpation d’adresse MAC.
En combinant ces facteurs il est possible de déterminer si une usurpation d’adresse MAC a lieu et de réduire le nombre de "faux positifs".
5.3 Détection de "Brutforce"
la technique de "Brutforce" consiste à essayer un grand nombre de combinaisons de mots de passe pour essayer de trouver "le bon". Ces combinaisons sont souvent formées à partir de mots du dictionnaire.
détection : La détection est plutôt simple : il suffit de compter le nombre d’essais avec un mot de passe erroné et alerter quand il y a un grand nombre d’essais dans un temps donné.
5.4 Détection d’injections WEP
Les injections WEP prennent souvent la forme de paquets envoyés avec le même vecteur d’initialisation dans un temps réduit. Détecter un grand nombre de paquets avec le même vecteur d’initialisation dans une période de temps courte (une seconde par exemple) est souvent indicateur d’une attaque par injection.
5.5 Détection des injection VLAN
Certains points d’accès peuvent être attaqués par des paquets VLAN de la norme 802.1Q. Pour détecter ce type d’intrusions il suffit de détecter la présence d’en-tête 802.1Q dans les paquets wifi.
5.6 Détection d’usurpation de point d’accès
Certaines attaques consistent à créer un point d’accès avec les mêmes caractéristiques que le point d’accès attaqué pour pouvoir contrôler les données transmises. La détection d’une attaque de ce type se fait au niveau du point d’accès qui doit lancer une alerte s'il détecte un autre point d'accès avec les mêmes caractéristiques que lui.
Troisième partie
Failles de sécurité
6 WEP
6.1 Introduction aux failles du protocole
Le WEP est malheureusement un protocole très vulnérable en
raison de ses caractéristiques cryptographiques de qualité
insuffisante. Déjà en 1995, des chercheurs ont pu démontrer
des failles dans l’algorithme du RC4 (Wagner, Roos,...)
utilisé dans le protocole WEP. Mais ce dernier restait
encore un protocole plutôt fiable et c’est à partir du début
des années 2000 que de plus en plus de faiblesses sont
révélées, avec des articles et des publications sur le
sujet. Puis en 2004-2005, des attaques montrent la quasi
obsolescence du protocole.
Les failles suivantes ont été trouvées dans le protocole WEP :
- En terme de confidentialité, la partie secrète de la clé est la même pour tout le monde et la partie envoyée en clair (IV) a 24 bits (la clé est réutilisée après 224 trames). Les STA (Spanning Tree Algorithm) utilisent le même IV quand elles commencent à transmettre. Il existe des méthodes qui permettent de découvrir la clé WEP à partir d’un certain nombre de trames interceptées. Le paradoxe des anniversaires fait que dès que l'on a capturé environ 5000 paquets, on a plus d’une chance sur deux d’avoir utilisé la même clé.
- Concernant les doublons, aucune protection n’est mise en place.
- Le contrôle d’intégrité n’est pas cryptographiquement sûr ; l’utilisation du CRC est satisfaisante pour des erreurs aléatoires mais pas pour les erreurs délibérées et il est possible de modifier des messages sans être détecté (changer des données et ICV).
- Enfin, aucune authentification bidirectionnelle n’est prévue et seule la station (STA) est authentifiée. Le challenge d’authentification à clé partagée est envoyé en clair ce qui provoque une exposition dangereuse à des attaques connues.
6.2 Différentes attaques sur le protocole
Les attaques ont donc commencé dès 2001 (ces attaques avaient pour but d’exploiter les failles laissées par le protocole WEP). Une multitude d’attaque et de méthode existent aujourd’hui, par exemple :
- L’attaque des "mots de passe" par dictionnaire
- L’attaque "man in the middle"
- Packet injection
- Attaque FMS
- Fake authentication
- L’attaque chopchop de KoreK
- Bit flipping sur la somme de contrôle CRC-32
- Plaintext attack
- Attaque par fragmentation
- Attaque par IV connu
- Utilisation de vecteurs d’initialisation IV « faibles »
- Collision des vecteurs d’initialisation IV
-
Réutilisation du vecteur d’initialisation IV
Dans ce document, nous allons nous intéresser plus
particulièrement à 2 de ces attaques : Packet injection et
FMS.
L’attaque
par injection de paquets a pour but d’accélérer la
production d’IV nécessaire à l’obtention de la clé. Cette
attaque est très efficace lorsqu’une station connectée génère
des requêtes ARP. L’attaquant essaie de trouver un paquet
ARP chiffré afin de l’utiliser pour l’injection. L’injection
de paquets peut être considérée comme une véritable attaque
contre le WEP, car ce protocole n’a pas été conçu pour
résister à ce type de menace. Un paquet envoyé dans un
réseau protégé par le WEP et qui a été intercepté par un
attaquant peut ensuite être injecté à nouveau dans le
réseau, à condition que la clé n’ait pas été modifiée et que
la station d’envoi d’origine soit toujours dans le réseau.
Autre type d’attaque, l’attaque FMS (pour les initiales des
noms des chercheurs FLURHER, MANTIN et SHAMIR). En 2001, les
chercheurs Scott FLURHER, Itsik MANTIN et Adi SHAMIR ont
publié une attaque de récupération de clé qui consiste à
exploiter le fait que le protocole WEP possède des IVs
faibles. C’est à dire que l’attaquant va récupérer des
paquets chiffrés en écoutant passivement le trafic et
mémoriser les 3 premiers octets publics. Il connaît alors
les
l premiers octets d’une clé RC4
utilisée pour générer un keystream
X. Il peut ainsi commencer à
effectuer les premières étapes du RC4-KSA (Key scheduling
algorithm) pour connaître Sl
et
jl. Ensuite, jl+1
= jl
+ K[l] + Sl[l] et une permutation est faite
entre Sl[jl+1] et
Sl[l]. Mais si l’attaquant pouvait
connaître Sl+1[l] il pourrait alors obtenir
K[l] en faisant
Sl−1[Sl+1[l]] − jl
− Sl[l].
Les 3
chercheurs ont alors une méthode pour l’obtenir : supposons
que les conditions suivantes se maintiennent après les
l premières étapes du RC4-KSA
(les conditions 3 et 4 ont été introduites plus tard, par
Korek pour améliorer l’efficacité de l’attaque) :
- 1. Sl[1] < l
- 2. Sl[1] + Sl[Sl[1]] = l
- 3. Sl−1[X[0]]≠1
-
4.
Sl−1[X[0]]≠Sl[1]
Ensuite, une valeur
k à laquelle on affecte
Sl[jl+1] pour après la permuter avec
Sl+1[l]. Si j change aléatoirement
pendant le reste de l’algorithme, les valeurs
S[1],
S[S[1]] et
S[l] ne seront pas modifiées avec
une probabilité d’environ ()3
≃ 5∕100 pour le reste de
l’algorithme. Quand le premier octet de sortie est produit
par le RC4-PRGA (Pseudo-random generation algorithm),
j prendra la valeur
Sn[1]
puis
Sn[1] et
Sn[j] seront échangés. Après cela,
Sl[1] + Sl[Sl[1]] = l tient toujours et le premier
octet de sortie du RC4-PRGA X[0] sera alors
S[l]. Ensuite, si ces 4 conditions
sont toujours vérifiées, la fonction suivante :
-
Ffms(K[0],...,K[l − 1],X[0]) = S1−1[X[0]] − jl
− Sl[l]
prendra alors la valeur de
K[l] avec une probabilité de
()3
≃ 5∕100. Ainsi, grâce à ces
conditions et cette fonction, on peut donc lancer une
attaque de récupération complète de la clé sur le WEP.
L’attaquant, lorsqu’il a capturé suffisamment de paquets,
sélectionne où se trouve les conditions résolues et calcule
Ffms
pour ces paquets. Chacun des résultats pourra être considéré
comme un vote pour la valeur de
Rk[0] et l’attaquant devra
choisir laquelle correspond bien à la vraie valeur de
Rk[0]. Si la décision est bonne,
alors il connaît les premiers
l
octets de chaque paquet et il fait de même pour
Rk[1] et ainsi de suite. Une fois
tous les octets de Rk obtenus,
l’attaquant vérifie alors la clé qu’il a pu former afin de
savoir si elle est correcte ; dans l’affirmative l’attaque a
réussi.
En moyenne il fallait au moins 4 000 000 de paquets chiffrés
pour retrouver la clé avec une probabilité supérieure à
1/2.
Autre type d’attaque, Korek en 2004 (qui introduit en même
temps l’attaque chopchop). Korek est un hacker qui a publié
une série de 16 attaques sur le WEP pour retrouver la clé de
chiffrement. Pour cela la structure de l’attaque est la même
que pour l’attaque FMS mais celle de Korek permet de réduire
le nombre moyen de paquets nécessaire à 700 000 pour une
probabilité qui est autour de 1/2.
Toutefois c’est en 2005 qu’une équipe
du FBI démontre la possibilité de rentrer dans un réseau
protégé par le protocole WEP en moins de 5 minutes avec des
outils pratiquement à la portée de tous. En effet, ces agents
du FBI auraient utilisé, entre autre, Kismet, un logiciel de
détection de réseaux et Airodump, qui fonctionne avec
Aircrack, pour capturer les paquets. Durant cette
démonstration, ils ont notamment utilisé une attaque par
rejeu.
Cette démonstration prouvait alors définitivement
l’insuffisance de ce protocole pour assurer la sécurité d’un
réseau (le WPA existait déjà à ce moment-là).
Aujourd’hui il est même possible d’entrer dans un réseau
protégé par le protocole WEP en moins d’une minute grâce à
de bons outils et c’est la raison pour laquelle il n’est
presque plus utilisé sur les réseaux WIFI.
7 Authentification : 4-way handshake
Le 4-Way Handshake est utilisé par WPA2. Il permet l’authentification d’un appareil voulant se connecter à un réseau WIFI. Ce processus en 4 temps a pour but de générer différentes clés de chiffrement qui seront ensuite utilisée par le client pour communiquer sur le réseau.
Ce processus étant à la base de la faille KRACK que nous présenterons dans la prochaine partie, il est nécessaire de s’attarder quelques instants sur son fonctionnement.
7.1 Les différentes clés et outils utilisés
- A = Point d’accès
- S = Station
- ANonce = Authenticator Number (used) once : est un nombre généré aléatoirement par le point d’accès
- SNonce = Supplicant Number (used) once : est un nombre généré aléatoirement par le client
- MAC(AA) = adresse MAC du point d’accès
- MAC(SA) = adresse MAC de la station
- PMK = Pairwise Master Key : La PMK est une clé connue du point d’accés et de la station, elle correspond à la PSK (Pre-Shared Key qui représente un secret partagé entre la station et le point d’accès) dans le cas du WPA2 personnel.
-
PTK = Pairwise Transcient Key : est une clé utilisée
pour chiffrer les trames de la station à destination du
point d’accès.
PRF (PMK + Anonce + SNonce + Mac (AA)+ Mac (SA)) : PRF est une fonction pseudo-aléatoire avec en entrées différentes données citées plus tôt, cette combinaison aura pour but de calculer la PTK. - GTK = Group Transient/Temporal Key : est une clé commune à toutes les stations associées au point d’accès. Elle est utilisée pour le chiffrement des trames multicast et broadcast.
- MIC = Message Integrity Code (contrôle d’intégrité des données).
-
EAPoL-Key
5
= Paquet qui permet l’échange de clé de chiffrement, de
forme :
MAC header Ethernet Type Version Packet Type
12 octets 2 octets 1 octets 1 octets
Packet Body Length Packet Body Frame Check Sequence
2 octets Taille variable 4 octets
Pour le 4-Way Handshake, le champ "Type de paquet" prend la valeur 0000 0011 qui désigne le type EAPoL-key.
7.2 Utilisation du 4-Way Handshake
Le 4-way-handshake débute après l’EAP Success reçu par la
station. Comme son nom l’indique le 4-way-handshake comporte
4 messages qui sont envoyés entre la station et le point
d’accès, le premier message est envoyé par le point d’accès
vers la station. Et comme dit précédemment, chaque message
transmis est encapsulé avec EApoL-key.
-
Premier message :
Le premier message (du point d’accès vers la station) contient le ANonce et est encapsulé avec EAPoL-Key comme montré ci-dessus (l’encaspulation ne sera plus précisée par la suite mais sera effectuée à chaque étape). À cette étape, la station possède toutes les informations pour calculer la PTK. -
Deuxième message :
Le deuxième message (de la station vers le point d’accès) contient le SNonce et un MIC (chiffré par la station). Avec ces informations, le point d’accès est lui aussi capable de calculer la PTK, il peut alors vérifier le MIC.
-
Troisième message :
Le troisième message (du point d’accès vers la station), contient la GTK. C’est à la réception de ce message que le point d’accès installe la PTK. Ce point sera traité plus précisément lors du chapitre sur la faille KRACK.
-
Quatrième message :
Le quatrième et dernier message, de la station vers le point d’accès, informe ce dernier que la GTK et la PTK ont été installées, à cette même étape le point d’accès installe lui aussi la PTK.
Après l’exécution du 4-way-handshake, le trafic est ouvert pour la station ; toutes les trames en unicast seront chiffrées avec la PTK et les trames en multicast et broadcast le seront avec la GTK.
8 WPA2
8.1 Faille KRACK
8.1.1 Résumé de la situation
Le protocoles WPA2 (chiffrement CCMP qui s’appuie sur AES) est, depuis l’abandon officiel du WEP par la Wi-Fi Alliance en 2004, le protocole le plus largement utilisé pour la sécurisation des réseau WIFI. Cependant, un type d’attaque nommé KRACK 6 (Key Reinstallation Attacks) découvert par Mathy Vanhoef et Frank Piessens en 2017 permet, grâce à une configuration "homme du milieu" (man in the middle), de déchiffrer des données transmises sur un réseau protégé par le protocole WPA2. Contrairement à d’autres attaques, l’existence de la vulnérabilité ne dépend pas des différentes implémentations du protocole mais se situe dans le protocole lui-même. C’est ici la phase de connexion d’un appareil au point d’accès qui est concernée, cette phase est appelée 4-way handshake (décrit dans la partie précédente). Cette étape permet de définir avec quelle clé (PTK : Pairwise Transient Key - différente pour chaque session) les messages envoyés sur le réseau seront chiffrés. Les protocoles WPA2 personnel et entreprise sont concernés par cette vulnérabilité car ils utilisent tous deux un 4-way handshake. Il existe différentes formes d’attaques KRACK, et nous prenons ici le parti de décrire la plus connue d’entre-elles qui opère sur le troisième message du 4-way handshake.
8.1.2 Outils de détection
Mathy Vanhoef a mis à disposition un ensemble de scripts
permettant de détecter si un client ou un point d’accès est
concerné par les attaques de type KRACK :
https://github.com/vanhoefm/krackattacks-scripts
8.1.3 Attaque de l’homme du milieu (man in the middle : MITM)
Une telle attaque consiste, pour un attaquant, à rediriger le trafic du réseau afin qu’il passe par sa machine (pour cela, il existe différentes méthodes : ARP Poisoning, au DNS Spoofing, ou encore la création d’un point d’accès WIFI...). Cette configuration lui permet de lire les données échangées et dans certains cas de les modifier. Il peut également injecter des données sur le réseau. 7
8.1.4 Associativité du XOR (eXclusive OR)
algèbre de boole :
XOR est noté :












Donc
8.1.5 Fonctionnement de l’attaque
La mise en place de cette attaque débute par la création,
par l’attaquant, d’un clone du point d’accès WIFI sur un
canal différent (il y a par exemple 11 canaux sur la bande
des 2.4GHz). Les données transmises seront ensuite relayées
sur le canal réel du point d’accès. Dans cette situation,
l’attaquant peut intercepter les données transmises mais est
incapable de les déchiffrer. Voici un extrait de
Operating Channel Validation :
Preventing Multi-ChannelMan-in-the-Middle Attacks
Against Protected Wi-Fi
Networks8
par Mathy Vanhoef, Nehru Bhandaru et Thomas Derham :
"3.3 Channel Switch Announcements (CSAs)We discovered a novel method to force clients into connecting to the rogue AP. In particular, an adversary can forge Channel SwitchAnnouncements (CSAs) to force a client to switch to the rogue AP’schannel. Normally these announcements are sent when the AP is switching to a different channel. For instance, when an AP operates on certain 5 GHz channels and detects (weather) radar pulses, it must switch to a different channel to comply with regulations.Channel switch announcements can be broadcasted using three different frames. The first is by including a CSA element inside a beacon. The second method is by including a CSA element inside a probe response. And the third technique is to send action frames with a CSA element to associated clients. The first two methods use unprotected management frames, and the third method is protected when MFP is enabled. As a result, even when MFP is used, an adversary can forge CSA elements inside beaconsand probe responses to force clients to switch channels."
La seconde étape consiste à transmettre les trois premiers messages du 4-way handshake puis à bloquer le quatrième. Du point de vue du client, la procédure de connexion est terminée mais le point d’accès n’a pas reçu le dernier message. Dans cette situation, le point d’accès procède à la ré-émission du troisième message qui est traité à nouveau, or, le client ayant déjà installé la clé de chiffrement (PTK), le quatrième message (envoyé pour la seconde fois) est désormais chiffré. L’attaquant doit ici bloquer ce message chiffré qui serait rejeté par le point d’accès et retransmettre la première version du quatrième message (non chiffré) au point d’accès afin qu’il installe la clé de chiffrement à son tour (l’utilisation de ce message 4 non chiffré implique que le numéro de paquet n’est pas le plus récent : toutefois de nombreuses implémentations l’acceptent tout de même car il n’a jamais été utilisé dans une trame de réponse de la part du client mais seulement en émission depuis le point d’accès). À cette étape, la clé est réinstallée par le client, ce qui entraîne la réinitialisation du compteur de trames (Nonce) et donc, l’émission de trames avec un Nonce déjà utilisé. Cela permet de déchiffrer les trames envoyées dans la mesure où le keystream est utilisé pour la seconde fois. L’opération XOR bit à bit entre le message 4 chiffré et celui non chiffré donne :
note : Nous utilisons ici les mêmes notations que dans le document décrivant le fonctionnement du chiffrement RC4


donc par associativité :
Représentation simplifiée du chiffrement avec WPA2-CCMP
Nous connaissons alors le keystream utilisé pour les trames chiffrées correspondant à ce Nonce, et elles deviennent donc facilement déchiffrables.
L’utilisation d’un chiffrement sur la couche transport (SSL) permet d’éviter que les données soient déchiffrables grâce à une attaque de type KRACK. Il est cependant possible de contourner cette sécurité grâce à sslstrip 9 comme présenté par Mathy Vanhoef. 10 Il est donc préférable d’utiliser du matériel à jour (non exposé à ce type d’attaques).
8.1.6 Cas particuler : wpa_supplicant 2.4 et 2.5
wpa_supplicant est un client WIFI utilisé par linux et android. Après l’installation de la clé de chiffrement par le noyau linux, wpa_supplicant ne conserve pas de copie de cette clé et l’efface avec des 0 dans la mémoire (conseillé par la norme ieee 802.11).
Lors de la réinstallation, c’est la clé appelée "all-zero key" qui est installée, et à partir de cet instant, toutes les trames transmises en unicast sont chiffrées avec cette nouvelle clé. Ainsi, les données sont facilement déchiffrables. C’est l’exécution à deux reprises de la fonction
Voici une partie du commit 11 qui empêche l’installation d’une clé "all-zero" dans la version 2.6 de wpa_supplicant :
+ wpa_dbg(sm->ctx->msg_ctx, MSG_DEBUG,
+ "WPA: Do not re-install same PTK to the driver");
+ return 0;
+ }
puis
qui empêche une réinstallation de la clé si la fonction est exécutée plus d’une fois. wpa_supplicant 2.6 est cependant vulnérable à un autre type d’attaque de la famille KRACK qui agit sur le premier message du 4-way handshake.
8.1.7 Impact
Dans la pratique, cette attaque permet de déchiffrer les données transmises après l’exécution du 4-way handshake, or, ces données ne sont pas "intéressantes" pour un attaquant. Il est cependant possible de forcer la "désautentification" du client, le système d’exploitation procède alors à un nouveau 4-way handshake afin de se reconnecter au point d’accès. Les données transmises après cette reconnexion pourront être déchiffrées (car les connexions TCP ne sont pas fermées pendant ce processus).
Dans le cas de l’installation d’une "all-zero key" il est possible de calculer le keystream utilisé et donc de déchiffrer les données transmises pour chaque valeur de nonce. Notons tout de même ceci : "The real AP will then ignore data frames from the victim (because it fails to decrypt them)." (ceci nous a été précisé lors d’une conversation avec Mathy Vanhoef)
8.1.8 Informations complémentaires
Il est possible de contrôler le nombre de valeurs de nonce qui seront réutilisées en choisissant l’instant de réémission du troisième message du 4-way handshake. "You can delay the key reinstallation to, in principle, decrypt arbitrary many frames. E.g. you let the victim send N frames, and only then trigger to key reinstallation, after which you can decrypt N frames."(ceci nous a également été précisé par Maty Vanhoef).
De plus, si nous ne disposons pas de la version non chiffrée d’une trame mais seulement de deux trames chiffrée avec une réutilisation du Nonce, il est possible d’utiliser des méthodes telles que le crib dragging 12 pour déchiffrer les données.
Voici ce qui nous a été précisé par Mathy Vanhoef "Here we assume that if there are two message with a reused nonce, we know the plaintext of one of them, e.g. based on the length of the frame we can predict what type of packet it is, and this packet may have a very predictable content. For example, traffic analysis can be used to detect (based on encrypted frames) which plaintext HTTP website a victim is visiting, allowing is to predict the content of a lot of frames. This predicted plaintext can then be used to decrypt the other frames with the reused nonce."
8.1.9 Correctifs
La majorité des appareils qui étaient encore maintenus lors de cette découverte ont reçu une mise à jour de sécurité empêchant l’exploitation de KRACK. Il faut cependant veiller à ce que les points d’accès (également vulnérables) aient été mis à jour dans la mesure où ce processus n’est généralement pas automatique.
8.2 Faille Kr00k
Une vulnérabilité permettant de déchiffrer les données transmises sur les réseaux utilisant le protocole WPA2 a été découverte par la société ESET en 2019 et rendue publique le 26 février 2020 (RSA Conference). Les chercheurs d’ESET ont découvert cette vulnérabilité alors qu’ils cherchaient à déterminer si l’Amazon echo 2 était concerné par une attaque de type KRACK. Nommée Kr00k, 13 elle concerne la phase de désassociation d’une station et d’un point d’accès qui peut être amorcée de plusieurs manières.
8.2.1 Fonctionnement
Après une désassociation, la clé de chiffrement utilisée est effacée dans la mémoire de la puce WIFI et est remplacée par des 0. Il est cependant possible que des données se trouvent encore dans le tampon d’émission (d’une capacité de 32Kb). Ces trames sont chiffrées avec la clé en mémoire ("all-zero key") et envoyées sur le réseau. Les données sont alors facilement déchiffrables si elles ne sont pas chiffrées à un niveau supérieur (SSL par exemple sur la couche transport).
Les désassociations se produisent naturellement lorsque la station passe d’un point d’accès à un autre, par exemple. Il est cependant possible de forcer cette désassociation par des trames spéciales : "802.11 management frames" qui ne sont pas chiffrées et peuvent donc être envoyées par un attaquant.
Source : RSA Conference 2020, ESET
Le contenu des trames récupérées est alors aléatoire car il dépend de l’instant auquel se produit la désassociation. La répétition du processus permet d’obtenir un grand nombre de trames et donc potentiellement des données intéressantes pour un attaquant.
8.2.2 Appareils concernés
Les puces WIFI touchées sont celles des fabricants Broadcom et Cypress, ce qui concerne plus d’un milliard d’appareils (clients et points d’accès). Voici une liste non-exhaustive des modèles concernés :
- Amazon Echo 2nd gen
- Amazon Kindle 8th gen
- Apple iPad mini 2
- Apple iPhone 6, 6S, 8, XR
- Apple MacBook Air Retina 13-inch 2018
- Google Nexus 5
- Google Nexus 6
- Google Nexus 6P
- Raspberry Pi 3
- Samsung Galaxy S4 GT-I9505
- Samsung Galaxy S8
- Xiaomi Redmi 3S
- Asus RT-N12
- Huawei B612S-25d
- Huawei EchoLife HG8245H
- Huawei E5577Cs-321
Si l’attaque est menée sur un point d’accès, ce sont les trames envoyées par ce dernier qui seront déchiffrables même si le client connecté n’est pas vulnérable.
8.2.3 Correctifs
Des correctifs logiciels ont été développés et déployés en 2019 et 2020 par les fabricants des puces WIFI concernées pendant la période de 120 jours octroyée par ESET avant que Kr00k ne soit rendue public.
8.3 Autres attaques
Il existe d’autres attaques visant les réseaux utilisant le protocole WPA2 14 . Certains logiciels implémentent des attaques par force brute qui ont pour but de trouver le mot de passe sécurisant le réseau en forçant un client à se déconnecter et à procéder à un nouveau 4-way handshake. Ce type d’attaque est très rapide sur les réseaux protégés par un mot de passe faible susceptible de se trouver dans une liste de mots de passe appelée "dictionnaire". Le protocole WPA3 ayant pour objectif d’empêcher les attaques connues sur le WPA2 a été introduit par la WIFI Alliance en 2018 et commence à être utilisé :
WPA3-Personal brings better protections to individual users by providing more robust password-based authentication, even when users choose passwords that fall short of typical complexity recommendations. This capability is enabled through Simultaneous Authentication of Equals (SAE), which replaces Pre-shared Key (PSK) in WPA2-Personal. The technology is resistant to offline dictionary attacks where an adversary attempts to determine a network password by trying possible passwords without further network interaction.15
Il est à noter que Mathy Vanhoef et Eyal Ronen ont découvert une attaque 16 visant le "Dragonfly handshake" utilisé par le WPA3 permettant de trouver le mot de passe d’un réseau utilisant ce protocole. Des correctifs ont cependant déjà été apportés et l’utilisation de WPA3 en remplacement de WPA2 est conseillée (si possible) du fait de la complexité des attaques par lesquelles ce protocole est concerné.
Conclusion et références
Conclusion
Comme nous l’avons vu, le chemin qui mène du WEP au WPA2 a
été rapidement parcouru, du fait des évidentes failles de
sécurité qui sont apparues au fur et à mesure de
l’utilisation du WEP, notamment en raison de la présence de
l’algorithme de chiffrement RC4 aujourd’hui considéré comme
non fiable.
Le WPA a vite montré ses
limites et il a fallu l’améliorer, pour arriver au WPA2.
Toutefois depuis 2017 déjà, on s’est rendu compte que le
WPA2 (IEEE 802.11i) lui-même n’est pas exempt de faiblesses.
Les travaux de Mathy Vanhoef et Frank Piessens, deux
chercheurs belges, ont dévoilés ses failles, en particulier
pour la partie jusque-là considérée comme sûre : la phase
d’authentification nommée 4 way handshake.
L’IEEE a donc établi un nouveau cahier des charges, afin de
mettre au point le WPA3. Toutefois, les enjeux de la
sécurité réseau obligent à des mises à niveau permanentes et
il y a fort à parier que le WPA3 devra rapidement être mis à
jour. D’autant que Mathy Vanhoef et Eyal Ronen ont signalé
qu’ils avaient découvert une faille de sécurité (corrigée
depuis) dans le Dragonfly Handshake utilisé par ce protocole.
Références
https://connect.ed-diamond.com/MISC/MISC-053/Cryptanalyse-du-protocole-WEP
https://www.ipv6.com/wireless/wep-wired-equivalent-privacy/
https://whiteflag.blog/books/pentest-wifi/page/comment-fonctionne-wep
https://www.irisa.fr/prive/sgambs/cours2_authentification.pdf
https://slideplayer.fr/slide/9881399/
https://dept-info.labri.u-bordeaux.fr/~guermouc/SR/SR/cours//cours6.pdf
https://eprint.iacr.org/2007/471.pdf
http://www.bibmath.net/crypto/index.php?action=affiche&quoi=moderne/wifi
https://fr.wikipedia.org/wiki/RC4#Attaque_de_Fluhrer,_Mantin_et_Shamir_(attaque_FMS)
https://www.ssi.gouv.fr/uploads/IMG/pdf/NP_WIFI_NoteTech.pdf
https://fr.qwe.wiki/wiki/Fluhrer,_Mantin_and_Shamir_attack
https://connect.ed-diamond.com/MISC/MISC-053/Cryptanalyse-du-protocole-WEP
https://www.lama.univ-savoie.fr/pagesmembres/hyvernat/Enseignement/1213/info528/tp3.html
https://www.memoireonline.com/04/12/5653/m_Mise-en-place-sur-le-point-dacces-dun-reseau-wifi15.html
https://www.researchgate.net/publication/291013210_Wi-Fi_Security_Analysis
https://www.kaspersky.com/resource-center/definitions/replay-attack
https://www.networkcomputing.com/wireless-infrastructure/fbi-teaches-lesson-how-break-wi-fi-networks
https://dl.aircrack-ng.org/breakingwepandwpa.pdf
https://mrncciew.com/2014/08/19/cwsp-ccmp-encryption-method/
http://www.gabes.fr/wiki/index.php?title=SecuWifi#Le_protocole_CCMP
https://www.eetimes.com/diving-into-the-802-11i-spec-a-tutorial/
https://www.vocal.com/wp-content/uploads/2012/05/CCMP.pdf
https://dsimg.ubm-us.net/envelope/261982/453333/1702crash_file.pdf
https://cs.gmu.edu/~yhwang1/INFS612/Sample_Projects/Fall_06_GPN_6_Final_Report.pdf
https://cosc.canterbury.ac.nz/research/reports/HonsReps/2005/hons_0505.pdf
http://www.bibmath.net/crypto/index.php?action=affiche&quoi=moderne/blocs
http://www.dil.univ-mrs.fr/~jfp/master/m03/CompresChap5AES.pdf
https://www.utc.fr/~wschon/sr06/txPHP/aes/Key/Key.php
https://www.di.ens.fr/~fouque/mpri/des-aes.pdf
http://math.univ-lyon1.fr/~roblot/resources/masterpro_chapitre_4.pdf
https://en.wikipedia.org/wiki/IEEE∖_802.11i-2004
https://www.wifi-professionals.com/2019/01/4-way-handshake
https://www.vocal.com/secure-communication/eapol-extensible-authentication-protocol-over-lan/
RC4 is not Cryptographically Secure - Julian Bhardwaj
https://www.geeksforgeeks.org/rc4-encryption-algorithm/
https://tools.ietf.org/pdf/draft-kaukonen-cipher-arcfour-03.pdf