Jocuri cu Wifi pe ESP32

Jocuri cu Wifi pe ESP32

Ceea ce mi-a dat ideea de a face un instrument de buzunar pentru analiza rețelelor WiFi a fost acest articol.

Le mulțumesc pentru idee. Nu aveam nimic de făcut.

Toate lucrările au fost făcute ca parte a unui hobby cu scopul de a mă distra și de a-mi extinde cunoștințele în domeniul tehnologiilor de rețea. Încet, 1..4 ore pe săptămână, de la începutul acestui an.
Nu am planificat nicio utilizare practică. Acestea. Acesta NU este un instrument pentru hacker.

În acest moment, toate funcționalitățile planificate funcționează. Toate sursele, complet gata pentru asamblare, postat aici. Există și instrucțiuni de asamblare etc. În această notă, nu voi duplica informațiile postate pe github. Vă voi spune doar ceea ce consider necesar să descriu separat.

Părerea mea despre „instrumentul universal” și motivul alegerii ESP32

Nu pretind că sunt adevărul. Fiecare are a lui. Voi încerca să-mi justific alegerea hardware-ului.

Propus în articol cazul de utilizare al unei combinații de Linux (inițial Raspberry Pi) + „periferice” sub forma unui controler (STM32) + CC1110 (nucleu 8051) și planul de a înghesui tot ceea ce este posibil acolo (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) nu mi s-a părut potrivit. In orice caz, acest proiect Se pare că va rămâne privat și închis (flipper-zero github „Această organizație nu are depozite publice”) și a mers către hardware nu foarte obișnuit.

Poate mă înșel și, în viitor, autorii vor face sursele software disponibile public. Dar dacă nu, atunci nu aș cumpăra o astfel de piesă hardware fără codul sursă.

Cerințele mele pentru „instrument”

Cutia ar trebui să fie mică (cu cât mai mică, cu atât mai bine).

Prin urmare:

  • Nu este nevoie de baterie încorporată. Cu un curent > 100 mA atunci când lucrați cu Wifi, bateria încorporată fie va fi mare, fie nu va dura mult. Prin urmare, lăsați „cutia” să fie alimentată de o bancă de alimentare standard. Oricum, am mereu un power bank în buzunar/mașină.
  • Păstrați o „cutie” Linux cu instrumente înăuntru, scris de-a lungul multor ani în toate limbile Cu un ecran mic și un set slab de butoane de control, nu are sens. Rezultatele pot fi vizualizate/procesate pe un laptop normal cu o tastatură și ecran complet.
  • Componentele ar trebui să fie ușor accesibile și cunoscute pe scară largă (SDK disponibil, multe exemple și documentație).

Drept urmare, pentru mine, alegerea a fost evidentă - ESP32.

Pentru toate sarcinile menționate în articolul care m-au determinat să iau măsuri, capacitățile ESP32 sunt destul de suficiente. Deși cel mai mult vreau să fac este:

  • Joacă-te cu Bluetooth.
  • Joacă-te cu gama de 433 mHz cu cel mai simplu hardware (doar modularea în amplitudine, care este suficientă pentru nevoi practice).

Zboară în unguent în ESP32

  • SDK-ul ESP32 (IDF) este oarecum stângaci.
  • Unele dintre funcționalități (stiva WiFi, de exemplu) vin fără cod sursă sub formă de biblioteci statice asamblate.
  • Banda de 5 gHz nu este acceptată și există unele limitări și stângăcie în lucrul cu WiFi.

Dar prețul/dimensiunea compensează complet aceste neajunsuri.

Funcționalitatea principală a software-ului

Voi descrie pe scurt funcționalitatea și părerea mea despre...

Gestionarea setărilor și încărcarea fișierelor de pe SD

Toate controlul extern se realizează printr-o simplă pagină Web, lansată într-un articol separat de meniu. ESP32 pornește în modul WiFi AP și afișează o pagină la o adresă IP fixă.

Deși nucleele ESP32 sunt destul de rapide, după cum au arătat experimentele, funcționarea simultană a serviciului Web încorporat și, de exemplu, modul router nu sunt foarte compatibile. Prin urmare, nu există control dinamic și pagina nu este disponibilă în toate celelalte moduri.
În plus, controlul dinamic nu este necesar în scopuri de cercetare.

Mod de lucru cu pachetele Beacon

Modurile sunt banale și nu foarte interesante. Făcut „pentru că este posibil”. Pentru verificare.
Există exemple în exemplele oficiale Espressif.

Modul de scanare a listei AP.
De fapt, orice smartphone poate face asta.
Ei bine, în acest mod lista AP va fi salvată.
Spammer de semnalizare.
ESP32 începe ca un AP cu un SSID ascuns și un MAC aleatoriu și începe să trimită [cadru de baliză] conform unei liste pre-create de SSID-uri (create manual sau obținute mai devreme prin scanarea listei AP)

Mod sniffing pachet WiFi

Dezvoltatorii Espressif au adăugat posibilitatea aplicației software de a primi toate pachetele WiFi „zboară în aer” prin funcția de apel invers. De fapt, nu toate, deoarece puteți seta doar modul pentru un canal fix.

Restricții de timp foarte stricte sunt impuse pentru procesarea unei funcții de apel invers. Daca acest lucru nu pune probleme pentru modul simplu de colectare a statisticilor, atunci pentru modul de inregistrare a fisierelor PCAP pe cardul SD a trebuit sa ma chinuiesc, organizand inregistrarea printr-o coada in memorie si semafoare. Luând în considerare particularitatea că procesul de apelare inversă rulează pe un nucleu, iar procesul care scrie pe SD în altul.

În timpul „aerului zgomotos”, unele pachete se pierd (nu este loc în coadă și sunt aruncate), dar cu un „aer” tipic al unui apartament seara (5..7 AP-uri în vizibilitate), înregistrare în PCAP este finalizată fără pierderi de pachete.

În plus, pentru monitorizarea și înregistrarea PCAP, există un mod de filtrare bazat pe lista MAC din antetele pachetelor.

De exemplu, puteți urmări aspectul unei persoane într-un club/cafenea chiar înainte ca aceasta să intre sau să apară la vedere. Puțini oameni dezactivează WiFi și conexiunile automate la AP-urile cunoscute. (O opresc acum..)

Vizualizarea traficului înregistrat în Wireshark este educativă și interesantă pentru înțelegerea hărților - totul funcționează.

Mod pentru lucrul cu pachete de deauth

În mod implicit, trimiterea acestor pachete este interzisă în biblioteca libnet80211.a, care vine fără surse. Dar este ușor de remediat ajustând câțiva biți. La început m-am îndoit dacă merită să postez patch. Dar după ce m-am plimbat prin diferite locuri cu modul de scanare a cadrului de deautentificare activat, m-am gândit: „ce naiba”. Mai mult, în esp8266 livrarea acestor pachete nu este închisă și există ansambluri pe github pentru esp8266.

În multe locuri (nu voi spune unde) este folosită suprimarea AP-urilor nedorite prin această metodă. Și aceștia nu sunt „bullys”...

Și am fost, de asemenea, surprins că distribuția mea de internet de pe telefon nu a funcționat în unele locuri...

Modul de urmărire a numărului și RSSI al unor astfel de pachete este foarte util pentru a înțelege „unde nu le place AP-urilor din stânga”.

modul router

Această caracteristică este probabil cea mai interesantă dintre toate de explorat.

ESP32 acceptă operarea simultană în modul STA + SoftAP. Prin urmare, puteți implementa un router NAT clasic pe acesta.

Pentru a susține stiva de rețea, Espressif folosește o furcă (practic neschimbată) a bibliotecii lwip.

Dar, implicit, în versiunea standard, biblioteca esp-lwip nu oferă redirecționare între interfețele netif „ap” (SoftAP) și „st” (STA).

Desigur, o puteți face fără NAT, dar există o problemă cu conectarea simultană a două sau mai multe STA la interfața „ap” și sincronizarea adreselor IP de la interfața de rețea „st” la „ap”. Deci dificultățile nu merită și este mai ușor prin NAT.

Mai mult, există o furcă esp-lwip de la martin-ger, care adaugă o implementare simplă a NAT pentru IP4.

Deși mâinile îmi mâncărim să-l refacă pur cosmetic (în opinia mea, a fost mai ușor fără furca a proiectului, ci prin LWIPHOOK funcții definite în timpul asamblarii), dar lenea a prevalat și opțiunea de la martin-ger este folosită ca atare.

În modul router, este vizualizat traficul IP4 de intrare și de ieșire.

În special, următoarele sunt extrase din acesta pentru a fi afișate pe ecran și pentru a colecta statistici într-un fișier:

  • Numele dispozitivului care s-a conectat la SoftAP ESP32 (pachete DHCP)
  • URL de la solicitările DNS (portul UDP 53) de la un dispozitiv conectat la SoftAP ESP32.

În plus, puteți activa înregistrarea traficului într-un fișier PCAP.

Acest mod este foarte util, de exemplu, pentru a înțelege, de exemplu, ce trimite telefonul în rețea și unde merge.

Vă puteți gândi la alte modalități de a utiliza acest mod, ținând cont de capacitatea de a controla complet traficul de intrare și de ieșire softAP ESP32 la nivel de interfață de rețea: antet Ehernet (destMAC[6]+srcMAC[6]+type[2]) + sarcină utilă (tip IP4, IP6, DCHP etc.).

În principiu, ESP32 se descurcă destul de bine cu funcția de router WiFi->WiFi, trecând prin trafic normal fără întârzieri. Subiectiv, întârzierile la un telefon conectat printr-un router pe un ESP32 nu sunt vizibile.

Din păcate, API-ul Espressif nu are capacitatea de a seta un filtru pentru MAC conectat la SoftAP EPS32. În schimb, se propune să spuneți „la revedere” (esp_wifi_deauth_sta) STA-urilor deja conectate care sunt „nu sunt dorite”.

Filtrarea după MAC pentru STA conectate trebuia făcută prin apelul esp_wifi_deauth_sta()

în concluzie

Deși nu am venit cu nimic nou în cadrul lucrului cu ESP32, poate că rezultatul (codul sursă) va fi interesant pentru cineva.

Aș dori să remarc că codul a fost scris exclusiv în scopuri educaționale. Pentru „hacking”, etc., a fost făcut în mod deliberat nu foarte convenabil.

Nu am făcut o placă de circuit imprimat pentru că a durat 1.5-2 ore pentru a lipi eșarfele finite cu sârmă.

Și dacă o faci, trebuie să-l asamblați nu din plăci gata făcute, ci din componente individuale. Atunci dimensiunile vor fi și mai mici.

Sursa: www.habr.com

Adauga un comentariu