Pourquoi vous devriez désactiver le WPS de votre routeur

sécurité 28 avr. 2014

J’ai hésité à appeler cet article « Comment profiter de la connexion Internet de votre voisin », mais je me serais probablement fait taper sur les doigts. J’ai aussi pensé à « Pourquoi le WPS est nul(l) », mais c’est une blague d’informaticiens d’assez mauvais goût. 😀

Bref. En gros, je vais vous expliquer ce qu’est le WPS (pour Wi-Fi Protected Setup), comment ça fonctionne, et comment on peut faire pour « outrepasser » l’accès physique au routeur pour s’y connecter… et surtout pour récupérer la clé de sécurité du routeur en question. Ce qui nous ramène au titre de l’article : si c’est si simple, autant le désactiver.

Comme d’habitude, je vais essayer de rendre ça accessible à tout un chacun, mais n’hésitez pas à demander des précisions via les commentaires. On est parti, accroche-toi chéri(e), y’a du vent.

 

Le WPS, c’est quoi donc ?

Le Wi-Fi Protected Setup est une fonction de certains modems/routeurs/box qui vous permet de connecter simplement vos appareils en Wi-Fi. C’est à dire, de façon un peu plus « pragmatique » : sans vous taper une clé de 26 caractères sans queue ni tête à entrer dans le périphérique, ou sans changer cette clé difficile à retenir par un truc simple que la première attaque par dictionnaire venue cassera en moins de temps qu’il n’en faut pour vider un amphi de fac de droit à l’heure du repas.

Mais encore ? C’est une certification de la Wi-Fi Alliance, lancée en Janvier 2007 (oui ça commence à dater), qui offre plusieurs modes d’échange de la clé de sécurité afin de simplifier la vie aux pirates informatiques à l’utilisateur. 2 modes principaux existent, le in-band (via IEEE 802.11/EAP, directement par Wi-Fi en gros) et le out-band (par Ethernet/uPnP ou NFC, par exemple). C’est le in-band qui nous intéresse ici, puisqu’il ne nécessite pas d’accès physique au routeur.

On travaille donc sur un routeur. On distingue basiquement 3 entités : le « candidat » (qui n’a pas la configuration du réseau Wi-Fi auquel il souhaite se connecter), le « registrar » (qui fournit la configuration au candidat), et le « point d’accès » (le machin qui émet le Wi-Fi, commun à tout routeur, qu’il supporte le WPS ou pas, sauf que dans le cas où le routeur offre le WPS, c’est lui qui fera le relais entre les 2 autres parties).

wps-logo

 

Comment se fait l’échange de clé ?

Plusieurs méthodes ont été développées, et figurent dans la norme. Certaines sont obligatoires pour obtenir la certification, d’autres non. Du coup, on se retrouve en réalité avec des appareils certifiés WPS, et d’autres qui offrent le WPS sans avoir obtenu la certification, parce qu’une des méthodes obligatoires n’est pas implémentée. C’est un peu le souk, mais c’est comme ça. Spécifications douteuses, donc implémentations douteuses… 😉

  • Méthode 1 : le code PIN. Cette méthode est obligatoire pour obtenir la certification. Le point d’accès se voit doté d’un code PIN, qui doit être rentré sur le candidat. Ce code est souvent imprimé sur le routeur, et ne peut pas être changé. Je ne parle pas des fabricants qui laissent « 12345670 » sur leurs produits. Cette méthode est vulnérable, et c’est là-dessus qu’on travaillera par la suite.
  • Méthode 2 : le code PIN. Oui, encore 😀
    Cette fois, c’est sur le candidat que le code est défini. C’est souvent le cas pour les imprimantes offrant le Wi-Fi. Il faut rentrer ce code PIN dans le panneau d’administration du routeur, ce qui peut vite devenir un obstacle quand on voit l’interface proposée par certains fabricants, ou quand on ne connait rien à la chose.
  • Méthode 3 : le PBC, pour Push-Button-Connect. C’est aussi un mode obligatoire. Là, c’est on ne peut plus simple : l’utilisateur appuie sur un bouton, le point d’accès émet un paquet « spécial » sur le réseau, que le candidat comprend (puisqu’il l’attend) et auquel il répond. L’identification se fait alors, et la clé de sécurité est échangée. Il est possible d’intercepter ce paquet « magique », mais bon, encore faut-il que le propriétaire du point d’accès appuie sur le bouton WPS pendant l’écoute pirate…
  • Méthode 4 : le NFC (communication en champ proche). Comme pour l’appairage d’un smartphone et d’une chaîne Hi-Fi, comme pour le paiement sans contact, l’échange de clé se fait en approchant le périphérique compatible NFC du routeur (portée maximale de quelques centimètres).
  • Méthode 5 : la clé USB. Plus pourri, tu meurs : c’est limite plus long que de taper la clé de sécurité complète. Cette méthode a été mise au point par Microsoft (ahem) : le candidat génère un fichier correspondant à sa demande sur une clé USB, qui sera ensuite branchée au routeur, lequel autorisera la connexion. C’est une méthode très rarement utilisée, vous devinerez aisément pourquoi.

 

L’attaque par code PIN

C’est celle-ci qui nous intéresse, parce qu’elle ne dépend que du point d’accès, et qu’il n’y a pas besoin de contact physique. Et surtout… parce que contrairement à la carte SIM de vos téléphones (qui se verrouillent après 3 essais invalides), il est possible de tester toutes les combinaisons une par une, sans que le routeur ne couine. Si si. Du moins, la norme n’impose pas de blocage, même si certains fabricants ont choisi d’en implémenter un (un délai allant de quelques minutes à parfois plusieurs heures, comme l’a fait Sagem pour certains modèles de Livebox commercialisées par Orange).

On a donc un code PIN, constitué de 8 chiffres. Avec 10 possibilités pour chacun de ces chiffres (0 à 9), on arrive à 108 possibilités, soit… 100 000 000. C’est pas mal. Même si on faisait une tentative toutes les 2 secondes, il faudrait un peu plus de 6 ans pour tout essayer. Oui, évidemment, la probabilité pour que le bon PIN soit le dernier testé est hyper faible, mais on sait jamais. Le routeur avec lequel je « joue » me permet de faire un essai toutes les 4 secondes environ : il vous faut donc patienter 12 ans avant la fin de l’article.

Fait intéressant : le dernier chiffre n’en est pas un. Je m’explique : c’est une somme de contrôle, permettant de vérifier les 7 autres. Et donc, en choisissant 7 chiffres au hasard et en leur appliquant les calculs donnés dans la norme, on obtient le dernier. Ce qui revient à 10 000 000 possibilités. On se rapproche. Doucement. :mrgreen:

Autre fait intéressant : la vérification du code PIN se fait en 2 fois. Techniquement, on envoie les 4 premiers chiffres, le routeur vérifie, donne sa réponse, et si elle est positive le candidat envoie les 4 derniers chiffres. Il devient dès lors possible de tester les 4 premiers uniquement (10 000 possibilités), puis une fois ceux-ci déterminés, de recommencer avec les 4 derniers. Soit… 20 000 possibilités en tout et pour tout, une grosse douzaine d’heures au mieux.

Et si on combine les deux failles ? On a alors 10 000 possibilité pour le premier groupe, puis 1 000 pour le second (puisqu’on peut calculer le dernier chiffre). Soit 11 000 possibilités, au lieu des 100 000 000 du début ! Énorme, non ? Et comme je le disais tout à l’heure, statistiquement, le bon code PIN ne devrait pas être le dernier testé… En quelques heures, c’est torché ! 😉

On essaye ?

 

 

Reaver, le couteau suisse qui va bien

On va utiliser reaver-wps, un petit logiciel libre et gratuit en ligne de commande, capable de tester les différentes combinaisons au fur et à mesure, en utilisant les 2 failles précédemment mentionnées.

Ça se télécharge par là, ça se compile facilement (sauf quand on a une erreur moisie comme moi, au final parce qu’il chipotait sur une apostrophe dans mon chemin d’accès, bref, c’était ma faute, je mongolise un peu ces jours-ci, fatigue tout ça) avec, sous Linux, très peu de dépendances (libpcap et libsqlite3), et juste un ./configure suivi d’un make && make install.

Dans cet exemple, on va attaquer un routeur Belkin qui traîne dans un tiroir à ma maison. Conçu pour les hôtels quand je voyage, il propose une prise Ethernet à brancher au mur, et fait office de point d’accès Wi-Fi. Aucune interface de configuration, aucune possibilité de changer la clé, bref, pas terrible. Mais il propose le WPS par code PIN, et c’est ce qui nous intéresse ici !

belkin

 On sort la trousse à outils

Comme souvent dans ce genre de cas, il faut (pouvoir) passer sa carte Wi-Fi en « mode moniteur ». Il faut donc avoir une carte compatible (ce qui n’est pas toujours le cas), et un pilote lui aussi compatible. Il est possible de patcher son pilote sous Linux, au besoin.

