Introduzione:
Il mondo moderno è iperconnesso, un fatto che lo rende un bersaglio privilegiato per i criminali informatici, in quanto rappresenta un ambiente globale di dispositivi a cui cercheranno di accedere. La sicurezza di un dispositivo embedded è fondamentale per impedire agli hacker di controllarlo, ma questi ultimi potrebbero persino preparare un attacco ancora più dannoso ai sistemi connessi al dispositivo. Gli attacchi remoti, tuttavia, non sono la loro unica arma; gli attacchi locali al dispositivo hardware fisico rappresentano un altro modo per ottenere informazioni sensibili. Questo tipo di attacco include l'accesso alle password di autenticazione del sistema e persino alla proprietà intellettuale del codice sorgente dell'applicazione stessa.

In questo articolo, esamineremo i concetti di base per ottenere una sicurezza embedded affidabile e robusta in un microcontrollore embedded. Analizzeremo i principi di sicurezza ed esamineremo attentamente le superfici di attacco e i vettori utilizzati da malintenzionati.

Immagine 1: In un'installazione IoT, quando un singolo dispositivo viene compromesso, l'intero sistema è vulnerabile agli attacchi (fonte: STMicroelectronics)

L'importanza della sicurezza non deve essere sottovalutata, a prescindere dal livello di complessità aggiunto al sistema embedded. Inoltre, il problema va oltre la protezione delle chiavi crittografiche o del firmware integrato; include anche la protezione dei dati personali. Se un hacker ottiene l'accesso al firmware di un dispositivo, potrebbe decodificare il codice e, comprendendone il funzionamento, potenzialmente scoprire ulteriori vulnerabilità e introdurre codice dannoso. L'accesso anche a un solo dispositivo non protetto in un sistema IoT può compromettere l'intera installazione (vedere Figura 1).


Cosa dobbiamo proteggere
Prima di analizzare le tecniche di sicurezza, esaminiamo e classifichiamo cosa dobbiamo proteggere. Gli hacker prendono di mira tre diversi aspetti di un dispositivo IoT. Un obiettivo è un dispositivo IoT che dobbiamo proteggere. Un asset è la parte specifica dell'obiettivo che richiede protezione. Nella Figura 2, possiamo vedere gli asset che dobbiamo proteggere e i rischi correlati all'interno di ciascun obiettivo in caso di compromissione. Per quanto riguarda l'implementazione di tecniche di sicurezza integrate, questa classificazione ci aiuta a selezionare il metodo appropriato.

Immagine 2: La classificazione di obiettivi, risorse e rischi correlati ci aiuta a determinare i metodi di sicurezza da implementare (fonte: STMicroelectronics)


Tipologie di attacchi:
Gli attacchi contro i dispositivi IoT possono provenire da diverse fonti e, in linea generale, possono essere suddivisi in attacchi software e hardware. Gli attacchi software possono verificarsi localmente o tramite una rete connessa, mentre gli attacchi hardware possono essere ulteriormente suddivisi in invasivi e non invasivi. Un attacco non invasivo si verifica localmente e, in alcuni casi, richiede solo un collegamento all'alimentazione della scheda a circuito stampato del dispositivo IoT.

D'altro canto, un attacco hardware invasivo prevede l'ottenimento dell'accesso elettrico e fisico al microcontrollore del dispositivo. Generalmente, un attacco invasivo è il metodo più costoso e l'hacker necessita di conoscenze specializzate per poterlo eseguire. Nella Figura 3, possiamo osservare i tre tipi di attacco menzionati, insieme a una sintesi delle tecniche utilizzate e ai motivi per cui un hacker potrebbe ricorrervi.

Immagine 3: Tipologie di attacchi e relativi costi (fonte: STMicroelectronics)

Gli attacchi software sono generalmente i più comuni e consistono nello sfruttare difetti del firmware o vulnerabilità note dei protocolli attraverso i canali di comunicazione del dispositivo. Questi attacchi sono relativamente economici e facili da implementare, poiché vengono eseguiti da remoto. Inoltre, dopo aver scoperto le vulnerabilità di un dispositivo, gli hacker possono condividere queste informazioni all'interno della propria comunità.

Sicurezza in scenari reali:
per un produttore di dispositivi, è importante comprendere i fattori che contribuiscono alla sicurezza al fine di valutare quali funzionalità di protezione saranno necessarie. I tre esempi seguenti illustreranno alcune di queste funzionalità. Nella prossima sezione, analizzeremo numerose funzionalità di sicurezza e come implementarle.

Esempio 1:
Immaginiamo un'azienda che vende firmware e la cui principale fonte di reddito è rappresentata dai diritti di licenza. Questo firmware è un prezioso patrimonio di proprietà intellettuale (PI) e deve essere protetto. I clienti utilizzano il firmware in combinazione con il codice applicativo. Per l'azienda, è necessario isolare il firmware dal codice del cliente. L'azienda aggiorna regolarmente il firmware, quindi è anche necessario installarlo e aggiornarlo in modo sicuro. In questo caso, alcune delle funzionalità di sicurezza necessarie sarebbero l'isolamento, la protezione della proprietà intellettuale del software e procedure sicure per l'installazione e l'aggiornamento del firmware.

Esempio 2:
IndustrialAdvantage vende apparecchiature per il controllo della produzione a un prezzo elevato e desidera offrire aggiornamenti del firmware ai propri clienti. Una delle condizioni è che sulle apparecchiature fornite possa essere eseguito solo il firmware di IndustrialAdvantage. Il processo di aggiornamento deve essere accurato e includere controlli di autenticità. Per garantire che sulle apparecchiature venga eseguito solo il firmware di IndustrialAdvantage, possiamo utilizzare la funzione di avvio sicuro (secure boot). La funzione di installazione e aggiornamento sicuri ci consentirà di eseguire controlli di integrità e autenticità. 

Esempio 3:
Consumer Tech produce dispositivi per la raccolta di dati degli utenti all'interno di un sistema più ampio. L'azienda è meticolosa e si conforma costantemente alle normative sulla protezione dei dati dei consumatori, come il GDPR. Consumer Tech desidera inoltre garantire che il dispositivo funzioni in modo affidabile e utilizzi esclusivamente il firmware aziendale. Durante la comunicazione del dispositivo con il sistema host, esiste la possibilità che i dati degli utenti vengano esposti; l'utilizzo di tecniche di crittografia e di sistemi di identificazione e autenticazione del dispositivo può prevenire questa vulnerabilità. L'integrità della piattaforma è protetta da una funzionalità di avvio sicuro.


Il framework di sicurezza
: per gli sviluppatori di sistemi embedded, un set completo e robusto di funzionalità di sicurezza per la piattaforma del microcontrollore di un dispositivo è essenziale. Un esempio è l'ecosistema STM32Trust per la serie di microcontrollori STM32 di STMicroelectronics (vedere Figura 4).

Immagine 4: Ecosistema delle funzionalità di sicurezza STM32Trust (fonte: STMicroelectronics)

Le funzionalità di sicurezza STM32Trust sono utilizzate nei microcontrollori delle serie STM32L4 e STML5, certificati Arm PSA (Livello 2) e SESIP (Livello 3). Queste funzionalità di sicurezza possono essere integrate nel silicio del microcontrollore o implementate come firmware e sono associate al dispositivo corrispondente.

Nella restante parte dell'articolo, analizzeremo due funzionalità di sicurezza essenziali incluse nell'ecosistema STM32Trust, già trattate negli esempi precedenti: Secure Boot (SB) e Secure Install/Upgrade (SBSFU).


Avvio protetto (Secure Boot):
Il principio di base dell'avvio protetto è che, al riavvio di un dispositivo, viene eseguito un codice di avvio protetto per verificare l'autenticità del firmware prima di consentirne l'avvio. Questa funzione si basa su due parametri. In primo luogo, il codice di avvio protetto è l'unico codice eseguito durante il riavvio. In secondo luogo, questo codice è immutabile, ovvero non può essere modificato in alcun modo. Anche l'indirizzo del codice di avvio è univoco, impedendo l'accesso a un indirizzo del firmware diverso durante il riavvio. La combinazione di questi due principi crea una radice di fiducia per il dispositivo (vedere Figura 5).

