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 de inte har ändrats eller växlats ut av en obehörig användare. När enhetens uppdateringstjänst har verifierats genererar den ett internt uppdateringsmanifest med filhashvärden från importmanifestet och andra metadata. Det här uppdateringsmanifestet signeras sedan av enhetsuppdateringstjänsten.
När de har importerats till tjänsten och lagrats i Azure krypteras de binära uppdateringsfilerna och tillhörande kundmetadata automatiskt i vila av Azure Storage-tjänsten. 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. Begärans signatur verifieras av enhetens enhetsuppdateringsagent som autentisering.
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 sedan 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 har inbäddade offentliga nycklar som används för alla enhetsuppdateringskompatibla enheter. Dessa offentliga nycklar är rotnycklarna. Motsvarande privata nycklar styrs av Microsoft.
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 uppdateringsmanifestet genereras av tjänsten 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 informationen som definierats ovan 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 är uppdateringsmanifestet betrott av enhetsuppdateringsagenten. 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
den inte har manipulerats. 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 maj 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 något av eller båda av ovanstående är sant laddas enhetsuppdateringsagenten automatiskt ned från DU-tjänsten till ett nytt rotnyckelpaket. Det här paketet innehåller hela uppsättningen med alla rotnycklar, samt 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 samt eventuella senare nedladdade rotnycklar. När valideringsprocessen är klar anses alla nya rotnycklar vara betrodda i syfte att verifiera förtroende med signeringsnyckeln för ett givet uppdateringsmanifest, medan eventuella rotnycklar eller signeringsnycklar som anges i den inaktiverade listan inte längre är betrodda för det ändamålet.
Signaturer
Alla signaturer åtföljs av en signeringsnyckel (offentlig) signerad av en av rotnycklarna. 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 på en mycket snabbare takt än rotnycklar, så förvänta dig meddelanden signerade av olika signeringsnycklar.
Återkallande av en signeringsnyckel hanteras av enhetsuppdateringstjänsten, så användarna bör inte försöka cachelagera 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 att enhetsuppdateringsagentkoden är digitalt signerad och att systemets stöd för kodintegritet är aktiverat 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