Aiotti' delle mie brame.

In nomine rava et fava Feb 10, 2020

AVVISO: Credo che questo articolo sia consigliabile solo a persone che hanno conoscenze sistemistiche. Come sapete ho una certa idiosincrasia riguardo all' IoT, per via dell'abitudine che questi dispositivi hanno di "chiamare casa". Per esempio, gia' mi scoccia abbastanza che la merda di Google Assistant si metta a chiamare il loro cloud di continuo dal cellulare. Ma per questo esiste una specie di porting di iptables per android, che potete scaricare anche dal market ufficiale, ed e' piuttosto efficace per capire quale sia la destinazione del traffico, e bloccarla sul vostro router domestico.

La app si trova qui: https://play.google.com/store/apps/details?id=app.greyshirts.firewall&hl=en

Detto questo, devo dire che se l'home automation facesse solo quel che dice di fare, non sarebbe per nulla malaccio. Il problema e' che bisogna evitare che 'sta roba mandi in giro quel che succede in casa.

Allora, la prima cosa che ho fatto e' stata di comprare un router wireless da usare solo per scopi IoT. Il router ovviamente NON e' attaccato ad internet, a meno che io non decida di attaccare fisicamente il cavo ethernet.

A volte serve perche' spesso esiste un momento in cui il dispositivo deve registrarsi e scaricare il firmware, o alcuni settaggi iniziali.

A questo punto pero' sorge il problema: quasi nessun vendor ti dice che il suo dispositivo ha bisogno di internet. Certo, ti dicono che e' "compatibile con Alexa o con Google o con Apple", ma non ti dicono che NE HANNO BISOGNO. Questo normalmente lo scopri dopo.

A questo rimedia egregiamente Santa Amazon. Amazon infatti ti consente di rispedire indietro il pacco entro una-due settimane (a seconda del vendor) senza dare giustificazioni. Il che e' perfetto per realizzare quello che mi serve realizzare.

L'algoritmo che uso, quindi, e' il seguente.

  • Creare una Wifi ad hoc con il settaggio di "client isolation", in modo che un device non possa comunicare con un altro device dentro la stessa WiFi. Di solito il settaggio e' disponibile su ogni buon router, anche se disabilitato per default.
  • Ordinare su Amazon l'IoT che si desidera (lampadina, interruttore, ciabatta elettrica, whatever)
  • Connettere momentaneamente il router "IoT" alla rete, per consentire la prima installazione ed eventualmente il download di un firmware aggiornato.
  • Installare i dispositivo e programmarlo per fare quanto richiesto.
  • Sconnettere da internet il douter "iOT", disconnettendo fisicamente il cavo ethernet.
  • Controllare che il dispositivo continui a funzionare.
  • Se funziona senza Internet, allora teniamolo e divertiamoci.
  • Se NON funziona senza internet, lo impacchettiamo e lo rimandiamo al mittente. (Grazie Amazon!).

Fin qui avete fatto quello che chiunque, o quasi, saprebbe fare. Comprare un router, configurarci una WiFi, e saperci attaccare o staccare il cavo ethernet. E usare Amazon. Ma io sono uno smanettons, e quindi andiamo avanti.

Una cosa simpatica sono gli Home Automation Hub, che normalmente vengono identificati come Amazon Dot, Google, Apple, Samsung, Philips, etc. Quello che si sa poco e' che esistono anche dei software opensource che fanno la stessa cosa, se installati su un Raspberry.

Personalmente, mi trovo molto bene con questo: https://github.com/domoticz/domoticz

Mi piace perche' supporta gia' molti dei protocolli che mi servono, e perche' e' facile estenderlo usando LUA o Python. Quindi, al famoso router IoT che NON si collega ad internet dovremo attaccare ANCHE un Raspi che sia in grado di sostenere Domoticz. Se usate ArmBian , Ubuntu per il Raspi o il nativo Raspbian la compilazione non e' complicatissima, dopo aver installato i soliti build-essentials, eccetera.

L'unica cosa che dovrete fare e' semplicemente di configurare il raspi come default router, in modo che ogni volta che qualcosa cerca di raggiungere internet mandi il pacchetto sul raspi. Guarda caso, sul raspi ci sara' una bella regoletta di iptables che termina il traffico di alcune porte sul raspi stesso.

Questo vi serve per due motivi. Il primo e' che se fate un tcpdump sul raspi vedete cosa cercano di fare i patetici gingilli-spia, quando cercano di spiare. La seconda vittoria e' che questi dispositivi non hanno una vera lista di CA con cui verificare il server quando chiamano casa. Per averla dovrebbero aggiornarla periodicamente e questo aggiunge costo e complessita'. Non hanno, in genere,  neppure un client certificate o la sola CA del loro server, visto che il certificato finirebbe con lo scadere, e questi dispositivi non sono abbastanza complessi da aggiornarlo.

Vi accorgete facilmente di questo settando un server NTP sul vostro raspi, e mandando li' tutto il protocollo NTP mediante iptables. Non dovrete fare altro che forzare la data sel server, diciamo, tra 5/10 anni, e vedere come reagisce il dispositivo che crede di essere nel 2025/30/40. Ovviamente, i certificati gli appariranno scaduti e cerchera' di aggiornarli. Se lo fa, allora e' intelligente. Se non cerca di farlo, e' perche' non ha l'intelligenza per aggiornarli. In tal caso potete presumere che non tenga una lista di CA, e nemmeno un client certificate. In tal caso e' ragionevole pensare che  accettera' anche un selfisigned, a patto che il CN coincida con il nome a DNS e potete mettere su tutto quel che serve per fregarlo, senza rischiare di perdere il tempo.

Se sono primitivi, quello che fanno e' credere a qualsiasi certificato, anche self-signed, nel caso in cui il nome di host coincida. Quindi, non dovrete fare altro che installare un qualsiasi dns proxy (unbound, pdnsd, coredns) che usi un file hosts come sorgente. A quel punto potete spoofare il dns e usare i vostri certificati selfsigned per ingannare questi dispositivi.

Non parlo di dispositivi relativamente sofisticati e costosi , che riescono anche a gestire bene i certificati. Parlo di quelli molto semplici, che potrete poi comandare usando Domoticz, oppure semplicemente ingannare.

Parlo di cose come questa: https://www.amazon.de/dp/B07NV4L2W5?ref_=ast_sto_dp

O questa qui: https://www.amazon.de/dp/B07GF2MG7F?ref_=ast_sto_dp

Si tratta di cinesate interessanti, ma hanno il brutto vizio di "chiamare casa". La sfortuna che hanno e' che trattandosi di elettronica molto economica non fa un reale controllo del certificato, e potete ingannarla con qualsiasi certificato self-signed a patto di avere messo su un DNS che inganni il dispositivo.

In questo caso dovete fare una cosa:

  • Settate sul router WiFi, nel DHCP, il vostro raspi come DNS.
  • Sul Raspi, fate partire il DNS in debug mode.
  • Accendete il dispositivo e aspettate che faccia una query del DNS.

Saputo quale sia il CN che dovrete usare, ne sapete abbastanza da creare un certificato selfsigned truffaldino usando openssl.  Una volta fatto, avete solo l'imbarazzo della scelta. O sniffate il traffico tra la casa madre e il dispositivo, semplicemente settando un proxy nel mezzo (ma questo richiede di collegare il raspi anche ad internet ) oppure vi limitate a mandare su Domoticz il traffico usando iptables , e sperare che usi un protocollo supportato. La cinesata di cui sopra non funziona con Domoticz, cosi' ho dovuto sniffare il traffico.

Quello che ho visto e' che la cinesata  informa casa della propria esistenza, e che scarica periodicamente un json con dentro un calendario, che poi e' quello che settate usando la app se volete che le prese della corrente si attacchino stacchino solo a certe ore. I dispositivi non si autenticano affatto, segno che sono davvero economici e non ci hanno speso soldi: ad onor del vero mandano una specie di ID negli header, ma ho provato a riscriverlo e il backend accetta qualsiasi stringa abbia la lunghezza di 18 caratteri, compresa "puppaquicinciaolin". (testato).

Capite bene che uno stupido webserver che serve un file json e' piu' che sufficiente: onestamente, pero', se tutto quello che fa e' tenermi un calendario sul cloud, il fastidio massimo e' che conosca il mio IP, cosa abbastanza aggirabile mettendo TOR sul raspi e collegandolo ad internet. https://learn.adafruit.com/onion-pi/install-tor

Siamo onesti:  il fatto che un tizio in Cina sappia che  le luci nel mio patio si devono spegnere alle , che so io, 11:00 di sera non mi preoccupa molto. Siccome pero' esiste la profilazione psicologica  e magari le 11:00 sono tipiche di quelli che uccidono i vicini per mangiare il fegato con le fave e il Chianti, allora ho messo uno stupido json sul raspi.

Passi per il Chianti, ma il fegato con "un piatto di  fave", diciamolo come va detto, e' una ricetta del cazzo perche' le fave che accompagnano il fegato devono essere ridotte a purea. Ma Hannibal era americano, che cazzo ci aspettiamo da un cannibale americano in cucina? Manco a copiare, sono capaci! (cit.) E' gia' tanto che non ci abbia messo sopra l'Ananas. Comunque sotto vi metto la ricetta (una delle) del fegato con le fave in purea.(1)

Andiamo avanti. Nel caso in cui si tratti di un dispositivo piu' sofisticato, cioe' di un dispositivo che puo' contenere ed aggiornare certificati o CA, la cosa si complica. Perche' questi dispositivi non solo spiano, ma vogliono anche essere sicuri di mandare i dati alla spia giusta.

In quel caso , la soluzione piu' corretta e' semplicemente quella di "impacchettare e rispedire ad Amazon".

Se siete fortunati, invece, il vostro dispositivo e' capace di linkarsi con un protocollo noto, cosa che mi e' capitata piu' di frequente con dispositivi che vengono dichiarati compatibili con Philips Hue. In tal caso, siete a cavallo, perche Domoticz sa gestirli molto bene. Nel caso aveste usato la Wifi del vostro Raspi per collegarlo a Internet , potete anche farvi inviare degli eventi usando Beehive, che parla Hue. https://github.com/muesli/beehive

Siccome Beehive supporta anche Hue, a quel punto mi e' riuscito di farmi inviare mail e messaggi usando il mio server XMPP. Il guaio di questa soluzione, direte voi, e' che usa internet. Certo, ma non dimentichiamo una cosa: adesso siamo NOI a controllare il trasporto. Se io decido che tutto passa per il MIO server XMPP, sono IO che lo controllo.

In definitiva, quindi, tutto quello di cui avete bisogno per avere un IoT sicuro e':

  • la passione per la "SMANETTATIO DVRA" , maccheronico evoliano per dire che vi piace davvero fare queste cose.
  • Un router WiFi economico, meglio Tp-Link, in modo da poterci fleshare sopra diversi OS, come OpenWRT.
  • Un Raspi capace di Wifi e Ethernet.
  • Domoticz.
  • Diverse ore di tempo & bestemmie preghiere di segno negativo.

Alla fine , vi chiederete se vale la pena di fare tutta questa cosa per risparmiare la fatica di avere le lampadine e i sensori e tutto quanto, ma devo dire la verita': la cosa piu' utile e' la regolazione di temperatura automatica dei termosifoni, diciamo una regolazione "intelligente" , usando questa cinesata qui: https://www.amazon.de/dp/B07VW9536M?ref_=ast_sto_dp

La ragione per cui lo dico e' che fa risparmiare un sacco di soldi, che non e' mai male. Ma non voglio informare il cinese di turno  del fatto che io sono a casa, che sto dormendo, e quante persone dormono nella mia stanza (ogni essere umano emette circa 2600KCal al giorno, a seconda del metabolismo basale,  quindi calcolare la differenza di consumo calorico quando ci sono persone in stanza non e'  difficilissimo,a  patto di conoscere la temperatura esterna e di avere lo storico di casa vostra).

Quindi si, l' Aiotti' va benone, ma essere spiati in casa propria no. Quindi, visto che si tratta di competenze che ho gia', non trovo nulla di male nell'usarle.

L'ultima domanda e': si, ma spiano di piu' i cinesi o gli americani?

Quello che ho visto e' che i prodotti cinesi in genere costruiscono dei datacenter molto economici, con limitatissime funzionalita', e anche se usassero quei dati per spiare, in genere sono dispositivi economici che accettano qualsiasi certificato abbia il CN che corrisponde al DNS. In questo modo , intercettarli e' facile e capire cosa fanno anche.

I dispositivi made in USA, invece, usano dei chipset meno economici. Riescono a mantenere una lista di CA, il che rende MOLTO piu' difficile (ma non impossibile) intercettarli. In generale bisogna entrarci dentro, ove troverete un Linux, e installare una CA che avete prodotto voi con OpenSSL. In tal caso, da quel momento i vostri certificati saranno credibilie  potete intercettare il traffico.

Sono riuscito a farlo solo su un Echo Dot, e onestamente ho visto che mandano troppa roba per i miei gusti. Per cui, il punto e' semplice: almeno per ora, i dispositivi cinesi economici spiano MENO di quelli occidentali, per la semplice ragione che quelli occidentali essendo piu' costosi riescono ad implementare dei cloud piu' capaci e dei chipset piu' potenti.

Sinora, quindi, preferisco usare dispositivi cinesi, che posso controllare di piu'. Casomai anche i cinesi diventassero come quelli USA, allora il discorso cambiera' e vedremo in che modo sia possibile inserire una CA autogenerata tra le loro. Ma devo essere sincero, l'ho fatto solo su un Echo Dot, poi mi sono stufato della disonesta' e della cattiva fede con cui erano disegnati, e l'ho rimandato indietro.

(1)

Credits: Elena Miano su ospitiatavola.com 

Uriel Fanelli

Non sono io che so tutto. Sei tu che non sai un cazzo di niente.