Hry s Wifi na ESP32

Hry s Wifi na ESP32

Na myšlienku vytvoriť prenosný nástroj na analýzu WiFi sietí ma podnietila tento článok.

Ďakujem im za nápad. Práve som nemal čo robiť.

Celá práca bola vykonaná v rámci koníčka s cieľom získať radosť a rozšíriť svoje vedomosti v oblasti sieťových technológií. Bez ponáhľania, 1 až 4 hodiny týždenne od začiatku tohto roka.
Aplikované použitie som neplánoval. T.j. to NIE je nástroj pre hackera.

V súčasnosti funguje celá zamýšľaná funkčnosť. Všetky zdrojové kódy, úplne pripravené na zostavenie, sú zverejnené tu. Tam nájdete aj návod na zostavenie a podobne. V tejto poznámke nebudem duplicitne uvádzať informácie, ktoré sú zverejnené na github. Povediem len to, čo považujem za potrebné popísať osobitne.

Môj názor na „univerzálny nástroj“ a dôvod výberu ESP32

Neansam, že mám pravdu. Každý má svoju vlastnú pravdu. Pokúsim sa obhájiť svoj výber „hardvéru“.

Navrhnutá kombinácia Linuxu (pôvodne Raspberry Pi) + „periférií“ v podobe kontroléra (STM32) + CC1110 (jadro 8051) a plán vtesnať do toho všetko, čo sa len dá (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) sa mi zdala nevhodná. Napriek tomu, tento projekt vyzerá, že zostane súkromný a uzavretý (flipper-zero github "Táto organizácia nemá verejné repozitáre.") a posunul sa k menej rozšírenému hardvéru. Možno sa mýlim, a v budúcnosti autori zverejnia zdrojové kódy softvéru do verejnej sféry. Ale ak nie, tak by som taký hardvér bez zdrojových kódov nekúpil.

Moje požiadavky na „nástroj“

Krabička by mala byť malá (čím menšia, tým lepšie).

Integrovaná batéria nie je potrebná. Pri prúde > 100 mA pri práci s WiFi bude integrovaná batéria buď veľká, alebo jej vydrží len na krátko. Preto nech „krabička“ napája štandardný power bank. Nielenže mám power bank vždy vo vrecku/auta.

Preto:

  • Nemá zmysel mať vnútri „krabičky“ Linux s nástrojmi,
  • napísanými za mnoho rokov vo všetkých jazykoch ak existuje malý displej a skromný súbor ovládacích tlačidiel. Výsledky je možné sledovať/spracovávať aj na normálnom noteboku s plnohodnotnou klávesnicou a displejom. Komponenty musia byť ľahko dostupné a široko známe (dostupný SDK, veľa príkladov a dokumentácie).
  • V dôsledku toho bol pre mňa výber jasný — ESP32.

Nakoniec, pre mňa, voľba bola jasná — ESP32.

Na všetky úlohy uvedené v článku, ktorý ma podnietil k akciám, má ESP32 úplne dostatok možností. Aj keď maximum, čo chcem ešte urobiť, je:

  • Zahrať sa s Bluetoothom.
  • Zahrať sa s 433mHz pásmom s najjednoduchším hardvérom (iba amplitúdová modulácia, čo je dostatočné pre praktické potreby).

Lyžica dechtu v ESP32

  • SDK (IDF) ESP32 je trochu nepríjemné.
  • Časť funkčnosti (napríklad WiFi stack) ide bez zdrojových kódov vo forme skompilovaných statických knižníc.
  • Nie je podporovaný pásmo 5gHz a sú tu určité obmedzenia a chyby pri práci s WiFi.

Ale cena/veľkosti celkom kompenzujú tieto nedostatky.

Hlavná funkčnosť softvéru

Stručne popíšem funkčnosť a svoj názor na…

Správa nastavení a sťahovanie súborov z SD

Všetko vonkajšie riadenie je realizované cez najjednoduchšiu webovú stránku, spúšťanú v samostatnej ponuke. ESP32 sa spúšťa v režime WiFi AP a poskytuje stránku na fixnej IP adrese.

Aj keď jadrá ESP32 sú dosť rýchle, experimenty ukázali, že súčasná práca zabudovanej webovej služby a napríklad režimu router sa príliš dobre nesúladí. Preto neexistuje dynamické riadenie a vo všetkých ostatných režimoch nie je stránka dostupná.
Najmä preto, že pre výskumné účely dynamické riadenie nie je potrebné.

Režim práce s Beacon paketmi

Režimy sú banálne a nie veľmi zaujímavé. Urobili sa „pretože to možno“. Pre zaznamenanie.
Príklady sú v oficiálnych príkladoch Espressif.

Režim skenovania zoznamov AP.
To vlastne dokáže urobiť akýkoľvek smartfón.
No a v tomto režime sa uloží zoznam AP.
Beacon spammer.
ESP32 sa spúšťa ako AP so skrytým SSID a náhodným MAC a začne posielať [beacon frame] podľa vopred vytvoreného zoznamu SSID (vytvoreného ručne alebo získaného skôr pri skenovaní zoznamu AP)

Režim sniffingu WiFi paketov

Vývojári Espressif pridali možnosť aplikáciám získať cez callback funkciu všetky WiFi pakety „prelétajúce vzduchom“. V skutočnosti nie všetky, pretože môže byť nastavený režim iba pre jeden fixný kanál.

