A faire en équipes de deux personnes
- Deauthentication attack
- Fake channel evil tween attack
- SSID Flood attack
- Probe Request Evil Twin Attack
- Détection de clients et réseaux
- Hidden SSID reveal
- Livrables
- Échéance
- Détecter si un certain client WiFi se trouve à proximité
- Obtenir une liste des SSIDs annoncés par les clients WiFi présents
Vous allez devoir faire des recherches sur internet pour apprendre à utiliser Scapy et la suite aircrack pour vos manipulations. Il est fortement conseillé d'employer une distribution Kali (on ne pourra pas assurer le support avec d'autres distributions). Si vous utilisez une VM, il vous faudra une interface WiFi usb, disponible sur demande.
Des routers sans-fils sont aussi disponibles sur demande si vous en avez besoin (peut être utile pour l'exercices challenge 6).
ATTENTION : Pour vos manipulations, il pourrait être important de bien fixer le canal lors de vos captures et/ou vos injections (à vous de déterminer si ceci est nécessaire pour les manipulations suivantes ou pas). Une méthode pour fixer le canal a déjà été proposée dans un laboratoire précédent.
- Si vous devez capturer et injecter du trafic, il faudra configurer votre interface 802.11 en mode monitor.
- Python a un mode interactif très utile pour le développement. Il suffit de l'invoquer avec la commande
python
. Ensuite, vous pouvez importer Scapy ou tout autre module nécessaire. En fait, vous pouvez même exécuter tout le script fourni en mode interactif ! - Scapy fonctionne aussi en mode interactif en invoquant la commande
scapy
. - Dans le mode interactif, « nom de variable + » vous retourne le contenu de la variable.
- Pour visualiser en détail une trame avec Scapy en mode interactif, on utilise la fonction
show()
. Par exemple, si vous chargez votre trame dans une variable nomméebeacon
, vous pouvez visualiser tous ces champs et ses valeurs avec la commandebeacon.show()
. Utilisez cette commande pour connaître les champs disponibles et les formats de chaque champ. - Vous pouvez normalement désactiver la randomisation d'adresses MAC de vos dispositifs. Cela peut être utile pour tester le bon fonctionnement de certains de vos scripts. Ce lien vous propose une manière de le faire pour iOS et Android.
Une STA ou un AP peuvent envoyer une trame de déauthentification pour mettre fin à une connexion.
Les trames de déauthentification sont des trames de management, donc de type 0, avec un sous-type 12 (0x0c). Voici le format de la trame de déauthentification :
Le corps de la trame (Frame body) contient, entre autres, un champ de deux octets appelé "Reason Code". Le but de ce champ est d'informer la raison de la déauthentification. Voici toutes les valeurs possibles pour le Reason Code :
Code | Explication 802.11 |
---|---|
0 | Reserved |
1 | Unspecified reason |
2 | Previous authentication no longer valid |
3 | station is leaving (or has left) IBSS or ESS |
4 | Disassociated due to inactivity |
5 | Disassociated because AP is unable to handle all currently associated stations |
6 | Class 2 frame received from nonauthenticated station |
7 | Class 3 frame received from nonassociated station |
8 | Disassociated because sending station is leaving (or has left) BSS |
9 | Station requesting (re)association is not authenticated with responding station |
10 | Disassociated because the information in the Power Capability element is unacceptable |
11 | Disassociated because the information in the Supported Channels element is unacceptable |
12 | Reserved |
13 | Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7 |
14 | Message integrity code (MIC) failure |
15 | 4-Way Handshake timeout |
16 | Group Key Handshake timeout |
17 | Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame |
18 | Invalid group cipher |
19 | Invalid pairwise cipher |
20 | Invalid AKMP |
21 | Unsupported RSN information element version |
22 | Invalid RSN information element capabilities |
23 | IEEE 802.1X authentication failed |
24 | Cipher suite rejected because of the security policy |
25-31 | Reserved |
32 | Disassociated for unspecified, QoS-related reason |
33 | Disassociated because QAP lacks sufficient bandwidth for this QSTA |
34 | Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions |
35 | Disassociated because QSTA is transmitting outside the limits of its TXOPs |
36 | Requested from peer QSTA as the QSTA is leaving the QBSS (or resetting) |
37 | Requested from peer QSTA as it does not want to use the mechanism |
38 | Requested from peer QSTA as the QSTA received frames using the mechanism for which a setup is required |
39 | Requested from peer QSTA due to timeout |
40 | Peer QSTA does not support the requested cipher suite |
46-65535 | Reserved |
a) Utiliser la fonction de déauthentification de la suite aircrack, capturer les échanges et identifier le Reason code et son interpretation.
Question : quel code est utilisé par aircrack pour déauthentifier un client 802.11. Quelle est son interpretation ?
Question : A l'aide d'un filtre d'affichage, essayer de trouver d'autres trames de déauthentification dans votre capture. Avez-vous en trouvé d'autres ? Si oui, quel code contient-elle et quelle est son interpretation ?
b) Développer un script en Python/Scapy capable de générer et envoyer des trames de déauthentification. Le script donne le choix entre des Reason codes différents (liste ci-après) et doit pouvoir déduire si le message doit être envoyé à la STA ou à l'AP :
- 1 - Unspecified
- 4 - Disassociated due to inactivity
- 5 - Disassociated because AP is unable to handle all currently associated stations
- 8 - Deauthenticated because sending STA is leaving BSS
Question : quels codes/raisons justifient l'envoie de la trame à la STA cible et pourquoi ?
Question : quels codes/raisons justifient l'envoie de la trame à l'AP et pourquoi ?
Question : Comment essayer de déauthentifier toutes les STA ?
Question : Quelle est la différence entre le code 3 et le code 8 de la liste ?
Question : Expliquer l'effet de cette attaque sur la cible
a) Développer un script en Python/Scapy avec les fonctionnalités suivantes :
- Dresser une liste des SSID disponibles à proximité
- Présenter à l'utilisateur la liste, avec les numéros de canaux et les puissances
- Permettre à l'utilisateur de choisir le réseau à attaquer
- Générer un beacon concurrent annonçant un réseau sur un canal différent se trouvant à 6 canaux de séparation du réseau original
Question : Expliquer l'effet de cette attaque sur la cible
Développer un script en Python/Scapy capable d'inonder la salle avec des SSID dont le nom correspond à une liste contenue dans un fichier text fournit par un utilisateur. Si l'utilisateur ne possède pas une liste, il peut spécifier le nombre d'AP à générer. Dans ce cas, les SSID seront générés de manière aléatoire.
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 très probablement réutiliser du code des exercices précédents 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 ?
Question : pourquoi les dispositifs iOS et Android récents ne peuvent-ils plus être tracés avec cette méthode ?
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
6. Hidden SSID reveal (exercices challenge optionnel - donne droit à un bonus)
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 ?
Un fork du repo original . Puis, un Pull Request contenant :
-
Script de Deauthentication de clients 802.11 abondamment commenté/documenté
-
Script fake chanel abondamment commenté/documenté
-
Script SSID flood abondamment commenté/documenté
-
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 31 mars 2022 à 23h59