
Mõte luua tasku tööriist WiFi võrkude analüüsimiseks tuli mulle .
Tänan neid idee eest. Mul oli just hetkel igav.
Kogu töö tehti hobi raames, et nautida ja laiendada oma teadmisi võrgutehnoloogiate osas. Rahulikult, 1..4 tundi nädalas, alates selle aasta algusest.
Ma ei plaaninud praktilist kasutamist. St. see EI ole tööriist häkkeritele.
Praegu töötab kogu planeeritud funktsionaalsus. Kõik lähtekoodid, täielikult valmisteks kogumiseks, . Seal on ka juhised monteerimiseks jne. Selles märkuses ma ei dubleeri githubis jagatud teavet. Jagan vaid seda, mida pean vajalikuks eraldi kirjeldada.
Minu arvamus "universaalsest tööriistast" ja põhjus, miks valisin ESP32
Ma ei pretendeeri tõele. Igal inimesel on see omamoodi. Püüan põhjendada oma "raua" valikut.
kasutusskeem, mis ühendab Linuxi (alguses Raspberry Pi) + "perifeeriat" nagu kontroller (STM32) + CC1110 (8051 tuum) ning kava suruda sinna kõik võimalik (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) tundus mulle sobimatu. Siiski, tundub, et see jääb privaatseks ja suletuks (flipper-zero github "Sellel organisatsioonil pole avalikke hoidlaid.") ning liigub vähem levinud riistvara suunas.
Võib-olla ma eksin, ja tulevikus avaldavad autorid tarkvara lähtekoodi avalikult. Kuid kui ei, siis ma ei ostaks sellist seadmeid ilma lähtekoodita.
Minu nõuded "vahendile"
Karp peab olema väike (mida väiksem, seda parem).
Seetõttu:
- Sisseehitatud aku ei ole vajalik. Üle 100 mA voolu töötamisel WiFi-ga peab sisseehitatud aku olema kas suur või kestma ei ole. Seega las "karp" on toidetud standardse power bank'iga. Igal juhul on power bank mul alati taskus/masinas olemas.
- Kanda "karbi" sees Linuxit koos tööriistadega, mis on kirjutatud aastate jooksul kõigil keeltes koos väikese ekraani ja piiratud juhtnuppude komplektiga pole mõtet. Tulemusi saab vaadata/käidelda ka normaalsel sülearvutis, kus on täisklaviatuur ja ekraan.
- Komponendid peavad olema kergesti kättesaadavad ja laialdaselt tuntud (saab kasutada SDK-d, palju näiteid ja dokumentatsiooni).
Seega oli minu jaoks valik selge - ESP32.
Kõikide artiklis esitatud ülesannete puhul on ESP32 võimekus piisav. Ainsana, mida ma veel teha tahan, on:
- Mängida Bluetoothiga.
- Mängida 433mHz sagedusega kõige lihtsamate riistvaradega (ainult amplituudmodulatsiooni kasutamine, mis on piisav praktiliste vajaduste jaoks).
ESP32 konks.
- ESP32 SDK (IDF) on veidi krobeline.
- Mõned funktsioonid (näiteks WiFi stack) tulevad ilma lähtekoodita komplitseeritud staatiliste raamatukogudena.
- 5GHz sagedusala ei ole toetatud ja WiFi kõrval on mõned piirangud ja probleemid.
Kuid hind/kompaktsus kompenseerib need puudused piisavalt hästi.
Peamine tarkvara funktsionaalsus
Kuna kokkuvõte funktsionaalsusest ja minu arvamuse kohta...
Seadete haldamine ja failide edastamine SD kaartilt
Kogu välise juhtimise funktsionaalsus on tehtud läbi lihtsa veebilehe, mis käivitatakse eraldi menüüs. ESP32 käivitub WiFi AP režiimis ja esitab lehe fikseeritud IP-aadressilt.
Kuigi ESP32 tuumad on üsna kiireid, on katsetes selgunud, et sisseehitatud veebiteenuse ja näiteks ruuterirežiimi samal ajal töötamine ei sobi hästi kokku. Seetõttu ei ole dünaamilist juhtimist ja ülejäänud režiimides leht ei ole saadaval.
Kuna uurimistööde jaoks pole dünaamiline juhtimine vajalik.
Töö režiim Beacon paketiga
Režiimid on igavad ja mitte eriti huvitavad. Tehtud "sest on võimalik". Märgiversioon.
Näiteid on ametlikes Espressif'i näidetes.
AP skaneerimise režiim.
Seda suudab teha iga nutitelefon.
Ja selles režiimis salvestatakse AP-de loend.
Beacon spammer.
ESP32 käivitub kui AP, peidetud SSID ja juhusliku MAC-iga ning hakkab saatma [beacon frame] ettevalmistatud SSID nimekirja (kas käsitsi loodud või varem AP-de nimekirja skaneerimisel saadud).
WiFi pakettide nuhkimise režiim
Espressif'i arendajad on lisanud võimaluse rakendustarkvarale saada callback-funktsiooni kaudu kõik WiFi paketid, mis "üles lendavad." Tegelikult mitte kõik, kuna režiimi saab seadistada ainult ühe kindla kanali jaoks.
Callback-funktsiooni töötlemisel on väga ranged ajapiirangud. Kui lihtsa statistika kogumise režiimis pole see probleem, siis PCAP-faili salvestamise režiimis SD-kaardile tuli korraldada salvestamine mälus järjekorra ja semaforite kaudu.
„Müra täis eetris“ kaovad mõned paketid (järjekorras ei ole ruumi ja need heidetakse ära), kuid tüüpilises „eetris“ õhtul korteris (5..7 AP silmapiiril) jõuab PCAP-i salvestamine toimuda kaotusteta.
Lisaks on PCAP-i jälgimiseks ja salvestamiseks MAC-nimekirja filtrirežiim pakettide pealkirjades.
Näiteks võib jälgida, kuidas inimene ilmub klubisse/kohvikusse, enne kui ta üldse sisse astus või nähtavale ilmus. Vähe keegi keelab WiFi ja automaatse ühenduse tuntud AP-dega. (Mina nüüd lülitan välja..)
Salvestatud liiklust Wiresharkis vaadata on hariv ja huvitav, et mõista, kuidas kõik need kaardid töötavad.
Deauth-paketiga töörežiim
Vaikimisi on nende pakettide saatmine keelatud teegis libnet80211.a, mis tuleb ilma lähtekoodita. Kuid seda pole keeruline muuta, muutes paar bitti. Algul kahtlesin, kas tasub patch'i välja panna. Kuid pärast erinevates kohtades kohalike allikate skaneerimise režiimi kaasamist mõtlesin: „miks mitte”. Eriti kuna esp8266-l pole nende pakettide saatmine suletud ja GitHubis on esp8266 jaoks versioonid olemas.
Paljudes kohtades (ei hakka ütlema kus) kasutatakse soovimatute AP-de summutamist selle meetodi kaudu. Ja see pole ainult „vandaalitsemine”…
Ja ma imestasin veel, miks mu telefonist internet jagamine mõnes kohas ei toimi…
Nende pakettide arvu ja RSSI jälgimise režiim on väga kasulik, et mõista, kus ei meeldi vasakpoolsetele AP-dele.
Režiim router
See funktsioon on tõenäoliselt kõige huvitavam teadustöö jaoks.
ESP32 toetab samal ajal STA + SoftAP režiimis töötamist. Seetõttu saab sellel rakendada klassikalist NAT routerit.
Espressif toetab oma võrgu virna jaoks forks (peaaegu muutusteta) teeki lwip.
Kuid vaikimisi, tavalises seadistuses, ei ole esp-lwip raamatukogus netif liideste 'ap' (SoftAP) ja 'st' (STA) vahel NAT-i edastamine ette nähtud.
Muidugi on võimalik ka ilma NAT-ita, kuid sel juhul tekib probleem, et mitu STA saavad ühendada 'ap' liidesesse ja IP aadresside sünkroniseerimisega 'st' liidesest 'ap'-le. Seega ei tasu vaeva näha ja lihtsam on NAT-i kaudu.
Veelgi enam, on olemas martin-ger'i fork esp-lwip-st, milles on lisatud lihtne NAT-i rakendus IPv4 jaoks.
Kuigi mul oli soov seda lihtsalt kosmeetiliselt ümber teha (minu arvates oleks olnud lihtsam ilman fork projekti, vaid läbi LWIP-funktsioonide, mis on määratletud kokkupanemisel), aga laiskus võitis ja kasutan martin-ger'i varianti nii, nagu see on.HOOK funktsioonide, mis on määratletud kokkupanekul), kuid laiskus võitis ja martin-ger'i varianti kasutatakse nagu on.
Suunduri režiimis saab vaadata sissetulevat ja väljuvat IPv4 liiklust.
Eelkõige eraldatakse sellest kuvamiseks ekraanil ja statistika kogumiseks faili:
- Seadme nimi, mis on ühendatud SoftAP ESP32-ga (DHCP paketid)
- URL DNS päringutest (UDP port 53) ühendatud SoftAP ESP32 seadme poolt.
Lisaks saab lubada liikluse salvestamise PCAP faili.
See režiim on väga kasulik, näiteks selleks, et mõista, mida teie telefon võrku saadab ja kuhu ta selle käigus läheb.
Selle režiimi kasutamiseks võiks välja mõelda ka teisi viise, arvestades täielikku programmeeritavat kontrolli siseneva ja väljuva liikluse üle SoftAP ESP32 tasemel: Etherneti pealkiri (destMAC[6]+srcMAC[6]+type[2]) + koormus (IP4, IP6, DCHP jne).
ESP32 täidab WiFi->WiFi ruuteri funktsiooni üsna hästi, edastades tavalist liiklust ilma eriliste viivitusteta. Subjektiivselt ei ole telefoni, mis on ühendatud ESP32 kaudu ruuteriga, viivitusi märgata.
Kahjuks ei võimalda Espressifi API seada SideAP EPS32-ga ühendatud seadmete MAC-aadresside filtreerimist. Selle asemel pakutakse lahendust "oodake hüvasti" (esp_wifi_deauth_sta) juba ühendatud STA-de jaoks, mis on "soovimatud."
MAC-i filtreerimist ühendatud STA-de jaoks tuli teostada funktsiooni esp_wifi_deauth_sta() kaudu.
Kokkuvõtteks
Kuigi ma ei ole ESP32 töötamise raames midagi uut välja mõelnud, võivad mõned inimesed leida mulle huvitava tulemuse (allikakoodid).
Tahaksin märkida, et koodi kirjutasin rangelt hariduslikel eesmärkidel. Selle "häkkeriks" muutmine ja muud sellised asjad tehti tahtlikult mitte eriti mugavaks.
Prinditud plaati ma ei teinud, sest valmis plaatide juhtmetega kokku ühendamine võttis aega umbes 1,5-2 tundi.
Ja ja, kui teha, siis ei tohi kokku panna valmiskomplektidest, vaid eraldi komponentidest. Siis on mõõtmed veelgi väiksemad.
Allikas: habr.com
