Modelo de segurança do Device Update

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

À 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 um usuário mal-intencionado não os tenha modificado. Após a verificação, o serviço Device Update gera um manifesto de atualização interno com hashes dos arquivos do manifesto de importação e outros metadados. O serviço de atualização de dispositivos assina esse manifesto de atualização.

Depois de importados para o serviço e armazenados no Azure, o serviço de Armazenamento do Microsoft Azure criptografa automaticamente os arquivos binários de atualização e os metadados associados do cliente em repouso. 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. O agente de atualização do dispositivo valida a assinatura para determinar se ela é 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 dos arquivos binários, portanto, uma vez que o manifesto seja considerado confiável, o agente do Device Update confia nesses hashes e os compara com os binários. Depois que o binário de atualização é baixado e verificado, ele é entregue ao 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 contém chaves públicas incorporadas que são usadas para todos os dispositivos compatíveis com atualização de dispositivo. Essas chaves públicas são as chaves raiz. A Microsoft controla as chaves privadas correspondentes.

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 o Device Update para Hub IoT, e o serviço gera o manifesto de atualização, o serviço assina o manifesto usando a chave de assinatura e inclui também a própria chave de assinatura, 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 essas informações para validar se 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 agente de atualização do dispositivo confia no manifesto de atualização. Como o manifesto de atualização inclui os hashes dos arquivos correspondentes aos próprios arquivos de atualização, esses arquivos também podem ser considerados confiáveis se os hashes coincidirem.

A existência de chaves raiz e de assinatura permite que a Microsoft faça a rotação periódica da chave de assinatura, uma prática recomendada de segurança.

JSON Web Signature (JWS)

O updateManifestSignature é usado para garantir que as informações contidas no updateManifest não sejam modificadas. 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 de jws_util.h para analisar e verificar chaves e tokens 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 de 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 do Device Update. Qualquer assinatura deve ser encadeada por meio de uma dessas chaves raiz para ser considerada legítima.

O conjunto de chaves raiz mudará ao longo do tempo, pois é apropriado fazer a rotação periódica das chaves de assinatura por motivos de segurança. Como resultado, o software do agente de atualização do dispositivo deve ser atualizado com o conjunto mais recente de chaves raiz em intervalos especificados pela equipe de atualização do dispositivo. Para obter diretrizes sobre como se preparar para rodízios de chave-raiz, consulte Como se preparar para o rodízio de uma chave-raiz da Atualização de Dispositivo para Hub IoT.

A partir da versão 1.1.0, a implementação de referência do agente de Atualização de Dispositivo verifica automaticamente se há alterações nas chaves raiz sempre que uma atualização é implantada no 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 forem verdadeiras, o agente de atualização do dispositivo baixa automaticamente do serviço DU um novo pacote de chave raiz. Esse pacote contém o conjunto completo de todas as chaves raiz e uma lista desabilitada contendo informações sobre quais chaves raiz e/ou chaves de assinatura não são mais válidas. O pacote de chaves raiz é assinado com cada chave raiz, para que a confiança no pacote possa ser estabelecida tanto a partir das chaves raiz originais que fazem parte do próprio agente DU, quanto de quaisquer chaves raiz baixadas posteriormente. Após a conclusão do processo de validação, todas as novas chaves raiz são consideradas confiáveis ​​para validar a confiança com a chave de assinatura para um determinado manifesto de atualização, enquanto todas as chaves raiz ou chaves de assinatura listadas na lista desabilitada não são mais confiáveis ​​para essa finalidade.

Assinaturas

Uma chave de assinatura (pública) assinada por uma das chaves raiz acompanha todas as assinaturas. 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 rotacionadas em uma cadência mais rápida do que as chaves raiz, então espere mensagens assinadas por várias chaves de assinatura diferentes.

O serviço de atualização de dispositivos gerencia a revogação de chaves de assinatura, se necessário, portanto, os usuários não devem tentar armazenar chaves de assinatura em cache. Sempre use a chave de assinatura que acompanha uma assinatura.

Protegendo 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 e outros dispositivos de segurança) ou codificá-las diretamente no agente do Device Update, como é feito atualmente na implementação de referência. Esse último requer assinatura digital do código do agente de atualização do dispositivo e ativação do suporte de integridade do código do sistema para proteger contra modificações maliciosas 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