Modello di sicurezza di Aggiornamento dispositivi
Aggiornamento dei dispositivi per hub IoT offre un metodo sicuro per distribuire gli aggiornamenti per il firmware del dispositivo, le immagini e le applicazioni nei dispositivi IoT. Il flusso di lavoro fornisce un canale sicuro end-to-end con un modello di custodia completo che un dispositivo può usare per dimostrare che un aggiornamento è attendibile, non modificato e intenzionale.
Ogni passaggio del flusso di lavoro Aggiornamento dispositivi è protetto tramite varie funzionalità e processi di sicurezza per garantire che ogni passaggio della pipeline esegua un handoff protetto al successivo. Il codice di riferimento dell'agente di Aggiornamento dispositivi identifica e gestisce correttamente eventuali richieste di aggiornamento non valide. L'agente di riferimento controlla anche ogni download per assicurarsi che il contenuto sia attendibile, non modificato e intenzionale.
Riepilogo
Man mano che gli aggiornamenti vengono importati in un'istanza di Aggiornamento dispositivi, il servizio carica e controlla i file binari di aggiornamento per assicurarsi che non siano stati modificati o scambiati da un utente malintenzionato. Dopo la verifica, il servizio Aggiornamento dispositivi genera un manifesto di aggiornamento interno con hash di file dal manifesto di importazione e altri metadati. Questo manifesto di aggiornamento viene quindi firmato dal servizio Aggiornamento dispositivi.
Dopo l'importazione nel servizio e l'archiviazione in Azure, i file binari di aggiornamento e i metadati dei clienti associati vengono crittografati automaticamente inattivi dal servizio Archiviazione di Azure. Il servizio Aggiornamento dispositivi non fornisce automaticamente una crittografia aggiuntiva, ma consente agli sviluppatori di crittografare autonomamente il contenuto prima che il contenuto raggiunga il servizio Aggiornamento dispositivi.
Quando un aggiornamento viene distribuito ai dispositivi dal servizio Aggiornamento dispositivi, viene inviato un messaggio firmato tramite il canale hub IoT protetto al dispositivo. La firma della richiesta viene convalidata dall'agente di Aggiornamento dispositivi del dispositivo come autentica.
Qualsiasi download binario risultante viene protetto tramite la convalida della firma del manifesto di aggiornamento. Il manifesto dell'aggiornamento contiene gli hash del file binario, quindi una volta che il manifesto è considerato attendibile dall'agente di Aggiornamento dispositivi considera attendibili gli hash e li confronta con i file binari. Dopo che il file binario di aggiornamento è stato scaricato e verificato, viene quindi passato al programma di installazione nel dispositivo.
Dettagli sull'implementazione
Per garantire che il servizio Aggiornamento dispositivi si riduce a dispositivi semplici e a prestazioni ridotte, il modello di sicurezza usa chiavi asimmetriche non elaborate e firme non elaborate. Usano formati basati su JSON, ad esempio token WEB JSON e chiavi Web JSON.
Protezione del contenuto degli aggiornamenti tramite il manifesto di aggiornamento
Il manifesto dell'aggiornamento viene convalidato usando due firme. Le firme vengono create usando una struttura costituita da chiavi di firma e chiavi radice .
L'agente di Aggiornamento dispositivi include chiavi pubbliche incorporate che vengono usate per tutti i dispositivi compatibili con Device Update. Queste chiavi pubbliche sono le chiavi radice . Le chiavi private corrispondenti sono controllate da Microsoft.
Microsoft genera anche una coppia di chiavi pubblica/privata non inclusa nell'agente di Aggiornamento dispositivi o archiviata nel dispositivo. Questa chiave è la chiave di firma .
Quando un aggiornamento viene importato in Aggiornamento dispositivi per hub IoT e il manifesto dell'aggiornamento viene generato dal servizio, il servizio firma il manifesto usando la chiave di firma e include la chiave di firma stessa, firmata da una chiave radice. Quando il manifesto dell'aggiornamento viene inviato al dispositivo, l'agente di Aggiornamento dispositivi riceve i dati di firma seguenti:
- Valore della firma stesso.
- Algoritmo usato per la generazione di #1.
- Informazioni sulla chiave pubblica della chiave di firma usata per la generazione di #1.
- Firma della chiave di firma pubblica in #3.
- ID chiave pubblica della chiave radice usata per generare #3.
- Algoritmo usato per la generazione di #4.
L'agente di Aggiornamento dispositivi usa le informazioni definite in precedenza per verificare che la firma della chiave di firma pubblica sia firmata dalla chiave radice. L'agente di Aggiornamento dispositivi convalida quindi che la firma del manifesto di aggiornamento sia firmata dalla chiave di firma. Se tutte le firme sono corrette, il manifesto dell'aggiornamento è considerato attendibile dall'agente di Aggiornamento dispositivi. Poiché il manifesto dell'aggiornamento include gli hash dei file che corrispondono ai file di aggiornamento stessi, i file di aggiornamento possono essere considerati attendibili anche se gli hash corrispondono.
La presenza di chiavi radice e di firma consente a Microsoft di eseguire periodicamente il rollback della chiave di firma, una procedura consigliata per la sicurezza.
JWS (JSON Web Signature)
Viene updateManifestSignature
usato per assicurarsi che le informazioni contenute all'interno updateManifest
di non siano state manomesse. Viene updateManifestSignature
generato usando una firma Web JSON con chiavi Web JSON, consentendo la verifica dell'origine. La firma è una stringa con codifica Base64Url con tre sezioni delineate da ".". Fare riferimento ai metodi helper jws_util.h per l'analisi e la verifica di chiavi e token JSON.
La firma Web JSON è uno standard IETF ampiamente usato per la firma del contenuto usando strutture di dati basate su JSON. È un modo per garantire l'integrità dei dati verificando la firma dei dati. Altre informazioni sono disponibili in JSON Web Signature (JWS) RFC 7515.
JSON Web Token
I token Web JSON sono un metodo standard di settore aperto per rappresentare in modo sicuro le attestazioni tra due parti.
Chiavi radice
Ogni dispositivo Device Update deve contenere un set di chiavi radice. Queste chiavi sono la radice di attendibilità per tutte le firme di Device Update. Tutte le firme devono essere concatenati tramite una di queste chiavi radice per essere considerate legittime.
Il set di chiavi radice cambierà nel tempo perché è appropriato ruotare periodicamente le chiavi di firma a scopo di sicurezza. Di conseguenza, il software dell'agente di Aggiornamento dispositivi dovrà essere aggiornato con il set più recente di chiavi radice a intervalli specificati dal team di Aggiornamento dispositivi. La successiva rotazione pianificata della chiave radice verrà eseguita nel maggio 2025.
A partire dalla versione 1.1.0 dell'agente di Aggiornamento dispositivi, l'agente verificherà automaticamente eventuali modifiche alle chiavi radice ogni volta che si verifica una distribuzione di un aggiornamento a tale dispositivo. Possibili modifiche:
- È disponibile una nuova chiave radice.
- Una chiave radice esistente è disabilitata (effettivamente "revocata"), ovvero non è più valida per stabilire l'attendibilità.
Se una o entrambe le versioni precedenti sono vere, l'agente di Aggiornamento dispositivi scaricherà automaticamente dal servizio DU un nuovo pacchetto di chiavi radice. Questo pacchetto contiene il set completo di tutte le chiavi radice, nonché un elenco disabilitato contenente informazioni sulle chiavi radice e/o sulle chiavi di firma non più valide. Il pacchetto della chiave radice è firmato con ogni chiave radice, in modo che sia possibile stabilire un trust per il pacchetto sia dalle chiavi radice originali che fanno parte dell'agente DU stesso, sia da eventuali chiavi radice successivamente scaricate. Una volta completato il processo di convalida, tutte le nuove chiavi radice vengono considerate attendibili allo scopo di convalidare l'attendibilità con la chiave di firma per un determinato manifesto di aggiornamento, mentre le chiavi radice o le chiavi di firma elencate nell'elenco disabilitato non sono più attendibili a tale scopo.
Firme
Tutte le firme sono accompagnate da una chiave di firma (pubblica) firmata da una delle chiavi radice. La firma identifica la chiave radice usata per firmare la chiave di firma.
Un agente di Aggiornamento dispositivi deve convalidare le firme convalidando prima di tutto che la firma della chiave di firma (pubblica) sia corretta, valida e firmata da una delle chiavi radice approvate. Dopo la convalida della chiave di firma, la firma stessa può essere convalidata usando la chiave pubblica di firma ora attendibile.
Le chiavi di firma vengono ruotate in modo molto più rapido rispetto alle chiavi radice, quindi si prevedono messaggi firmati da diverse chiavi di firma.
La revoca di una chiave di firma viene gestita dal servizio Aggiornamento dispositivi, quindi gli utenti non devono tentare di memorizzare nella cache le chiavi di firma. Usare sempre la chiave di firma associata a una firma.
Protezione del dispositivo
È importante assicurarsi che gli asset di sicurezza correlati all'aggiornamento del dispositivo siano protetti e protetti correttamente nel dispositivo. Gli asset, ad esempio le chiavi radice, devono essere protetti dalla modifica. Esistono diversi modi per proteggere le chiavi radice, ad esempio l'uso di dispositivi di sicurezza (TPM, SGX, HSM, altri dispositivi di sicurezza) o la codifica hardcoded nell'agente di Aggiornamento dispositivi come avviee oggi nell'implementazione di riferimento. Quest'ultimo richiede che il codice dell'agente di Aggiornamento dispositivi sia firmato digitalmente e che il supporto dell'integrità del codice del sistema sia abilitato per la protezione da modifiche dannose del codice dell'agente.
È possibile garantire altre misure di sicurezza, ad esempio garantire che il passaggio dal componente al componente venga eseguito in modo sicuro. Ad esempio, la registrazione di un account isolato specifico per eseguire i vari componenti e la limitazione delle comunicazioni basate sulla rete (ad esempio, le chiamate API REST) solo a localhost.