Giochi con Wifi su ESP32

Giochi con Wifi su ESP32

L'idea di creare uno strumento portatile per l'analisi delle reti WiFi è stata suggerita a me da questo articolo.

Grazie a loro per l'idea. Avevo proprio tempo da dedicare.

Tutto il lavoro è stato svolto come hobby, con l'obiettivo di divertirsi e ampliare le proprie conoscenze nel campo delle tecnologie di rete. Senza fretta, da 1 a 4 ore a settimana, dall'inizio di quest'anno.
Non avevo in programma un utilizzo pratico. Cioè, NON è uno strumento per hacker.

Al momento, tutte le funzionalità previste sono operative. Tutti i sorgenti, completamente pronti per la compilazione, sono disponibili qui. Lì troverai anche le istruzioni per la compilazione e altro. In questo post non ripeterò le informazioni già fornite su GitHub. Racconterò solo ciò che ritengo necessario descrivere separatamente.

La mia opinione riguardo allo "strumento universale" e il motivo della scelta di ESP32

Non pretendo di avere la verità. Ognuno ha la propria. Cercherò di giustificare la mia scelta dell'hardware.

La soluzione proposta nell'articolo è l'uso combinato di Linux (inizialmente Raspberry Pi) + periferiche come il controller (STM32) + CC1110 (cuore 8051) e il piano di inserire tutto ciò che è possibile (125kHz, NFC, 433mHz, USB, iButton, bluetooth, ?) mi è sembrato inadeguato per me. Tuttavia, questo progetto sembra che rimarrà privato e chiuso (flipper-zero github "Questa organizzazione non ha repository pubblici.") e si è orientato verso hardware non molto diffuso.

Forse mi sbaglio, e in futuro gli autori renderanno il codice sorgente dell'app disponibile. Ma se non lo fanno, non comprerei un tale dispositivo senza codice sorgente.

Le mie esigenze per uno "strumento"

Il dispositivo deve essere piccolo (più è piccolo, meglio è).

Quindi:

  • Non è necessaria una batteria interna. Con una corrente > 100 mA durante l'uso del Wifi, la batteria interna sarà o grande, o durerà poco. Quindi, lasciamo che il "dispositivo" venga alimentato da una power bank standard. Ho sempre una power bank in tasca/a bordo dell'auto.
  • Deve contenere una distribuzione Linux con strumenti scritti nel corso degli anni in tutti i linguaggi non ha senso avere un piccolo schermo e un insieme limitato di pulsanti di controllo. I risultati possono essere visualizzati/elaborati su un buon laptop con tastiera e schermo adeguati.
  • I componenti devono essere facilmente accessibili e ben noti (SDK disponibile, molti esempi e documentazione).

Di conseguenza, per me, la scelta è stata ovvia: ESP32.

Per tutte le attività menzionate nell'articolo che mi ha spinto all'azione, le capacità dell'ESP32 sono più che sufficienti. Anche se l'unica cosa che voglio fare è:

  • Sperimentare con il Bluetooth.
  • Sperimentare con la banda 433mHz utilizzando hardware semplice (solo modulazione di ampiezza, che è sufficiente per le esigenze pratiche).

Un piccolo inconveniente nell'ESP32

  • L'SDK (IDF) dell'ESP32 è un po' goffo.
  • Parte delle funzionalità (il stack WiFi, per esempio) è fornita senza sorgente in forma di librerie statiche precompilate.
  • Non supporta la banda 5gHz e ci sono alcune limitazioni e problematiche nel funzionamento del WiFi.

Ma il prezzo/le dimensioni compensano ampiamente questi difetti.

Funzionalità principali del software

Descriverò brevemente le funzionalità e la mia opinione su…

Gestione delle impostazioni e caricamento dei file dalla SD

Tutte le operazioni esterne sono gestite tramite una semplice pagina web, attivata in un'apposita voce di menu. L'ESP32 viene avviato in modalità WiFi AP e fornisce la pagina all'indirizzo IP fisso.

Sebbene i core ESP32 siano piuttosto veloci, esperimenti hanno dimostrato che l'esecuzione simultanea del servizio Web integrato e, ad esempio, della modalità router non è molto compatibile. Pertanto, non c'è gestione dinamica e in tutte le altre modalità la pagina non è accessibile.
Tanto più che per scopi di ricerca non è necessaria la gestione dinamica.

Modalità di lavoro con pacchetti Beacon

Le modalità sono banali e non molto interessanti. Sono state create 'perché possibile'. Per fare presenza.
Esempi sono disponibili negli esempi ufficiali di Espressif.

Modalità di scansione delle liste AP.
In effetti, qualsiasi smartphone può farlo.
In questa modalità verrà salvata la lista degli AP.
Beacon spammer.
ESP32 avvia come AP con SSID nascosto e MAC casuale e inizia a inviare [beacon frame] da una lista di SSID precedentemente creata (creata a mano o ottenuta in precedenza durante la scansione della lista AP).

Modalità di sniffing dei pacchetti WiFi

Gli sviluppatori di Espressif hanno aggiunto la possibilità per il software applicativo di ricevere tramite una funzione di callback tutti i pacchetti WiFi 'che passano nell'aria'. In realtà non tutti, poiché è possibile impostare la modalità solo per un canale fisso.

Le chiamate alle funzioni callback sono soggette a vincoli di tempo molto rigorosi. Se per la modalità di raccolta dati semplice questo non rappresenta un problema, per la registrazione del file PCAP su scheda SD è stato necessario lavorare un po', organizzando la registrazione tramite una coda in memoria e dei semafori. Tenendo conto del fatto che il processo che chiama il callback gira su un core, mentre il processo che esegue la registrazione sulla SD gira su un altro.

In un "canale rumoroso", alcuni pacchetti possono andare persi (la coda è piena e vengono scartati), ma in un "canale" tipico di un appartamento la sera (5..7 AP visibili) la registrazione in PCAP riesce a completarsi senza perdita di pacchetti.

In aggiunta, per il monitoraggio e la registrazione del PCAP esiste una modalità di filtraggio per elenco MAC nei pacchetti.

Ad esempio, è possibile tracciare l'arrivo di una persona in un club/caffè, prima ancora che entri o appaia nel campo visivo. Pochi disattivano il WiFi e la connessione automatica con AP conosciuti. (Ora lo disattivo...)

Esaminare il traffico registrato in Wireshark è istruttivo e interessante per comprendere come funzionano queste reti.

Modalità di lavoro con pacchetti deauth

Di default, l'invio di questi pacchetti è vietato nella libreria libnet80211.a, che viene fornita senza sorgenti. Tuttavia, non è difficile modificarla apportando alcune modifiche ai byte. All'inizio avevo dei dubbi se pubblicare la patch. Ma dopo aver girato in vari posti con la modalità di scansione per le sorgenti del pacchetto [deauthentication frame], ho pensato: «perché no». Soprattutto, dato che in esp8266 l'invio di questi pacchetti non è bloccato e ci sono build su github per esp8266.

In molti luoghi (non dirò dove) viene utilizzata la soppressione di AP indesiderati tramite questo metodo. E non si tratta di "vandalismo"...

Eppure mi chiedevo perché a volte la condivisione di internet dal telefono non funzionasse bene...

La modalità di monitoraggio del numero e del RSSI di tali pacchetti è molto utile per capire "dove non gradiscono AP esterni".

Modalità router

Questa funzione è, probabilmente, la più interessante di tutte per la ricerca.

ESP32 supporta il funzionamento simultaneo in modalità STA + SoftAP. Pertanto, è possibile implementare un classico router NAT.

Per supportare lo stack di rete, Espressif utilizza un fork (praticamente senza modifiche) della libreria lwip.

In the default standard build, the esp-lwip library does not provide a passthrough between the ‘ap’ (SoftAP) and ‘st’ (STA) netif interfaces.

Of course, it can be done without NAT, but this leads to the problem of connecting two or more STAs to the ‘ap’ interface simultaneously and synchronizing the IP addresses from the ‘st’ network interface to the ‘ap’. So, the complications aren't worth it, and it's easier with NAT.

Moreover, there is a fork of esp-lwip by martin-ger, which includes a simple implementation of NAT for IP4.

Although I was tempted to redo it purely cosmetically (in my opinion, it would have been simpler without the fork, but through LWIP hooks defined during the build), laziness won and the version from martin-ger is used as is.HOOK functions defined during the build), but laziness won and the version from martin-ger is used as is.

In router mode, incoming and outgoing IP4 traffic is monitored.

In particular, it extracts information to display on the screen and collect statistics in a file:

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

Additionally, recording traffic to a PCAP file can be enabled.

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

È possibile inventare altri modi per utilizzare questa modalità, considerando la possibilità di gestire completamente tramite software il traffico in entrata e in uscita del SoftAP ESP32 a livello di interfaccia di rete: intestazione Ehernet (destMAC[6]+srcMAC[6]+type[2]) + payload (IP4, IP6, DCHP e altro tipo).

In linea di principio, l'ESP32 gestisce abbastanza bene la funzione di router WiFi->WiFi, permettendo il passaggio del traffico normale senza particolari ritardi. Soggettivamente, i ritardi sul telefono connesso tramite router all'ESP32 non sono percepibili.

Sfortunatamente, nell'API di Espressif non è possibile impostare un filtro per il MAC dei dispositivi connessi al SoftAP EPS32. Invece, viene proposta un'opzione per dire 'arrivederci' (esp_wifi_deauth_sta) ai dispositivi STA già connessi che sono 'indesiderati'.

La filtrazione per MAC dei dispositivi STA connessi è stata effettuata attraverso la chiamata esp_wifi_deauth_sta().

In conclusione

Anche se non ho inventato nulla di nuovo riguardo al funzionamento dell'ESP32, è possibile che a qualcuno il risultato (il codice sorgente) possa interessare.

Vorrei sottolineare che il codice è stato scritto esclusivamente a scopo educativo. Per il 'cracking' e simili, è stato volutamente reso non molto conveniente.

Non ho realizzato un circuito stampato, poiché ci sono volute circa 1,5-2 ore per saldare le schede pronte con un filo.

E se si deve fare, non si deve assemblare da schede pronte, ma da singoli componenti. Così le dimensioni saranno ancora più ridotte.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster