
Tanken att skapa ett bÀrbart verktyg för analys av WiFi-nÀtverk kom till mig .
Tack till dem för idén. Jag hade precis inget att göra.
Allt arbete har utförts inom ramen för en hobby med syftet att fÄ njutning och utöka mina kunskaper inom nÀtverksteknik. Saktmodigt, 1 till 4 timmar i veckan, sedan början av det hÀr Äret.
Jag hade inte planerat nÄgot applicerbart bruk. Det Àr INTE ett verktyg för hackers.
Just nu fungerar all planerad funktionalitet. Alla kÀllfiler, helt redo för kompilering, . DÀr finns ocksÄ instruktioner för kompilering och liknande. I denna anteckning kommer jag inte att duplicera informationen som lagts ut pÄ github. Jag kommer bara att berÀtta det jag anser Àr viktigt att beskriva separat.
Min Äsikt om "universella verktyg" och orsaken till att jag valde ESP32
Jag gör inga ansprÄk pÄ sanning. Den Àr olika för varje person. Jag ska försöka motivera mitt val av "hÄrdvara".
att anvÀnda kombinationen Linux (ursprungligen Raspberry Pi) + "periferi" i form av en kontroller (STM32) + CC1110 (kÀrna 8051) och planen att fÄ in allt möjligt (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) verkade inte rÀtt för mig. Hur som helst, verkar förbli privat och stÀngt (flipper-zero github "Denna organisation har inga offentliga repor"), och jag gick Ät ett hÄll med mindre vanligt hÄrdvara.
Kanske har jag fel, och i framtiden kommer författarna att publicera kÀllkoden offentligt. Men om inte, sÄ skulle jag inte köpa en sÄdan hÄrdvara utan kÀllkod.
Mina krav pÄ "verktyget"
LÄdan mÄste vara liten (ju mindre desto bÀttre).
DÀrför:
- Inbyggt batteri behövs inte. Vid strömstyrkor > 100 mA nÀr man arbetar med Wifi, kommer det inbyggda batteriet antingen att vara stort eller inte rÀcka lÀnge. SÄ lÄt "lÄdan" drivas av en standard power bank. Jag har alltid en power bank liggande i fickan/bilen.
- Att ha Linux med verktyg inuti "lÄdan", skrivna under mÄnga Är pÄ alla sprÄk med en liten skÀrm och ett begrÀnsat antal kontrollknappar finns ingen mening. Resultaten kan ses/bearbetas Àven pÄ en vanlig bÀrbar dator med ett komplett tangentbord och skÀrm.
- Komponenterna mÄste vara lÀttillgÀngliga och allmÀnt kÀnda (tillgÀnglig SDK, mÄnga exempel och dokumentation).
Som resultat var valet uppenbart för mig â ESP32.
För alla uppgifter som nÀmns i artikeln som fick mig att agera, rÀcker ESP32:s möjligheter vÀl. Det enda jag egentligen vill göra mer Àr:
- Lek med Bluetooth.
- Lek med 433mHz-bandet med enklast möjliga hÄrdvara (bara amplitudmodulering, vilket Àr tillrÀckligt för praktiska behov).
En skugga pÄ ESP32
- SDK (IDF) för ESP32 Àr nÄgot klumpigt.
- En del funktionalitet (WiFi-stacken, till exempel) finns utan kÀllkoder i form av sammanstÀllda statiska bibliotek.
- 5gHz-bandet stöds inte och det finns vissa begrÀnsningar och brister i WiFi-funktionalitet.
Men priset/avstÄnden kompenserar fullt ut för dessa brister.
Huvudfunktionen för programvaran
Jag kommer kort beskriva funktionaliteten och min Ă„sikt omâŠ
Hantera instÀllningar och överföra filer frÄn SD
All extern styrning görs via en enkel webbsida som startas i en separat meny. ESP32 startar i WiFi AP-lÀge och ger en sida pÄ en fast IP-adress.
Ăven om ESP32-kĂ€rnorna Ă€r ganska snabba, visade experiment att samtidig körning av den inbyggda webbservern och exempelvis router-lĂ€get inte riktigt fungerar ihop. DĂ€rför finns det ingen dynamisk kontroll och i alla andra lĂ€gen Ă€r sidan inte tillgĂ€nglig.
För forskningsÀndamÄl behövs inte dynamisk kontroll.
DriftlÀge med Beacon-paket
LÀget Àr banalt och inte sÀrskilt intressant. Skapat "bara för att det gÄr". För att ha det med.
Exempel finns i de officiella exempel pÄ Espressif.
LÀge för att skanna AP-listor.
Detta kan faktiskt vilken smartphone som helst göra.
Och i detta lÀge sparas listan över AP.
Beacon spammer.
ESP32 startar som AP med dold SSID och slumpmÀssig MAC och börjar sÀnda [beacon frame] frÄn en förhandsskapad lista med SSID (skapad manuellt eller erhÄllen tidigare vid skanning av AP-listan)
LÀge för sniffning av WiFi-paket
Utvecklarna pÄ Espressif har lagt till möjligheten för applikationer att fÄ alla WiFi-paket "som flyger i luften" via callback-funktion. Egentligen inte alla, eftersom endast ett fast kanal kan vÀljas.
Det finns mycket strikta tidsgrÀnser för behandling av anrop till callback-funktionen. Om det inte Àr ett problem för lÀget för enkel insamling av statistik, sÄ var det nödvÀndigt att arbeta med inspelning i PCAP-fil pÄ SD-kortet, vilket krÀvde att inspelningen organiserades genom en kö i minnet och semaforer. Med tanke pÄ att processen som anropar callback-funktionen körs pÄ en kÀrna, medan processen som utför inspelningen pÄ SD-kortet körs pÄ en annan.
Vid 'bullrig sÀndning' gÄr vissa paket förlorade (det finns inte plats i kön och de kasseras), men vid typisk 'sÀndning' i lÀgenheter pÄ kvÀllarna (5..7 AP synliga) hinner inspelningen i PCAP utföras utan paketförluster.
Dessutom finns det ett filterlÀget för övervakning och inspelning av PCAP, baserat pÄ en lista över MAC-adresser i paketens huvuden.
Till exempel kan man spÄra en persons ankomst till en klubb/kafé, innan de ens har gÄtt in eller dykt upp i sikte. Det Àr fÄ som stÀnger av WiFi och automatiska anslutningar till kÀnda AP. (Jag stÀnger nu av det...)
Att titta pÄ den inspelade trafiken i Wireshark Àr bÄde lÀrorikt och intressant för att förstÄ hur allt detta fungerar.
ArbetssÀtt med deauth-paket
Som standard Àr sÀndning av dessa paket förbjuden i biblioteket libnet80211.a, som kommer utan kÀllkod. Men det Àr inte svÄrt att modifiera genom att justera nÄgra byte. I början var jag osÀker pÄ om jag skulle publicera patchen. Men efter att ha flackat pÄ olika stÀllen med aktiverad scanningslÀge för sÀndning av [deauthentication frame], tÀnkte jag: 'vad fan'. SÀrskilt eftersom sÀndning av dessa paket pÄ esp8266 inte Àr stÀngd och det finns byggen pÄ github för esp8266.
PÄ vÀldigt mÄnga stÀllen (jag vill inte sÀga vart) anvÀnds detta metod för att förhindra oönskade AP. Och detta Àr inte 'huliganer'...
Och jag undrade Ànnu varför min internetdelning med telefonen ibland inte fungerar...
LÀget för att spÄra antalet och RSSI för sÄdana paket Àr mycket anvÀndbart för att förstÄ 'var man ogillar frÀmmande AP'.
RouterlÀget
Denna funktion Àr förmodligen den mest intressanta av alla för forskning.
ESP32 stöder samtidig drift i lÀge STA + SoftAP. DÀrför kan man implementera en klassisk NAT-router pÄ den.
För att stödja nÀtverksstacken anvÀnder Espressif en fork (nÀstan utan förÀndringar) av biblioteket lwip.
Men i standardbygget av biblioteket esp-lwip finns det ingen vidarekoppling mellan netif-grÀnssnitten 'ap' (SoftAP) och 'st' (STA).
Det gÄr givetvis att göra utan NAT, men det uppstÄr ett problem med att ansluta tvÄ eller fler STA till grÀnssnittet 'ap' och synkronisera IP-adresser frÄn nÀtverksgrÀnssnittet 'st' till 'ap'. SÄ det Àr inte vÀrt besvÀret, och det Àr enklare med NAT.
Dessutom finns det en fork av esp-lwip frÄn martin-ger dÀr en enkel implementation av NAT för IPv4 har lagts till.
Ăven om jag hade lust att göra om den rent kosmetiskt (enligt min Ă„sikt var det enklare utan fork-projektet, utan genom LWIP), men latheten vann och varianten frĂ„n martin-ger anvĂ€nds som den Ă€r.HOOK funktioner som definieras vid kompilering), men latheten vann och varianten frĂ„n martin-ger anvĂ€nds som den Ă€r.
I routerlÀget övervakas inkommande och utgÄende IPv4-trafik.
Specifikt extraheras detta för att visas pÄ skÀrmen och samla statistik i en fil:
- Namn pÄ enheten som har anslutit till SoftAP ESP32 (DHCP-paket)
- URL frÄn DNS-förfrÄgningar (UDP-port 53) frÄn enheten ansluten till SoftAP ESP32.
Dessutom kan man aktivera inspelning av trafiken i en PCAP-fil.
Detta lÀge Àr mycket anvÀndbart, till exempel för att förstÄ vad din telefon skickar till nÀtverket och var den gÄr.
Man kan komma pÄ andra sÀtt att anvÀnda detta lÀge med tanke pÄ möjligheten att helt programvarumÀssigt styra inkommande och utgÄende trafik för SoftAP ESP32 pÄ nÀtverksgrÀnssnitts-nivÄ: Ethernet-header (destMAC[6]+srcMAC[6]+type[2]) + payload (IPv4, IPv6, DHCP och andra typer).
I princip klarar ESP32 av att fungera som en WiFi->WiFi-router, och vidarebefordrar vanlig trafik utan betydande fördröjningar. Subjektivt sett mÀrks det inte nÄgra fördröjningar pÄ telefonen som Àr ansluten via routern till ESP32.
TyvÀrr finns det ingen möjlighet i Espressifs API att stÀlla in filter baserat pÄ MAC-adresser för de som ansluter till SoftAP ESP32. IstÀllet erbjuds man att sÀga 'hej dÄ' (esp_wifi_deauth_sta) till redan anslutna STA som Àr 'ödesdigra'.
Filtrering baserat pÄ MAC för anslutna STA fick göras genom anrop av esp_wifi_deauth_sta().
Avslutningsvis
Ăven om jag inte hittade nĂ„got nytt i arbetet med ESP32, kan resultatet (kĂ€llkoden) vara intressant för nĂ„gon.
Jag skulle vilja pÄpeka att jag skrev koden enbart i utbildningssyfte. För 'hackande' och liknande gjordes den medvetet inte sÀrskilt anvÀndarvÀnlig.
Jag gjorde ingen tryckt kretskort eftersom det tog 1,5-2 timmar att löda samman fÀrdiga plattor med trÄd.
Och om man ska göra det, bör man inte anvÀnda fÀrdiga plattor, utan separata komponenter. DÄ blir mÄtten Ànnu mindre.
KĂ€lla: habr.com
