Partilhar via


Conjuntos de afirmações

As afirmações geradas no processo de atestação de enclaves com o Microsoft Azure Attestation podem ser divididas nestas categorias:

  • Afirmações recebidas: as afirmações geradas pela Microsoft Azure Attestation depois de analisar as provas de atestado e podem ser utilizadas pelos autores de políticas para definir regras de autorização numa política personalizada

  • Afirmações de saída: as afirmações geradas por Azure Attestation e incluídas no token de atestado

  • Afirmações de propriedade: as afirmações criadas como saída por Azure Attestation. Contém todas as afirmações que representam propriedades do token de atestado, como a codificação do relatório, a duração da validade do relatório, etc.

Afirmações de entrada

Atestado SGX

Afirmações a utilizar pelos autores de políticas para definir regras de autorização numa política de atestado SGX:

  • x-ms-sgx-is-depurggable: um valor booleano, que indica se a depuração do enclave está ativada ou não.

    Os enclaves SGX podem ser carregados com a depuração desativada ou ativada. Quando o sinalizador é definido como verdadeiro no enclave, ativa as funcionalidades de depuração para o código do enclave. Isto inclui a capacidade de aceder à memória do enclave. Por conseguinte, recomenda-se que defina o sinalizador como verdadeiro apenas para fins de desenvolvimento. Se estiver ativada no ambiente de produção, as garantias de segurança SGX não serão mantidas.

    Azure Attestation utilizadores podem utilizar a política de atestado para verificar se a depuração está desativada para o enclave SGX. Assim que a regra de política for adicionada, o atestado falhará quando um utilizador malicioso ativar o suporte de depuração para obter acesso ao conteúdo do enclave.

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

    O autor do enclave atribui um ID de Produto a cada enclave. O ID do Produto permite ao autor do enclave segmentar enclaves assinados com o mesmo MRSIGNER. Ao adicionar uma regra de validação na política de atestado, os clientes podem verificar se estão a utilizar os enclaves pretendidos. O atestado falhará se o ID de produto do enclave não corresponder ao valor publicado pelo autor do enclave.

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

    MRSIGNER é o hash da chave pública do autor do enclave que está associada à chave privada utilizada para assinar o binário do enclave. Ao validar MRSIGNER através de uma política de atestado, os clientes podem verificar se os binários fidedignos estão em execução dentro de um enclave. Quando a afirmação de política não corresponde à MRSIGNER do autor do enclave, implica que o binário do enclave não é assinado por uma origem fidedigna e o atestado falha.

    Quando um autor do enclave prefere rodar MRSIGNER por razões de segurança, Azure Attestation política tem de ser atualizada para suportar os novos e antigos valores MRSIGNER antes de os binários serem atualizados. Caso contrário, as verificações de autorização falharão, resultando em falhas de atestado.

    A política de atestado tem de ser atualizada com 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 da chave

      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, que identifica o código e os dados carregados na memória do enclave.

    MRENCLAVE é uma das medidas do enclave que pode ser utilizada 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 alteração ao código binário do enclave. Ao validar o MRENCLAVE através de uma política de atestado, os clientes podem verificar se os binários pretendidos estão em execução dentro de um enclave. No entanto, uma vez que se espera que o MRENCLAVE mude frequentemente com qualquer modificação trivial ao código existente, recomenda-se verificar os binários do enclave com a validação MRSIGNER numa 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 é detetado no código do enclave, o autor do enclave incrementa o valor SVN após a correção da vulnerabilidade. Para impedir a interação com código de enclave inseguro, os clientes podem adicionar uma regra de validação na política de atestado. Se a SVN do código do enclave não corresponder à versão recomendada pelo autor do enclave, o atestado falhará.

Estas afirmações são consideradas preteridas, mas são totalmente suportadas e continuarão a ser incluídas no futuro. É recomendado utilizar os nomes de afirmações não preteridos:

Afirmação preterida Afirmação recomendada
$is depurável 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

Afirmações a utilizar pelos autores de políticas para definir regras de autorização numa política de atestado TPM:

  • aikValidated: valor booleano que contém informações se o certificado da Chave de Identidade do Atestado (AIK) tiver sido validado ou não
  • aikPubHash: Cadeia que contém a base64(SHA256(chave pública AIK no formato DER))
  • tpmVersion: valor inteiro que contém a versão principal do Trusted Platform Module (TPM)
  • secureBootEnabled: valor booleano para indicar se o arranque seguro está ativado
  • iommuEnabled: valor booleano para indicar se a unidade de gestão de memória input-output (Iommu) está ativada
  • bootDebuggingDisabled: valor booleano para indicar se a depuração do arranque está desativada
  • notSafeMode: valor booleano para indicar se o Windows não está em execução no modo de segurança
  • notWinPE: valor booleano que indica se o Windows não está em execução no modo WinPE
  • vbsEnabled: valor booleano que indica se o VBS está ativado
  • vbsReportPresent: valor booleano que indica se o relatório do enclave VBS está disponível

Atestado VBS

Além das afirmações de política de atestado do TPM, estas afirmações podem ser utilizadas pelos autores de políticas para definir regras de autorização numa política de atestado VBS:

  • enclaveAuthorId: Valor da cadeia que contém o valor codificado base64Url do ID do autor do enclave – O identificador do autor do módulo primário do enclave
  • enclaveImageId: Valor da cadeia que contém o valor codificado base64Url do id da imagem do enclave – O identificador de imagem do módulo primário do enclave
  • enclaveOwnerId: Valor da cadeia que contém o valor codificado Base64Url do ID do Proprietário do enclave – O identificador do proprietário do enclave
  • enclaveFamilyId: valor da cadeia que contém o valor codificado base64Url do ID da Família do enclave. O identificador familiar do módulo primário do enclave
  • enclaveSvn: valor inteiro que contém o número da versão de segurança do módulo primário do enclave
  • enclavePlatformSvn: valor inteiro que contém o número da versão de segurança da plataforma que aloja o enclave
  • enclaveFlags: A afirmação enclaveFlags é um valor inteiro que contém Sinalizadores que descrevem a política de runtime para o enclave

Afirmações de saída

Comum para todos os tipos de atestado

Azure Attestation inclui estas afirmaçõ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 que representa o tipo de atestado
  • x-ms-policy-hash: hash da política de avaliação do Azure Attestation 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 utilizou para assinar a política. Isto é aplicável quando o cliente carrega uma política assinada
  • x-ms-runtime: objeto JSON que contém "afirmações" que são definidas e geradas no ambiente atestado. Trata-se de uma especialização do conceito "enclave held data", em que o "enclave contém dados" é especificamente formatado como uma codificação UTF-8 de JSON bem formado
  • x-ms-inittime: objeto JSON que contém "afirmações" que são definidas e verificadas no momento da inicialização do ambiente atestado

Os nomes de afirmações abaixo são utilizados a partir da especificação JWT do IETF

  • Afirmação "jti" (JWT ID) – Identificador exclusivo do JWT
  • Afirmação "iss" (Emissor) – o principal que emitiu o JWT
  • Afirmação "iat" (Emitido Em) – o momento em que o JWT foi emitido em
  • Afirmação "exp" (Tempo de Expiração) – Tempo de expiração após o qual o JWT não deve ser aceite para processamento
  • Afirmação "nbf" (Não Antes) – Não antes do tempo em que o JWT não deve ser aceite para processamento

Estes nomes de afirmações são utilizados a partir da especificação de rascunho do IETF EAT:

  • "Afirmação nonce" (nonce) - Uma cópia direta não destransformada de um valor de nonce opcional fornecido por um cliente

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

Afirmação preterida Afirmaçã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 SGX

Estas caims são geradas e incluídas no token de atestado pelo serviço para atestado SGX:

  • x-ms-sgx-is-depurggable: Um booleano, que indica se o enclave tem ou não a depuração ativada ou não
  • x-ms-sgx-product-id: valor do ID do produto do enclave SGX
  • x-ms-sgx-mrsigner: valor codificado hexadecima do campo "mrsigner" da cotação
  • x-ms-sgx-mrenclave: valor codificado hexadecima do campo "mrenclave" da cotação
  • x-ms-sgx-svn: número da versão de segurança codificado na cotação
  • x-ms-sgx-ehd: enclave tinha dados formatados como BASE64URL(dados de enclave)
  • x-ms-sgx-colateral: objeto JSON que descreve a garantia utilizada para executar o atestado. O valor da afirmação x-ms-sgx-colateral é um objeto JSON aninhado com os seguintes pares chave/valor:
    • qeidcertshash: valor SHA256 dos certificados de emissão de Identidade de Enclave de Cotação (QE)
    • qeidcrlhash: valor SHA256 da lista CRL de certificados de emissão de Identidade QE
    • qeidhash: valor SHA256 da colateral da Identidade QE
    • quotehash: valor SHA256 da cotação avaliada
    • tcbinfocertshash: valor SHA256 dos certificados de emissão de Informações TCB
    • tcbinfocrlhash: valor SHA256 da lista CRL de certificados de emissão de Informações TCB
    • tbinfohash: valor SHA256 da colateral de Informações TCB
  • x-ms-sgx-report-data: campo de dados do relatório do enclave SGX (geralmente hash SHA256 de x-ms-sgx-ehd)

Estas afirmações só serão apresentadas no token de atestado gerado para plataformas de servidores baseadas em processadores Dimensionáveis Intel® Xeon®. As afirmações não serão apresentadas se o enclave SGX não estiver configurado com o Suporte de Separação e Partilha de Chaves. As definições de afirmaçã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

Estas afirmações são consideradas preteridas, mas são totalmente suportadas e continuarão a ser incluídas no futuro. É recomendado utilizar os nomes de afirmações não preteridos:

Afirmação preterida Afirmação recomendada
$is depurável 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-colateral

Atestado SEV-SNP

As afirmações seguintes são suportadas adicionalmente pelo tipo de atestado SevSnpVm:

  • x-ms-sevsnpvm-authorkeydigest: hash SHA384 da chave de assinatura do autor
  • x-ms-sevsnpvm-bootloader-svn :AMD boot loader security version number (SVN)
  • x-ms-sevsnpvm-familyId: Cadeia de identificação da família de Camada de Compatibilidade do Anfitrião (HCL)
  • x-ms-sevsnpvm-guestsvn: número da versão de segurança HCL (SVN)
  • x-ms-sevsnpvm-hostdata: Dados arbitrários definidos pelo anfitrião na hora de lançamento 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 SEV-SNP do AMD está ativada
  • x-ms-sevsnpvm-launchmeasurement: Medição da imagem de convidado iniciada
  • 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 de migração SEV-SNP do AMD está ativado
  • x-ms-sevsnpvm-reportdata: dados transmitidos pela HCL para incluir com o 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á ativado no anfitrião
  • x-ms-sevsnpvm-snpfw-svn: número da versão de segurança de firmware AMD (SVN)
  • x-ms-sevsnpvm-tee-svn: número da versão de segurança (SVN) do ambiente de execução fidedigno AMD (TEE)
  • x-ms-sevsnpvm-vmpl: VMPL que gerou este relatório (0 para HCL)

Atestado TPM e VBS

  • cnf (Confirmação): a afirmação "cnf" é utilizada para identificar a chave de prova de posse. A afirmação de confirmação, conforme definido em 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 entidade confiadora): dados da entidade confiadora, se existirem, especificados no pedido, utilizados pela entidade confiadora como um nonce para garantir a atualização do relatório. rp_data só é adicionado se existir rp_data

Afirmações de propriedade

Atestado TPM e VBS

  • report_validity_in_minutes: uma afirmação de número inteiro para significar quanto tempo o token é válido.
    • Valor predefinido(hora): um dia em minutos.
    • Valor máximo(tempo): um ano em minutos.
  • omit_x5c: uma afirmação booleana que indica se Azure Attestation deve omitir o certificado utilizado para fornecer uma prova de autenticidade do serviço. Se for verdadeiro, x5t será adicionado ao token de atestado. Se falso(predefinição), x5c será adicionado ao token de atestado.

Passos seguintes