Hraní s Wifi na ESP32

Hraní s Wifi na ESP32

To, co mě přivedlo na myšlenku vytvořit kapesní nástroj pro analýzu WiFi sítí, bylo v tomto článku.

Děkuji jim za nápad. Prostě jsem neměl co dělat.

Veškerá práce probíhala v rámci hobby za účelem zábavy a rozšíření znalostí v oblasti síťových technologií. Pomalu, 1..4 hodiny týdně, od začátku letošního roku.
Praktické využití jsem neplánoval. Tito. Toto NENÍ nástroj hackerů.

V tuto chvíli jsou všechny plánované funkce funkční. Všechny zdroje, kompletně připravené k montáži, zveřejněno zde. Jsou tam i montážní návody atd. V této poznámce nebudu duplikovat informace zveřejněné na githubu. Řeknu vám jen to, co považuji za nutné popsat samostatně.

Můj názor na „univerzální nástroj“ a důvod výběru ESP32

Netvrdím, že jsem pravda. Každý má své. Pokusím se svůj výběr hardwaru zdůvodnit.

Navrženo v článku případ použití kombinace Linuxu (původně Raspberry Pi) + „periferie“ v podobě řadiče (STM32) + CC1110 (jádro 8051) a plán nacpat tam všechno možné (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) se mi nezdálo vhodné. Nicméně, tento projekt Vypadá to, že zůstane soukromý a uzavřený (flipper-zero github „Tato organizace nemá žádná veřejná úložiště.“) a přešel k nepříliš běžnému hardwaru.

Možná se mýlím a v budoucnu autoři zdroje softwaru zveřejní. Ale pokud ne, tak bych si takový kus hardwaru bez zdrojového kódu nekoupil.

Moje požadavky na "nástroj"

Krabice by měla být malá (čím menší, tím lepší).

Proto:

  • Není potřeba vestavěná baterie. Při proudu > 100 mA při práci s Wifi bude vestavěná baterie buď velká, nebo dlouho nevydrží. Nechte proto „krabici“ napájet běžnou powerbankou. Každopádně powerbanku mám vždy v kapse/autě.
  • Nechte si uvnitř linuxovou „krabici“ s nástroji, napsaný po mnoho let ve všech jazycích S malou obrazovkou a skrovnou sadou ovládacích tlačítek to nedává smysl. Výsledky lze prohlížet/zpracovávat na běžném notebooku s plnohodnotnou klávesnicí a obrazovkou.
  • Komponenty by měly být snadno dostupné a široce známé (dostupné SDK, mnoho příkladů a dokumentace).

Ve výsledku pro mě byla volba jasná - ESP32.

Na všechny úkoly uvedené v článku, které mě přiměly k akci, jsou možnosti ESP32 zcela dostatečné. I když nejvíc chci ještě udělat:

  • Hrajte si s Bluetooth.
  • Pohrajte si s rozsahem 433 MHz s nejjednodušším hardwarem (pouze amplitudová modulace, která pro praktické potřeby stačí).

Poletujte v ESP32

  • ESP32 SDK (IDF) je poněkud neohrabané.
  • Některé funkce (například zásobník WiFi) jsou dodávány bez zdrojového kódu ve formě sestavených statických knihoven.
  • Pásmo 5gHz není podporováno a při práci s WiFi jsou určitá omezení a nemotornost.

Ale cena/velikost tyto nedostatky zcela kompenzuje.

Hlavní funkce softwaru

Stručně popíšu funkčnost a můj názor na...

Správa nastavení a nahrávání souborů z SD

Veškeré externí ovládání se provádí pomocí jednoduché webové stránky, která se spouští v samostatné položce nabídky. ESP32 se spustí v režimu WiFi AP a zobrazí stránku s pevnou IP adresou.

Přestože jsou jádra ESP32 celkem rychlá, jak ukázaly experimenty, současný provoz vestavěné webové služby a například režim routeru nejsou příliš kompatibilní. Chybí tedy dynamické ovládání a stránka není dostupná ve všech ostatních režimech.
Navíc není pro výzkumné účely potřeba dynamické řízení.

Režim práce s balíčky Beacon

Režimy jsou banální a nepříliš zajímavé. Vyrobeno „protože je to možné“. Pro kontrolu.
Příklady jsou v oficiálních příkladech Espressif.

Režim skenování seznamu AP.
Ve skutečnosti to umí každý smartphone.
No, v tomto režimu bude uložen seznam AP.
Beacon spammer.
ESP32 se spustí jako AP se skrytým SSID a náhodnou MAC a začne odesílat [beacon frame] podle předem vytvořeného seznamu SSID (vytvořeného ručně nebo získaného dříve skenováním seznamu AP)

Režim sniffování paketů WiFi

Vývojáři Espressif přidali možnost pro aplikační software přijímat všechny WiFi pakety „létající vzduchem“ prostřednictvím funkce zpětného volání. Vlastně ne všechny, protože režim můžete nastavit pouze pro jeden pevný kanál.

Na zpracování funkce zpětného volání jsou kladena velmi přísná časová omezení. Pokud to nezpůsobuje problémy pro režim jednoduchého sběru statistik, pak pro režim nahrávání souborů PCAP na SD kartu jsem musel šťourat a organizovat záznam pomocí fronty v paměti a semaforech. Vezmeme-li v úvahu zvláštnost, že proces volající zpětné volání běží na jednom jádru a proces, který zapisuje na SD, na jiném.

Během „hlučného vzduchu“ se některé pakety ztratí (ve frontě není místo a jsou zahozeny), ale s typickým „vzduchem“ bytu večer (5..7 AP v rámci viditelnosti), záznam v PCAP je dokončena bez ztráty paketů.

Navíc pro monitorování a záznam PCAP existuje režim filtrování založený na seznamu MAC v hlavičkách paketů.

Můžete například sledovat vzhled osoby v klubu/kavárně ještě předtím, než vůbec vstoupí nebo se objeví na dohled. Málokdo deaktivuje WiFi a automatické připojení ke známým AP. (už to vypínám..)

Prohlížení zaznamenaného provozu ve Wiresharku je vzdělávací a zajímavé pro pochopení map – to vše funguje.

Režim pro práci s balíčky deauth

Ve výchozím nastavení je odesílání těchto balíčků zakázáno v knihovně libnet80211.a, která je dodávána bez zdrojů. Ale je snadné to opravit úpravou několika bitů. Nejprve jsem pochyboval, zda má cenu posílat patch. Ale po procházce po různých místech se zapnutým režimem skenování rámečků pro deautentizaci jsem si pomyslel: „Co to sakra je?“ Navíc v esp8266 není dodávka těchto balíčků uzavřena a na githubu jsou sestavy pro esp8266.

Na mnoha místech (neřeknu kde) se touto metodou používá potlačení nežádoucích AP. A to nejsou "násilníci"...

A taky mě překvapilo, že mi na některých místech nefungovala internetová distribuce z telefonu...

Režim pro sledování počtu a RSSI takových paketů je velmi užitečný k pochopení toho, „kde se to levým AP nelíbí“.

režim routeru

Tato funkce je pravděpodobně nejzajímavější ze všech k prozkoumání.

ESP32 podporuje simultánní provoz v režimu STA + SoftAP. Můžete na něj tedy implementovat klasický NAT router.

Pro podporu síťového zásobníku používá Espressif větev (prakticky nezměněnou) knihovny lwip.

Ve výchozím nastavení však knihovna esp-lwip ve standardním sestavení neposkytuje předávání mezi rozhraními netif 'ap' (SoftAP) a 'st' (STA).

Samozřejmě to jde i bez NAT, ale je problém se současným připojením dvou a více STA k rozhraní 'ap' a synchronizací IP adres ze síťového rozhraní 'st' do 'ap'. Takže potíže nestojí za to a je to jednodušší přes NAT.

Navíc existuje fork esp-lwip od martin-ger, který přidává jednoduchou implementaci NAT pro IP4.

Sice mě svrběly ruce to předělat čistě kosmeticky (podle mě to bylo jednodušší bez forku projektu, ale přes LWIPHÁČEK funkce definované při montáži), ale převládla lenost a možnost z martin-ger se používá tak, jak je.

V režimu routeru je sledován příchozí a odchozí provoz IP4.

Pro zobrazení na obrazovce a shromažďování statistik do souboru se z něj extrahuje zejména následující:

  • Název zařízení, které se připojilo k SoftAP ESP32 (DHCP pakety)
  • URL z požadavků DNS (UDP port 53) ze zařízení připojeného k SoftAP ESP32.

Navíc můžete povolit záznam provozu do souboru PCAP.

Tento režim je velmi užitečný například pro pochopení toho, co váš telefon posílá do sítě a kam to jde.

Můžete si vymyslet další způsoby použití tohoto režimu s přihlédnutím ke schopnosti kompletně řídit příchozí a odchozí provoz softAP ESP32 na úrovni síťového rozhraní: Ehernet hlavička (destMAC[6]+srcMAC[6]+type[2]) + užitečné zatížení (typ IP4, IP6, DCHP atd.).

ESP32 si v zásadě celkem dobře poradí s funkcí WiFi->WiFi router, běžným provozem projede bez zvláštních prodlev. Subjektivně nejsou zpoždění v telefonu připojeném přes router na ESP32 patrná.

Bohužel Espressif API nemá možnost nastavit filtr pro MAC připojený k SoftAP EPS32. Místo toho se navrhuje říct „sbohem“ (esp_wifi_deauth_sta) již připojeným STA, které „nežádoucí“.

Filtrování podle MAC pro připojené STA muselo být provedeno pomocí volání esp_wifi_deauth_sta()

Konečně,

Sice jsem v rámci práce s ESP32 nepřišel na nic nového, ale snad bude výsledek (zdrojový kód) pro někoho zajímavý.

Rád bych poznamenal, že kód byl napsán pouze pro vzdělávací účely. Pro „hackování“ atd. to bylo záměrně nepříliš vhodné.

Nedělal jsem desku s plošnými spoji, protože pájení hotových šátků drátem trvalo 1.5-2 hodiny.

A pokud ano, musíte jej sestavit nikoli z hotových desek, ale z jednotlivých komponentů. Pak budou rozměry ještě menší.

Zdroj: www.habr.com

Přidat komentář