
Idéen om at lave et lommetool til analyse af WiFi-netvÊrk blev inspireret af .
Tak til dem for idéen. Jeg havde faktisk ikke noget at lave.
Alt arbejdet er udfÞrt som et hobbyprojekt med det formÄl at fÄ glÊde og udvide mine viden om netvÊrksteknologier. Uden hast, 1 til 4 timer om ugen, siden begyndelsen af Äret.
Jeg havde ikke planlagt anvendelse til praktiske formÄl. Dvs. det er IKKE et vÊrktÞj til hackere.
PÄ nuvÊrende tidspunkt fungerer al den planlagte funktionalitet. Alle kildefiler, helt klar til kompilering, . Der er ogsÄ en vejledning til opsÊtning osv. I denne note vil jeg ikke duplikere oplysningerne, der er lagt ud pÄ GitHub. Jeg vil kun omtale det, jeg anser for nÞdvendigt at beskrive separat.
Min mening om "det universelle vĂŠrktĂžj" og grunden til valget af ESP32
Jeg gÞr ikke krav pÄ sandheden. Denne er forskellig for alle. Jeg vil forsÞge at begrunde mit valg af "hardware".
kombinationen af Linux (opprindeligt Raspberry Pi) + "periferi" i form af controller (STM32) + CC1110 (8051-kerne) og planen om at presse alt muligt ind (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) virkede ikke passende for mig. Men til gengÊld, ser ud til at forblive privat og lukket (flipper-zero github "Denne organisation har ingen offentlige repository.") og gik i retning af ikke sÄ almindelig hardware.
MÄske tager jeg fejl, og i fremtiden vil forfatterne lÊgge kildekoden ud til offentligheden. Men hvis ikke, sÄ ville jeg ikke kÞbe sÄdan en hardware uden kildekoder.
Mine krav til "vĂŠrktĂžjet"
Boksen skal vĂŠre lille (jo mindre, jo bedre).
Derfor:
- Indbygget batteri er ikke nÞdvendigt. Ved strÞmstyrker > 100 mA, nÄr man arbejder med Wifi, vil et indbygget batteri enten vÊre stort eller have en kort levetid. SÄ lad "boksen" kÞre pÄ en standard power bank. Jeg har altid en power bank liggende i lommen/bilen.
- At have Linux med vÊrktÞjer indeni "boksen", skrevet i lÞbet af mange Är pÄ alle sprog giver ikke mening, nÄr der kun er en lille skÊrm og et begrÊnset antal knapper. Resultaterne kan ses/behandles pÄ en normal laptop med et fuldt tastatur og skÊrm.
- Komponenterne skal vĂŠre let tilgĂŠngelige og velkendte (tilgĂŠngelig SDK, mange eksempler og dokumentation).
Som resultat var valget for mig klart â ESP32.
For all the tasks mentioned in the article that prompted my actions, the capabilities of the ESP32 are more than sufficient. Although the maximum I want to do now is:
- Play around with Bluetooth.
- Experiment with the 433mHz range using basic hardware (just amplitude modulation, which is sufficient for practical needs).
A fly in the ointment with the ESP32
- The SDK (IDF) for ESP32 is somewhat clunky.
- Some functionality (such as the WiFi stack) comes without source code, in the form of precompiled static libraries.
- The 5GHz range is not supported, and there are some limitations and quirks regarding WiFi.
But the price/size compensates for these drawbacks.
The main functionality of the software
I will briefly describe the functionality and share my opinion onâŠ
Managing settings and uploading files from SD
All external management is done through a simple web page launched from a separate menu item. The ESP32 starts in WiFi AP mode and delivers the page at a fixed IP address.
Although the ESP32 cores are quite fast, experiments have shown that running the built-in web service simultaneously with, for example, router mode does not integrate well. Hence, there is no dynamic management and the page is not accessible in all other modes.
Moreover, for research purposes, dynamic management is not needed.
Operating mode with Beacon packets
The modes are basic and not very interesting. Made 'just because it is possible'. For the sake of formality.
Examples are available in the official examples by Espressif.
Scanning mode for AP lists.
Actually, any smartphone can do this.
And in this mode, a list of APs will be saved.
Beacon spammer.
The ESP32 starts as an AP with a hidden SSID and a random MAC, and starts sending [beacon frame] from a pre-created list of SSIDs (created manually or obtained previously while scanning the AP list).
WiFi packet sniffing mode
Espressif developers added the ability for application software to receive all WiFi packets 'flying in the air' through a callback function. In reality, not all packets can be captured since it is possible to set the mode to only one fixed channel.
Det er strenge tidsbegrensninger for behandling av callback-funksjoner. Mens dette ikke utgjÞr et problem for modusen for enkel statistikkinnsamling, mÄtte det imidlertid gjÞres noen tiltak for Ä organisere opptak til en PCAP-fil pÄ SD-kortet gjennom en minneskqueue og semaforer. Med tanke pÄ det faktum at prosessen som kaller tilbake, kjÞrer pÄ én kjerne, mens prosessen som utfÞrer opptak pÄ SD, kjÞrer pÄ en annen.
Ved «stÞyende signal» gÄr noen pakker tapt (det er ikke plass i kÞen, sÄ de blir avvist), men under typiske «signalforsyninger» i leiligheter pÄ kvelden (5-7 AP i sikte) blir opptaket i PCAP fullfÞrt uten tap av pakker.
I tillegg er det en filtreringsmodus for overvÄkning og opptak av PCAP basert pÄ en liste over MAC-adresser i pakkens overskrifter.
For eksempel kan man spore en persons ankomst til en klubb eller kafe fÞr de faktisk har gÄtt inn eller blitt synlig. FÄ folk slÄr av WiFi og automatisk tilkobling til kjente AP. (Jeg slÄr det nÄ av...)
à se gjennom opptatt trafikk i Wireshark er informativt og interessant for Ä forstÄ hvordan alt dette fungerer.
Modus for arbeid med deauth-pakker
Som standard er sending av disse pakkene forbudt i biblioteket libnet80211.a, som leveres uten kildetekst. Men det er ikke vanskelig Ä modifisere ved Ä justere noen fÄ bytes. FÞrst var jeg usikker pÄ om jeg skulle legge ut patchen. Men etter Ä ha vÊrt flere steder med skannermodus for sending av [deauthentication frame], tenkte jeg: «hvorfor ikke». SÊrlig siden i esp8266 er sending av disse pakkene ikke stengt, og det finnes bygninger pÄ github for esp8266.
I mange steder (jeg skal ikke si hvor) brukes metoden for Ä undertrykke uÞnskede AP. Og dette er ikke «vandalister»...
Og jeg undret meg over at internettdelingen fra telefonen min ikke alltid virket...
Modus for sporing av antall og RSSI for slike pakker er svÊrt nyttig for Ä forstÄ «hvor de ikke liker fremmede AP».
Router-modus
Denne funksjonen er sannsynligvis den mest interessante av alle for forskning.
ESP32 stĂžtter samtidig drift i STA + SoftAP-modus. Derfor kan det implementeres som en klassisk NAT-router.
For Ă„ stĂžtte nettverksstakken bruker Espressif en fork (praktisk talt uten endringer) av lwip-biblioteket.
Men som standard i standardbygningen, er det ikke lagt til stĂžtte for tunneling mellom netif-grensesnittene âapâ (SoftAP) og âstâ (STA) i esp-lwip-biblioteket.
Det er mulig Ä gjÞre det uten NAT, men det oppstÄr et problem med samtidig tilkobling av to eller flere STA til 'ap'-grensesnittet og synkronisering av IP-adresser fra nettverksgrensesnittet 'st' til 'ap'. SÄ problemene er ikke verdt innsatsen, og det er enklere Ä gjÞre det via NAT.
Dessuten finnes det en fork av esp-lwip fra martin-ger som har en enkel implementering av NAT for IP4.
Selv om jeg hadde lyst til Ă„ gjĂžre det om kosmetisk (etter min mening, var det enklere uten fork-prosjektet, men via LWIP)HOOK funksjoner, definert under byggingen), men latskapen vant, og versjonen fra martin-ger brukes som den er.
I routemodus kan man se innkommende og utgÄende IP4-trafikk.
Spesielt trekkes det ut for Ä vises pÄ skjermen og samle statistikk i en fil:
- Navnet pÄ enheten som er koblet til SoftAP ESP32 (DHCP-pakker)
- URL fra DNS-forespĂžrslene (UDP-port 53) fra enheten som er koblet til SoftAP ESP32.
I tillegg kan man aktivere registrering av trafikk i PCAP-fil.
Denne modusen er veldig nyttig, for eksempel for Ä forstÄ hva telefonen din sender til nettet og hvor den gÄr.
Man kan finne pÄ andre bruksmetoder i denne modusen med tanke pÄ muligheten til Ä styre innkommende og utgÄende trafikk fra SoftAP ESP32 programmessig pÄ nettverksgrensesnittnivÄ: Ethernet-header (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DHCP, og andre typer).
I prinsippet hÄndterer ESP32 WiFi->WiFi-ruteren ganske bra, og lar vanlig trafikk passere uten vesentlige forsinkelser. Subjektivt er forsinkelsene i telefonen, som er koblet til ruteren pÄ ESP32, ikke merkbare.
Dessverre er det ingen mulighet i Espressif API-en til Ä sette et filter for MAC-adresser som kobles til SoftAP EPS32. I stedet foreslÄs det Ä si «farvel» (esp_wifi_deauth_sta) til allerede tilkoblede STA-er som er «uÞnsket».
Filtrering etter MAC for tilkoblede STA mÄtte gjÞres via kallet esp_wifi_deauth_sta()
Avslutningsvis
Selv om jeg ikke har funnet pÄ noe nytt i forhold til arbeidet med ESP32, kan det hende at noen vil finne resultatet (kildene) interessant.
Jeg vil gjerne pÄpeke at jeg skrev koden utelukkende for lÊringsformÄl. Den ble gjort litt vanskelig for "hacking" og lignende.
Jeg laget ikke et printet kretskort, siden det tok omtrent 1,5-2 timer Ă„ lodde ferdige brett sammen med ledninger.
Og hvis du skal lage det, sÄ mÄ du ikke samle det fra ferdige brett, men fra separate komponenter. Da vil stÞrrelsen bli enda mindre.
Kilde: habr.com
