Wi-Fi: cacher n’est pas chiffrer !

Avec ce titre digne d’un James Bond, intéressons-nous à un mythe qui a la peau dure: cacher son SSID permettrait de le sécuriser…

Configurons un réseau que nous appellerons TopSecret et dont nous ne diffuserons pas le nom. Pour sécuriser ce réseau de prod, nous allons le masquer afin qu’il ne soit pas visible par des personnes qui ne connaîtraient pas son nom.

Configuration d’un SSID masqué

Ce sera le seul élément de protection de ce réseau: pas de mot de passe (=clé PSK) ni de certificat et donc pas de chiffrement des données entre le client et la borne. On peut, pourquoi pas lui ajouter du filtrage par adresse MAC ou même du profiling (soyons fous), vous verrez que dans le contexte de l’article cela ne change pas grand chose.

Notre réseau hébergera un serveur applicatif et des terminaux sans-fil qui viendront chercher des informations sur ce serveur. Voyons si ces communications sont à l’abri des antennes indiscrètes !

Découvrir le nom d’un réseau masqué

Quand le nom d’un réseau Wi-Fi (son SSID) est masqué, il n’est pas visible directement depuis un ordinateur ou un mobile en allant dans la liste des réseaux Wi-Fi à proximité. C’est parce que les bornes Wi-Fi qui diffusent ce réseau ne précise pas son nom dans leurs Beacons, ces trames transmises par les bornes Wi-Fi qui permettent d’annoncer la présence du réseau aux terminaux sans-fil à proximité.

Réseau Wi-Fi masqué vue de l’application AirPort sur un iPhone (à droite), et de Wireshark (à gauche)

Comme on le voit ci-dessus, ces trames sont visibles facilement depuis les applications de scanner Wi-Fi sur mobile ou PC. Il existe une multitude d’outils qui permettent d’aller plus loin et de découvrir le nom de ce réseau secret. Je me limiterai à trois exemples ici: un script Python utilisant Scapy, Kismet et Wireshark.

Script Python

J’ai écrit un script Python utilisant le module Scapy qui capture les paquets Wi-Fi et les analyse pour détecter les réseaux Wi-Fi dont le nom est masqué. Voici un aperçu du script qui est disponible sur Github:

Le script capture les trames arrivant sur l’adaptateur Wi-Fi, et regarde s’il s’agit d’un beacon ou le nom du SSID est masqué. Si c’est le cas, l’identifiant de la borne émettrice pour ce SSID est noté dans une liste (hiddenBSSID). On appelle cet identifiant un BSSID.

Si la trame est de type Probe Response et que le BSSID est dans la liste des réseaux masqués, alors on collecte le nom du réseau qui est toujours présent dans ce type de trame, que le réseau soit masqué ou non.

Voici ce que donne le script en action:

Kismet

Kismet est un scanner de réseau Wi-Fi, Bluetooth, ZigBee et de tout ce qui n’a pas de fil. C’est un outil open-source fonctionnant nativement sous Linux et Mac OSX et qui est très simple à utiliser. Voici dans notre cas, ce qu’il nous permet de découvrir:

Détail de notre réseau masqué TopSecret sous Kismet

Dès qu’une trame Probe Request est capturée, Kismet fait apparaître le nom du SSID associé au réseau sans-fil. On ne peut pas faire beaucoup plus simple !

Wireshark

Dernière solution que je vous propose, c’est d’utiliser Wireshark directement pour trouver l’existence d’un réseau masqué puis de découvrir son SSID. La première étape est bien sur de réaliser une capture de paquets. Si vous n’êtes pas familier avec ce type d’opération, je vous invite à lire cet article qui présente deux techniques de capture.

Une fois le fichier de capture pcap entre les mains, il suffit de lui appliquer un filtre ne gardant que les trames de type beacon avec un SSID masqué:

wlan.fc.type_subtype eq 8 and wlan.ssid == ""

Cela permet d’obtenir le résultat suivant:

Le champs source donne alors le fameux identifiant BSSID, adresse MAC de la borne Wi-Fi pour ce SSID masqué et cette fréquence. En filtrant sur les trames de type Probe Response émises par cet identifiant, le nom du réseau devrait apparaitre en clair ! Action:

wlan.fc.type_subtype eq 5 and wlan.ta == [BSSID qui nous intéresse]

Et voilà pour la troisième fois de cet article le SSID TopSecret démasqué ! Si la sécurité de ce réseau se résumait à son masquage alors le voilà bien plumé une fois le premier scanner venu… Des mécanismes comme du filtrage par adresse MAC ou du profiling basic (option 60 DHCP, user-agent HTTP) ne le sécuriserait pas beaucoup plus. Ces informations étant facilement usurpables.

Capture de données

Autre chose très importante, masquer le nom d’un réseau Wi-Fi ne signifie nullement masquer les données qu’il fait transiter. Dans le cas de notre réseau TopSecret, nous pouvons voir sur la capture Wireshark que le transfert d’un fichier nommé Dossier-ultra-secret.txt a été réalisé via le protocole FTP. Et nous pouvons même obtenir le contenu du fichier à distance, sans avoir à nous connecter au réseau, du fait qu’il ne soit pas chiffré.

On le voit le masquage du SSID n’est nullement un gage de sécurité d’un réseau, il entraîne même des dégradations de performance dans certains cas (temps de roaming). Le meilleur moyen de sécuriser son réseau Wi-Fi est d’utiliser les dernières méthodes de chiffrement (WPA2-AES, WPA3-SAE). S’assurer également de l’utilisation d’applications chiffrant leurs communications (SFTP plutôt que FTP, HTTPS au lieu de HTTP, etc.) et coupler cela à l’utilisation de VPN lors de la connexion à des réseaux hors de l’entreprise.

Voila qui conclut ce premier article d’introduction sur le sujet de la sécurité des réseaux Wi-Fi. D’autres suivront prochainement, alors n’hésitez pas à me suivre sur Twitter ou LinkedIn pour ne rien rater 🙂

2 commentaires sur “Wi-Fi: cacher n’est pas chiffrer !

Répondre à Alexandre MOUSSELLI Annuler la réponse.

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s