Gli attacchi informatici dannosi su larga scala si vanno diffondendo rapidamente con i conseguenti impatti negativi sia sugli Enti governativi sia sulle aziende private. Con il passare del tempo questi attacchi sono diventati sempre più sofisticati e quindi difficili da contrastare. Tra i numerosi esempi di attacchi molto sofisticati si può senza dubbio annoverare WannaCry, un criptoworm di tipo ransomware che ha infettato (e bloccato in attesa di riscatto) oltre 200.000 computer causando enormi disagi e lasciando sulla sua scia centinaia di milioni di dollari di danni (e la stima è per difetto!).
Introduzione
Poichè, almeno potenzialmente, sono decine di miliardi i nodi IoT in vario modo correlati con i sistemi di produzione che utilizzano la rete Internet per la connessione al cloud, è indispensabile garantire la massima protezione al fine di salvaguardare dati sensibili dalle mire di terze parti non autorizzate. A questo punto è utile sottolineare che a causa dei vincoli operativi ai quali sono soggetti i nodi situati alla periferia (edge node), molti degli attuali meccanismi di crittografia richiedono l'utilizzo di un numero troppo elevato di risorse per consentirne l'implementazione in tale contesto. Da qui la necessità di ricorrere a configurazioni di tipo "zero-touch", ovvero di tipo automatico, o che richiedono un intervento minimo per la configurazione (light-touch).
L'integrazione delle chiavi di sicurezza direttamente in fase di produzione si sta dimostrando un mezzo di protezione efficace e in grado di rispettare i vincoli operativi imposti. Il presente articolo descrive l'utilizzo del circuito integrato di sicurezza dedicato ATECC608A sviluppato da Microchip per l'autenticazione basata su hardware con il servizio Cloud IoT Core di Google. Una soluzione di questo tipo, oltre a permettere di tenere sotto controllo il costo della BOM (Bill Of Material) e ridurre i consumi di potenza, richiede un overhead (sovraccarico) veramente minimo a livello software.
Poichè nei sistemi di produzione il numero di nodi IoT che utilizzano la rete Internet pubblica per comunicare con il cloud è in continuo e costante aumento, è indispensabile garantire una protezione affidabile e resiliente (in altre parole in grado di affrontare in modo positivo e proattivo i cambiamenti) per le operazioni di comunicazione e autenticazione. Si tratta di una misura necessaria per difendere i sistemi da possibili attacchi e proteggere i dati.
A causa dell'elevatissimo numero di nodi periferici (dell'ordine delle decine di migliaia), è essenziale ricorrere a una configurazione automatica (zero touch) o che richieda interventi minimi. L'integrazione delle chiavi di sicurezza in un dispositivo durante la produzione è un modo estremamente efficiente per soddisfare questi requisiti di sicurezza e semplicità di configurazione.
Nel corso dell'articolo saranno descritte le caratteristiche del dispositivo ATECC608A di Microchip e il suo utilizzo per implementare l'autenticazione basata su hardware con il servizio Cloud IoT Core di Google.
L'importanza della sicurezza nelle applicazioni IIoT
Negli ultimi anni il numero e la frequenza degli attacchi informatici aventi come obiettivo sistemi industriali e commerciali è in continuo aumento. Questi possono essere condotti sia per fini criminosi oppure far parte di una strategia di guerra cibernetica di un determinato Governo. Gli attacchi sono divenuti via via più sofisticati e hanno compromesso le funzionalità di un numero sempre maggiore di dispositivi. Di seguito alcuni degli esempi di attacchi condotti nell'ultimo decennio:
- 2010: Il worm Stuxnet si ritiene abbia causato danni rilevanti alle centrifughe dell'impianto per l'arricchimento dell'uranio di Natanz (Iran).
- 2014: Heartbleed, un bug nell'implementazione dei protocolli TLS/DTLS di OpenSSL (ovvero quelli alla base delle pagine protette che compaiono come https:// e non solo) è stato utilizzato per sottrarre informazioni da un gran numero di sistemi. Sebbene questo bug sia stato corretto nello stesso anno, vi sono ancora parecchi sistemi vulnerabili e privi del necessario patch.
- 2016: Il malware Mirai ha trasformato un gran numero di dispositivi collegati a Internet, come ad esempio router e telecamere di sorveglianza, in "botnet" che sono state utilizzate per lanciare attacchi di tipi DDoS (Distributed Denial of Service).
- 2017: Il ransomware WannaCry si ritiene abbia infettato più di 200.000 computer in 150 Paesi. La stima dei danni arrecati è dell'ordine delle centinaia di milioni, se non dei miliardi, di dollari.
- 2018: La catena di hotel Marriot ha scoperto che gli hacker hanno avuto accesso per 4 anni al database delle prenotazioni, mettendo a rischio informazioni personali di circa 500 milioni di persone.
In ambito industriale, l'accesso fraudolento a un singolo nodo IoT può comportare rischi di una certa entità. Il rischio maggiore è che ciò consenta agli intrusori di falsificare l'identità (spoofing) di un nodo per ottenere l'accesso a una rete, a scopo ovviamente fraudolento, con il risultato di compromettere un numero praticamente illimitato di dispositivi. Queste vulnerabilità della sicurezza possono danneggiare i clienti di un'azienda, oltre ad avere ripercussioni negative sui risultati economici e sulla reputazione della stessa.
Chiavi pubbliche e private
La maggior parte delle comunicazioni sicure che viaggiano su Internet sono basate sulla crittografia a chiave pubblica. Questa prevede l'uso di una coppia di chiavi: una è pubblica e disponibile a chiunque mentre l'altra viene mantenuta segreta dal possessore. Un messaggio cifrato con una delle due chiavi può essere decifrato solamente con l'altra chiave della coppia.
Poichè la cifratura dei dati mediante questa tecnica risulta complesso dal punto di vista computazionale, viene solitamente utilizzata per messaggi brevi.
Sono numerosi i metodi matematici utilizzati per la crittografia a chiave pubblica. I primi metodi si basavano sul fatto che risultava molto più dififcile fattorizzare (ovvero scomporre in fattori primi) un numero di grandi dimensioni che non generare il numero dai fattori primi. Questa è la base dell'algoritmo RSA, acronimo del nome dei tre inventori, Ron Rivest, Adi Shamir e Leonard Adleman. Altri sistemi crittografici utilizzano logaritmi discreti e, più recentemente, curve ellittiche.
La crittografia ECC (Elliptic Curve Cryptography) garantisce un più elevato grado di sicurezza rispetto alle alternative disponibili. Fin dal momento della sua introduzione, sono stati sviluppati parecchi metodi finalizzati ad attaccare la cifratura RSA. Tutto ciò, abbinato all'aumento della potenza di elaborazione disponibile, comporta la necessità di utilizzare chiavi più lunghe rispetto al passato per garantire il medesimo livello di sicurezza. Nel caso della crittografia ECC, anche dopo trenta anni di ricerca, non sono state ancora individuate "scorciatoie" valide che ne semplifichino la compromissione.
Ne consegue quindi che l'adozione della crittografia ECC permette l'uso di chiavi di dimensioni inferiori per ottenere il medesimo livello di sicurezza. Ciò significa che una cifratura sicura può essere effettuata con i processori utilizzati nei nodi IoT, che solitamente dispongono di minor potenza di calcolo. In definitiva, l'impiego di questa tecnica permette di risparmiare tempo, oltre a ridurre consumi e richedere una minor potenza di elaborazione.
Il problema che resta da risolvere è come sincerarsi che la chiave pubblica appartenga effettivamente alla persona (o entità) corretta. L'approccio comunemente adottato prevede il ricorso a un'autorità di certificazione (CA - Certification Authority) fidata. Si tratta di organizzazioni che generano le coppie di chiavi: esse forniscono la chiave privata al proprietario e certificano la proprietà della chiave pubblica, firmandola con la propria chiave privata. Esiste un numero relativamente ridotto di "root CA" che forniscono le chiavi che possono essere utilizzate da altri per generare e firmare certificati intermedi, creando in tal modo una "catena di fiducia" (chain of trust).
Questa "chain of trust" deve includere, ovviamente, non solo i sistemi che si trovano alle estremità del link di comunicazione, ma anche i fornitori dell'hardware e del software.
La crittografia a chiave pubblica può essere utilizzata in differenti modi:
- Un messaggio può essere cifrato da chiunque utilizzando una chiave pubblica, ma solo il destinatario può leggere il messaggio utilizzando la corrispondente chiave privata.
- Un messaggio può essere firmato dal mittente utilizzando la propria chiave privata (allegando, ad esempio, una copia cifrata del messaggio). Chiunque può a questo punto autenticare la firma utilizzando la chiave pubblica del mittente per decifrare la firma (in pratica viene utilizzata una funzione di hash per generare un numero che rappresenta il testo del messaggio e quindi questo hash viene cifrato come firma).
- L'integrità di un messaggio può essere verificata anche utilizzando la firma digitale. Se la cifra decifrata non corrisponde al testo in chiaro, ciò significa che il messaggio è stato manomesso.
- Due persone possono generare in maniera indipendente una chiave segreta condivisa utilizzando la loro chiave privata e la chiave pubblica dell'altra persona. Questa tecnica è conosciuta come scambio di chiave Diffie-Hellman, dal nome dei loro inventori. La chiave condivisa può essere utilizzata per cifrare e decifrare messaggio tra la coppia di persone. Essa risulta meno onerosa dal punto di vista computazionale e può quindi essere utilizzata per messaggi più lunghi.
Queste tecniche possono essere utilizzate per proteggere le comunicazioni e per verificare che gli aggiornamenti software provengano da una fonte valida prima di procedere alla loro installazione.
In tutti questi casi d'uso si può notare che la protezione della chiave privata è essenziale per la sicurezza del sistema.
Gestione della sicurezza in un sistema IoT
Un'autenticazione e una cifratura dei dati affidabile deve essere il nucleo centrale delle comunicazioni in ambito IoT. I nodi IoT devono quindi avere un'identità sicura, unica e fidata. Ciò è ottenibile sfruttando la crittografia a chiave pubblica.
In ogni caso, sussistono alcune problematiche nella gestione delle chiavi private nei nodi IoT. La chiave privata, ad esempio, viene solitamente memorizzata in qualche area della memoria del microcontrollore. In questo modo, un intrusore in grado di accedere al sistema potrà leggere la chiave. Gli errori (bug) nel sistema operativo o nel software applicativo vengono molto spesso sfruttati per guadagnare l'accesso al sistema. Sebbene sia possibile installare gli aggiornamenti software per riparare queste "falle" che compromettono la sicurezza, non appena si sparge l'annuncio dell'aggiornamento la vulnerabilità in questione diventa ovviamente di dominio pubblico. L'aggiornamento del software integrato nei sistemi industriali può richiedere diversi mesi a causa della necessità di eseguire test esaustivi ed evitare i tempi di fermo macchina (downtime). Im questo lasso di tempo i sistemi restano quindi vulnerabili e offrono notevoli possibilità di manovra a potenziali intrusori.
L'elemento umano rappresenta un altro punto debole. Le persone possono essere negligenti, prendere delle scorciatoie (ovvero non seguire le procedure ordinarie), essere in qualche modo manipolate o circuite da persone intenzionate a ricavare informazioni critiche relative al sistema.
Al fine di proteggere le chiavi private è necessario pertanto prendere alcune precauzioni tra cui:
- Non memorizzare mai le chiavi private nella memoria del microcontrollore
- Isolare le chiavi provate in modo da non consentire l'accesso diretto tramite software
- Proteggere le chiavi private dall'accesso delle persone
La soluzione ideale per soddisfare queste esigenze è rappresentata da un dispositivo di sicurezza dedicato: in questo modo le operazioni di autorizzazione e cifratura si svolgono all'interno di un hardware sicuro e la chiave privata non viene mai esposta. Un esempio di dispositivo di questo tipo è il chip ATECC608A di Microchip.
Co-processore ATECC608A di Microchip
ATECC608A (fig. 1) è un co-processore crittografico che supporta molteplici algoritmi di cifratura. Esso può memorizzare fino a 16 chiavi private o certificati all'interno di un hardware sicuro e le chiavi non sono mai esposte all'esterno.
Il dispostivo supporta lo scambio di chiavi ECDH (Elliptic Curve Diffie-Hellman) e l'algoritmo ECDSA (Elliptic Curve Digital Signature Algorithm). Esso prevede il supporto hardware per altri algoritmi come AES-128 e SHA-256.
Il chip è stato espressamente progettato per il mercato IoT. Questo co-processore si distingue per i consumi ridotti e il costo contenuto, mentre il software occupa uno spazio minimo in memoria, consentendone l'uso anche con microcontrollori di fascia bassa. La libreria CryptoAuthLib garantisce l'indipendenza da qualsiasi microcontrollore specifico e l'utilizzo di JWT (JSON Web Token) per l'autenticazione lo rende indipendente dallo stack di sicurezza del software.
Certificati e chiavi sono generati quando il dispositivo viene realizzato e sono memorizzati in un hardware sicuro on-chip, mediante una configurazione di tipo automatico. Le chiavi non sono mai visibile nè alle apparecchiature nè al personale che si occupa della produzione. E' anche prevista una protezione contro le manomissioni in modo da impedire la lettura delle chiavi anche nel caso di un accesso fisico all'hardware.
Microchip ha operato in collaborazione con Google per fornire un processo di autenticazione al cloud integrato utilizzando il co-processore ATECC608A.
Il servizio Cloud IoT Core di Google
L'esperienza maturata da Google nel settore delle comunicazioni globali di tipo scalabile, nell'immagazzinamento e nell'analisi dei dati fa cui questa azienda il fornitore ideale di servizi cloud per applicazioni IoT.
Cloud IoT Core è un servizio pensato per connettere in modo sicuro e gestire dispositivi IoT, sia che si tratti di un numero limitato o di milioni di nodi. Esso consente di trasferire i dati dai dispositivi connessi per la successiva elaborazione da parte di Google Cloud Platform (fig. 2). Il servizio è disponibile in qualsiasi parte del mondo in una modalità completamente trasparente. In questo modo un utente può analizzare e visualizzare i propri dati IoT in tempo reale, ricavando informazioni dettagliate che possono essere usate per ridurre i tempi di fermo e incrementare la produttività.
E' possibile utilizzare ATECC608A per l'autenticazione e la comunicazione sicura con il servizio Cloud IoT Core. Il processo si può così sintetizzare:
- L'utente ottiene un root certificate dal CA prescelto.
- L'utente crea quindi un certificato OEM firmato con il root certificate
- Uno scambio segreto con Microchip consente la generazione dei certificati del dispositivo sullo stesso, firmati dal certificato dell'utilizzatore, all'interno di un ambiente di produzione sicuro.
- A questo punto l'utente può scaricare la chiave pubblica per il dispositivo dal proprio account di Google IoT Core in modo da consentire una comunicazione e un'autenticazione sicure.
Per effettuare l'autenticazione, il microcontrollore utilizza il dispositivo ATECC608A per firmare un token usando l'algoritmo ECSDA. Tra il microcontrollore e il co-processore non avviene alcuna trasmissione di informazioni confidenziali.
Il token firmato viene quindi trasferito alla funzione di gestione del dispositivo di Cloud IoT Core che utilizza la chiave pubblica memorizzata in precedenza per convalidare la firma e autenticare il nodo, garantendo in tal modo una comunicazione sicura.
Per ulteriori informazioni su questo argomento è possibile leggere l'articolo "Why harden your IoT Security with the ATECC608A for Google Cloud IoT Core?" disponibile sul sito Web di Microchip.
Conclusioni
Su base regolare viene ricordata l'importanza di garantire la sicurezza dei sistemi connessi. La crittografia a chiave pubblica può rivestire un ruolo importante nell'implementazione dei protocolli di sicurezza necessari.
Il co-processore crittografico ATECC608A permette di risolvere molti dei problemi di implementazione legati alla gestione delle chiavi private nei nodi IoT. Esso è compatibile con qualsiasi tipo di microcontrollore e si integra senza problemi con il servizio IoT Cloud Core di Google.
L'integrazione di questo chip comporta un trascurabile aumento del costo complessivo del sistema, a fronte di un incremento significativo della sicurezza. Si tratta di un piccolo prezzo da pagare per evitare il rischio di essere le prossime vittime di un attacco informatico.
A cura di Mark Patrick, Mouser Europe Mouser Electronics