
L'idée de créer un outil portable pour analyser les réseaux WiFi m'est venue .
Merci à eux pour l'idée. J'avais justement du temps libre.
Tout le travail a été réalisé dans le cadre d'un loisir, visant à s'amuser et à approfondir mes connaissances en technologies réseau. À un rythme tranquille, de 1 à 4 heures par semaine, depuis le début de cette année.
Je n'avais pas prévu d'utilisation pratique. En d'autres termes, ce n'est pas un outil pour les hackers.
À l'heure actuelle, toute la fonctionnalité prévue fonctionne. Tous les fichiers sources, complètement prêts à être assemblés, . Il y a également des instructions de montage, etc. Dans cette note, je ne vais pas dupliquer les informations publiées sur github. Je vais seulement décrire ce que je considère utile de détailler.
Mon avis sur l'"outil universel" et la raison de mon choix pour l'ESP32
Je ne prétends pas détenir la vérité. Chacun a la sienne. Je vais essayer de justifier mon choix de "matériel".
cette combinaison Linux (initialement Raspberry Pi) + "périphériques" en tant que contrôleur (STM32) + CC1110 (cœur 8051) et l'intention d'y intégrer tout ce qui est possible (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) ne me semblait pas appropriée. Cependant, semble rester privé et fermé (flipper-zero github "Cette organisation n'a pas de dépôts publics.") et je me suis dirigé vers du matériel moins courant.
Je peux me tromper, et les auteurs publieront par la suite les sources du logiciel en accès libre. Mais sinon, je n'achèterais pas un tel matériel sans les sources.
Mes exigences pour l'"outil"
La boîte doit être petite (plus c'est petit, mieux c'est).
Donc :
- Une batterie intégrée n'est pas nécessaire. Avec un courant > 100 mA lors de l'utilisation de Wifi, la batterie intégrée sera soit grande, soit elle ne tiendra pas longtemps. Il vaut donc mieux que la "boîte" soit alimentée par une power bank standard. De toute façon, j'ai toujours une power bank dans ma poche/ma voiture.
- Il n'est pas utile de garder à l'intérieur de la "boîte" Linux avec des outils, développés pendant de nombreuses années dans tous les langages avec un petit écran et un ensemble limité de boutons de commande. Les résultats peuvent être visualisés/traités sur un bon ordinateur portable avec un clavier et un écran complets.
- Les composants doivent être facilement accessibles et largement connus (SDK disponible, beaucoup d'exemples et de documentation).
En conséquence, pour moi, le choix était évident : ESP32.
Pour toutes les tâches décrites dans l'article qui m'a poussé à agir, les possibilités de l'ESP32 sont amplement suffisantes. Bien que la seule chose que je veuille encore faire est :
- Jouer avec le Bluetooth.
- Jouer avec la bande 433mHz avec du matériel basique (juste de la modulation d'amplitude, ce qui est suffisant pour la plupart des besoins).
Une ombre au tableau de l'ESP32
- Le SDK (IDF) de l'ESP32 est quelque peu brut.
- Une partie des fonctionnalités (la pile WiFi, par exemple) est fournie sans code source sous forme de bibliothèques statiques compilées.
- La bande 5gHz n'est pas supportée et il y a certaines limitations et imperfections dans le fonctionnement du WiFi.
Cependant, le prix/la taille compensent ces inconvénients.
Fonctionnalités principales du logiciel
Je vais brièvement décrire les fonctionnalités et donner mon avis sur…
Gestion des paramètres et transfert de fichiers depuis la SD
Tout contrôle externe se fait à travers une simple page Web, lancée dans un menu séparé. L'ESP32 démarre en mode WiFi AP et fournit une page à une adresse IP fixe.
Bien que les cœurs de l'ESP32 soient assez rapides, comme l'ont montré les expériences, le fonctionnement simultané du service Web intégré et du mode routeur, par exemple, ne se combine pas très bien. Par conséquent, il n'y a pas de gestion dynamique et dans tous les autres modes la page n'est pas accessible.
D'autant plus que pour des objectifs de recherche, la gestion dynamique n'est pas nécessaire.
Mode de fonctionnement avec des paquets Beacon
Les modes sont banals et pas très intéressants. Ils sont réalisés « juste parce que c'est possible ». Juste pour la forme.
Des exemples sont disponibles dans les exemples officiels d'Espressif.
Mode de scan des listes AP.
En fait, n'importe quel smartphone peut faire cela.
Eh bien, dans ce mode, une liste des AP sera sauvegardée.
Beacon spammer.
L'ESP32 démarre comme AP avec un SSID caché et un MAC aléatoire et commence à envoyer [beacon frame] selon une liste SSID préalablement créée (créée manuellement ou obtenue auparavant en scannant la liste des AP).
Mode sniffing de paquets WiFi
Les développeurs d'Espressif ont ajouté la possibilité pour les logiciels d'application d'obtenir à travers une fonction callback tous les paquets WiFi « passant dans l'air ». En réalité, pas tous, car il est possible de configurer le mode uniquement pour une seule chaîne fixe.
Des contraintes de temps très strictes s'appliquent au traitement des appels de fonction de rappel. Si cela ne pose pas de problème pour le mode de collecte simple des statistiques, il a fallu faire des efforts pour le mode d'enregistrement du fichier PCAP sur la carte SD, en organisant l'enregistrement via une file d'attente en mémoire et des sémaphores. Compte tenu de la particularité que le processus appelant le rappel fonctionne sur un cœur, tandis que le processus enregistrant sur la SD fonctionne sur un autre.
En cas de «perturbation du signal», certains paquets sont perdus (il n'y a pas de place dans la file d'attente et ils sont rejetés), mais lors d'un «signal» typique dans un appartement le soir (5 à 7 AP dans le champ de vision), l'enregistrement dans le PCAP peut être effectué sans pertes de paquets.
De plus, pour le monitoring et l'enregistrement PCAP, il existe un mode de filtrage par liste de MAC dans les en-têtes des paquets.
Par exemple, on peut suivre l'apparition d'une personne dans un club/café avant même qu'elle n'entre ou n'apparaisse dans le champ de vision. Peu de gens désactivent le WiFi et les connexions automatiques avec des AP connus. (Moi, je désactive maintenant..)
Visualiser le trafic enregistré dans Wireshark est enrichissant et intéressant pour comprendre comment tout cela fonctionne.
Mode de travail avec des paquets de deauth
Par défaut, l'envoi de ces paquets est interdit dans la bibliothèque libnet80211.a, qui est fournie sans les sources. Mais ce n'est pas difficile de contourner cela en modifiant quelques octets. Au début, je doutais de la pertinence de publier le patch. Mais après avoir visité plusieurs endroits avec le mode de scan activé pour l'envoi de [deauthentication frame], je me suis dit : « Pourquoi pas ». D'autant plus qu'avec l'esp8266, l'envoi de ces paquets n'est pas restreint et il existe des builds sur github pour esp8266.
Dans de nombreux endroits (je ne dirai pas où), la suppression des AP indésirables est utilisée par ce biais. Et ce n'est pas « des vandales »…
Je me demandais pourquoi le partage de ma connexion Internet via mon téléphone ne fonctionnait parfois pas…
Le mode de suivi du nombre et du RSSI de ces paquets est très utile pour comprendre « où les AP indésirables ne sont pas appréciés ».
Mode routeur
Cette fonctionnalité est probablement la plus intéressante pour l'étude.
L'ESP32 prend en charge le fonctionnement simultané en mode STA + SoftAP. Ainsi, il est possible d'implémenter un routeur NAT classique.
Pour le support de la pile réseau, Espressif utilise un fork (pratiquement sans modifications) de la bibliothèque lwip.
Cependant, par défaut, dans la version standard, la bibliothèque esp-lwip n'envisage pas de traitement entre les interfaces netif ‘ap’ (SoftAP) et ‘st’ (STA).
Il est bien sûr possible de faire sans NAT, mais cela pose le problème de la connexion simultanée de deux STA ou plus à l'interface 'ap' et de la synchronisation des adresses IP de l'interface réseau 'st' vers 'ap'. Donc, les difficultés ne valent pas le coup et il est plus simple de passer par NAT.
D'autant plus qu'il existe un fork de esp-lwip de martin-ger dans lequel une implémentation simple de NAT pour IP4 a été ajoutée.
Bien que j'avais envie de le retravailler, purement esthétiquement (pour moi, c'était plus simple sans fork du projet, mais via LWIP)HOOK (fonctions définies lors de la compilation), mais la paresse a pris le dessus et l'option de martin-ger est utilisée telle quelle.
En mode routeur, le trafic IP4 entrant et sortant est surveillé.
En particulier, les informations extraites sont affichées sur l'écran et collectées dans un fichier :
- Le nom de l'appareil connecté à SoftAP ESP32 (paquets DHCP)
- L'URL des requêtes DNS (port UDP 53) de l'appareil connecté à SoftAP ESP32.
Il est également possible d'activer l'enregistrement du trafic dans un fichier PCAP.
Ce mode est très utile, par exemple, pour comprendre ce que votre téléphone envoie sur le réseau et vers où il se connecte.
On peut imaginer d'autres façons d'utiliser ce mode, en tenant compte de la possibilité de gérer complètement le trafic entrant et sortant de SoftAP ESP32 au niveau de l'interface réseau : l'en-tête Ethernet (destMAC[6]+srcMAC[6]+type[2]) + charge utile (IP4, IP6, DHCP, autre type).
En principe, l'ESP32 gère assez bien la fonction de routeur WiFi à WiFi, en relayant le trafic ordinaire sans délais significatifs. Subjectivement, les délais sur le téléphone connecté via le routeur sur ESP32 sont imperceptibles.
Malheureusement, l'API d'Espressif ne permet pas d'établir un filtre par MAC pour les STA connectés à SoftAP ESP32. À la place, il est proposé de dire 'au revoir' (esp_wifi_deauth_sta) aux STA déjà connectés qui ne sont 'pas souhaitables'.
La filtration par MAC pour les STA connectés a dû être réalisée en appelant esp_wifi_deauth_sta()
En conclusion
Bien que je n'ai rien de nouveau dans le cadre de l'utilisation de l'ESP32, le résultat (les sources) peut intéresser certaines personnes.
Je tiens à préciser que j'ai écrit le code uniquement à des fins d'apprentissage. Pour 'hacker' et autres, il a été délibérément rendu peu pratique.
Je n'ai pas fabriqué de carte imprimée, car assembler les plaques prêtes à l'aide de fils a pris environ 1,5 à 2 heures.
D'ailleurs, s'il faut le faire, il ne faut pas assembler à partir de plaques prêtes, mais plutôt à partir de composants individuels. Ainsi, les dimensions seront encore plus réduites.
Source : habr.com
