Spiele mit Wifi auf dem ESP32

Spiele mit Wifi auf dem ESP32

Die Idee, ein tragbares Werkzeug zur Analyse von WiFi-Netzen zu entwickeln, wurde durch dieser Artikel.

diesen Gedanken inspiriert. Ich hatte gerade nichts zu tun.

Die gesamte Arbeit wurde im Rahmen eines Hobbys durchgeführt, um Spaß zu haben und mein Wissen im Bereich Netzwerktechnologien zu erweitern. Gemächlich, zwischen 1 und 4 Stunden pro Woche, seit Anfang dieses Jahres.
Eine praktische Anwendung war nicht geplant. Das heißt, es ist KEIN Werkzeug für Hacker.

Im Moment funktioniert die gesamte geplante Funktionalität. Alle Quellcodes, vollständig zum Zusammenbauen bereit, sind hier abgelegt. Dort finden Sie auch eine Anleitung zum Zusammenbauen usw. In diesem Beitrag werde ich die Informationen, die auf GitHub veröffentlicht sind, nicht wiederholen. Ich werde nur das beschreiben, was ich für notwendig halte, getrennt zu erläutern.

Meine Meinung zu einem "universellen Werkzeug" und der Grund für die Wahl des ESP32

Ich erhebe keinen Anspruch auf die Wahrheit. Diese hat jeder für sich. Ich werde versuchen, meine Wahl des "Devices" zu begründen.

Die in dem Artikel vorgeschlagene Verwendungskombination von Linux (ursprünglich Raspberry Pi) + "Peripherie" in Form eines Controllers (STM32) + CC1110 (Basis 8051) und der Plan, alles Mögliche einzupassen (125 kHz, NFC, 433 MHz, USB, iButton, Bluetooth, ?) erschien mir nicht geeignet. Dennoch, dieses Projekt Es scheint, dass es privat und geschlossen bleibt (flipper-zero github "Diese Organisation hat keine öffentlichen Repositories.") und in Richtung nicht sehr verbreiteter Hardware geht.

Vielleicht liege ich falsch, und die Autoren werden in Zukunft den Quellcode der Software öffentlich zugänglich machen. Aber wenn nicht, würde ich so ein Gerät ohne Quellcode nicht kaufen.

Meine Anforderungen an das "Werkzeug"

Die Box sollte klein sein (je kleiner, desto besser).

Deshalb:

  • Ein eingebauter Akku ist nicht nötig. Bei einem Strom von > 100 mA im Betrieb mit Wifi wird der Akku entweder groß sein oder nicht lange halten. Daher sollte die "Box" von einer Standard-Powerbank gespeist werden. Eine Powerbank habe ich sowieso immer in der Tasche/ im Auto.
  • Linux mit Werkzeugen im Inneren der "Box" zu halten, die über viele Jahre in allen Sprachen geschrieben wurden, macht keinen Sinn, wenn es nur einen kleinen Bildschirm und eine spärliche Anzahl von Steuerknöpfen gibt. Die Ergebnisse können auch auf einem normalen Laptop mit einer vollständigen Tastatur und einem Bildschirm betrachtet/bearbeitet werden.
  • Die Komponenten sollten leicht verfügbar und weit verbreitet sein (ein zugängliches SDK, viele Beispiele und Dokumentationen).

Letztendlich war die Wahl für mich offensichtlich - ESP32.

Für alle Aufgaben, die in dem Artikel beschrieben sind, der mich zum Handeln angeregt hat, sind die Möglichkeiten des ESP32 völlig ausreichend. Das Maximum, das ich noch erreichen möchte, ist:

  • Ein wenig mit Bluetooth experimentieren.
  • Ein wenig mit dem 433 MHz-Bereich arbeiten, mit der einfachsten Hardware (nur Amplitudenmodulation, was für die meisten Anwendungen ausreichend ist).

Ein Wermutstropfen beim ESP32

  • Das SDK (IDF) für den ESP32 ist ein wenig ungeschickt.
  • Ein Teil des Funktionsumfangs (z. B. der WiFi-Stack) kommt ohne Quellcode in Form von zusammengestellten statischen Bibliotheken.
  • Der 5 GHz-Bereich wird nicht unterstützt, und es gibt einige Einschränkungen und Unschönheiten bei der WiFi-Nutzung.

Aber der Preis und die Größe machen diese Nachteile mehr als wett.

Die Hauptfunktionsweise der Software

Ich werde kurz die Funktionalität beschreiben und meine Meinung über…

Die Verwaltung der Einstellungen und der Upload von Dateien von der SD-Karte

Alle externen Steuerungen erfolgen über eine einfache Webseite, die im separaten Menüpunkt gestartet wird. Der ESP32 wird im WiFi AP-Modus gestartet und gibt die Seite über eine feste IP-Adresse aus.

Obwohl die Kerne des ESP32 recht schnell sind, haben Experimente gezeigt, dass der gleichzeitige Betrieb des eingebauten Webdienstes und beispielsweise des Router-Modus nicht gut funktioniert. Daher gibt es kein dynamisches Management, und in allen anderen Modi ist die Seite nicht verfügbar.
Umso mehr ist dynamisches Management für Forschungszwecke nicht erforderlich.

Betriebsmodus für Beacon-Pakete

Die Modi sind banal und nicht besonders interessant. Sie wurden „weil es möglich ist“ erstellt. Nur fürs Protokoll.
Beispiele finden sich in den offiziellen Beispielen von Espressif.

Modus zum Scannen von AP-Listen.
Das kann im Grunde jeder Smartphone machen.
In diesem Modus wird die Liste der APs gespeichert.
Beacon-Spammer.
Der ESP32 startet als AP mit verstecktem SSID und zufälliger MAC-Adresse und beginnt, [beacon frame] aus einem zuvor erstellten SSID-Verzeichnis zu senden (manuell erstellt oder zuvor beim Scannen der AP-Liste erhalten).

Sniffing-Modus für WiFi-Pakete

Die Entwickler von Espressif haben die Möglichkeit hinzugefügt, dass die Anwendungssoftware über eine Callback-Funktion alle WiFi-Pakete erhält, die in der Luft „vorbeifliegen“. Tatsächlich nicht alle, da nur für einen festen Kanal ein Modus eingestellt werden kann.

Die Verarbeitung des Callback-Function-Aufrufs unterliegt strengen zeitlichen Beschränkungen. Während dies im Modus der einfachen Statistiksammlung kein Problem darstellt, war es im Modus der PCAP-Aufzeichnung auf die SD-Karte etwas schwieriger, da die Aufzeichnung über eine Warteschlange im Speicher und Semaphore organisiert werden musste. Dabei ist zu beachten, dass der Prozess, der den Callback aufruft, auf einem Kern läuft, während der Prozess, der die Daten auf die SD-Karte schreibt, auf einem anderen läuft.

Bei einem 'geräuschvollen Empfang' gehen einige Pakete verloren (da kein Platz in der Warteschlange ist, werden sie verworfen), aber unter typischen 'Empfangsbedingungen' in Wohnungen am Abend (5..7 APs in Sichtweite) wird die PCAP-Aufzeichnung ohne Paketverluste durchgeführt.

Zusätzlich gibt es für die Überwachung und Aufnahme von PCAP einen Filtermodus nach einer Liste von MAC-Adressen in den Paket-Headern.

Zum Beispiel kann man das Erscheinen einer Person im Club oder Café verfolgen, bevor sie überhaupt hereingekommen oder in Sichtweite erschienen ist. Kaum jemand schaltet WiFi und automatische Verbindungen zu bekannten APs ab. (Ich schalte es jetzt aus...)

Den aufgezeichneten Verkehr in Wireshark zu analysieren, ist lehrreich und interessant, um zu verstehen, wie das gesamte System funktioniert.

Betriebsmodus für Deauth-Pakete

Standardmäßig ist das Senden dieser Pakete in der Bibliothek libnet80211.a, die ohne Quellcode geliefert wird, nicht erlaubt. Aber es ist nicht schwierig, dies zu umgehen, indem man ein paar Bytes anpasst. Zuerst war ich unsicher, ob ich den Patch veröffentlichen sollte. Doch nachdem ich an verschiedenen Orten mit aktiviertem Scanning-Modus für die Quellpakete [deauthentication frame] unterwegs war, dachte ich: „Warum nicht?“ Zumal das Senden dieser Pakete bei esp8266 nicht eingeschränkt ist und es Builds für esp8266 auf GitHub gibt.

An vielen Stellen (ich werde nicht sagen, wo) wird unerwünschte APs mit dieser Methode begegnet. Und das sind keine „Rowdys“…

Ich habe mich auch gewundert, dass mein Internet-Tethering vom Telefon manchmal nicht funktioniert…

Der Modus zur Verfolgung der Anzahl und des RSSI solcher Pakete ist sehr nützlich, um zu verstehen, „wo linke APs nicht gerne gesehen werden“.

Router-Modus

Diese Funktion ist wahrscheinlich die interessanteste von allen zur Erkundung.

ESP32 unterstützt den gleichzeitigen Betrieb im STA + SoftAP-Modus. Daher kann man darauf einen klassischen NAT-Router implementieren.

Zur Unterstützung des Netzwerkstacks verwendet Espressif einen Fork (praktisch ohne Änderungen) der lwip-Bibliothek.

In der Standardkonfiguration der esp-lwip-Bibliothek ist zwischen den netif-Schnittstellen ‚ap‘ (SoftAP) und ‚st‘ (STA) keine Portweiterleitung vorgesehen.

Man kann es natürlich auch ohne NAT machen, aber es gibt Probleme, wenn mehrere STAs gleichzeitig mit der ‚ap‘-Schnittstelle verbunden sind und die IP-Adressen vom ‚st‘-Netzwerkinterface zur ‚ap‘-Schnittstelle synchronisiert werden müssen. Der Aufwand ist es nicht wert, und es ist einfacher, das über NAT zu lösen.

Außerdem gibt es einen Fork von esp-lwip von martin-ger, der eine einfache Implementierung von NAT für IPv4 hinzugefügt hat.

Obwohl ich versucht war, es kosmetisch umzuschreiben (meiner Meinung nach wäre es einfacher gewesen, ohne Fork zu arbeiten und über LWIP zu gehen), war die Faulheit siegreich, und die Variante von martin-ger wird wie sie ist verwendet.HOOK Funktionen, die beim Build definiert werden),

Im Routermodus wird der eingehende und ausgehende IPv4-Verkehr angezeigt.

Insbesondere werden die folgenden Informationen extrahiert, um sie auf dem Bildschirm anzuzeigen und in einer Datei zu speichern:

  • Der Name des Geräts, das sich mit dem SoftAP ESP32 verbunden hat (DHCP-Pakete)
  • URLs aus DNS-Anfragen (UDP-Port 53) des an den SoftAP ESP32 angeschlossenen Geräts.

Zusätzlich kann die Aufzeichnung des Verkehrs in eine PCAP-Datei aktiviert werden.

Dieser Modus ist äußerst nützlich, um beispielsweise zu verstehen, was Ihr Telefon ins Netzwerk sendet und wohin es dabei geht.

Es gibt sicherlich auch andere Möglichkeiten, diesen Modus zu nutzen, insbesondere wenn man die vollständige programmatische Steuerung des eingehenden und ausgehenden Datenverkehrs des SoftAP ESP32 auf der Ebene der Netzwerkschnittstelle berücksichtigt: Ethernet-Header (destMAC[6]+srcMAC[6]+type[2]) + Payload (IP4, IP6, DHCP und weitere Typen).

Im Grunde genommen bewältigt der ESP32 die Funktion eines WiFi->WiFi-Routers recht gut, indem er normalen Datenverkehr ohne nennenswerte Verzögerungen leitet. Subjektiv sind die Verzögerungen auf dem Telefon, das über den Router auf den ESP32 zugreift, nicht wahrnehmbar.

Leider bietet die API von Espressif keine Möglichkeit, einen MAC-Filter für mit dem SoftAP EPS32 verbundenen Clients einzurichten. Stattdessen wird vorgeschlagen, einen "Auf Wiedersehen"-Befehl auszusprechen (esp_wifi_deauth_sta) an bereits verbundene STA, die "unerwünscht" sind.

Die MAC-Filterung für angeschlossene STA wurde durch den Aufruf von esp_wifi_deauth_sta() realisiert.

Zusammenfassung

Obwohl ich in Bezug auf die Arbeit mit dem ESP32 nichts Neues entdeckt habe, könnte das Ergebnis (der Quellcode) für einige von Interesse sein.

Ich möchte darauf hinweisen, dass der Code ausschließlich zu Bildungszwecken geschrieben wurde. Für "Hacking" und dergleichen wurde er absichtlich nicht sehr benutzerfreundlich gestaltet.

Ich habe keine Platine erstellt, da es etwa 1,5 bis 2 Stunden gedauert hat, fertige Platinen mit Draht zu löten.

Und wenn man es schon machen will, dann sollte man nicht aus fertigen Platinen bauen, sondern aus einzelnen Komponenten. So werden die Abmessungen noch kleiner.

Quelle: habr.com

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster