Autorizar hosts protegidos usando atestado baseado em TPM

Aplica-se a: Windows Server 2022, Windows Server 2019 e Windows Server 2016

O modo TPM usa um identificador TPM (também chamado de identificador de plataforma ou chave de endosso [EKpub]) para determinar se um host específico está autorizado como "protegido". Esse modo de certificação usa medidas de integridade de código e Inicialização segura para garantir que um específico host Hyper-V esteja íntegro e executando somente códigos de confiança. Para que a certificação entenda o que é íntegro ou não, você deve capturar os artefatos:

  1. Identificador TPM (EKpub)

    • Essas informações são exclusivas para cada host Hyper-V
  2. Linha de base do TPM (medidas de inicialização)

    • Isso se aplica a todos os hosts Hyper-V que executam na mesma classe de hardware
  3. Política de integridade de código (lista de binários permitidos)

    • Isso se aplica a todos os hosts Hyper-V que compartilham hardware e software comuns

Recomendamos que você capture a linha de base e a política de CI de um "host de referência" que represente cada classe exclusiva de configuração de hardware do Hyper-V no data center. A partir do Windows Server versão 1709, os exemplos das políticas de CI foram incluídas em C:\Windows\schemas\CodeIntegrity\ExamplePolicies.

Políticas de certificação com versão

O Windows Server 2019 apresenta um novo método de certificação chamado certificação v2, em que um certificado TPM deve estar presente para adicionar o EKPub ao HGS. O método de certificação v1 usado no Windows Server 2016 permitiu que se substituísse essa verificação de segurança ao especificar o indicador -Force na execução do comando Add-HgsAttestationTpmHost ou de outros cmdlets de certificação do TPM para capturar os artefatos. A partir do Windows Server 2019, a certificação v2 é usada por padrão e, se for necessário registrar um TPM sem um certificado, você precisará especificar o indicador -PolicyVersion v1 na execução do comando Add-HgsAttestationTpmHost. O indicador -Force não funciona com a certificação v2.

Um host só poderá fazer a certificação se todos os artefatos (EKPub + linha de base do TPM + Política de CI) usarem a mesma versão de certificação. A certificação v2 é testada primeiro e, se falhar, a certificação v1 será usada. Isso significa que, se você precisar registrar um identificador TPM usando a certificação v1, também precisará especificar o indicador PolicyVersion v1 para usar a certificação v1 ao capturar a linha de base do TPM e criar a política de CI. Se a linha de base do TPM e a política de CI forem criadas usando a certificação v2 e, posteriormente, for necessário adicionar um host protegido sem um certificado TPM, você deverá recriar cada artefato com o indicador -PolicyVersion v1.

Capturar identificador do TPM (identificador de plataforma ou EKpub) para cada host

  1. No domínio da malha, verifique se o TPM em cada host está pronto para uso, ou seja, o TPM está inicializado e a propriedade foi obtida. Para verificar o status do TPM, abra o Console de Gerenciamento do TPM (tpm.msc) ou execute o comando Get-Tpm em uma janela do Windows PowerShell usando privilégios elevados. Se o TPM não estiver no estado Pronto, inicialize o TPM e defina a propriedade. Isso pode ser feito no Console de Gerenciamento do TPM ou executando o comando Initialize-Tpm.

  2. Em cada host protegido, execute o comando abaixo em um console do Windows PowerShell usando privilégios elevados para obter seu EKpub. Para <HostName>, substitua o nome exclusivo do host por um nome que identifique esse host. Pode ser o próprio nome do host ou o nome usado por um serviço de inventário de malha (se disponível). Para praticidade, nomeie o arquivo de saída com o nome do host.

    (Get-PlatformIdentifier -Name '<HostName>').InnerXml | Out-file <Path><HostName>.xml -Encoding UTF8
    
  3. Repita as etapas anteriores para cada host que será um host protegido e verifique se cada arquivo XML possui um nome exclusivo.

  4. Disponibilize os arquivos XML resultantes ao administrador do HGS.

  5. No domínio do HGS, abra um console do Windows PowerShell com privilégios elevados em um servidor HGS e execute o comando a seguir. Repita o comando para cada um dos arquivos XML.

    Add-HgsAttestationTpmHost -Path <Path><Filename>.xml -Name <HostName>
    

    Observação

    Se, ao adicionar um identificador TPM ocorrer um erro relacionado ao Certificado de Chave de Endosso (EKCert) não confiável, verifique se os certificados raiz de confiança do TPM foram adicionados ao nó HGS. Além disso, alguns fornecedores de TPM não usam EKCert. Para verificar se um EKCert está ausente, abra o arquivo XML em um editor, como o Bloco de Notas, e verifique se há uma mensagem de erro indicando que nenhum EKCert foi encontrado. Se esse for o caso e o TPM no computador for autêntico, você pode usar o parâmetro -Force para adicionar o identificador de host ao HGS. No Windows Server 2019, você precisa também do parâmetro -PolicyVersion v1 ao usar -Force. Isso cria uma política consistente com o comportamento do Windows Server 2016 e exigirá que você use -PolicyVersion v1 ao registrar a política de CI e a linha de base do TPM também.

Criar e aplicar política de integridade de código

Uma política de integridade de código ajuda a garantir que apenas executáveis de confiança sejam executados em um host. Malware e outros executáveis fora dos executáveis confiáveis são impedidos de serem executados.

Cada host protegido deve ter uma política de integridade de código aplicada para executar VMs blindadas no modo TPM. Para especificar as políticas exatas de integridade de código em que você confia, adicione-as ao HGS. As políticas de integridade de código podem ser configuradas para aplicar a política, bloquear softwares que não estejam em conformidade com a política ou simplesmente para auditar (registrar um evento quando o software não definido na política for executado).

A partir do Windows Server versão 1709, os exemplos das políticas de integridade de código foram incluídas em C:\Windows\schemas\CodeIntegrity\ExamplePolicies. Recomendam-se duas políticas para o Windows Server:

  • AllowMicrosoft: aceita todos os arquivos assinados pela Microsoft. Recomenda-se essa política para aplicativos de servidor, como SQL ou Exchange, ou para servidores monitorados por agentes publicados pela Microsoft.
  • DefaultWindows_Enforced: aceita apenas arquivos que foram enviados no Windows e não aceita outros aplicativos lançados pela Microsoft, como o Office. Recomenda-se essa política para servidores que executam apenas funções de servidor e recursos integrados, como o Hyper-V.

Recomenda-se que você primeiro crie a política de CI no modo de auditoria (log) para analisar se falta incluir algo e, depois, aplicar a política para as cargas de trabalho de produção do host.

Se você usar o cmdlet New-CIPolicy para gerar sua própria política de integridade de código, precisará definir os níveis de regra. Recomendamos usar um nível primário de Editor com fallback para Hash, que permite que a maioria dos softwares assinados digitalmente seja atualizada sem alterar a política de CI. O novo software escrito pelo mesmo editor também pode ser instalado no servidor sem alterar a política de CI. Os executáveis que não são assinados digitalmente terão um hash. Para fazer atualizações nesses arquivos, você precisará criar uma nova política de CI. Para obter mais informações sobre os níveis de regra de política de CI, veja Implantar políticas de integridade de código: regras de política e regras de arquivo e ajuda para cmdlet.

  1. No host de referência, gere uma nova política de integridade de código. Os comandos a seguir criam uma política no nível do Editor com fallback para Hash. Depois, o arquivo XML é convertido para o formato de arquivo binário que o Windows e o HGS precisam para aplicar e medir a política de CI, respectivamente.

    New-CIPolicy -Level Publisher -Fallback Hash -FilePath 'C:\temp\HW1CodeIntegrity.xml' -UserPEs
    
    ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\HW1CodeIntegrity.xml' -BinaryFilePath 'C:\temp\HW1CodeIntegrity.p7b'
    

    Observação

    O comando acima cria uma política de CI somente no modo de auditoria. Ele não bloqueará a execução de binários não autorizados no host. Em produção, use somente políticas implementadas.

  2. Mantenha o arquivo de política de integridade de código (arquivo XML) em um lugar de fácil localização. Você precisará editar esse arquivo mais tarde para implantar a política de CI ou mesclar alterações de futuras atualizações de sistema.

  3. Aplique a política de CI ao host de referência:

    1. Execute o comando a seguir para configurar o computador para usar a política de CI. Você também pode implantar a política de CI usando a Política de Grupo ou o System Center Virtual Machine Manager.

      Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
      
    2. Reinicie o host para aplicar a política.

  4. Execute uma carga de trabalho comum para testar a política de integridade de código. Isso pode incluir a execução no computador de VMs, agentes de gerenciamento de malha, agentes de backup ou ferramentas de solução de problemas. Verifique se ocorrem violações de integridade de código e atualize a política de CI, se necessário.

  5. Para alterar a política de CI para o modo imposto, execute os comandos abaixo no arquivo XML atualizado de política de CI.

    Set-RuleOption -FilePath 'C:\temp\HW1CodeIntegrity.xml' -Option 3 -Delete
    
    ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\HW1CodeIntegrity.xml' -BinaryFilePath 'C:\temp\HW1CodeIntegrity_enforced.p7b'
    
  6. Aplique a política de CI em todos os hosts (com configuração idêntica de hardware e software) usando os comandos:

    Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
    
    Restart-Computer
    

    Observação

    Tenha cuidado ao aplicar as políticas de CI nos hosts e ao atualizar os softwares nesses computadores. Todos os drivers de modo kernel que não estejam em conformidade com a Política de CI podem impedir a inicialização do computador.

  7. Disponibilize o arquivo binário (neste exemplo, HW1CodeIntegrity_enforced.p7b) ao administrador do HGS.

  8. No domínio do HGS, copie a política de integridade de código no servidor HGS e execute o comando abaixo.

    Para <PolicyName>, especifique um nome para a política de CI que descreva o tipo de host para o qual ela se aplica. Uma prática recomendada é nomeá-la usando a marca/modelo do computador e uma configuração de software especial em execução nele. Para <Path>, especifique o caminho e o nome do arquivo da política de integridade do código.

    Add-HgsAttestationCIPolicy -Path <Path> -Name '<PolicyName>'
    

    Observação

    Se estiver usando uma política de integridade de código assinada, registre uma cópia não assinada da mesma política no HGS. A assinatura em políticas de integridade de código é usada para controlar as atualizações da política, mas não é medida no TPM do host e, portanto, não pode ser certificada pelo HGS.

Capturar linha de base do TPM para cada classe exclusiva de hardware

É preciso criar uma linha de base do TPM para cada classe exclusiva de hardware na malha do data center. Use novamente um "host de referência".

  1. No host de referência, verifique se a função Hyper-v e o recurso de suporte do Hyper-V do Guardião de Host estão instalados.

    Aviso

    O recurso Suporte do Hyper-V do Guardião de Host permite a proteção baseada em virtualização da integridade do código, que pode ser incompatível com alguns dispositivos. Recomendamos enfaticamente que você teste essa configuração em laboratório antes de habilitar o recurso. Deixar de fazer isso pode resultar em falhas inesperadas, inclusive perda de dados ou um erro de tela azul (também chamado de erro de parada).

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. Para capturar a política de linha de base, execute o comando a seguir em um console do Windows PowerShell com privilégios elevados.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    Observação

    Você precisará usar o indicador -SkipValidation se o host de referência não tiver a Inicialização Segura habilitada, um IOMMU presente, a segurança baseada em virtualização habilitada e sendo executada ou uma política de integridade de código aplicada. Essas validações foram projetadas para alertar você dos requisitos mínimos de execução de uma VM blindada no host. O uso do indicador -SkipValidation não altera a saída do cmdlet; ele apenas não mostra os erros.

  3. Disponibilize a linha de base do TPM (arquivo TCGlog) ao administrador do HGS.

  4. No domínio do HGS, copie o arquivo TCGog no servidor HGS e execute o comando abaixo. Geralmente, o nome da política é o nome da classe de hardware que ela representa (por exemplo, "Revisão do Modelo do Fabricante").

    Add-HgsAttestationTpmPolicy -Path <Filename>.tcglog -Name '<PolicyName>'
    

Próxima etapa