Deauther Watch : un orologio per lo studio della sicurezza delle reti WiFi

In questo articolo parlo del Deauther Watch, ovvero un kit di sviluppo basato su ESP8266 per la realizzazione di orologi da polso, Smartwatch… e  per lo scopo per cui è stato progettato ovvero testare la sicurezza delle reti Wi-Fi.

Sponsor

Il Deauther Watch è stato gentilmente offerto da MakerFocus – Negozio online di kit elettronici ad ottimi prezzi situato in Cina. Pagamento con paypal e spedizioni con corriere espresso.

MakerFocus

Perchè Deauther Watch

Letteralmente vuol dire: Orologio che de-autorizza. Il Deauthoring, o nel caso più specifico, WiFi Deauthentication Attack, è un attacco informatico realizzato verso le reti Wi-Fì per fare in modo che i dispositivi collegati alla rete vengano automaticamente disconnessi. E’ quindi un attacco di tipo DoS (Denial Of Service – Negazione del servizio).

Come funziona questo tipo di attacco? Sfrutta un bug del protocollo IEEE 802.11, che è quello che definisce lo standard di trasmissione delle reti WLAN. Lo standard prevede che, tra gli altri, ci siano anche pacchetti di Deautenticazione/Dissociazione, ovvero un dispositivo collegato all’access point può ricevere questo determinato tipo di pacchetto che viene interpretato come: Disconnettiti!. Il bug in questione è dovuto al fatto che normalmente i pacchetti che transitano durante la comunicazione debbano essere autenticati, ovvero deve esserci un meccanismo per il quale sia l’access point che il terminale collegato possano essere in grado di capire che il pacchetto proviene davvero dall’uno o dall’altro dispositivo. Ecco, i pacchetti di deautenticazione, su alcune revisioni del protocollo, sono svincolati dal meccanismo di autenticazione per cui possono essere mandati da un dispositivo che non sia il vero access point a cui si è collegati.

Questo bug è stato risolto con l’emendamento del 2009 (IEEE 802.11w) che prevede che anche questi pacchetti debbano essere autenticati. Per poter sfruttare questo bug, quindi, i dispositivi devono comunicare utilizzando una versione del protocollo precedente alla w, per cui è chiaro che questo tipo di attacco non funziona dappertutto.

Questa modalità di attacco non è assolutamente Jamming che consiste, invece, nel trasmettere con una certa potenza segnali continui sulla stessa banda che si vuole disturbare, aumentando notevolmente il rapporto segnale/rumore e facendo quindi arrivare comunicazioni completamente disturbate e indecifrabili a tutti i dispositivi nella zona. A parte il meccanismo di attacco completamente differente (pacchetti precisi contro confusione sparata in aria), il Deauthoring è selettivo perchè permette di scegliere precisi dispositivi a cui rivolgere l’attacco.

L’autore del progetto, difatti, si raccomanda fortemente di non chiamarlo Jammer, altrimenti, come dire, si è un po’ stupidi:

Testo che compare nella home page del dispositivo la prima volta che parte

Chiaramente utilizzare questo oggetto per attaccare reti che non sono le nostre, è un’azione illegale: non si possono fare scherzi, non si può attaccare volutamente perchè costituisce reato. In aggiunta i pacchetti di deauthoring possono anche essere monitorati con altri appositi tool e si può risalire al punto da cui provengono. E’ quindi un oggetto che possiamo utilizzare per testare la nostra rete personale, a scopo di studio e curiosità (per capire meglio come funziona la trasmissione via WiFi) e, soprattutto, per smanettare con questo kit che ci da la possibilità di realizzare anche altre cose con la nostra fantasia e per il quale motivo questo articolo non verte solo sul deauther ma anche su altri aspetti utili al maker per poter lavorare con questo oggetto.

Il progetto è stato realizzato da due maker di Shenzen: Travis Lin (aka DSTIKE), che ha realizzato la parte hardware, e Stefan Kremser (aka SpaceHuhn) autore del software.

Io non posso che inchinarmi al lavoro che hanno fatto perchè ho analizzato il codice sorgente, ho smontato l’orologio in ogni sua parte e devo dire che sono rimasto stupefatto sia dalle tecniche di programmazione utilizzate (Stefan ha fatto addirittura rientrare un popo’ di codice in meno di 1MB di flash, e questo genera anche delle pagine web accessibili da access point che sono realizzate a regola d’arte), sia dalla bontà costruttiva dell’orologio in se stesso, che tra l’altro viene anche fornito in una scatola come fosse un orologio di lusso:

Per il Maker che non deve chieder mai. Altro che Rolex!!

Caratteristiche del DSTIKE Deauther Watch 1

Il Deauther Watch esiste attualmente in 2 versioni. La Versione 1 è quella che vi presento qui, la versione 2 è pressappoco identica (sono state fatte delle lievi migliorie a livello hardware) ed ha un guscio stampato in 3D completo: sulla versione 1 l’unica parte stampata in 3D è la shell di mezzo che tiene separati i due PCB di cui è costituito l’orologio.

Il Deauther Watch deriva da quello che prima veniva chiamato Deauther Wristband, anch’esso presente in 2 versioni e più semplice di questo. Praticamente invece di chiamarlo Deauther Wristband v.3 l’hanno chiamato Deauther Watch.

Queste sono le parti di cui è composto:

  • Modulo ESP8266 utilizzato: ESP-07 (Flash 1MB)
  • Bridge USB/seriale: CP2102
  • Display: OLED 1.3″ basato su controllore SH1106 (I2C: SDA su GPIO5, SCL su GPIO4, indirizzo ox3C)
  • Led RGB WS2812B (GPIO15)
  • Rotella di navigazione a 3 vie (su: GPIO12, giù: GPIO13, pulsante: GPIO14)
  • Led bianco ultraluminoso su GPIO16
  • Larghezza:38mm, altezza:45.5mm, spessore:17mm
  • Batteria LiPo 500mA (protetta)

Sulle caratteristiche esposte su vari siti di vendita è indicato anche Side Button: GPIO0, GPIO2, RST ma in realtà, RST (Reset) a parte (il pulsante in basso sul lato destro dell’orologio), non è vero nulla: i due pulsanti laterali non sono collegati a nessun GPIO del modulo ESP-07. Tra l’altro proprio i GPIO 0 e 2 sono riportati sull’header vuoto sulla parte frontale dell’orologio ed è pure possibile controllare con un tester che la pressione di quei pulsanti non porta a nulla.

Sull’orologio, poi, è impossibile non notare il buzzer in cima, affianco al led RGB : purtroppo non è collegato nemmeno questo!

Perchè due pulsanti e un buzzer, presenti ma non collegati a nulla?

L’orologio è formato da due schede disposte a sandwitch collegate con un flat, con la batteria al centro. Il PCB superiore, che contiene solo gli utilizzatori (display, leds, pulsanti, buzzer), è stato usata da DSTIKE per un altro orologio che ha un PCB base differente, con un ESP32, e che invece utilizza queste cose.

L’ESP32, però, non può far girare il Deauther!

Per questioni di economia (?) ha quindi probabilmente realizzato un’unica board per entrambi i prodotti. Ad ogni modo in giro si vede una modifica per utilizzare il buzzer e che prevede di sostituire il modulo ESP-07 con un ESP-12F : il pad del cicalino capita così sul GPIO10.

Questo è il pinout dell’header che si trova sulla faccia superiore (tornerà utile per la programmazione col Flash Tool e se volete saldarci sopra altre cose):

Utilizzo del Deauther

Il Deauther può essere utilizzato in 3 diversi modi:

  • Direttamente dall’orologio seguendo i menù sul display e utilizzando la rotella di navigazione
  • Accedendo da cellulare all’access point creato dall’ESP8266 (AP: pwned, password: deauther, IP: 192.168.4.1 o digitare deauth.me)
  • Via Seriale (baudrate 115200bps)

L’utilizzo da cellulare è un sistema forse più discreto e completo perchè si può tenere l’orologio, che è grosso, anche su un tavolo e sul cellulare le pagine in cui si naviga sono molto ricche di descrizioni e spiegazioni.

Qui illustrerò solo l’utilizzo direttamente da orologio e nemmeno in maniera completa per evitare che malintenzionati senza nozioni possano utilizzare il dispositivo in maniera fraudolenta.

La rotella è facile da utilizzare ma è molto delicata: si può ruotare verso l’alto e verso il basso e premendola si conferma la funzione scelta.

Tutto parte dal menu SCAN: prima di fare ogni operazione è necessario scansionare l’ambiente esterno. Il menù scan consente di eseguire una scansione di AP (Access Point, ovvero i router, i ripetitori ecc) e di ST (Station, ovvero cellulari, pc, dispositivi collegati al WiFi) insieme, oppure solo AP o solo Stations. Il led RGB si colora di blu e viene avviata la scansione. Una indicazione di percentuale in fondo al display indica il progresso della scansione e alla fine il led diventa verde e compare il numero di access point e stazioni trovate. Premere di nuovo la rotella per tornare indietro: questi dati vengono salvati in un file json nello SPIFFS per cui sono disponibili anche dopo aver spento l’orologio. Selezionare quindi [BACK] per tornare al menù principale.

L’operazione successiva da eseguire è SELECT, ovvero selezionare solo chi/cosa vogliamo testare con l’attacco deauther. Cliccando su AP, ad esempio, ci viene presentata la lista degli AP scansionati in precedenza, così cliccando su stations ci viene mostrata la lista dei dispositivi trovati nei paraggi. Chiaramente se si seleziona un AP, l’attacco non è diretto all’AP direttamente ma piuttosto a tutti i dispositivi collegati a quell’AP. La selezione del dispositivo/AP si fa cliccando la rotella: un simbolo di asterisco compare affianco per indicare che è stato selezionato.

Oltre ad APs e Stations, in questo menù c’è NamesSSIDs, ecco queste voci sono meglio gestibili utilizzando il cellulare: l’ultima voce in particolare contiene un elenco di nomi di SSID che vengono generati tutti insieme, oppure è possibile Clonare il nome di un access point per poter generare decine di access point con lo stesso nome (e quindi confondere un dispositivo che non sa più quale è quello giusto) oppure, ancora, generare decine di nomi di access point a caso con caratteri strani che oltre a far confondere un utente che si ritrova una lista di access point strani, fanno anche sembrare che il cellulare sia impazzito.

Curiosità: i nomi dei SSID preprogrammati provengono dalla famosissima canzone Never Gonna Give You Up del 1987, di Rick Astley. C’è un motivo particolare per questa scelta e ve la spiego perchè tra le tante cose sono anche un appassionato di meme. Tale canzone è difatti diventata, involontariamente e inspiegabilmente, la protagonista di un meme nei primi anni del 2000. In pratica si usava (si usa ancora, noi in Italia non tanto, ma in America va molto di moda) inserire un link nei social dando una descrizione in grado di catturare l’attenzione: cliccando sul link si veniva invece ridirezionati alla canzone in oggetto e la vittima dello scherzo si dice che è stata Rickrolled. Ecco questo elenco serve proprio per far credere agli utenti che ci siano quelle reti WiFi ma che in realtà sono false.

Questo è quello che accade con la modalità di attacco Beacon e i SSID di default. You’ve been rickrolled!

Tornare di nuovo al menu principale. Selezionando ATTACK si entra nel menù di attacco. Anche qui dobbiamo eseguire una o più scelte selezionando DEAUTH, che esegue il meccanismo che spiegavo prima, ma solo verso i dispositivi selezionati, il cui numero appare affianco, BEACON che genera le reti WiFi finte selezionate nel menu di prima, e PROBE che è un altro tipo di richiesta un po’ più complessa da spiegare. Dopo aver selezionato, si va su START e il led diventa rosso. L’attacco continua fino a che non si preme STOP.

Devo dire che l’attacco DEAUTH su alcuni dispositivi mi ha funzionato e su altri no, questo perchè, come dicevo, la versione w del protocollo 802.11 è immune, e così anche le reti a 5GHz.

In aggiunta alcuni dispositivi sono immuni all’attacco Deauth anche se usano un protocollo più vecchio, altri ancora potrebbero risultare sempre connessi perchè hanno una velocità di riconnessione molto elevata per cui anche se si disconnettono, non ve ne accorgete.

Ripeto: può essere una cosa divertente ma questo dispositivo non va utilizzato su altri e solo a scopo di studio sulla propria rete Wi-Fi perchè ci sono delle sanzioni anche gravi. Purtroppo per ogni cosa può essere fatto un utilizzo sbagliato e confido nel buon senso dei lettori di Settorezero che è sempre stato destinato a studenti e a chi ha voglia di imparare piuttosto che a smanettoni della domenica senza cognizione di causa e che ho sempre cercato di allontanare.

Nel menù dell’orologio c’è anche una modalità CLOCK che fa comparire ore e minuti presi dall’RTC interno dell’ESP8266 e che possono essere settati agendo sulla rotella di navigazione. I problemi con questo orologio sono due:

  • l’RTC interno dell’ESP8266 non è preciso
  • Spegnendo l’orologio l’impostazione viene persa

C’è infine l’ultimo menù che serve ad accendere il led bianco ultraluminoso presente sulla sinistra dell’orologio e utile come torcia.

Compilazione con Arduino IDE

La cosa sicuramente interessante da fare è studiare il codice sorgente, che può essere scaricato dal repository Github di Spacehuhn che ho indicato alla fine dell’articolo.

Avviso però che, allo stato attuale, il codice sorgente non mi funziona: l’orologio si resetta senza mai partire mostrando solo lo splash screen. Le istruzioni per la compilazione le fornisco ugualmente perchè sicuramente risolveranno il problema. Ad ogni modo al paragrafo successivo do anche le istruzioni su come ripristinare il firmware stock del dispositivo.

Anche se l’orologio utilizza un ESP8266 e abbiamo già installato il supporto per ESP8266, viene detto che è necessario inserire un’altra URL nel gestore schede per ritrovarci anche un gruppo di schede che contiene solo i dispositivi ufficiali supportati da questo firmware. Da Arduino IDE, File > Impostazioni, inseriamo la seguente URL nel campo URL aggiuntive per il gestore schede

https://raw.githubusercontent.com/SpacehuhnTech/arduino/main/package_spacehuhn_index.json

Se abbiamo più URL in quel campo, rircordo che possiamo separarli tra loro con le virgole. Chiudere dando OK. Dal menù Strumenti andiamo in Scheda (ultima scheda che avete usato) > Gestore schede. Nel campo vuoto scrivete Deauther ESP8266 Boards e dare invio.

Compare l’oggetto di Spacehuhn Technologies, cliccare sul pulsante Installa. Da Strumenti > Scheda vediamo che ora compare anche il gruppo Deauther ESP8266 Boards (2.7.2). Selezioniamo Generic ESP8266.

Il raggruppamento delle schede in base alla piattaforma è presente dalla versione 1.8.13 di Arduino IDE, quindi se non vi esce così, aggiornate all’ultima versione.

Per la programmazione poi è necessario spuntare le opzioni precise per il dispositivo.

Onestamente mi aspettavo che installando il nuovo gruppo di schede come detto nel wiki, mi sarei ritrovato proprio il dispositivo preciso (Deauther Watch v.1 ad esempio), senza dover selezionare a mano tutte le impostazioni. Boh. Probabilmente ci stanno ancora lavorando.

Come selezionare le impostazioni per il Deauther Watch. Per la frequenza CPU, in realtà, il Wiki consiglia di selezionare 160MHz per avere il massimo delle performance. Io ho delle remore perchè si tratta comunque di un orologio alimentato a batteria e vorrei farla durare di più.

Fatto questo è necessario anche installare alcune librerie:

Riguardo alla libreria Arduino Json, è necessario installare una versione 5, quindi se avete già installata una delle ultime versioni (da 6 a salire) è necessario fare un downgrade.

Le librerie, anche se l’ho scritto milioni di volte, si installano dal menù Sketch > #include libreria > Gestione librerie…

E’ necessario installare una versione 5 della libreria Arduino Json. Io ho installato l’ultima 5 disponibile.

Ora dobbiamo scaricare il repository ufficiale dell’ESP8266 Deauther, chi già utilizza Github sa come fare, altrimenti basta semplicemente cliccare sul pulsante CODE e quindi su Download ZIP

Ci ritroviamo un file ZIP dal nome esp8266_deauther-2.zip estraiamolo ed entriamo nella cartella appena creata. Nella sotto-cartella esp8266_deauther è presente il file sorgente dal nome esp8266_deauther.ino : apriamolo in Arduino IDE. Per poter adattare il sorgente in questione alle schede supportate ufficialmente, c’è un file di setup, che compare in Arduino IDE nella seconda scheda dopo aver aperto il file .ino : A_config.h. In tale file bisogna decommentare il nome della scheda utilizzata. Nel caso di questo orologio è DEAUTHER_WRISTBAND_V2 

 

Allo stato attuale viene dato un errore durante la compilazione nel modulo LED.h:

'Adafruit_NeoPixel' does not name a type

Questo errore viene restituito anche se la libreria in questione è installata correttamente. Succede perchè nel file LED.h la libreria in questione viene inclusa solo se è stata definita la costante NEOPIXEL_LED

In realtà quella costante non è definita da nessuna parte e dovrebbe essere presente in A_config.h che contiene le definizioni per la scheda utilizzata. E’ presente invece una costante chiamata LED_NEOPIXEL_NUM che dovrebbe definire il numero di neopixel (led RGB come li chiama Adafruit) presenti sulla scheda utilizzata e in realtà non utilizzata, ho quindi modificato quella riga includendo questa costante:

