Hry s Wifi na ESP32

Hry s Wifi na ESP32

Podnet na vytvorenie prenosného nástroja na analýzu WiFi sietí ma inšpiroval. tento článok.

Ďakujem im za túto myšlienku. Práve som nemal čo robiť.

Celá práca bola vykonaná ako hobby s cieľom získať potešenie a rozšíriť svoje vedomosti v oblasti sieťových technológií. Pomaly, 1 až 4 hodiny týždenne, od začiatku tohto roka.
Praktické využitie som neplánoval. T.j. to NIE je nástroj pre hackerov.

Momentálne funguje celý plánovaný funkčný zámysel. Všetky zdrojové kódy, úplne pripravené na zostavenie, sú zverejnené tu.. Tam je aj návod na zostavenie a podobne. V tejto poznámke nebudem duplikovať informácie zverejnené na github. Povieme si len to, čo považujem za potrebné opísať osobitne.

Môj názor na "univerzálny nástroj" a dôvod výberu ESP32.

Nepretváram sa na majstra pravdy. Každý ju má svoju. Pokúsim sa obhájiť svoj výber "hardvéru".

Návrh uvedený v článku kombinácia Linuxu (pôvodne Raspberry Pi) + "périférie" vo forme kontroléra (STM32) + CC1110 (jadro 8051) a plán nafúknuť tam všetko, čo len pôjde (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) mi pripadal nevhodný. V každom prípade, tento projekt zrejme ostane súkromný a uzavretý (flipper-zero github "Táto organizácia nemá verejné repozitáre.") a posunul som sa k menej rozšírenému hardvéru.

Možno sa mýlim, a v budúcnosti autori zverejnia zdrojové kódy softvéru do verejného prístupu. Ale ak nie, tak by som takúto krabičku bez zdrojov nekúpil.

Moje požiadavky na "nástroj"

Krabička by mala byť malá (čím menšia, tým lepšie).

Preto:

  • Zabudovaná batéria nie je potrebná. Pri prúde > 100 mA pri práci s Wifi, zabudovaná batéria bude buď veľká, alebo jej kapacita nebude dostačujúca. Preto nech sa "krabička" napája od štandardného power banku. Tak či tak, power bank mám vždy vo vrecku alebo v aute.
  • V krabičke by mal byť Linux s nástrojmi, napísanými počas mnohých rokov vo všetkých jazykoch. Pri existencii malého displeja a skromnej sady ovládacích tlačidiel nemá zmysel. Výsledky je možné sledovať/ Spracovať aj na normálnom notebooku s plnohodnotnou klávesnicou a obrazovkou.
  • Komponenty by mali byť ľahko dostupné a široko známe (dostupný SDK, veľa príkladov a dokumentácie).

Nakoniec, pre mňa, voľba bola jasná — ESP32.

Na všetky úlohy uvedené v článku, ktorý ma podnecuje k akciám, možnosti ESP32 úplne stačia. Aj keď maximum, čo chcem urobiť, je:

  • Pohrať sa s Bluetooth.
  • Pohrať sa s pásmom 433mHz s najjednoduchším hardvérom (len amplitúdová modulácia, čo stačí na praktické použitie).

Lyžica dechtu v ESP32

  • SDK (IDF) ESP32 je trochu neohrabané.
  • Časť funkčnosti (napríklad WiFi stack) prichádza bez zdrojových kódov vo forme skompilovaných statických knižníc.
  • Nepodporuje pásmo 5gHz a existujú niektoré obmedzenia a nešikovnosti v práci s WiFi.

Ale cena/veľkosti celkom kompenzujú tieto nevýhody.

Hlavná funkčnosť softvéru

Stručne opíšem funkciu a svoj názor na…

Správa nastavení a nahrávanie súborov z SD

Všetka externá správa je realizovaná cez najjednoduchšiu webovú stránku, spúšťanú v samostatnej ponuke. ESP32 sa spúšťa v režime WiFi AP a poskytuje stránku na pevnú IP adresu.

Aj keď sú jadrá ESP32 celkom rýchle, ale ako ukázali experimenty, súčasná práca vstavaného webového servisu a napríklad režimu routera sa príliš nehodia. Preto dynamická správa nie je dostupná a vo všetkých ostatných režimoch stránka nie je prístupná.
O to viac, že pre výskumné účely dynamická správa nie je potrebná.

Režim práce s Beacon paketmi

Režimy sú banálne a nie veľmi zaujímavé. Urobili sa "pretože je to možné". Pre formálnosť.
Príklady sú v oficiálnych examples príkladoch Espressif.

Režim skenovania zoznamov AP.
Vlastne, to dokáže každý smartfón.
No a v tomto režime sa uloží zoznam AP.
Beacon spammer.
ESP32 sa spúšťa ako AP so skrytým SSID a náhodným MAC a začína posielať [beacon frame] podľa vopred vytvoreného zoznamu SSID (vytvoreného ručne alebo získaného predtým pri skenovaní zoznamu AP)

Režim sniffing paketov WiFi

Vývojári Espressif pridali možnosť aplikáciám získať prostredníctvom callback funkcie všetky WiFi pakety "preletujúce vzduchom". V skutočnosti nie všetky, pretože je možné nastaviť režim len pre jeden fixný kanál.

Na spracovanie volania callback funkcie sú uvalené veľmi prísne časové obmedzenia. Ak to pri režime jednoduchého zhromažďovania štatistík nie je problém, pri režime nahrávania súboru PCAP na SD kartu to vyžaduje viac úsilia, pričom sa organizuje nahrávanie prostredníctvom fronty v pamäti a semaforov. S ohľadom na špecifickosť, že proces, ktorý volá callback, beží na jednom jadre, zatiaľ čo proces, ktorý vykonáva nahrávanie na SD, beží na inom.

Pri „znečistenom éteri“ niektoré pakety chýbajú (v fronte nie je miesto a sú odmietané), ale pri typickom „éteri“ bytov večer (5..7 AP v obmedzenom dosahu) sa nahrávanie do PCAP stihne vykonať bez straty paketov.

Okrem toho, na monitorovanie a nahrávanie PCAP je k dispozícii režim filtrovania podľa zoznamu MAC v hlavičkách paketov.

Napríklad, môžete sledovať príchod osoby do klubu/kaviarne predtým, ako vôbec vošla alebo sa objavila na dohľade. Málokto vypína WiFi a automatické pripojenie k známym AP. (Ja teraz vypínam...)

Prezerať si zaznamenaný prenos v Wiresharku je poučné a zaujímavé na pochopenie, ako to všetko funguje.

Režim práce s deauth paketmi

Predvolene, odosielanie týchto paketov je zakázané v knižnici libnet80211.a, ktorá je dodávaná bez zdrojových kódov. Ale nie je ťažké to obísť úpravou niekoľkých bajtov. Na začiatku som váhal, či to mám publikovať. Ale keď som chodil po rôznych miestach s aktívnym režimom skenovania zdrojov odosielania [deauthentication frame], pomyslel som si: „čoho sa báť“. Navyše, v esp8266 nie je odosielanie týchto paketov uzavreté a na github sú k dispozícii zostavy pre esp8266.

Na veľmi mnohých miestach (nebudem hovoriť kde) sa používa potláčanie nežiaducich AP prostredníctvom tejto metódy. A nie sú to „chuligáni“…

A ja som sa ešte čudoval, že mi zdieľanie internetu z telefónu na niektorých miestach nefunguje…

Režim sledovania počtu a RSSI takýchto paketov je veľmi užitočný na pochopenie, „kde nemajú radi zlé AP“.

Režim router

Táto funkcia je pravdepodobne najzaujímavejšia zo všetkých na skúmanie.

ESP32 podporuje súbežnú prácu v režime STA + SoftAP. Preto na ňom môžete implementovať klasický NAT router.

Na podporu sieťového stacku Espressif využíva fork (prakticky bez zmien) knižnicu lwip.

Ale, predvolene, v štandardnej zostave, v knižnici esp-lwip nie je predpokladaný prechod medzi sieťovými rozhraním ‘ap’(SoftAP) a ‘st’ (STA).

Samozrejme, že sa to dá spraviť aj bez NAT, ale vzniká problém s narazovým pripojením dvoch alebo viacerých STA k rozhraniu ‘ap’ a synchronizáciou IP adries zo sieťového rozhrania ‘st’ na ‘ap’. Takže komplikácie za to nestojí a je jednoduchšie to urobiť cez NAT.

O to viac, že existuje fork esp-lwip od martina-ger, v ktorom bola pridaná jednoduchá implementácia NAT pre IP4.

Aj keď ma to lákalo upraviť len kozmeticky (podľa mňa, bolo by to jednoduchšie bez fork projektu, ale cez LWIPHOOK funkcie, definované pri zostavení), ale lenivosť vyhrala a používa sa verzia od martina-ger tak, ako je.

V režime router sa zobrazuje prichádzajúci a odchádzajúci IP4 traffic.

Najmä z neho sa vyťahujú informácie na zobrazenie na displeji a zhromažďovanie štatistiky do súboru:

  • Názov zariadenia, ktoré sa pripojilo k SoftAP ESP32 (DHCP pakety)
  • URL z DNS dotazov (UDP port 53) od pripojeného zariadenia k SoftAP ESP32.

Dodatočne je možné zapnúť nahrávanie trafficu do súboru PCAP.

Tento režim je veľmi užitočný, napríklad na pochopenie, čo váš telefón posiela do siete a kam pritom ide.

Môžete vymyslieť aj iné spôsoby využitia tohto režimu s ohľadom na možnosť plne programovo riadiť prichádzajúci a odchádzajúci traffic SoftAP ESP32 na úrovni sieťového rozhrania: Ethernet hlavička (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DHCP a iné typy).

V zásade, ESP32 celkom dobre zvláda funkciu WiFi->WiFi routera, prechádzajúceho bežným trafficom bez významných oneskorení. Subjektívne, oneskorenia v telefóne pripojenom cez router na ESP32 nie sú postrehnuteľné.

Bohužiaľ, v API Espressif neexistuje možnosť nastaviť filter podľa MAC adries pripojených k SoftAP EPS32. Namiesto toho sa navrhuje povedať 'zbohom' (esp_wifi_deauth_sta) už pripojeným STA, ktoré sú 'nežiadúce'.

Filtrácia podľa MAC pre pripojené STA musela byť uskutočnená prostredníctvom volania esp_wifi_deauth_sta()

Na záver

Hoci som nič nové v rámci práce s ESP32 nevymyslel, môže byť pre niekoho výsledok (zdrojové kódy) zaujímavý.

Chcel by som poznamenať, že kód som písal výhradne na vzdelávacie účely. Na 'hackovanie' a podobne bol úmyselne robený nie veľmi pohodlným.

Tlačovú dosku som nerobil, pretože na to, aby som spájal vodičom hotové dosky, to zabralo asi 1.5-2 hodiny.

A ak by som to robil, tak netreba skladať z hotových dosiek, ale z jednotlivých komponentov. Potom budú rozmery ešte menšie.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster