Compartilhar via


Modelo de segurança de Atualização de Dispositivo

A atualização de dispositivo para o Hub IoT oferece um método seguro para implantar atualizações de firmware, imagens e aplicativos do dispositivo em seus dispositivos IoT. O fluxo de trabalho fornece um canal seguro de ponta a ponta com um modelo de cadeia de custódia completo que um dispositivo pode usar para provar que uma atualização é confiável, não modificada e intencional.

Cada etapa no fluxo de trabalho de atualização do dispositivo é protegida por meio de vários processos e recursos de segurança para garantir que cada etapa no pipeline execute uma entrega segura para a próxima. O código de referência do agente de Atualização de Dispositivo identifica e gerencia corretamente todas as solicitações de atualização ilegítimas. O agente de referência também verifica cada download para garantir que o conteúdo seja confiável, não modificado e seja intencional.

Resumo

Como as atualizações são importadas para uma instância de atualização de dispositivo, o serviço carrega e verifica os arquivos binários de atualização para garantir que eles não foram modificados ou trocados por um usuário mal-intencionado. Depois de verificado, o serviço de atualização de dispositivo gera um manifesto de atualização interno com hashes de arquivo do manifesto de importação e outros metadados. Esse manifesto de atualização é então assinado pelo serviço de atualização de dispositivo.

Depois de importados para o serviço e armazenados no Azure, os arquivos binários de atualização e os metadados do cliente associados são criptografados automaticamente em repouso pelo serviço de Armazenamento do Microsoft Azure. O serviço de atualização de dispositivo não fornece criptografia adicional automaticamente, mas permite que os desenvolvedores criptografem o conteúdo antes que ele alcance o serviço de Atualização de Dispositivo.

Quando uma atualização é implantada em dispositivos do serviço de Atualização de Dispositivo, uma mensagem assinada é enviada pelo canal do Hub IoT protegido para o dispositivo. A assinatura da solicitação é validada pelo agente de atualização de dispositivo do dispositivo como autêntica.

Qualquer download binário resultante é protegido por meio da validação da assinatura de manifesto de atualização. O manifesto de atualização contém os hashes de arquivo binários, portanto, depois que o manifesto for confiável, o agente de atualização de dispositivo confiará nos hashes e os corresponderá aos binários. Depois que o binário de atualização for baixado e verificado, ele será enviado para o instalador no dispositivo.

Detalhes de implementação

Para garantir que o serviço de atualização de dispositivo seja dimensionado para dispositivos simples e de baixo desempenho, o modelo de segurança usa chaves assimétricas brutas e assinaturas brutas. Eles usam formatos baseados em JSON, como tokens Web JSON & chaves Web JSON.

Protegendo o conteúdo de atualização por meio do manifesto de atualização

O manifesto de atualização é validado usando duas assinaturas. As assinaturas são criadas usando uma estrutura que consiste em chaves de assinatura e chaves raiz.

O agente de Atualização de Dispositivo inseriu chaves públicas que são usadas para todos os dispositivos compatíveis com a atualização do dispositivo. Essas chaves públicas são as chaves raiz. As chaves privadas correspondentes são controladas pela Microsoft.

A Microsoft também gera um par de chaves públicas/privadas que não está incluído no agente de Atualização de Dispositivo ou armazenado no dispositivo. Esta chave é a chave de assinatura.

Quando uma atualização é importada para a atualização do dispositivo para o Hub IoT e o manifesto de atualização é gerado pelo serviço, o serviço assina o manifesto usando a chave de assinatura e inclui a própria chave de assinatura, que é assinada por uma chave raiz. Quando o manifesto de atualização é enviado para o dispositivo, o agente de Atualização de Dispositivo recebe os seguintes dados de assinatura:

  1. O próprio valor de assinatura.
  2. O algoritmo usado para gerar #1.
  3. As informações de chave pública da chave de assinatura usada para gerar #1.
  4. A assinatura da chave de assinatura pública no #3.
  5. A ID da chave pública da chave raiz usada para gerar #3.
  6. O algoritmo usado para gerar #4.

O agente de Atualização de Dispositivo usa as informações definidas acima para validar que a assinatura da chave de assinatura pública seja assinada pela chave raiz. Em seguida, o agente de Atualização de Dispositivo valida se a assinatura do manifesto de atualização está assinada pela chave de assinatura. Se todas as assinaturas estiverem corretas, o manifesto de atualização será confiável para o agente de Atualização de Dispositivo. Como o manifesto de atualização inclui os hashes de arquivo que correspondem aos próprios arquivos de atualização, os arquivos de atualização também podem ser confiáveis se os hashes corresponderem.

Ter chaves raiz e de assinatura permite que a Microsoft lance periodicamente a chave de assinatura, uma prática recomendada de segurança.

Assinatura da Web JSON (JWS)