E ho segnalato questo errore/soluzione in una issue. Così facendo il codice compila correttamente, devo però ricordare: Il codice allo stato attuale non mi funziona. L’orologio impazzisce, viene mostrato solo lo splash screen e si resetta di continuo, per cui ripeto: non utilizzatelo se poi non sapete ripristinare l’orologio allo stato iniziale. Sicuramente col passare del tempo il problema verrà risolto.

Versioni Deauther – Upload BIN su ESP8266

La versione del deauther con cui mi è arrivato l’orologio è la 2.5.0. Andando a vedere le releases, effettivamente la 2.5.0 (RC2) è l’ultima disponibile ma è in effetti una Pre-Release mentre l’ultima ufficiale (stabile) è la 2.1.0. 

Scaricando il sorgente da Github mi viene invece fuori una versione 2.2.0 che invece non è elencata nelle releases, questo potrebbe spiegare i malfunzionamenti che ho avuto usando il sorgente compilato.

Il numero di versione nel sorgente è presente nel modulo A_config.h

Se volete caricare una versione precompilata (file bin) di cui non è presente il sorgente, potete andare nella pagina delle release. Per ogni release è presente un link Assets, cliccandolo viene fuori una lista dei firmware precompilati per ogni piattaforma, quella per l’orologio di cui parlo è chiamata

esp8266_deauther_2.5.0-rc2_DSTIKE_DEAUTHER_WATCH

scaricate questo file bin. Per caricarlo sull’ESP8266 è necessario un tool. Sulla pagina ufficiale del firmware deauth viene consigliato, per chi è alle prime armi, di utilizzare Node2Deauther che è un tool specifico, scritto in C# (di cui è anche presente il sorgente) che fa tutto in automatico: download del firmware e flash, non si seleziona nemmeno la porta seriale. In realtà utilizzando tale programma viene caricata una versione stabile del deauther (quindi attualmente la 2.1) e in più non specifica per l’hardware utilizzato per cui vi ritroverete l’orologio col display non funzionante! Per questo motivo ho aperto una issue richiedendo che ci sia la possibilità di selezionare il file BIN specifico per l’hardware e mi è stato risposto picche.

Quello che funziona sicuramente, ma è leggermente più complicato da utilizzare, è il tool ufficiale della espressif

Cliccate sul download di Flash Download Tools. Estraete il file scaricato.

Collegate l’orologio e accendetelo in modo che venga rilevata la porta COM da Windows. Cliccate sul file .EXE. Si apre un prompt di DOS e una finestra in cui viene chiesto se scegliere la modalità DeveloperFactory. Cliccate sul tasto developer. La seconda finestra richiede il SOC da programmare, cliccate su ESP8266. Si presenta quindi la finestra seguente:

Nel primo campo premete il tasto coi 3 puntini e selezionate il file bin scaricato. Affianco scrivete 0x0000 e spuntate la checkbox alla sinistra del nome file in modo da selezionarlo per il flashing:

Impostate le seguenti opzioni come segue lasciando le altre di default:

  • SPI Mode: DOUT
  • Flash Size: 8Mbit
  • spuntare DoNotChgBin

Selezionare quindi la porta COM.

Spegnere l’orologio. Con un cavetto jumper collegare GND con GPIO facendo riferimento all’immagine del pinout che ho fornito più in alto o vedendo la seguente foto:

Come abilitare la modalità Flash dell’ESP8266 sul Deauther Watch

Questa operazione mette GPIO0 a GND abilitando la modalità flash. Accendere quindi l’orologio: deve rimanere tutto spento (display e led RGB), se così non fosse vuol dire che l’orologio è partito in modalità programma, fate fare bene contatto al cavetto jumper, spegnete e riaccendete.

Premere il pulsante START. Se tutto è stato fatto correttamente, il flash prosegue e la barra verde in basso prosegue sino alla fine.

Il tool rileva che la memoria flash è 32Mbit, ma il modulo utilizzato non ha quella capacità. Potrei supporre che fa riferimento alla massima quantità di memoria supportata?

Premete il tasto reset sull’orologio oppure spegnete e riaccendete.

Sorgente di esempio

Lascio qui un piccolo sorgente di esempio che ho scritto per essere caricato sull’orologio e testare le funzionalità di base: non fa niente di particolare ma da lo spunto da cui partire per poter utilizzare i componenti collegati all’ESP8266.

Galleria immagini

Links

Se questo articolo ti è piaciuto, condividilo su un social:
  • 41
  •  
  •  
  • 1
  • 63
  •  
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)