Na spracovanie volania callback funkcie sú kladené veľmi prísne časové obmedzenia. Ak to pre režim jednoduchého zbierania štatistík nie je problém, pre režim nahrávania súboru PCAP na SD kartu to vyžaduje určitú námahu pri organizovaní nahrávania cez frontu v pamäti a semafory. Berúc do úvahy osobitosť, že proces, ktorý vyvoláva callback, beží na jednom jadre, zatiaľ čo proces, ktorý vykonáva nahrávanie na SD, beží na inom.

Pri „šumnej vysielaní“ niektoré pakety strácajú (v fronte nie je miesto a sú odmietané), ale pri typickom „vysielaní“ v bytoch večer (5..7 AP v dohľade) sa nahrávanie do PCAP podarí vykonať bez straty paketov.

Dodatočne, pre monitoring a nahrávanie PCAP je k dispozícii režim filtrovania podľa zoznamu MAC v hlavičkách paketov.

Napríklad, možno sledovať objavenie sa osoby v klube/kaviarni ešte predtým, ako vôbec vojde alebo sa objaví v zornom poli. Málo kto vypína WiFi a automatické pripojenia k známym AP. (Ja už teraz vypínam..)

Prezeranie zaznamenaného prevádzky vo Wiresharku je poučné a zaujímavé na pochopenie, ako to celé funguje.

Režim práce s deauth paketmi

Predvolene je odosielanie týchto paketov zakázané v knižnici libnet80211.a, ktorá prichádza bez zdrojových kódov. Ale nie je ťažké to obísť zmenou pár bajtov. Na začiatku som pochyboval o tom, či stojí za to zverejniť patch. Ale keď som sa prechádzal po rôznych miestach s zapnutým režimom skenovania zdrojov odosielania [deauthentication frame], pomyslel som si: „prečo nie“. Zvlášť, keď v esp8266 nie je zasielanie týchto paketov zablokované a na github sú zostavy pre esp8266.

V mnohých miestach (nebudem hovoriť kde) sa používa potlačenie nechcených AP prostredníctvom tejto metódy. A to nie sú „páchatelia“…

A ja som sa ešte čudoval, prečo mi v určitých miestach nefunguje pripojenie na internet z telefónu...

Režim sledovania počtu a RSSI takýchto paketov je veľmi užitočný na pochopenie „kde nemajú radi cudzích AP“.

Režim router

Táto funkcia je pravdepodobne najzaujímavejšia zo všetkých na skúmanie.

ESP32 podporuje simultánnu prácu v režime STA + SoftAP. Preto na ňom možno implementovať klasický NAT router.

Na podporu sieťového zásobníka spoločnosť Espressif používa fork (prakticky bez zmien) knižnice lwip.

Avšak, predvolene, v štandardnej zostave v knižnici esp-lwip nie je predpokladaný prechod medzi netif rozhraniami 'ap' (SoftAP) a 'st' (STA).

Inevitably, you can do it without NAT, but you run into the problem of connecting two or more STAs to the 'ap' interface simultaneously and synchronizing the IP addresses from the 'st' network interface to 'ap'. So the difficulties aren’t worth it, and it’s easier to go through NAT.

Moreover, there exists a fork of esp-lwip by martin-ger that adds a simple implementation of NAT for IPv4.

Although I was tempted to cosmetically redesign it (in my opinion, it was easier without forking the project but through LWIP), laziness won, and I used the version from martin-ger as is.HOOK functions defined during the build), but laziness prevailed, and the variant from martin-ger is used as is.

In router mode, incoming and outgoing IPv4 traffic can be viewed.

In particular, it extracts for display on the screen and collects statistics in a file:

  • The name of the device that connected to the SoftAP ESP32 (DHCP packets)
  • URLs from DNS requests (UDP port 53) from the device connected to the SoftAP ESP32.

Additionally, you can enable traffic recording to a PCAP file.

This mode is quite useful, for example, to understand what your phone is sending to the network and where it goes.

You can come up with other ways to use this mode, taking into account the possibility of fully programmatically managing the incoming and outgoing traffic of SoftAP ESP32 at the network interface level: Ethernet header (destMAC[6]+srcMAC[6]+type[2]) + payload (IPv4, IPv6, DHCP, etc. type).

In principle, the ESP32 handles the function of a WiFi->WiFi router quite well, passing ordinary traffic through without significant delays. Subjectively, delays on the phone connected through the router on the ESP32 are hardly noticeable.

Unfortunately, the Espressif API does not allow setting up a filter by MAC for devices connecting to the SoftAP ESP32. Instead, it suggests saying 'goodbye' (esp_wifi_deauth_sta) to already connected STAs that are 'undesirable'.

Filtering by MAC for connecting STAs had to be done by calling esp_wifi_deauth_sta()

Na záver

Although I didn’t come up with anything new regarding working with the ESP32, the result (the source code) might be of interest to someone.

I would like to note that I wrote the code purely for educational purposes. It was purposely made not very convenient for 'hacking' etc.

I didn’t make a printed circuit board, because it took about 1.5-2 hours to solder the ready-made boards with a wire.

And if I were to make it, I would need to assemble it not from ready-made boards but from separate components. Then the dimensions would be even smaller.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster