Conjuntos de declarações

As declarações geradas no processo de atestar enclaves por meio do Atestado do Microsoft Azure podem ser divididas nas categorias abaixo:

  • Declarações de entrada: as declarações geradas pelo Atestado do Microsoft Azure após a análise da evidência do atestado e podem ser usadas por autores de 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. Ela contém todas as declarações que representam as propriedades do token de atestado, como a codificação do relatório, a duração da validade do relatório etc.

Declarações de entrada

Atestado do SGX

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

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

    Os enclaves SGX podem ser carregados com a depuração desabilitada ou habilitada. Quando o sinalizador é definido como verdadeiro no enclave, ele habilita os recursos de depuração para o código do enclave. Isso inclui a capacidade de acessar a memória do enclave. Portanto, recomendamos definir o sinalizador como verdadeiro somente para fins de desenvolvimento. Se ele estiver habilitado no ambiente de produção, as garantias de segurança do SGX não serão mantidas.

    Os usuários do 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 for adicionada, o atestado falhará quando um usuário mal-intencionado ativar 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 (product ID) do enclave SGX.

    O autor do enclave atribui uma ID do produto a cada enclave. A ID do produto permite que o autor do enclave segmente os enclaves assinados usando o mesmo MRSIGNER. Ao adicionar uma regra de validação na política de atestado, os clientes podem verificar se estão usando os enclaves pretendidos. O atestado falhará se a ID do produto da 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 é associada à chave privada usada para assinar o binário do enclave. Ao validar MRSIGNER por meio de uma política de atestado, os clientes podem verificar se os binários confiáveis estão em execução dentro de um enclave. Quando a declaração de política não corresponde ao MRSIGNER do autor do enclave, isso significa que o binário do enclave não é assinado por uma fonte confiável e o atestado falha.

    Quando um autor de enclave preferir girar o MRSIGNER por motivos de segurança, a política do Atestado do Azure precisará ser atualizada para dar suporte aos valores novos e antigos do MRSIGNER 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 atestado precisa ser atualizada usando o formato abaixo.

    Antes da rotação de chaves

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

    Durante a rotação de 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 de chaves

      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 de enclave que podem ser usadas para verificar os binários do enclave. É o hash do código em execução dentro do enclave. A medida muda a cada alteração no código binário do enclave. Ao validar MRENCLAVE por meio de uma política de atestado, os clientes poderão verificar se os binários pretendidos estão em execução dentro de um enclave. No entanto, como se espera que MRENCLAVE seja alterado frequentemente com qualquer modificação trivial no código existente, recomendamos verificar os binários do enclave usando a validação de MRSIGNER em uma política de atestado.

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

    O autor do enclave atribui um SVN (número de versão de segurança) 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 pós-vulnerabilidade do valor do SVN. Para evitar interagir com um código de enclave não seguro, 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, haverá uma falha no atestado.

Essas declarações são consideradas preteridas, mas têm suporte completo e continuarão sendo incluídas no futuro. É recomendável usar os nomes de declarações não preteridas:

Declaração preterida Declaração recomendada
$is-debuggable x-ms-sgx-is-debuggable
$product-id x-ms-sgx-product-id
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn

Atestado de TPM

As declarações de entrada podem ser usadas pelos autores de política para definir as regras de autorização em uma política de atestado TPM:

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

Atestado da VBS

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

  • enclaveAuthorId: valor de cadeia de caracteres que contém o valor codificado em Base64Url da ID de autor do enclave, o identificador de autor do módulo primário do enclave
  • enclaveImageId: valor de cadeia de caracteres que contém o valor codificado em Base64Url da ID de imagem do enclave, o identificador de imagem do módulo primário do enclave
  • enclaveOwnerId: valor de cadeia de caracteres que contém o valor codificado em Base64Url da ID de proprietário do enclave, o identificador do proprietário do enclave
  • enclaveFamilyId: valor de cadeia de caracteres que contém o valor codificado em Base64Url da ID de família do enclave. O identificador de família do módulo primário do enclave
  • enclaveSvn: valor inteiro que contém o número de versão de segurança do módulo primário do enclave
  • enclavePlatformSvn: valor inteiro que contém o número de versão de segurança da plataforma que hospeda o enclave
  • enclaveFlags: a declaração enclaveFlags é um valor inteiro que contém sinalizadores que descrevem a política de runtime do enclave

Declarações de saída