Figura 5: Principio di base della funzione di avvio sicuro (fonte: STMicroelectronics)

Sul firmware dell'applicazione vengono eseguiti controlli di integrità e autenticità, confrontandoli con una firma. Il controllo di integrità confronta una funzione hash (detta anche digest) generata dal codice dell'applicazione con un riferimento fornito. Il controllo di autenticità confronta questo risultato con una firma calcolata a partire dal valore hash generato e da una chiave privata. La firma viene quindi verificata rispetto a una chiave pubblica associata. Il valore della firma e il valore hash di riferimento devono essere forniti insieme al firmware.

In genere, viene memorizzato in un contenitore chiamato metadati o intestazione (vedere Figura 6). Grazie al suo metodo di generazione, i metadati non richiedono crittografia. Se fosse presente un firmware dannoso, non sarebbe possibile associare l'hash del firmware al riferimento. Nella Figura 6, possiamo vedere la costruzione della firma dei metadati utilizzando la chiave privata e il digest del firmware con la funzione hash.

Immagine6: Generazione della firma dei metadati (fonte: STMicroelectronics)

Nella Figura 7, il codice di avvio sicuro utilizza la firma dei metadati per confermare l'autenticità e l'integrità del firmware dell'applicazione. Se la verifica della firma restituisce un firmware valido, il processo di avvio inizia a caricare il codice dell'applicazione. Se si riscontrano discrepanze tra il firmware dell'applicazione e la firma, il processo di avvio fallisce.

Immagine7: Validazione del firmware dell'applicazione tramite firma dei metadati prima del caricamento dell'applicazione (fonte: STMicroelectronics)


Aggiornamento sicuro del firmware
I passaggi più importanti in un aggiornamento del firmware sono:
• creazione dell'aggiornamento del firmware dell'applicazione,
• generazione dei metadati associati e
• trasmissione al dispositivo di destinazione.
• La funzione Secure Boot utilizza i metadati per verificare l'integrità e l'autenticità del firmware dell'applicazione.
• Se la verifica ha esito positivo, il processo Secure Boot installa il nuovo firmware.

La nuova firma dei metadati viene creata utilizzando la stessa tecnica impiegata per Secure Boot. Su molti dispositivi IoT/IIoT connessi da remoto, il metodo di trasferimento più semplice è un aggiornamento over-the-air (OTA). I ​​dispositivi senza connessione a Internet richiedono una connessione locale, come UART, SPI, USB o una scheda microSD. Il nuovo firmware dell'applicazione viene installato nella memoria flash del dispositivo di destinazione tramite un loader, che in genere è incluso nel codice di Secure Boot o nel firmware dell'applicazione. Il nuovo firmware deve essere installato localmente mentre il firmware corrente è in esecuzione.

La Figura 8 mostra la procedura di aggiornamento remoto del firmware. Sono necessari due slot di memoria, uno per il firmware corrente e uno per la nuova versione. 

Immagine 8: Esempio di aggiornamento remoto del firmware (fonte: STMicroelectronics)

La fase finale del processo di aggiornamento prevede la verifica del nuovo firmware dell'applicazione (vedere l'immagine 9). Se la verifica dei metadati ha esito positivo, il firmware corrente viene sostituito con quello nuovo. L'aggiornamento è ora completato.


In conclusione:
la sicurezza integrata nei dispositivi non è un'opzione, ma una necessità. Tutti i dispositivi devono essere protetti da attacchi dannosi e potenziali vulnerabilità. La sicurezza dei dispositivi inizia all'avvio, pertanto è fondamentale integrare funzionalità di sicurezza come l'avvio sicuro e l'installazione/aggiornamento sicuri del firmware. STM32Trust offre tutte le funzionalità di sicurezza di cui uno sviluppatore di sistemi embedded potrebbe aver bisogno per proteggere i propri dispositivi e rispettare le normative vigenti.

Articolo fornito da Mouser Electronics