Dans mon cas (Debian 7 + pilote Atheros), tout fonctionne out-of-the-box, à condition d’avoir les outils pour passer la carte en mode moniteur : airmon-ng, qui fait partie de la suite aircrack-ng. Absente des dépôts de ma distribution, il m’a fallu la compiler, m’enfin rien de bien violent. Un coup de sudo airmon-ng check kill, et airmon-ng vérifie quels processus utilisent la carte Wi-Fi, et les tue. Ensuite, on passe l’interface voulue en mode moniteur, dans mon cas wlan0 : sudo airmon-ng start wlan0. Si tout va bien, vous pouvez utiliser wlan0 pour la suite, ou parfois (comme moi) mon0, qui représente votre interface en mode moniteur.

 

On utilise ensuite un autre outil, wash, qui permet de scanner les réseaux à portée pour vous dire lesquels sont vulnérables : sudo wash -i mon0 -C -s.

Les options, donc :

  • -i <interface moniteur>
  • -C pour ignorer les erreurs
  • -s pour utiliser le mode scan
Les réseaux à portée, dont le mien (premier de la liste)
Les réseaux à portée, dont le mien (premier de la liste)

Eh bien… quand tout se présente bien comme ça, il n’y a plus qu’à lancer reaver ! 😀 Un coup de sudo reaver -i mon0 -b 08:xx:xx:xx:xx:8E -v, et  c’est parti.

Techniquement, les arguments sont :

  • -i <interface moniteur>
  • -b <BSSID réseau cible>
  • -v pour avoir un retour (verbose). -vv permet à reaver d’être encore plus bavard 😉
Lancement de reaver
Lancement de reaver

Bon ben là, à part prendre un café… et vaquer à vos occupations… il n’y a rien à faire. Ça va être long, dans mon cas ça a pris un tout petit peu moins de 7 heures… :mrgreen:

Ça aurait plus être plus rapide, mais le fabricant a implémenté une limitation : passé un certain nombre d’échecs, le routeur se bloquait pendant 5 minutes, rallongeant d’autant le temps nécessaire. Reaver détecte ce blocage et patiente, c’est déjà ça. 😉

 

Notez au passage sur la capture suivante que reaver procède bien en commençant par la première moitié du PIN : on « voit » le changement !

On voit le changement dans le PIN et dans le pourcentage associé
On voit le changement dans le PIN et dans le pourcentage associé

Vous voyez aussi le temps moyen par PIN, qui a du coup augmenté significativement… à cause des blocages de 5 minutes qui reviennent au fur et à mesure de l’avancement.

 

Après 7h de patience donc… HURRAY !

Terminé !
Terminé !

C’était un peu long (et encore…), mais pas bien méchant !

 

On termine par…

…une recommandation. Ben oui : une faille qui touche certains points d’accès Wi-Fi, un outil « grand public » pour l’exploiter. Pas besoin d’être grand mage pour deviner que des petits malins voudront en profiter pour squatter la connexion ADSL du voisin. Je vous rappelle donc (même si c’est pas nécessaire, vous êtes grands) qu’il est illégal d’exploiter ce genre de faille sur du matériel qui ne vous appartient pas, tout comme il est illégal d’utiliser une connexion Internet qui n’est pas la vôtre sans l’accord du titulaire de l’abonnement (votre voisin, en l’occurrence 😀 ). Ne venez pas dire que je suis responsable si vous vous introduisez clandestinement sur un réseau qui n’est pas le vôtre, et qu’il vous arrive quoi que ce soit (du coup de boule du voisin à la guerre thermonucléaire).

Cela étant dit, cet article était surtout là pour vous présenter la faille en tant que telle, et vous recommander de désactiver (quand c’est possible…) la fonction WPS de vos équipements.

Je sais, l’outil présenté tout comme la faille sont relativement anciens (décembre 2011 pour la découverte de la faille et la première version de reaver, janvier 2012 pour la dernière version, 1.4 à l’heure où j’écris ces lignes). Seulement, ça ne peut faire que du bien de rappeler à tout le monde que ça existe, et qu’il est souvent possible de s’en protéger. L’objectif n’étais pas d’expliquer comment se connecter chez son voisin (parce que certains ont une drôle de vision de la chose, je le sais, j’ai aussi été jeune 😉 ), mais d’exposer la simplicité déconcertante avec laquelle, pour peu qu’on dispose du minimum de compétences requis (là est le réel but de l’article : vous les fournir), on arrive à cibler une faille et un outil associé pour l’exploiter.

En résumé : vous le savez depuis longtemps, il vaut mieux utiliser du WPA2 que du WPA voire du WEP, qui sont faciles à casser. Mais du WPA2 sur un routeur avec le WPS activé, c’est prendre le risque qu’un attaquant trouve la clé rapidement. Quelques heures, c’est rien du tout. Le Wi-Fi, c’est comme le reste : protégez-vous ! 😉

Mots clés