La mia solita pigrizia
Come ogni anno, quando i miei genitori vanno in vacanza, mi affidano le mansioni di accudire i gatti e di irrigare le piante.
In particolare, quest’ultimo richiede di usare una pompa da giardino per pescare acqua dalla canaletta e non usare la più preziosa acqua potabile.
Già l’anno scorso, se non anche prima, avevo notato che è davvero noioso andare ad accendere e spegnere l’elettrodomestico ogni volta che bisogna cambiare le gomme o, talvolta, anche per spostare l’irrigatore senza rischiare di bagnarsi con l’acqua sporca.
La soluzione a cui avevo pensato era allora di usare una presa comandabile da telefono, cosa che avevo già fatto con Telegram e la Raspberry per delle lampade, ma poi non avevo più fatto niente.
Però, quest’anno ho sfruttato uno sconto della Lidl per comprare una doccetta, che funziona abbastanza bene, per quei 4€ che costava, ma che ha un unico grande difetto, usata con il mio sistema d’irrigazione: tiene sempre il getto chiuso, il che magari andrebbe bene con un rubinetto, ma non è proprio il massimo con una pompa. Per evitare di lasciare diversi secondi il flusso stoppato, dovrei arrivare con la doccetta vicino a dove accendo e spengo la pompa, cioè farmi una quindicina di metri con le gomme.
Quindi ho deciso che volevo provare appunto un qualche sistema di controllo a distanza.
Purtroppo, quello che avevo già fatto è mezzo smantellato e avevo avuto qualche problema, probabilmente per via di una saldatura fredda. Inoltre, comandare un paio di lampadine al LED da 5W l’una, non è proprio come comandare una pompa da 760W, anche se i relè che ho possono pilotare un carico nominale di 10A a 250V. Senza considerare che dovrei montare il tutto all’esterno, dove non dovrebbe rischiare di bagnarsi, ma non si sa mai, quindi dovrei prestare una maggiore attenzione nell’assemblaggio del tutto.
Dunque, in nome della sicurezza, in particolare elettrica, ho deciso di acquistare una presa IoT commerciale… tralasciando altre cose, come la sicurezza informatica o la privacy.
Su Amazon, il giorno che ho deciso di fare questa cosa, ho trovato un’offerta lampo di una presa meross MSS210 a 12,65€, in realtà poco meno di quanto costerebbe a prezzo intero. Non essendo comunque convinto al massimo che farò un grande uso di questa presa, ho deciso di andare al ribasso, e questo era uno dei prodotti più economici.
Solo poco dopo aver completato l’acquisto ho pensato effettivamente a tutti i vari problemi di sicurezza che vengono fuori su questi dispositivi, che capita che vengano trasformati in botnet, o in cavalli di troia, ma ho continuato comunque sempre in nome della sicurezza elettrica.
Entri la meross MSS210
Solo una volta arrivato il dispositivo mi sono accorto che gli eventuali attacchi non sono gli unici problemi.
Aperta l’applicazione, mi sono ritrovato una richiesta di registrazione, che potevo anche sorvolare, tutto sommato ha senso dover associare il dispositivo ad un account, per poterlo controllare in remoto, anche se teoricamente una modalità “anonima” nella stessa rete non sarebbe stata una cattiva idea…
Tuttavia, una tale funzionalità andrebbe comunque implementata in modo sicuro, per esempio con una qualche autenticazione, anche con uno scambio di chiavi invisibile all’utente, ma attivato con il tasto. In assenza di una cosa del genere effettivamente è meglio che ci sia l’account e basta, non sia mai che qualche malware su un altro dispositivo si metta a controllare a caso anche quella presa.
Se non altro, la registrazione ha il pregio di non richiedere dati personali, ma solo un indirizzo e-mail e una password, quindi di per sé, almeno all’inizio, non invadono troppo la privacy… senonché chiede subito il permesso di avere la geolocalizzazione.
La motivazione ufficiale per questa richiesta è quella di impostare la zona oraria, che ho comunque deciso di negare, almeno inizialmente. Alla fine, ho dovuto cedere anche su questo perché, almeno con l’app Android, non dando il permesso della localizzazione, mi diceva che non ero connesso al WiFi della smart plug, quello che viene generato per farne il setup.
Controllando sulla documentazione Android, effettivamente è richiesto il permesso ACCESS_COARSE_LOCATION
. Ciò non toglie che, però, potrebbero inventarsi un sistema alternativo, anziché verificare l’SSID, come un qualche server, ad esempio sfruttando il server HTTP embedded, che è comunque presente e usato per impostare la configurazione.
Comunque sia, ho fatto anche questo, e ho completato il setup, ritrovandomi però con un dispositivo che non funzionava: ogni volta che provavo ad accendere o spegnere la presa mi veniva fuori un toast con la scritta “request timeout”, ma usando il pulsante fisico, il pulsante sul mio telefono veniva aggiornato, e lo stesso usando delle API Python di terze parti - che riuscivano anche a comandare la presa senza problemi.
Questo mette in luce quanto scadente sia la app di Android di meross, cosa che si poteva capire anche dal fatto che è sviluppata con una GUI che la renda simile a iOS, senza alcun look and feel di Android.
A questo punto ero pronto a restituire il marchingegno, ma ho deciso di dargli un’ultima possibilità e vedere se almeno la programmazione funzionava.
Stranamente ce l’ho fatta, al secondo tentativo in realtà, e non solo, ha anche sbloccato l’interfaccia di accensione e spegnimento semplici!
I dubbi originali: infondati?
Stufo di queste seccature, ho comunque dedicato un po’ di tempo al problema che inizialmente pensavo avrei dovuto affrontare: la sicurezza informatica.
Sembra che la sorella minore della mia presa, la MSS110, abbia effetivamente avuto problemi di sicurezza, ma che siano anche stati risolti. Ad ogni modo, ho provato a eseguire una scansione con nmap
sulla mia presa e c’è solo un webserver HTTP, che però risponde quasi sempre con risposte vuote, e non c’è più Telnet.
# nmap -O -Pn 172.24.20.118 Starting Nmap 7.80 ( https://nmap.org ) at 2019-08-28 23:14 CEST Nmap scan report for Meross_Smart_Plug.lan (172.24.20.118) Host is up (0.0045s latency). Not shown: 999 closed ports PORT STATE SERVICE 80/tcp open http MAC Address: 48:E1:E9:xx:xx:xx (Chengdu Meross Technology) No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ). TCP/IP fingerprint: OS:SCAN(V=7.80%E=4%D=8/28%OT=80%CT=1%CU=34181%PV=Y%DS=1%DC=D%G=Y%M=48E1E9%T OS:M=5D66EECF%P=x86_64-pc-linux-gnu)SEQ(SP=12%GCD=1%ISR=5F%TI=I%CI=I%II=RI% OS:SS=O%TS=U)OPS(O1=M5B4NW1%O2=M5B4NW1%O3=M5B4NW1%O4=M5B4NW1%O5=M5B4NW1%O6= OS:M5B4)WIN(W1=6000%W2=6000%W3=6000%W4=6000%W5=6000%W6=6000)ECN(R=Y%DF=N%T= OS:FF%W=6000%O=M5B4NW1%CC=N%Q=)T1(R=Y%DF=N%T=FF%S=O%A=S+%F=AS%RD=0%Q=)T2(R= OS:N)T3(R=Y%DF=N%T=FF%W=6000%S=O%A=S+%F=AS%O=M5B4NW1%RD=0%Q=)T4(R=Y%DF=N%T= OS:FF%W=3000%S=A%A=S%F=AR%O=%RD=0%Q=)T5(R=Y%DF=N%T=FF%W=3000%S=A%A=S+%F=AR% OS:O=%RD=0%Q=)T6(R=Y%DF=N%T=FF%W=3000%S=A%A=S%F=AR%O=%RD=0%Q=)T7(R=Y%DF=N%T OS:=FF%W=3000%S=A%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=FF%IPL=38%UN=0%RIPL=G% OS:RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=S%T=FF%CD=S) Network Distance: 1 hop OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 13.34 seconds
Per essere più precisi, il server HTTP risponde a una serie di richieste POST, in parte documentate nel wiki della libreria per i dispositivi meross a cui accennavo prima. Ho provato a fare qualche richiesta con httpie
, ma ho sempre avuto lo stesso errore, si vede che qualche controllo di sicurezza per fortuna c’è:
"payload": { "error": { "code": 5001, "detail": "sign error" } }
Ho provato anche a usare lo stesso software della pagina sulla MSS110, Nikto, per fare degli attacchi al server HTTP, ma pur avendolo lasciato in esecuzione un paio d’ore, non mi ha restituito nulla.
Non ho invece provato a cercare il firmware della presa ed esplorarlo un po’.
Ho provato però a configurarla in modo da usare un hotspot creato con il mio PC, su cui ho eseguito Wireshark, e posso confermare che tutto il traffico della presa era verso un host S3 e crittografato con TLS, non veniva fatta alcuna altra richiesta verso la LAN.
Tutto sommato sono rimasto stupito da quanto trovato finora, quindi non mi sono neanche messo a cercare di fare un attacco di tipo man in the middle, per vedere se c’è il controllo della validità delle chiavi, mi aspetto che ci sia e che sarebbe solo una perdita di tempo provarlo, ma magari tra qualche tempo potrei provarci.
E quindi? Cosa farò di questa presa?
La mia preoccupazione maggiore alla fine si è rivelata infondata. Sono altri i problemi di questa presa, che però sono gli stessi di molti altri dispositivi della categoria: uno su tutti la totale dipendenza dal suo produttore.
Stando alla pagina di informazioni ufficiale, meross è un’azienda cinese fondata nel 2016 da ex dipendenti Microsoft, Cisco, MediaTek e TP-Link. Per il momento, dopo 3 anni esistono ancora, ma tra 10 anni, o anche solo tra 5, ci saranno?
Una presa del genere è un dispositivo molto semplice, non dovrebbe avere bisogno né di una gran manutenzione, né di aggiornamenti che vadano oltre le possibilità dell’hardware attuale. Ma se spegneranno i server, o anche li migreranno, o ancora se i certificati TLS saranno rinnovati, faranno un aggiornamento firmware, oppure ci ritroveremo con l’ennesimo rifiuto tecnologico? Ormai bisogna dare per assodato che la tecnologia abbia una data di scadenza?
Sarebbe bello che le aziende si impegnassero a rilasciare un SDK open source completo a fine supporto, in modo da permettere di arrangiarsi a prolungare la vita al proprio dispositivo.
Venendo a questioni più pratiche, non ho ancora nessuna idea su come impiegare la presa. Mi ritrovo con un dispositivo che di per sé funziona, ha una certa flessibilità con le varie programmazioni e, in potenza (non ho verificato), la possibilità di funzionare anche con API di Amazon, Google e IFTTT.
Per il momento ho deciso di tenerlo tutto sommato, il poco che è costato non mi invita così tanto a farne il reso, e prevedo che prima o poi un utilizzo lo troverò.