
Ideja za izradu džepnog alata za analizu WiFi mreža došla je od .
Zahvaljujem im na ideji. U tom trenutku nisam imao šta da radim.
Sav posao je urađen kao hobi s ciljem sticanja užitka i proširenja znanja o mrežnim tehnologijama. Polako, 1-4 sata nedeljno, od početka ove godine.
Nisam planirao praktičnu upotrebu. To jest, ovo NIJE alat za hakere.
Trenutno sav zamišljeni funkcionalnost radi. Svi izvori, potpuno spremni za kompilaciju, . Tamo je i uputstvo za sastavljanje itd. U ovom zapisu neću duplirati informacije postavljene na githubu. Opisaću samo ono što smatram potrebnim da se posebno opiše.
Moje mišljenje o "univerzalnom alatu" i razlog izbora ESP32
Ne tvrdim da imam istinu. Svako ima svoju. Pokušat ću da obrazložim svoj izbor "hardvera".
kombinacija Linuxa (prvobitno Raspberry Pi) + "periferije" u obliku kontrolera (STM32) + CC1110 (jezgro 8051) i plan da se unese sve što je moguće (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) činio se neodgovarajućim za mene. Ipak, verovatno će ostati privatni i zatvoreni (flipper-zero github "Ova organizacija nema javne repozitorije.") i otišao sam u pravcu manje rasprostranjenog hardvera.
Možda nisam u pravu, i u budućnosti će autori objaviti izvore softvera u otvorenom pristupu. Ali ako ne, ne bih kupio takav uređaj bez izvora.
Moji zahtevi za "alat"
Kutija mora biti mala (što manja, to bolje).
Zato:
- Ugrađena baterija nije potrebna. Pri struji > 100 mA prilikom rada sa Wifi-om, ugrađena baterija će ili biti velika, ili neće trajati dugo. Zato neka se "kutija" napaja iz standardnog power banka. I tako, power bank mi uvek leži u džepu/kolima.
- Unutar "kutije" držati Linux s alatima, napisanim tokom mnogo godina na svim jezicima nema smisla s malim ekranom i skromnim brojem kontrolnih dugmadi. Rezultate je moguće gledati/obrađivati i na normalnom laptopu sa potpunom tastaturom i ekranom.
- Komponente moraju biti lako dostupne i široko poznate (dostupan SDK, mnogo primera i dokumentacije).
Kao rezultat toga, izbor je za mene bio očigledan — ESP32.
Za vse naloge, navedene v članku, ki me je spodbudil k dejanjem, možnosti ESP32 povsem zadostujejo. Edino, kar bi želel še narediti, je:
- Igrati se z Bluetoothom.
- Igrati se z 433mHz frekvenco s preprosto strojno opremo (samo amplitude modulator, kar je dovolj za praktične potrebe).
Žlica katranskega proizvoda v ESP32
- SDK (IDF) ESP32 nekoliko neroden.
- Del funkcionalnosti (npr. WiFi kup) prihaja brez izvorne kode v obliki zbranih statičnih knjižnic.
- Frekvenca 5gHz ni podprta, prav tako so prisotne nekatere omejitve in nepravilnosti pri delovanju WiFi.
Toda cena/premere povsem kompenzirajo te pomanjkljivosti.
Glavna funkcionalnost programske opreme
Na kratko bom opisal funkcionalnost in svoje mnenje o…
Upravljanje nastavitev in nalaganje datotek s SD
Vsa zunanja upravljanja izvedena prek preproste spletne strani, ki se zažene v ločenem meniju. ESP32 se zažene v načinu WiFi AP in ponuja stran na fiksni IP naslov.
Čeprav so jedra ESP32 precej hitra, so prakse pokazale, da hkratno delovanje vgrajenega spletnega storitev in na primer načina usmerjevanja ne deluje najbolje. Zato dinamičnega upravljanja ni in v vseh drugih načinih stran ni dostopna.
Še bolj, ker za raziskovalne namene dinamično upravljanje ni potrebno.
Način delovanja z Beacon paketi
Načini so osnovni in ne preveč zanimivi. Izvedeni so „samo zato, ker se da“. Za beleženje.
Primeri so v uradnih primerih Espressif.
Način skeniranja seznamov AP.
Dejansko to zna narediti vsak pameten telefon.
No, v tem načinu se shranjuje seznam AP.
Beacon spammer.
ESP32 se zažene kot AP s skritim SSID in naključnim MAC-om ter začne pošiljati [beacon frame] po vnaprej ustvarjenem seznamu SSID (ustvarjenem ročno ali pridobljenem prej pri skeniranju seznama AP)
Način sniffing paketov WiFi
Pripravniki Espressif so dodali možnost aplikacijski programski opremi, da preko callback funkcije prejme vse WiFi pakete „ki lete v zraku“. V resnici pa ne vse, saj je mogoče nastaviti režim le za en fiksni kanal.
Obravnavanje klicev funkcije povratnega klica nalaga zelo stroge časovne omejitve. Medtem ko to ne predstavlja težav za način preprostega zbiranja statistike, je bilo pri načinu zapisovanja PCAP datoteke na SD kartico treba veliko delati, da smo uredili zapis preko vrste v pomnilniku in semaforjev. Ob upoštevanju posebnosti, da proces, ki izvaja povratni klic, deluje na enem jedru, proces, ki izvaja zapis na SD, pa na drugem.
Ob »hrupnem etru« nekatere pakete izgubimo (v vrsti ni prostora in se zavržejo), medtem ko se ob tipičnem »etru« v stanovanjih zvečer (5..7 AP v vidnem polju) zapis v PCAP uspe izpeljati brez izgub paketov.
Poleg tega ima za spremljanje in zapis PCAP na voljo način filtriranja po seznamu MAC v paketnih glavi.
Na primer, lahko sledimo pojavljanju osebe v klubu/kavarni, preden je sploh vstopila ali se pojavila v vidnem polju. Malo kdo izklopi WiFi in samodejna povezovanja z znanimi AP. (Jaz jih zdaj izklaplam..)
Ogled zapisane prometa v Wiresharku je poučno in zanimivo za razumevanje, kako to vse deluje.
Način dela s deauth paketi.
Privzeto je pošiljanje teh paketov v knjižnici libnet80211.a, ki prihaja brez izvorne kode, prepovedano. Vendar tega ni težko ukiniti, če spremenimo nekaj bajtov. Sprva sem imel pomisleke, ali naj objavim patch. A ko sem se sprehajal po različnih krajih z vklopljenim načinom skeniranja virov pošiljanja [deauthentication frame], sem si mislil: 'kaj za vraga'. Še posebej, ker v esp8266 pošiljanje teh paketov ni zaklenjeno in obstajajo gradnje na githubu za esp8266.
Na zelo mnogih mestih (ne bom govoril kje) se uporablja zatiranje nezaželenih AP preko te metode. In to niso 'huligani'…
Še vedno sem se čudil, zakaj mi deljenje interneta s telefonom včasih ne deluje…
Način spremljanja števila in RSSI teh paketov je zelo koristen, da razumemo, kje ne marajo levih AP.
Način usmerjevalnika.
Ta funkcija je verjetno najbolj zanimiva za raziskovanje.
ESP32 podpira istočasno delovanje v načinu STA + SoftAP. Zato lahko na njem implementiramo klasični NAT usmerjevalnik.
Za podporo omrežnemu skladu Espressif uporablja fork (praktično brez sprememb) knjižnice lwip.
Vendar pa je v privzeti gradnji v knjižnici esp-lwip med omrežnima vmesnikoma ‘ap’ (SoftAP) in ‘st’ (STA) prepustitev nezadostna.
Seveda lahko to storite tudi brez NAT, vendar se pojavijo težave pri hkratni povezavi dveh ali več STA na vmesnik 'ap' in sinhronizaciji IP naslovov iz omrežnega vmesnika 'st' na 'ap'. Zato te zaplete ne dosežejo vrednosti, lažje je prek NAT.
Še posebej, ker obstaja fork esp-lwip od martin-ger, ki vključuje preprosto implementacijo NAT za IP4.
Čeprav sem imel željo, da bi to preuredil čisto kozmetično (po mojem mnenju bi bilo lažje brez fork projekta, temveč prek LWIPHOOK funkcije, določene pri gradnji), vendar je lenoba zmagala in varianta od martin-ger je uporabljena taka, kot je.
V načinu router se pregledajo prihajajoči in odhajajoči IP4 promet.
Še posebej se iz njega izvleče za prikaz na ekrančku in zbiranje statistike v datoteko:
- Ime naprave, ki se je priključila na SoftAP ESP32 (DHCP paketi)
- URL iz DNS poizvedb (UDP port 53) od naprave, priključene na SoftAP ESP32.
Dodatno lahko omogočite zapisovanje prometa v PCAP datoteko.
Ta način je zelo uporaben, na primer, da razumete, kaj vaš telefon pošlje v omrežje in kam hodi.
Lahko si zamislite tudi druge načine uporabe tega načina ob upoštevanju možnosti popolnega programskega upravljanja s prihajajočim in odhajajočim prometom SoftAP ESP32 na ravni omrežnega vmesnika: Ethernet glava (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DCHP itd. tip).
Na splošno ESP32 sploh dobro opravlja funkcijo WiFi->WiFi usmerjevalnika, prepuščajoč običajen promet brez večjih zamud. Subjektivno, zamude na telefonu, priključenem prek usmerjevalnika na ESP32, niso opazne.
Žal v API-ju Espressif ni možnosti nastavitve filtra po MAC za povezane na SoftAP EPS32. Namesto tega se predlaga, da se reče 'nasvidenje' (esp_wifi_deauth_sta) že povezanim STA, ki so 'neželeni'.
Filtracijo po MAC za povezane STA je bilo treba izvesti z klicem esp_wifi_deauth_sta()
Na záver
Čeprav nisem prišel na nič novega v okviru dela z ESP32, bi morda nekomu rezultat (izvorne kode) lahko bil zanimiv.
Rad bi poudaril, da sem kodo pisal izključno v poučne namene. Za 'vdiranje' itd. je bila posebej narejena ne preveč uporabna.
Tiskane plošče nisem naredil, saj je za spajanje pripravljenih ploščic s žico trajalo 1,5–2 uri.
In če bi jih izdelal, bi bilo treba narediti ne iz pripravljenih plošč, temveč iz posameznih komponent. Takrat bi bili dimenzije še manjše.
Izvor: habr.com
