Partilhar via


Modelo de segurança da 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 de dispositivos em seus dispositivos IoT. O fluxo de trabalho fornece um canal seguro de ponta a ponta com um modelo completo de cadeia de custódia que um dispositivo pode usar para provar que uma atualização é confiável, inalterada e intencional.

Cada etapa no fluxo de trabalho de Atualização de Dispositivo é protegida por meio de vários recursos e processos de segurança para garantir que cada etapa no pipeline execute uma transferência segura para a próxima. O código de referência do agente de Atualização de Dispositivo identifica e gerencia adequadamente quaisquer 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, inalterado e intencional.

Resumo

À medida que 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 tenham sido modificados ou trocados por um usuário mal-intencionado. Uma vez verificado, o serviço de Atualização do Dispositivo gera um manifesto de atualização interno com hashes de ficheiro a partir do manifesto de importação e outros metadados. Esse manifesto de atualizaçã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 automaticamente criptografados em repouso pelo serviço de Armazenamento do Azure. O serviço de Atualização de Dispositivo não fornece criptografia adicional automaticamente, mas permite que os desenvolvedores criptografem o próprio conteúdo antes que o conteúdo chegue ao serviço de Atualização de Dispositivo.

Quando uma atualização é implantada em dispositivos a partir do serviço de Atualização de Dispositivo, uma mensagem assinada é enviada pelo canal protegido do Hub IoT 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 através da validação da assinatura do manifesto de atualização. O manifesto de atualização contém hashes de ficheiro binário, por isso, quando o manifesto é de confiança, o agente de Atualização de Dispositivo confia nos hashes e fá-los corresponder aos binários. Uma vez que o binário de atualização tenha sido baixado e verificado, ele é então entregue ao instalador no dispositivo.

Detalhes da implementação

Para garantir que o serviço de Atualização de Dispositivo seja reduzido 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 JSON Web Tokens & JSON Web Keys.

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 tem chaves públicas incorporadas que são usadas para todos os dispositivos compatíveis com a Atualização de 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ública/privada 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 de Dispositivo para 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 da 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 em #3.
  5. O ID de 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 é 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 pelo agente de Atualização de Dispositivo. Dado que o manifesto de atualização inclui os hashes de ficheiro que correspondem aos próprios ficheiros de atualização, os ficheiros de atualização também poderão ser de confiança se os hashes corresponderem.

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

Assinatura Web JSON (JWS)

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

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

JSON Web Token

Os Web Tokens 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 da confiança para todas as assinaturas da Atualização de Dispositivo. Qualquer assinatura deve ser encadeada através de uma dessas chaves raiz para ser considerada legítima.

O conjunto de chaves raiz mudará com o tempo, pois é adequado 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 chaves 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 está desativada (efetivamente "revogada"), o que significa que 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 pacote de chave 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, quaisquer 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 assinaturas validando primeiro se a assinatura da chave de assinatura (pública) é adequada, 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, portanto, os usuários não devem tentar armazenar em cache as chaves de assinatura. Use sempre a chave de assinatura que acompanha uma assinatura.

Proteger o dispositivo

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

Outras medidas de segurança podem ser justificadas, como garantir que a transferência de componente para componente seja realizada 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 de API REST) apenas para localhost.

Próximos passos

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