Comum para todos os tipos de atestado

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

  • x-ms-ver: versão do esquema JWT (deve ser "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 do Atestado do Azure computada como BASE64URL(SHA256(UTF8(BASE64URL(UTF8(texto da política)))))
  • x-ms-policy-signer: o objeto JSON com um membro "jwk" representando a chave que um cliente usou para assinar a política. Isso é aplicável quando o cliente carrega uma política assinada
  • x-ms-runtime: objeto JSON contendo "declarações" definidas e geradas no ambiente atestado. Essa é uma especialização do conceito de "dados mantidos pelo enclave", em que os "dados mantidos pelo enclave" são especificamente formatados como uma codificação UTF-8 de JSON bem formado
  • x-ms-inittime: objeto JSON contendo "declarações" definidas e verificadas no momento da inicialização do ambiente atestado

Os nomes de declaração abaixo são usados na especificação do JWT da IETF

  • Declaração "jti" (ID do JWT) : identificador exclusivo do JWT
  • Declaração "iss" (Emissor) : a entidade que emitiu o JWT
  • Declaração "iat" (Emitido Em) : a hora em que o JWT foi emitido
  • Declaração "exp" (Hora de Expiração) : hora de expiração após a qual o JWT não deve ser aceito para processamento
  • Declaração "nbf" (Não Antes) : hora antes da qual o JWT não deve ser aceito para processamento

Esses nomes de declaração são usados na especificação de rascunho do EAT da IETF:

  • "Declaração de nonce" (nonce) : uma cópia direta não transformada de um valor de nonce opcional fornecido por um cliente

As declarações abaixo são consideradas preteridas, mas têm suporte completo e continuarão sendo incluídas no futuro. É recomendável usar os nomes de declarações não preteridas.

Declaração preterida Declaração recomendada
ver x-ms-ver
tee x-ms-attestation-type
policy_hash x-ms-policy-hash
maa-policyHash x-ms-policy-hash
policy_signer x-ms-policy-signer
rp_data nonce

Atestado do SGX

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

  • x-ms-sgx-is-debuggable: um booliano 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 em hexa do campo “mrsigner” da cotação
  • x-ms-sgx-mrenclave: valor codificado em hexa do campo “mrenclave” da cotação
  • x-ms-sgx-svn: número de versão de segurança codificado na cotação
  • x-ms-sgx-ehd: dados contidos no enclave formatados como BASE64URL (dados contidos no enclave)
  • x-ms-sgx-collateral: objeto JSON que descreve o manual e acessórios usados para executar o atestado. O valor para a declaração x-ms-sgx-collateral é um objeto JSON aninhado com os seguintes pares chave/valor:
    • qeidcertshash: valor SHA256 de certificados emissores de Identidade de QE (Enclave de Delimitação)
    • qeidcrlhash: valor SHA256 da Identidade QE emissora da lista CRL de certificados
    • qeidhash: valor SHA256 do manual e acessórios da Identidade QE
    • quotehash: valor SHA256 da cotação avaliada
    • tcbinfocertshash: valor SHA256 das Informações TCB emissoras de certificados
    • tcbinfocrlhash: valor SHA256 das Informações TCB emissoras da lista CRL de certificados
    • tcbinfohash: valor SHA256 do manual e dos acessórios de Informações de TCB
  • x-ms-sgx-report-data: campo de dados de relatório do enclave SGX (geralmente hash SHA256 de x-ms-sgx-ehd)

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

  • x-ms-sgx-config-id
  • x-ms-sgx-config-svn
  • x-ms-sgx-isv-extended-product-id
  • x-ms-sgx-isv-family-id

Essas declarações são consideradas preteridas, mas têm suporte completo e continuarão sendo incluídas no futuro. É recomendável usar os nomes de declarações não preteridas:

Declaração preterida Declaração recomendada
$is-debuggable x-ms-sgx-is-debuggable
$product-id x-ms-sgx-product-id
$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-attestationcollateral x-ms-sgx-collateral

Atestado SEV-SNP

As seguintes declarações têm suporte adicional pelo tipo de atestado SevSnpVm:

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

Atestado TPM e VBS

  • cnf (Confirmação) : a declaraçã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 do enclave atestada representada como um objeto JWK (Chave Web JSON) (RFC 7517)
  • rp_data (dados de terceira parte confiável) : dados de 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ó será adicionado se houver rp_data

Declarações de propriedade

Atestado TPM e VBS

  • report_validity_in_minutes: uma declaração de inteiro que indica o tempo durante o qual o token é válido.
    • Valor padrão (hora) : um dia em minutos.
    • Valor máximo (hora) : um ano em minutos.
  • omit_x5c: uma declaração booliana que indica se o Atestado do Azure deve omitir o certificado usado para fornecer a prova de autenticidade do serviço. Se essa declaração for verdadeira, x5t será adicionado ao token de atestado. Se ela for falsa (padrão), x5c será adicionado ao token de atestado.

Próximas etapas