A faire en équipes de deux personnes
Développement à faire en Python 3
- Extraire à partir d’une capture Wireshark les données nécessaires pour dériver les clés de chiffrement et intégrité WPA utilisant Scapy
- Coder votre propre version du logiciel aircrack pour trouver la passphrase d’un réseau WPA à partir d’une capture utilisant Python et Scapy
- A partir d’une capture Wireshark, extraire la valeur de la PMKID utilisant Scapy et l'utiliser pour Cracker la passphrase WPA
- (Challenge bonus) Coder votre propre version des outils airodump et aireplay pour déauthentifier un client, sniffer un handshake et l’utiliser pour trouver une passphrase WPA utilisant Python et Scapy
Il est fortement conseillé d'employer une distribution Kali (on ne pourra pas assurer le support avec d'autres distributions). Si vous utilisez une VM, il vous faudra une interface WiFi usb (uniquement pour l'exercice "chellenge" qui est optionnel), disponible sur demande.
ATTENTION : Pour l'exercise "challenge", il est très important de bien fixer le canal lors de vos captures et vos injections. Si vous en avez besoin, la méthode la plus sure est d'utiliser l'option :
--channel
de airodump-ng
et de garder la fenêtre d'airodump ouverte en permanence pendant que vos scripts tournent ou vos manipulations sont effectuées.
Dans cette première partie, vous allez récupérer le script Python3 wpa_key_derivation.py. Il vous faudra également le fichier de capture wpa_handshake.cap contenant un processus d’authentification WPA. Vous aurez aussi besoin du fichier pbkdf2.py, qui permet de calculer les 4096 tours pour le hash de la passphrase. Tous ces fichiers doivent être copiés dans le même répertoire local sur vos machines.
- Ouvrir le fichier de capture wpa_handshake.cap avec Wireshark
- Exécuter le script avec
python3 wpa_key_derivation.py
- Essayer d’identifier les valeurs affichées par le script dans la capture Wireshark
- Analyser le fonctionnement du script. En particulier, faire attention à la variable
data
qui contient la payload de la trame et la comparer aux données de la quatrième trame du 4-way handshake. Lire la fin de ce document pour l’explication de la différence. - Modifier le script pour qu’il récupère automatiquement, à partir de la capture, les valeurs qui se trouvent actuellement codées en dur (
ssid
,APmac
,Clientmac
, nonces…)
Aircrack utilise le quatrième message du 4-way handshake pour tester les passphrases contenues dans un dictionnaire. Ce message ne contient pas de données chiffrées mais il est authentifié avec un MIC qui peut être exploité comme « oracle » pour tester des clés différentes obtenues des passphrases du dictionnaire.
Utilisant le script wpa_key_derivation.py comme guide, créer un nouveau script scaircrack.py
qui doit être capable de :
- Lire une passphrase à partir d’un fichier (wordlist)
- Dériver les clés à partir de la passphrase que vous venez de lire et des autres éléments nécessaires contenus dans la capture (cf exercice 1)
- Récupérer le MIC du dernier message du 4-way handshake dans la capture
- Avec les clés dérivées à partir de la passphrase, nonces, etc., calculer le MIC du dernier message du 4-way handshake à l’aide de l’algorithme Michael (cf l’explication à la fin de ce document)
- Comparer les deux MIC
- Identiques → La passphrase utilisée est correcte
- Différents → Essayer avec une nouvelle passphrase
Vous allez réutiliser le script de dérivation de clés de l'exercice 1 et le fichier de capture PMKID_handshake.pcap contenant une tentative d’authentification WPA pas réussie réalisée par un attaquant.
La PMKID est contenue dans le premier message du 4-way handshake de certains AP. Les AP de l'opérateur Sunrise en Suisse, par exemple, sont confirmés comme étant vulnérables. Il s'agit donc d'un AP de Sunrise qui a été utilisé pour faire la capture.
Voici ce que vous devez faire pour cette partie :
- Modifier votre script WPA pour qu’il récupère automatiquement, à partir de la capture, la valeur de la PMKID
- Vous aurez aussi besoin de récupérer les valeurs du
ssid
,APmac
etClientmac
(ceci est normalement déjà fait par votre script)
L'attaque PMKID est une attaque par dictionnaire qui calcule systématiquement une PMK à partir de la passphrase. Cette PMK est utilisée comme clé pour SHA-1 calculé sur une concatenation du string "PMK Name" et les adresses MAC de l'AP et la STA. Les premiers 128 bits (6 octets) du résultat de ce calcul doivent correspondre à la valeur de la PMKID obtenue à partir du premier message du 4-way handshake.
Utilisant votre script précédent, le modifier pour réaliser les taches suivantes :
- Lire une passphrase à partir d’un fichier (wordlist) → La passphrase utilisée dans la capture est
admin123
- Dériver la PMK à partir de la passphrase que vous venez de lire et des autres éléments nécessaires contenus dans la capture (cf exercice 1)
- Calculer la PMKID (cf vidéo YouTube)
- Comparer la PMKID calculée avec celle récupérée de la capture :
- Identiques → La passphrase utilisée est correcte
- Différents → Essayer avec une nouvelle passphrase
A manière de comparaison, réaliser l'attaque sur le fichier de capture utilisant la méthode décrite ici.
Note : cet exercice nécessite une interface WiFi en mode monitor. Si vous n'arrivez pas à passer votre interface interne en mode monitor et que vous voulez tenter de le faire, vous pouvez en emprunter une. Il faudra m'avertir pour se mettre d'accord et se retrouver à l'école.
Modifier votre script de cracking pour qu’il soit capable de faire les mêmes opérations que le script précédant mais sans utiliser une capture Wireshark. Pour cela, il faudra donc sniffer un 4-way handshake utilisant Scapy et refaire toutes les opérations de la partie 2 pour obtenir la passphrase. Le script doit implémenter la possibilité de déauthentifier un client pour stimuler le 4-way handshake. Cette déauthentification doit aussi être implémentée avec Scapy.
Vous aurez peut-être besoin de lire ceci plus d'une fois pour comprendre...
- Le dernier message du 4-way handshake contient un MIC dans sa payload. Pour calculer vous-même votre MIC, vous devez mettre les octets du MIC dans cette payload à
\x00
- Le calcul du MIC peut utiliser MD5 (WPA) ou SHA-1 (WPA2). Le 4-way handshake contient les informations nécessaires dans le champ Key Information
Un fork du repo original . Puis, un Pull Request contenant vos noms et :
- Script
wpa_key_derivation.py
modifié pour la récupération automatique des paramètres à partir de la capture. Les modifications doivent être commentées/documentées - Script
scaircrack.py
abondamment commenté/documenté + fichier wordlist- Capture d’écran de votre script en action
- Script
pmkid_attack.py
abondamment commenté/documenté + fichier wordlist- Capture d’écran de votre script en action
- Captures d'écran de l'attaque hashcat
- (Challenge optionnel) Script
scairodump.py
abondamment commenté/documenté - Capture d’écran de votre script en action
- Envoyer le hash du commit et votre username GitHub et les noms des participants par email au professeur et à l'assistant
Le 4 mai 2023 à 23h59