Jeux avec Wifi sur ESP32

Jeux avec Wifi sur ESP32

L'idée de faire un outil de poche pour analyser les réseaux WiFi m'a poussé Cet article.

Merci à eux pour l'idée. Je n'avais rien à faire.

Tout le travail a été effectué comme passe-temps dans le but de m'amuser et d'élargir mes connaissances dans le domaine des technologies de réseau. Lentement, 1..4 heures par semaine, depuis le début de cette année.
L'utilisation de l'application n'était pas prévue. Ceux. ce n'est PAS un outil de pirate informatique.

Pour le moment, toutes les fonctionnalités prévues fonctionnent. Toutes les sources, entièrement prêtes à être assemblées, posté ici. Il y a aussi des instructions de montage, etc. Dans cette note, je ne dupliquerai pas les informations publiées sur github. Je ne vous dirai que ce que j'estime nécessaire de décrire séparément.

Mon avis sur "l'outil universel" et la raison du choix de l'ESP32

Je ne prétends pas la vérité. Chacun a le sien. Je vais essayer de justifier mon choix de "fer".

Proposé dans l'article la possibilité d'utiliser une combinaison Linux (à l'origine Raspberry Pi) + "périphériques" sous forme de contrôleur (STM32) + CC1110 (coeur 8051) et un plan pour caser tout ce qui est possible (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) ne me semblaient pas adaptés. Cependant, ce projet il semble qu'il restera privé et fermé (github flipper-zero "Cette organisation n'a pas de référentiels publics.") et s'est orienté vers un matériel pas trop commun.

Peut-être que je me trompe, et à l'avenir, les auteurs déposeront le code source du logiciel dans le domaine public. Mais sinon, je n'achèterais pas un tel morceau de fer sans codes sources.

Mes besoins en outils

La boîte doit être petite (plus elle est petite, mieux c'est).

Par conséquent:

  • La batterie intégrée n'est pas nécessaire. Avec un courant> 100 mA lorsque vous travaillez avec le Wifi, la batterie intégrée sera soit grande, soit elle ne durera pas longtemps. Par conséquent, laissez la "boîte" être alimentée par une banque d'alimentation standard. Tout de même, j'ai toujours une banque d'alimentation dans ma poche/voiture.
  • Gardez à l'intérieur de la "boîte" Linux avec des outils, écrit depuis de nombreuses années dans toutes les langues en présence d'un petit écran et d'un maigre ensemble de boutons de commande, cela n'a aucun sens. Les résultats peuvent être visualisés/traités sur un ordinateur portable normal avec un clavier et un écran complets.
  • Les composants doivent être facilement disponibles 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 énoncées dans l'article, qui m'ont incité à passer à l'action, les capacités de l'ESP32 suffisent. Bien que le plus que je veuille faire est ceci:

  • Jouez avec Bluetooth.
  • Jouez avec la gamme 433mHz avec le matériel le plus simple (uniquement la modulation d'amplitude, ce qui est suffisant pour les besoins pratiques).

Mouche dans la pommade dans ESP32

  • SDK (IDF) ESP32 est quelque peu maladroit.
  • Une partie de la fonctionnalité (la pile WiFi, par exemple) est livrée sans code source sous la forme de bibliothèques statiques assemblées.
  • La bande 5 GHz n'est pas prise en charge et il existe certaines limitations et maladresses dans le travail avec le WiFi.

Mais le rapport prix/taille compense pleinement ces lacunes.

Les principales fonctionnalités du logiciel

Je vais décrire brièvement la fonctionnalité et mon avis sur ...

Gérer les paramètres et télécharger des fichiers depuis SD

Tout contrôle externe se fait via une simple page Web lancée dans un élément de menu séparé. L'ESP32 démarre en mode WiFi AP et affiche une page à une adresse IP fixe.

Bien que les cœurs ESP32 soient assez rapides, mais, comme l'ont montré les expériences, le fonctionnement simultané du service Web intégré et, par exemple, le mode routeur ne font pas bon ménage. Par conséquent, il n'y a pas de contrôle dynamique et dans tous les autres modes, la page n'est pas disponible.
De plus, le contrôle dynamique n'est pas nécessaire à des fins de recherche.

Travailler avec des packages de balises

Les modes sont banals et peu intéressants. Fabriqué "parce que vous le pouvez". Pour chèque.
Il y a des exemples dans les exemples officiels d'Espressif.

Mode de balayage de la liste AP.
En fait, n'importe quel smartphone peut le faire.
Eh bien, dans ce mode, la liste des points d'accès sera enregistrée.
Spammeur de balise.
ESP32 démarre en tant qu'AP avec un SSID caché et un MAC aléatoire et commence à envoyer [beacon frame] sur une liste SSID pré-créée (créée manuellement ou obtenue plus tôt en scannant la liste AP)

Mode de détection Wi-Fi

Les développeurs d'Espressif ont ajouté la possibilité pour le logiciel d'application de recevoir tous les paquets WiFi "volant dans les airs" via une fonction de rappel. En fait, pas tous, puisque vous ne pouvez régler le mode que pour un seul canal fixe.

Des délais très stricts sont imposés pour le traitement d'un appel de fonction de rappel. Si pour le mode de simple collecte de statistiques cela ne pose pas de problème, alors pour le mode d'écriture d'un fichier PCAP sur une carte SD, j'ai dû bricoler, organiser l'enregistrement via une file d'attente en mémoire et des sémaphores. En tenant compte de la particularité que le processus qui appelle le rappel tourne sur un cœur et le processus qui écrit sur SD dans un autre.

Avec un "air bruyant", certains paquets sont perdus (il n'y a pas d'espace dans la file d'attente et ils sont rejetés), mais avec un "air" typique d'un appartement le soir (5..7 AP en vue), écrivant à PCAP a le temps de se terminer sans perte de paquets.

De plus, pour la surveillance et l'enregistrement PCAP, il existe un mode de filtrage basé sur la liste MAC dans les en-têtes de paquet.

Par exemple, vous pouvez 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 Wi-Fi et les connexions automatiques aux points d'accès connus. (Je l'éteins maintenant..)

La visualisation du trafic enregistré dans Wireshark est instructive et intéressante pour comprendre les cartes, tout fonctionne.

Mode de fonctionnement avec paquets morts

Par défaut, l'envoi de ces packages est interdit dans la bibliothèque libnet80211.a, qui est livrée sans sources. Mais cela est facile à arrêter en corrigeant quelques appâts. Au début, je doutais que cela valait la peine de télécharger un patch. Mais après avoir marché dans différents endroits avec le mode de numérisation [deauthentication frame] activé, j'ai pensé : "Qu'est-ce que c'est ?" De plus, dans esp8266 l'envoi de ces packages n'est pas fermé et il y a des assemblages sur github sous esp8266.

Dans de nombreux endroits (je ne dirai pas où), la suppression des points d'accès indésirables est utilisée par cette méthode. Et ce ne sont pas des "voyous"...

Et j'étais quand même surpris que ce soit ma distribution d'Internet depuis mon téléphone qui ne fonctionnait pas par endroits...

Le mode de suivi du nombre et du RSSI de tels paquets est très utile pour comprendre "où les AP de gauche n'aiment pas".

mode routeur

Cette fonctionnalité est probablement la plus intéressante de toutes à explorer.

ESP32 prend en charge le fonctionnement simultané en mode STA + SoftAP. Il est donc possible d'y implanter un routeur NAT classique.

Pour prendre en charge la pile réseau, Espressif utilise un fork (pratiquement inchangé) de la bibliothèque lwip.

Mais, par défaut, dans l'assembly standard, dans la bibliothèque esp-lwip, il n'y a pas de transfert entre les interfaces netif 'ap' (SoftAP) et 'st' (STA).

Bien sûr, vous pouvez le faire sans NAT, mais il y a un problème avec la connexion simultanée de deux STA ou plus à l'interface 'ap' et la synchronisation des adresses IP de l'interface réseau 'st' à 'ap'. Donc la complexité n'en vaut pas la peine et c'est plus facile grâce au NAT.

De plus, il existe un fork esp-lwip de marting-ger qui ajoute une implémentation simple de NAT pour IP4.

Bien que mes mains me démangeaient de le refaire purement cosmétiquement (à mon avis, c'était plus facile sans projet de fourche, mais via LWIPCROCHET fonctions définies par la construction), mais la paresse l'a emporté et la version marting-ger est utilisée telle quelle.

En mode routeur, le trafic IP4 entrant et sortant est visualisé.

Il en est notamment extrait pour afficher à l'écran et collecter des statistiques dans un fichier :

  • Nom de l'appareil qui s'est connecté à SoftAP ESP32 (paquets DHCP)
  • URL des requêtes DNS (port UDP 53) d'un appareil connecté à SoftAP ESP32.

De plus, vous pouvez activer l'enregistrement du trafic dans un fichier PCAP.

Ce mode est très utile, par exemple, pour comprendre, par exemple, ce que votre téléphone envoie au réseau et où il va.

Vous pouvez penser à d'autres façons d'utiliser ce mode, en tenant compte de la possibilité de contrôler complètement par programme le trafic entrant et sortant de SoftAP ESP32 au niveau de l'interface réseau : en-tête Ehernet (destMAC[6]+srcMAC[6]+type[2]) + charge utile (type IP4, IP6, DCHP, etc.).

En principe, l'ESP32 gère assez bien la fonction de routeur WiFi->WiFi, en faisant passer le trafic régulier par lui-même sans trop de retard. Subjectivement, les retards d'un téléphone connecté via un routeur à l'ESP32 ne sont pas perceptibles.

Malheureusement, dans l'API Espressif, il n'y a aucun moyen de définir un filtre par MAC connecté à SoftAP EPS32. Au lieu de cela, il est suggéré de dire "au revoir" (esp_wifi_deauth_sta) aux STA déjà connectés qui ne sont "pas recherchés".

Le filtrage par MAC pour les STA connectés devait être effectué via un appel à esp_wifi_deauth_sta()

En conclusion

Bien que je n'ai rien trouvé de nouveau dans le cadre du travail avec ESP32, peut-être que quelqu'un sera intéressé par le résultat (sources).

Je tiens à souligner que le code a été écrit uniquement à des fins éducatives. Pour le "piratage", etc., il a été spécialement conçu pour ne pas être très pratique.

Je n'ai pas fabriqué de circuit imprimé, car il a fallu 1.5 à 2 heures pour souder les écharpes finies avec un fil.

Et si vous le faites, vous devez l'assembler non pas à partir de cartes prêtes à l'emploi, mais à partir de composants individuels. Ensuite, les dimensions seront encore plus petites.

Source: habr.com

Ajouter un commentaire