MQTT – Sicurezza

luca 14/11/2016 0

Uno degli aspetti spesso trascurati nell’IoT è la sicurezza delle comunicazioni. La prova è che molti degli ultimi attacchi DDOS (Distributed Denial of Service) sono stati portati utilizzando smart devices connessi ad Internet.

Nei precedenti articoli abbiamo visto come configurare mosquitto per ricevere messaggi pubblicati dai client e per inoltrare questi a tutti i sottoscrittori. Oggi vediamo come configurare la sicurezza applicativa del nostro MQTT broker.

In questo articolo tratterò le modalità standard che mosquitto offre. Su Internet sono disponibili molti plugins per estendere le sue funzionalità e implementare meccanismi avanzati di sicurezza, quali la gestione delle utenze in diversi backend oppure l’autenticazione via json web tokens.

Autenticazione

Il primo passo per rendere sicuro il nostro broker è implementare l’autenticazione per i client che si connettono, in modo che soltanto i client autorizzati possano inviare/ricevere dati.

Apriamo il file mosquitto.conf e per prima cosa disabilitiamo l’accesso anonimo mettendo il relativo parametro a false.

mqtt-sec01

Quando modificate una opzione, verificate sempre che non sia presente il simbolo di cancelletto (#) ad inizio riga, altrimenti la modifica non viene considerata

Gli utenti autorizzati a collegarsi vengono definiti in un file dedicato. Il nome di tale file è configurato con il parametro password_file (nell’esempio il file con utenti e password si chiama “pwdfile” ed è memorizzato nella cartella di mosquitto):

mqtt-sec02

Utilizziamo il comando mosquitto_passwd.exe per creare il file (-c) e inserire un nuovo utente (“luca”). Il comando ci chiederà di inserire due volte la password dell’utente:

mqtt-sec03

Se vogliamo inserire altri utenti, possiamo lanciare nuovamente il comando senza l’opzione -c:

mosquitto_passwd.exe pwdfile sara

Verifichiamo ora la nuova configurazione: eseguiamo mosquitto indicando di usare il file di configurazione (mosquitto.exe -c mosquitto.conf) e proviamo a pubblicare un messaggio come fatto nei precedenti tutorial:

mqtt-sec04

Come potete verificare, la connessione viene rifiutata perché non siamo autorizzati al collegamento: non abbiamo infatti specificato alcun utente e l’accesso anonimo è stato disattivato.

Provate a lanciare nuovamente il comando specificando utenza e password e  vedrete che la pubblicazione avverrà con successo:

mosquitto_pub.exe -u <utente> -P <password> -t home/bedroom/temp -m 19

Autorizzazione

Dopo aver definito chi si può collegare al broker, possiamo ora definire cosa può fare una volta collegato. Anche in questo caso la configurazione delle ACL (access control list) avviene in un file dedicato, il cui nome è configurato con il parametro acl_file:

mqtt-sec05

Il file delle ACL è un file di testo composto da blocchi così formati:

  • la prima riga user <nomeutente> che indica l’utente al quale le seguenti ACL si applicano
  • una o più righe topic <read|write|readwrite> <nometopic> che indica quali azioni l’utente specificato sopra può svolgere sul topic indicato

Vediamo un esempio di file, in cui definiamo un utente (writeclient) che può inviare messaggi al topic secure/data e un utente (readclient) che può leggere tali messaggi. Entrambi gli utenti poi possono inviare e ricevere messaggi da tutti i topic open/# (per una spiegazione sulle wildcards vedi il mio precedente tutorial):

mqtt-sec06

(le righe che iniziano con # sono dei commenti).

Proviamo ora ad inviare un messaggio utilizzando l’utente readclient, che non ha tale autorizzazione:

mqtt-sec07

Come vedete, il client non riceve alcun messaggio di errore ma nei logs di mosquitto si vede chiaramente che il comando publish è stato negato, coerentemente alle ACL che abbiamo configurato.

Se invece utilizziamo gli utenti corretti per fare l’invio e la sottoscrizione, il messaggio viene correttamente gestito:

mqtt-sec08

Conclusioni

E’ molto importante rendere sicuro il nostro broker, soprattutto se collegato ad una rete pubblica (ad esempio se raggiungibile su Internet). Nel tutorial di oggi abbiamo visto come gestire utenti e permessi con mosquitto.

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi