
Die Idee, ein tragbares Werkzeug zur Analyse von WiFi-Netzen zu entwickeln, wurde durch .
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, . 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.
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, 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
