Säkerhetsmodell för enhetsuppdatering
Enhetsuppdatering för IoT Hub erbjuder en säker metod för att distribuera uppdateringar för enhetens inbyggda programvara, avbildningar och program till dina IoT-enheter. Arbetsflödet tillhandahåller en säker kanal från slutpunkt till slutpunkt med en fullständig modell för kedja av vårdnad som en enhet kan använda för att bevisa att en uppdatering är betrodd, oförändrad och avsiktlig.
Varje steg i arbetsflödet för enhetsuppdatering skyddas genom olika säkerhetsfunktioner och processer för att säkerställa att varje steg i pipelinen utför en säker överlämning till nästa. Referenskoden för enhetsuppdateringsagenten identifierar och hanterar alla otillåtna uppdateringsbegäranden korrekt. Referensagenten kontrollerar också varje nedladdning för att säkerställa att innehållet är betrott, omodifierat och avsiktligt.
Sammanfattning
När uppdateringar importeras till en enhetsuppdateringsinstans laddar tjänsten upp och kontrollerar de binära uppdateringsfilerna för att säkerställa att en skadlig användare inte har ändrat dem. När enhetens uppdateringstjänst har verifierats genererar den ett internt uppdateringsmanifest med filhashvärden från importmanifestet och andra metadata. Enhetsuppdateringstjänsten signerar det här uppdateringsmanifestet.
När den har importerats till tjänsten och lagrats i Azure krypterar Azure Storage-tjänsten automatiskt de binära uppdateringsfilerna och tillhörande kundmetadata i vila. Enhetsuppdateringstjänsten tillhandahåller inte automatiskt ytterligare kryptering, men tillåter utvecklare att själva kryptera innehåll innan innehållet når enhetsuppdateringstjänsten.
När en uppdatering distribueras till enheter från enhetsuppdateringstjänsten skickas ett signerat meddelande via den skyddade IoT Hub-kanalen till enheten. Enhetsuppdateringsagenten validerar signaturen för att avgöra om den är giltig.
Eventuell resulterande binär nedladdning skyddas genom validering av signaturen för uppdateringsmanifestet. Uppdateringsmanifestet innehåller binärfilshasherna, så när manifestet är betrott litar enhetsuppdateringsagenten på hashvärdena och matchar dem mot binärfilerna. När uppdateringsbinärfilen har laddats ned och verifierats överlämnas den till installationsprogrammet på enheten.
Implementeringsdetaljer
För att säkerställa att enhetsuppdateringstjänsten skalas ned till enkla enheter med låg prestanda använder säkerhetsmodellen råa asymmetriska nycklar och råa signaturer. De använder JSON-baserade format, till exempel JSON-webbtoken och JSON-webbnycklar.
Skydda uppdateringsinnehåll via uppdateringsmanifestet
Uppdateringsmanifestet verifieras med hjälp av två signaturer. Signaturerna skapas med hjälp av en struktur som består av signeringsnycklar och rotnycklar.
Enhetsuppdateringsagenten innehåller inbäddade offentliga nycklar som används för alla enhetsuppdateringskompatibla enheter. Dessa offentliga nycklar är rotnycklarna. Microsoft styr motsvarande privata nycklar.
Microsoft genererar också ett offentligt/privat nyckelpar som inte ingår i enhetsuppdateringsagenten eller lagras på enheten. Den här nyckeln är signeringsnyckeln.
När en uppdatering importeras till Enhetsuppdatering för IoT Hub och tjänsten genererar uppdateringsmanifestet signerar tjänsten manifestet med hjälp av signeringsnyckeln och inkluderar själva signeringsnyckeln, som signeras av en rotnyckel. När uppdateringsmanifestet skickas till enheten tar enhetsuppdateringsagenten emot följande signaturdata:
- Själva signaturvärdet.
- Algoritmen som används för att generera #1.
- Information om offentlig nyckel för den signeringsnyckel som används för att generera #1.
- Signaturen för den offentliga signeringsnyckeln i nr 3.
- Det offentliga nyckel-ID:t för rotnyckeln som används för att generera #3.
- Algoritmen som används för att generera #4.
Enhetsuppdateringsagenten använder den informationen för att verifiera att signaturen för den offentliga signeringsnyckeln signeras av rotnyckeln. Enhetsuppdateringsagenten verifierar sedan att signaturen för uppdateringsmanifestet signeras av signeringsnyckeln. Om alla signaturer är korrekta litar enhetsuppdateringsagenten på uppdateringsmanifestet. Eftersom uppdateringsmanifestet innehåller de filhashvärden som motsvarar själva uppdateringsfilerna kan uppdateringsfilerna också vara betrodda om hashvärdena matchar.
Med rot- och signeringsnycklar kan Microsoft regelbundet rulla signeringsnyckeln, vilket är bästa praxis för säkerhet.
JSON-webbsignatur (JWS)
updateManifestSignature
Används för att säkerställa att informationen i updateManifest
inte ändras.
updateManifestSignature
Skapas med hjälp av en JSON-webbsignatur med JSON-webbnycklar, vilket möjliggör källverifiering. Signaturen är en Base64Url-kodad sträng med tre avsnitt avgränsade med ".". Se hjälpmetoderna jws_util.h för parsning och verifiering av JSON-nycklar och -token.
JSON-webbsignatur är en allmänt använd föreslagen IETF-standard för signering av innehåll med hjälp av JSON-baserade datastrukturer. Det är ett sätt att säkerställa dataintegriteten genom att verifiera signaturen för data. Mer information finns i JSON Web Signature (JWS) RFC 7515.
JSON-webbtoken
JSON-webbtoken är en öppen branschstandardmetod för att representera anspråk på ett säkert sätt mellan två parter.
Rotnycklar
Varje enhet för enhetsuppdatering måste innehålla en uppsättning rotnycklar. Dessa nycklar är roten till förtroende för alla enhetsuppdateringens signaturer. Alla signaturer måste vara länkade via en av dessa rotnycklar för att anses vara legitima.
Uppsättningen med rotnycklar ändras med tiden eftersom det är korrekt att regelbundet rotera signeringsnycklar i säkerhetssyfte. Därför måste programvaran för enhetsuppdateringsagenten uppdateras med den senaste uppsättningen rotnycklar med intervall som angetts av enhetsuppdateringsteamet. Nästa planerade rotnyckelrotation sker i augusti 2025.
Från och med version 1.1.0 av enhetsuppdateringsagenten söker agenten automatiskt efter ändringar i rotnycklar varje gång en distribution av en uppdatering till enheten sker. Möjliga ändringar:
- En ny rotnyckel är tillgänglig.
- En befintlig rotnyckel är inaktiverad (i praktiken "återkallad"), vilket innebär att den inte längre är giltig för att upprätta förtroende.
Om båda eller båda är sanna laddar enhetsuppdateringsagenten automatiskt ned ett nytt rotnyckelpaket från DU-tjänsten. Det här paketet innehåller den fullständiga uppsättningen med alla rotnycklar och en inaktiverad lista som innehåller information om vilka rotnycklar och/eller signeringsnycklar som inte längre är giltiga. Rotnyckelpaketet är självt signerat med varje rotnyckel, så att förtroendet för paketet kan upprättas både från de ursprungliga rotnycklarna som ingår i SJÄLVA DU-agenten och eventuella senare nedladdade rotnycklar. När valideringsprocessen är klar anses alla nya rotnycklar vara betrodda för att verifiera förtroende med signeringsnyckeln för ett visst uppdateringsmanifest, medan eventuella rotnycklar eller signeringsnycklar som anges i listan över inaktiverade inte längre är betrodda för det ändamålet.
Signaturer
En signeringsnyckel (offentlig) signerad av en av rotnycklarna medföljer alla signaturer. Signaturen identifierar vilken rotnyckel som användes för att signera signeringsnyckeln.
En enhetsuppdateringsagent måste verifiera signaturer genom att först verifiera att signeringsnyckelns signatur (offentlig) är korrekt, giltig och signerad av en av de godkända rotnycklarna. När signeringsnyckeln har verifierats kan själva signaturen verifieras med hjälp av den nu betrodda offentliga signeringsnyckeln.
Signeringsnycklar roteras snabbare än rotnycklar, så förvänta dig meddelanden signerade av olika signeringsnycklar.
Tjänsten Enhetsuppdatering hanterar återkallandet av signeringsnycklar om det behövs, så användarna bör inte försöka cachelagrar signeringsnycklar. Använd alltid signeringsnyckeln som medföljer en signatur.
Skydda enheten
Det är viktigt att se till att enhetsuppdateringsrelaterade säkerhetstillgångar skyddas korrekt och skyddas på enheten. Tillgångar som rotnycklar måste skyddas mot ändringar. Det finns olika sätt att skydda rotnycklarna, till exempel att använda säkerhetsenheter (TPM, SGX, HSM, andra säkerhetsenheter) eller hårdkoda dem i enhetsuppdateringsagenten som görs idag i referensimplementeringen. Det senare kräver digital signering av enhetsuppdateringsagentkoden och aktivering av systemets kodintegritetsstöd för att skydda mot skadlig ändring av agentkoden.
Andra säkerhetsåtgärder kan vara befogade, till exempel att säkerställa att överlämnande från komponent till komponent utförs på ett säkert sätt. Du kan till exempel registrera ett specifikt isolerat konto för att köra de olika komponenterna och begränsa nätverksbaserad kommunikation (till exempel REST API-anrop) till endast localhost.
Nästa steg
Lär dig mer om hur Enhetsuppdatering använder rollbaserad åtkomstkontroll i Azure