A faire en équipes de deux personnes
L’une des informations de plus intéressantes et utiles que l’on peut obtenir à partir d’un client sans fils de manière entièrement passive (et en clair) se trouve dans la trame Probe Request
:
Dans ce type de trame, utilisée par les clients pour la recherche active de réseaux, on peut retrouver :
- L’adresse physique (MAC) du client (sauf pour dispositifs iOS 8 ou plus récents et des versions plus récentes d'Android).
- Utilisant l’adresse physique, on peut faire une hypothèse sur le constructeur du dispositif sans fils utilisé par la cible.
- Elle peut aussi être utilisée pour identifier la présence de ce même dispositif à des différents endroits géographiques où l’on fait des captures, même si le client ne se connecte pas à un réseau sans fils.
- Des noms de réseaux (SSID) recherchés par le client.
- Un Probe Request peut être utilisé pour « tracer » les pas d’un client. Si une trame Probe Request annonce le nom du réseau d’un hôtel en particulier, par exemple, ceci est une bonne indication que le client s’est déjà connecté au dit réseau.
- Un Probe Request peut être utilisé pour proposer un réseau « evil twin » à la cible.
Il peut être utile, pour des raisons entièrement légitimes et justifiables, de détecter si certains utilisateurs se trouvent dans les parages. Pensez, par exemple, au cas d'un incendie dans un bâtiment. On pourrait dresser une liste des dispositifs et la contraster avec les personnes qui ont déjà quitté le lieu.
A des fins plus discutables du point de vue éthique, la détection de client s'utilise également pour la recherche de marketing. Aux Etats Unis, par exemple, on "sniff" dans les couloirs de centres commerciaux pour détecter quelles vitrines attirent plus de visiteurs, et quelle marque de téléphone ils utilisent. Ce service, interconnecté en réseau, peut aussi déterminer si un client visite plusieurs centres commerciaux un même jour ou sur un certain intervalle de temps.
Nous allons nous intéresser dans cet exercice à la création d'un evil twin pour viser une cible que l'on découvre dynamiquement utilisant des probes.
Développer un script en Python/Scapy capable de detecter une STA cherchant un SSID particulier - proposer un evil twin si le SSID est trouvé (i.e. McDonalds, Starbucks, etc.).
Pour la détection du SSID, vous devez utiliser Scapy. Pour proposer un evil twin, vous pouvez récupérer votre code du labo 1 ou vous servir d'un outil existant.
Question : comment ça se fait que ces trames puissent être lues par tout le monde ? Ne serait-il pas plus judicieux de les chiffrer ?
Ces trames interviennent dans la phase de détection des réseaux environnants. Il est donc impossible de dissimuler le contenu de ces dernières, étant donné que ce stade, aucun secret n'existe entre un client (STA) et les APs.
Question : pourquoi les dispositifs iOS et Android récents ne peuvent-ils plus être tracés avec cette méthode ?
Car ces appareils disposent de système ayant pour fonction de changer régulièrement leur adresse MAC. Ce procédé s'appelle MAC address randomization, et limite donc de théoriquement la possibilité de suivre une même adresse dans le temps et l'espace.
Cette méthode n'est cependant pas toujours efficace ou suffisante (source).
a) Développer un script en Python/Scapy capable de lister toutes les STA qui cherchent activement un SSID donné
b) Développer un script en Python/Scapy capable de générer une liste d'AP visibles dans la salle et de STA détectés et déterminer quelle STA est associée à quel AP. Par exemple :
STAs APs
B8:17:C2:EB:8F:8F 08:EC:F5:28:1A:EF
9C:F3:87:34:3C:CB 00:6B:F1:50:48:3A
00:0E:35:C8:B8:66 08:EC:F5:28:1A:EF
3. Hidden SSID reveal
Développer un script en Python/Scapy capable de reveler le SSID correspondant à un réseau configuré comme étant "invisible".
Question : expliquer en quelques mots la solution que vous avez trouvée pour ce problème ?
Afin de résoudre ce problème, nous avons filtré deux types de paquets : les Beacons et les Probe Response.
En effet, un AP ayant décidé de masquer son SSID produira des Beacons avec un SSID vide ou même aucun champ SSID. Cette première information permet donc de détecter et stocker les BSSID correspondant à des réseaux masqués.
Enfin, les trames de type Probe Response (générées par les APs) contiennent le SSID, et ce même pour les réseaux masqués. Il nous suffit donc de chercher les associations entre les BSSIDs trouvés à la première étape et ceux de cette dernière afin de révéler de tels réseaux.
Un fork du repo original . Puis, un Pull Request contenant :
-
Script evil twin abondamment commenté/documenté
-
Scripts détection STA et AP abondamment commenté/documenté
-
Script SSID reveal abondamment commenté/documenté
-
Captures d'écran du fonctionnement de chaque script
-
Réponses aux éventuelles questions posées dans la donnée. Vous répondez aux questions dans votre
README.md
ou dans un pdf séparé -
Envoyer le hash du commit et votre username GitHub par email au professeur et à l'assistant
Le 16 mars 2020 à 23h59