Conjuntos de afirmações

As declarações geradas no processo de atestado de enclaves usando o Atestado do Microsoft Azure podem ser divididas nestas categorias:

  • Declarações de entrada: as declarações geradas pelo Atestado do Microsoft Azure após a análise das evidências de atestado. As declarações podem ser usadas pelos autores da política para definir regras de autorização em uma política personalizada.
  • Declarações de saída: as declarações geradas pelo Atestado do Azure e incluídas no token de atestado.
  • Declarações de propriedade: as declarações criadas como uma saída pelo Atestado do Azure. Ele contém todas as declarações que representam propriedades do token de atestado, como codificação do relatório, duração de validade do relatório e assim por diante.

Reclamações recebidas

Atestado SGX

Declarações a serem usadas pelos autores de políticas para definir regras de autorização em uma política de atestado SGX:

  • x-ms-sgx-is-debuggable: Um valor booleano, que indica se a depuração de enclave está habilitada ou não.

    Os enclaves SGX podem ser carregados com depuração desabilitada ou habilitada. Quando o sinalizador é definido como true no enclave, ele habilita recursos de depuração para o código do enclave, o que inclui a capacidade de acessar a memória do enclave. Por isso, recomenda-se que a bandeira seja verdadeira apenas para fins de desenvolvimento. Se ativado no ambiente de produção, as garantias de segurança SGX não são mantidas.

    Os usuários de Atestado do Azure podem usar a política de atestado para verificar se a depuração está desabilitada para o enclave SGX. Depois que a regra de política é adicionada, o atestado falha quando um usuário mal-intencionado ativa o suporte de depuração para obter acesso ao conteúdo do enclave.

  • x-ms-sgx-product-id: um valor inteiro, que indica a ID do produto do enclave SGX.

    O autor do enclave atribui um ID de produto a cada enclave. O ID do produto permite que o autor do enclave segmente enclaves assinados usando o mesmo MRSIGNER. Os clientes podem adicionar uma regra de validação à política de atestado para verificar se estão usando os enclaves pretendidos. O atestado falhará se o ID do produto do enclave não corresponder ao valor publicado pelo autor do enclave.

  • x-ms-sgx-mrsigner: Um valor de cadeia de caracteres, que identifica o autor do enclave SGX.

    MRSIGNER é o hash da chave pública do autor do enclave, que está associada à chave privada usada para assinar o binário do enclave. Ao validar o MRSIGNER por meio de uma política de atestado, os clientes podem verificar se binários confiáveis estão sendo executados dentro de um enclave. Quando a declaração de política não corresponde ao MRSIGNER do autor do enclave, isso implica que o binário do enclave não é assinado por uma fonte confiável e o atestado falha.

    Quando um autor de enclave prefere girar o MRSIGNER por motivos de segurança, a política de Atestado do Azure deve ser atualizada para dar suporte aos valores MRSIGNER novos e antigos antes que os binários sejam atualizados. Caso contrário, as verificações de autorização falharão, resultando em falhas de atestado.

    A política de certificação deve ser atualizada usando o formato abaixo.

    Antes da rotação da chave

      version= 1.0;
      authorizationrules 
      {
      [ type=="x-ms-sgx-is-debuggable", value==false]&&
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); 
      };
    

    Durante a rotação das chaves

      version= 1.0;
      authorizationrules 
      {
      [ type=="x-ms-sgx-is-debuggable", value==false]&&
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); 
      [ type=="x-ms-sgx-is-debuggable", value==false ]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    

    Após a rotação da chave

      version= 1.0;
      authorizationrules 
      { 
      [ type=="x-ms-sgx-is-debuggable", value==false]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    
  • x-ms-sgx-mrenclave: um valor de cadeia de caracteres, que identifica o código e os dados carregados na memória do enclave.

    MRENCLAVE é uma das medidas do enclave que pode ser usada para verificar os binários do enclave. Trata-se do hash do código em execução no interior do enclave. A medição muda a cada mudança no código binário do enclave. Ao validar o MRENCLAVE por meio de uma política de atestado, os clientes podem verificar se os binários pretendidos estão sendo executados dentro de um enclave. No entanto, como se espera que o MRENCLAVE mude frequentemente com qualquer modificação trivial no código existente, recomenda-se verificar os binários do enclave usando a validação do MRSIGNER em uma política de atestado.

  • x-ms-sgx-svn: um valor inteiro, que indica o número da versão de segurança do enclave SGX

    O autor do enclave atribui um número de versão de segurança (SVN) a cada versão do enclave SGX. Quando um problema de segurança é descoberto no código do enclave, o autor do enclave incrementa a correção da vulnerabilidade pós valor SVN. Para evitar a interação com o código de enclave inseguro, os clientes podem adicionar uma regra de validação na política de atestado. Se o SVN do código do enclave não corresponder à versão recomendada pelo autor do enclave, o atestado falhará.

Estas alegações são consideradas obsoletas, mas são totalmente apoiadas e continuarão a ser incluídas no futuro. Recomenda-se usar os nomes de declaração não preteridos:

Reivindicação preterida Alegação recomendada
$is-depurável x-ms-sgx-is-debuggable
$product-ID ID DO PRODUTO X-MS-SGX
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn

Atestado de TPM

Declarações a serem usadas por autores de políticas para definir regras de autorização em uma política de atestado TPM:

  • aikValidated: valor booleano contendo informações se o certificado AIK (Attestation Identity Key) valida ou não.
  • aikPubHash: String que contém a base64(SHA256(chave pública AIK no formato DER)).
  • tpmVersion: Valor inteiro que contém a versão principal do TPM (Trusted Platform Module).
  • secureBootEnabled: valor booleano para indicar se a inicialização segura está habilitada.
  • iommuEnabled: valor booleano para indicar se a unidade de gerenciamento de memória de entrada-saída (Iommu) está habilitada.
  • bootDebuggingDisabled: valor booleano para indicar se a depuração de inicialização está desabilitada.
  • notSafeMode: valor booleano para indicar se o Windows não está sendo executado no modo de segurança.
  • notWinPE: valor booleano que indica se o Windows não está sendo executado no modo WinPE.
  • vbsEnabled: valor booleano que indica se o VBS está habilitado.
  • vbsReportPresent: valor booleano que indica se o relatório de enclave VBS está disponível.

Atestado VBS

Além das declarações da política de atestado TPM, os autores da política podem usar essas declarações para definir regras de autorização em uma política de atestado VBS:

  • enclaveAuthorId: Valor da cadeia de caracteres que contém o valor codificado Base64Url da id do autor do enclave-O identificador do autor do módulo primário para o enclave.
  • enclaveImageId: Valor da cadeia de caracteres que contém o valor codificado Base64Url do enclave Image id-O identificador de imagem do módulo primário para o enclave.
  • enclaveOwnerId: Valor da cadeia de caracteres que contém o valor codificado Base64Url do enclave ID do proprietário-O identificador do proprietário do enclave.
  • enclaveFamilyId: Valor da cadeia de caracteres que contém o valor codificado Base64Url do ID da família do enclave. O identificador familiar do módulo primário para o enclave.
  • enclaveSvn: Valor inteiro contendo o número da versão de segurança do módulo primário para o enclave.
  • enclavePlatformSvn: Valor inteiro que contém o número da versão de segurança da plataforma que hospeda o enclave.
  • enclaveFlags: A declaração enclaveFlags é um valor Integer que contém Flags que descrevem a política de tempo de execução para o enclave.

Reclamações de saída

Comum a todos os tipos de atestados

O Atestado do Azure inclui estas declarações no token de atestado para todos os tipos de atestado:

  • x-ms-ver: versão do esquema JWT (espera-se que seja "1.0").
  • x-ms-attestation-type: Valor da cadeia de caracteres que representa o tipo de atestado.
  • x-ms-policy-hash: Hash da política de avaliação de Atestado do Azure calculada como BASE64URL(SHA256(UTF8(BASE64URL(UTF8(texto da política))))).
  • x-ms-policy-signer: objeto JSON com um membro "jwk" que representa a chave que um cliente usou para assinar sua política, aplicável quando o cliente carrega uma política assinada.
  • x-ms-runtime: objeto JSON contendo "declarações" que são definidas e geradas dentro do ambiente atestado, uma especialização do conceito de "dados mantidos em enclave", onde os "dados mantidos no enclave" são formatados como uma codificação UTF-8 de JSON bem formado.
  • x-ms-inittime: objeto JSON contendo "declarações" que são definidas e verificadas no momento da inicialização do ambiente atestado.

Esses nomes de declaração são usados a partir da especificação IETF JWT.

  • Reivindicação "jti" (JWT ID) - Identificador exclusivo para o JWT.
  • Reclamação "iss" (Emitente) - O principal que emitiu o JWT.
  • Reclamação "iat" (Issued At) - O momento em que o JWT foi emitido.
  • Reclamação "exp" (Tempo de Expiração) - Tempo de expiração após o qual o JWT não deve ser aceito para processamento.
  • Reivindicação "nbf" (Não Antes) - Não Antes do tempo antes do qual o JWT não deve ser aceito para processamento.

Estes nomes de declaração são usados a partir da especificação de rascunho IETF EAT:

  • "Nonce claim" (nonce) - Uma cópia direta não transformada de um valor opcional de nonce fornecido por um cliente.

As declarações abaixo são consideradas obsoletas, mas são totalmente suportadas e continuarão a ser incluídas no futuro. Recomenda-se usar os nomes de declaração não preteridos.

Reivindicação preterida Alegação recomendada
ver x-ms-ver
camiseta x-ms-tipo de atestado
policy_hash x-ms-policy-hash
maa-policyHash x-ms-policy-hash
policy_signer x-ms-signatário-política
rp_data nonce

Atestado SGX

Essas declarações são geradas e incluídas no token de atestado pelo serviço de atestado SGX:

  • x-ms-sgx-is-debuggable: Um booleano, que indica se o enclave tem ou não a depuração habilitada.
  • x-ms-sgx-product-id: Valor da ID do produto do enclave SGX.
  • x-ms-sgx-mrsigner: valor codificado hexadecimal do campo MRSIGNER da cotação.
  • x-ms-sgx-mrenclave: valor codificado hexadecimal do campo MRSIGNER da cotação.
  • X-MS-SGX-SVN: Número da versão de segurança codificado na cotação.
  • X-MS-SGX-EHD: Enclave Held Data formatado como BASE64URL(Enclave Held Data).
  • x-ms-sgx-collateral: objeto JSON que descreve a garantia usada para executar atestado. O valor da declaração x-ms-sgx-collateral é um objeto JSON aninhado com os seguintes pares chave/valor:
    • qeidcertshash: valor SHA256 de certificados de emissão de identidade do Enclave de Cotação (QE).
    • qeidcrlhash: valor SHA256 da lista CRL de certificados de emissão de QE Identity.
    • qeidhash: valor SHA256 da garantia QE Identity.
    • quotehash: valor SHA256 da cotação avaliada.
    • tcbinfocertshash: valor SHA256 dos certificados de emissão TCB Info.
    • tcbinfocrlhash: valor SHA256 da lista de CRL de certificados de emissão de informações TCB.
    • tcbinfohash: valor SHA256 da garantia TCB Info.
  • x-ms-sgx-report-data: campo de dados do relatório de enclave SGX (geralmente hash SHA256 de x-ms-sgx-ehd).

Essas declarações aparecem apenas no token de atestado gerado para plataformas de servidor baseadas no processador Intel® Xeon® Scalable. As declarações não aparecerão se o enclave SGX não estiver configurado com suporte a separação e compartilhamento de chaves. As definições de declaração podem ser encontradas aqui:

  • x-ms-sgx-config-id
  • x-ms-sgx-config-svn
  • ID DO PRODUTO X-MS-SGX-ISV-EXTENDED-
  • ID DA FAMÍLIA X-MS-SGX-ISV-

Estas alegações são consideradas obsoletas, mas são totalmente suportadas e continuarão a ser incluídas no futuro. Recomenda-se usar os nomes de declaração não preteridos:

Reivindicação preterida Alegação recomendada
$is-depurável x-ms-sgx-is-debuggable
$product-ID ID DO PRODUTO X-MS-SGX
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn
$maa-EHD x-ms-sgx-ehd
$aas-EHD x-ms-sgx-ehd
$maa-atestadogarantia x-ms-sgx-colateral

Atestado SEV-SNP

As seguintes declarações também são suportadas pelo tipo de atestado SevSnpVm:

  • x-ms-sevsnpvm-authorkeydigest: hash SHA384 da chave de assinatura do autor.
  • x-ms-sevsnpvm-bootloader-svn: número da versão de segurança do carregador de inicialização AMD (SVN).
  • x-ms-sevsnpvm-familyId: cadeia de caracteres de identificação da família HCL (Host Compatibility Layer).
  • x-ms-sevsnpvm-guestsvn: número da versão de segurança HCL (SVN).
  • x-ms-sevsnpvm-hostdata: Dados arbitrários definidos pelo host no momento da inicialização da VM.
  • x-ms-sevsnpvm-idkeydigest: hash SHA384 da chave de assinatura de identificação.
  • x-ms-sevsnpvm-imageId: identificação de imagem HCL.
  • x-ms-sevsnpvm-is-debuggable: valor booleano que indica se a depuração AMD SEV-SNP está ativada.
  • x-ms-sevsnpvm-launchmeasurement: Medição da imagem convidada lançada.
  • x-ms-sevsnpvm-microcode-svn: número da versão de segurança do microcódigo AMD (SVN).
  • x-ms-sevsnpvm-migration-allowed: Valor booleano que indica se o suporte à migração AMD SEV-SNP está habilitado.
  • x-ms-sevsnpvm-reportdata: Dados passados pela HCL para incluir no relatório, para verificar se a chave de transferência e a configuração da VM estão corretas.
  • x-ms-sevsnpvm-reportid: ID do relatório do convidado.
  • x-ms-sevsnpvm-smt-allowed: Valor booleano que indica se o SMT está habilitado no host.
  • x-ms-sevsnpvm-snpfw-svn: número da versão de segurança do firmware da AMD (SVN).
  • x-ms-sevsnpvm-tee-svn: número da versão de segurança (SVN) do ambiente de execução confiável (TEE) da AMD.
  • x-ms-sevsnpvm-vmpl: VMPL que gerou este relatório (0 para HCL).

Atestado TPM e VBS

  • cnf (Confirmação): A alegação "cnf" é usada para identificar a chave de prova de posse. A declaração de confirmação, conforme definido no RFC 7800, contém a parte pública da chave de enclave atestada representada como um objeto JSON Web Key (JWK) (RFC 7517).
  • rp_data (dados da terceira parte confiável): dados da terceira parte confiável, se houver, especificados na solicitação, usados pela terceira parte confiável como um nonce para garantir a atualização do relatório. rp_data só é adicionado se houver rp_data.

Reclamações de propriedade

Atestado TPM e VBS

  • report_validity_in_minutes: Uma declaração inteira para significar por quanto tempo o token é válido.
    • Valor padrão (tempo): Um dia em minutos.
    • Valor máximo (tempo): Um ano em minutos.
  • omit_x5c: Uma declaração booleana indicando se o Atestado do Azure deve omitir o certificado usado para fornecer prova de autenticidade do serviço. Se true, x5t é adicionado ao token de atestado. Se false(default), x5c é adicionado ao token de atestado.

Próximos passos