O updateManifestSignature é usado para garantir que as informações contidas no updateManifest não tenham sido adulteradas. O updateManifestSignature é produzido usando uma assinatura Web JSON com chaves Web JSON, permitindo a verificação de origem. A assinatura é uma cadeia de caracteres codificada Base64Url com três seções delineada por ".". Consulte os métodos auxiliares jws_util.h para analisar e verificar tokens e chaves JSON.

A assinatura da Web JSON é um padrão de IETF proposto amplamente usado para assinar conteúdo usando estruturas de dados baseadas em JSON. É uma maneira de garantir a integridade dos dados, verificando a assinatura dos dados. Mais informações podem ser encontradas na assinatura web JSON (JWS) RFC 7515.

Token Web JSON

Os tokens Web JSON são um método aberto e padrão do setor, para representar declarações com segurança entre duas partes.

Chaves raiz

Cada dispositivo de atualização de dispositivo deve conter um conjunto de chaves raiz. Essas chaves são a raiz de confiança para todas as assinaturas de atualização de dispositivo. Qualquer assinatura deve ser encadeada por meio de uma dessas chaves raiz para ser considerada legítima.

O conjunto de chaves raiz será alterado ao longo do tempo, pois é adequado para girar periodicamente as chaves de assinatura para fins de segurança. Como resultado, o software do agente de Atualização de Dispositivo precisará ser atualizado com o conjunto mais recente de chaves raiz em intervalos especificados pela equipe de Atualização de Dispositivo. A próxima rotação de chave raiz planejada ocorrerá em maio de 2025.

A partir da versão 1.1.0 do agente de Atualização de Dispositivo, o agente verificará automaticamente se há alterações nas chaves raiz sempre que ocorrer uma implantação de uma atualização nesse dispositivo. Possíveis alterações:

  • Uma nova chave raiz está disponível.
  • Uma chave raiz existente é desabilitada (efetivamente "revogada"), o que significa que ela não é mais válida para estabelecer confiança.

Se uma ou ambas as opções acima forem verdadeiras, o agente de Atualização de Dispositivo baixará automaticamente do serviço DU um novo pacote de chave raiz. Este pacote contém o conjunto completo de todas as chaves raiz, bem como uma lista desativada contendo informações sobre quais chaves raiz e/ou chaves de assinatura não são mais válidas. O próprio pacote de chaves raiz é assinado com cada chave raiz, de modo que a confiança para o pacote pode ser estabelecida tanto a partir das chaves raiz originais que fazem parte do próprio agente DU, bem como quaisquer chaves raiz baixadas posteriormente. Quando o processo de validação estiver concluído, todas as novas chaves raiz serão consideradas confiáveis com a finalidade de validar a confiança com a chave de assinatura para um determinado manifesto de atualização, enquanto quaisquer chaves raiz ou chaves de assinatura listadas na lista desabilitada não serão mais confiáveis para essa finalidade.

Assinaturas

Todas as assinaturas são acompanhadas por uma chave de assinatura (pública) assinada por uma das chaves raiz. A assinatura identifica qual chave raiz foi usada para assinar a chave de assinatura.

Um agente de atualização de dispositivo deve validar as assinaturas primeiro validando que a assinatura da chave de assinatura (pública) é apropriada, válida e assinada por uma das chaves raiz aprovadas. Depois que a chave de assinatura for validada com êxito, a própria assinatura poderá ser validada usando a chave pública de assinatura agora confiável.

As chaves de assinatura são giradas em uma cadência muito mais rápida do que as chaves raiz, portanto, espere mensagens assinadas por várias chaves de assinatura diferentes.

A revogação de uma chave de assinatura é gerenciada pelo serviço de atualização de dispositivo, de modo que os usuários não devem tentar armazenar as chaves de assinatura em cache. Sempre use a chave de assinatura que acompanha uma assinatura.

Proteger o Dispositivo

É importante garantir que os ativos de segurança relacionados à atualização do dispositivo estejam devidamente protegidos em seu dispositivo. Ativos como chaves raiz precisam ser protegidos contra modificação. Há várias maneiras de proteger as chaves raiz, como usar dispositivos de segurança (TPM, SGX, HSM, outros dispositivos de segurança) ou os hard-coding no agente de Atualização de Dispositivo como é feito hoje na implementação de referência. O último requer que o código do agente de Atualização de Dispositivo seja assinado digitalmente e o suporte à integridade do código do sistema esteja habilitado para proteger contra modificações mal-intencionadas do código do agente.

Outras medidas de segurança podem ser garantidas, como garantir que a entrega de componente para componente seja executada de forma segura. Por exemplo, registrar uma conta isolada específica para executar os vários componentes e limitar as comunicações baseadas em rede (por exemplo, chamadas à API REST) somente para localhost.

Próximas etapas

Saiba mais sobre como a Atualização de Dispositivo usa o controle de acesso baseado em função do Azure