Autorizar hosts protegidos mediante la atestación basada en TPM

Se aplica a: Windows Server 2022, Windows Server 2019, Windows Server 2016

El modo TPM usa un identificador de TPM (también denominado identificador de plataforma o clave de aprobación [EKpub]) para empezar a determinar si un host determinado está autorizado como "protegido". Este modo de atestación usa medidas de integridad de código y arranque seguro para asegurarse de que un host de Hyper-V determinado se encuentra en un estado correcto y solo ejecuta código de confianza. Para que la atestación comprenda qué es y no es un estado correcto, debe capturar los siguientes artefactos:

  1. Identificador de TPM (EKpub)

    • Esta información es única para cada host de Hyper-V
  2. Línea base de TPM (medidas de arranque)

    • Esto es aplicable a todos los hosts de Hyper-V que se ejecutan en la misma clase de hardware
  3. Directiva de integridad de código (lista de permitidos de archivos binarios permitidos)

    • Esto es aplicable a todos los hosts de Hyper-V que comparten hardware y software comunes

Se recomienda capturar la directiva de línea base y CI de un "host de referencia" que sea representativo de cada clase única de configuración de hardware de Hyper-V dentro del centro de datos. A partir de la versión 1709 de Windows Server, las directivas de CI de ejemplo se incluyen en C:\Windows\schemas\CodeIntegrity\ExamplePolicies.

Directivas de atestación con versiones

Windows Server 2019 presenta un nuevo método para la atestación, denominado atestación v2, donde un certificado TPM debe estar presente para agregar EKPub a HGS. El método de atestación v1 utilizado en Windows Server 2016 le permitía anular esta comprobación de seguridad especificando la marca -Force al ejecutar Add-HgsAttestationTpmHost u otros cmdlets de atestación TPM para capturar los artefactos. A partir de Windows Server 2019, la atestación v2 se usa de forma predeterminada y debe especificar la marca -PolicyVersion v1 al ejecutar Add-HgsAttestationTpmHost si necesita registrar un TPM sin un certificado. La marca -Force no funciona con la atestación v2.

Un host solo puede atestiguar si todos los artefactos (EKPub + línea base de TPM + directiva de CI) usan la misma versión de atestación. La atestación V2 se prueba primero y, si se produce un error, se usa la atestación v1. Esto significa que si necesita registrar un identificador de TPM mediante la atestación v1, también debe especificar la marca -PolicyVersion v1 para usar la atestación v1 al capturar la línea base de TPM y crear la directiva de CI. Si la directiva de CI y línea de base de TPM se crearon mediante la atestación v2 y, después, debe agregar un host protegido sin un certificado TPM, debe volver a crear cada artefacto con la marca -PolicyVersion v1.

Capturar el identificador de TPM (identificador de plataforma o EKpub) para cada host

  1. En el dominio de tejido, asegúrese de que el TPM de cada host está listo para su uso; es decir, el TPM se inicializa y se obtiene la propiedad. Para comprobar el estado del TPM, abra la Consola de administración de TPM (tpm.msc) o ejecute Get-Tpm en una ventana de Windows PowerShell con privilegios elevados. Si el TPM no está en estado Listo, deberá inicializarlo y establecer su propiedad. Esto se puede hacer en la Consola de administración de TPM o ejecutando Initialize-Tpm.

  2. En cada host protegido, ejecute el siguiente comando en una consola de Windows PowerShell con privilegios elevados para obtener su EKpub. Para <HostName>, sustituya el nombre de host único por algo adecuado para identificar este host: puede ser su nombre de host o el nombre usado por un servicio de inventario de tejidos (si está disponible). Para mayor comodidad, asigne un nombre al archivo de salida con el nombre del host.

    (Get-PlatformIdentifier -Name '<HostName>').InnerXml | Out-file <Path><HostName>.xml -Encoding UTF8
    
  3. Repita los pasos anteriores para cada host que se convertirá en un host protegido, asegurándose de asignar un nombre único a cada archivo XML.

  4. Proporcione los archivos XML resultantes al administrador de HGS.

  5. En el dominio de HGS, abra una consola de Windows PowerShell con privilegios elevados en un servidor de HGS y ejecute el siguiente comando. Repita el comando para cada uno de los archivos XML.

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

    Nota

    Si se produce un error al agregar un identificador de TPM con respecto a un certificado de clave de aprobación (EKCert) que no es de confianza, asegúrese de que los certificados raíz de TPM de confianza se han agregado al nodo HGS. Además, algunos proveedores de TPM no usan EKCerts. Puede comprobar si falta un EKCert abriendo el archivo XML en un editor como el Bloc de notas y comprobando si hay un mensaje de error que indica que no se encontró ningún EKCert. Si este es el caso y confía en que el TPM de la máquina es auténtico, puede usar el parámetro -Force para agregar el identificador de host a HGS. En Windows Server 2019, también debe usar el parámetro -PolicyVersion v1 al usar -Force. Esto crea una directiva coherente con el comportamiento de Windows Server 2016 y requiere que también se use -PolicyVersion v1 al registrar la directiva de CI y la línea base de TPM.

Creación y aplicación de una directiva de integridad de código

Una directiva de integridad de código ayuda a garantizar que solo los ejecutables en los que confía se ejecuten en un host. Se impide la ejecución de malware y otros ejecutables fuera de los archivos ejecutables de confianza.

Cada host protegido debe tener aplicada una directiva de integridad de código para ejecutar máquinas virtuales blindadas en modo TPM. Para especificar las directivas de integridad de código exactas en las que confía, debe agregarlas a HGS. Las directivas de integridad del código pueden configurarse para hacer cumplir la directiva, bloqueando cualquier software que no cumpla la directiva, o simplemente auditar (registrar un evento cuando se ejecute un software no definido en la directiva).

A partir de la versión 1709 de Windows Server, las directivas de integridad de código de ejemplo se incluyen con Windows en C:\Windows\schemas\CodeIntegrity\ExamplePolicies. Se recomiendan dos directivas para Windows Server:

  • AllowMicrosoft: permite todos los archivos firmados por Microsoft. Esta directiva se recomienda para aplicaciones de servidor como SQL o Exchange, o si los agentes publicados por Microsoft supervisan el servidor.
  • DefaultWindows_Enforced: solo permite archivos que se incluyen en Windows y no permite otras aplicaciones publicadas por Microsoft, como Office. Esta directiva se recomienda para los servidores que ejecutan solo roles de servidor integrados y características como Hyper-V.

Se recomienda crear primero la directiva de CI en modo de auditoría (registro) para ver si falta algo y, a continuación, aplicar la directiva para las cargas de trabajo de producción de host.

Si usa el cmdlet New-CIPolicy para generar su propia directiva de integridad de código, deberá decidir los niveles de regla que se van a usar. Se recomienda un nivel principal de Editor con reserva a Hash, lo que permite actualizar la mayoría del software firmado digitalmente sin cambiar la directiva de CI. El nuevo software escrito por el mismo editor también se puede instalar en el servidor sin cambiar la directiva de CI. Los ejecutables que no estén firmados digitalmente se aplicarán por hash. Las actualizaciones de estos archivos le obligarán a crear una nueva directiva de CI. Para más información sobre los niveles de regla de directiva de CI disponibles, consulte Implementación de directivas de integridad de código: reglas de directivas y reglas de archivo y ayuda de cmdlets.

  1. En el host de referencia, genere una nueva directiva de integridad de código. Los siguientes comandos crean una directiva en el nivel de Editor con reserva a Hash. Después convierte el archivo XML al formato de archivo binario que Windows y HGS necesitan para aplicar y medir la directiva 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'
    

    Nota

    El comando anterior crea una directiva de CI solo en modo auditoría. No impedirá que los archivos binarios no autorizados se ejecuten en el host. Solo debería usar directivas aplicadas en producción.

  2. Mantenga el archivo de directiva de integridad de código (archivo XML) donde pueda encontrarlo fácilmente. Tendrá que editar este archivo más adelante para aplicar la directiva CI o combinar los cambios de futuras actualizaciones realizadas en el sistema.

  3. Aplique la directiva de CI al host de referencia:

    1. Ejecute el siguiente comando para configurar la máquina para que use la directiva de CI. También puede implementar la directiva de CI con directiva de grupo 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 el host para aplicar la directiva.

  4. Pruebe la directiva de integridad de código mediante la ejecución de una carga de trabajo típica. Esto puede incluir la ejecución de máquinas virtuales, cualquier agente de administración de tejido, agentes de copia de seguridad o herramientas de solución de problemas en la máquina. Compruebe si hay alguna infracción de integridad de código y actualice la directiva de CI si es necesario.

  5. Cambie la directiva de CI al modo aplicado mediante la ejecución de los siguientes comandos en el archivo XML de la directiva de CI actualizada.

    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 la directiva de CI a todos los hosts (con una configuración de hardware y software idénticas) mediante los siguientes comandos:

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

    Nota

    Tenga cuidado al aplicar directivas de CI a hosts y al actualizar cualquier software en estas máquinas. Cualquier controlador de modo kernel que no sea compatible con la directiva de CI puede impedir que la máquina se inicie.

  7. Proporcione el archivo binario (en este ejemplo, HW1CodeIntegrity_enforced.p7b) al administrador de HGS.

  8. En el dominio de HGS, copie la directiva de integridad de código en un servidor de HGS y ejecute el siguiente comando.

    Para <PolicyName>, especifique un nombre para la directiva de CI que describe el tipo de host al que se aplica. Una práctica recomendada es darle el nombre de la marca/modelo de su máquina y de cualquier configuración especial de software que se ejecute en ella. Para <Path>, especifique la ruta de acceso y el nombre de archivo de la directiva de integridad de código.

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

    Nota

    Si usa una directiva de integridad de código firmada, registre una copia sin firmar de la misma directiva con HGS. La firma en las directivas de integridad del código se usa para controlar las actualizaciones de la directiva, pero no se mide en el TPM del host y, por tanto, no puede ser atestiguada por HGS.

Captura de la línea de base de TPM para cada clase única de hardware

Se requiere una línea base de TPM para cada clase única de hardware en el tejido del centro de datos. Vuelva a usar un "host de referencia".

  1. En el host de referencia, asegúrese de que está instalado el rol de Hyper-V y la característica de compatibilidad de Hyper-V de protección de host.

    Advertencia

    La característica de compatibilidad con Hyper-V de Protección de host habilita la protección basada en virtualización de la integridad de código que puede ser incompatible con algunos dispositivos. Es muy recomendable probar esta configuración en su laboratorio antes de habilitar esta función. Si no lo haces pueden producirse errores inesperados, incluida la pérdida de datos o un error de pantalla azul (también llamado error grave).

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. Para capturar la directiva de línea de base, ejecute el siguiente comando en una consola de Windows PowerShell con privilegios elevados.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    Nota

    Deberá usar la marca -SkipValidation si el host de referencia no tiene el arranque seguro habilitado, una IOMMU presente, la seguridad basada en la virtualización habilitada y en ejecución o una directiva de integridad del código aplicada. Estas validaciones están diseñadas para que sea consciente de los requisitos mínimos de ejecución de una máquina virtual blindada en el host. El uso de la marca -SkipValidation no cambia la salida del cmdlet; simplemente silencia los errores.

  3. Proporcione la línea base de TPM (archivo TCGlog) al administrador de HGS.

  4. En el dominio de HGS, copie el archivo TCGlog en un servidor de HGS y ejecute el siguiente comando. Normalmente, dará a la directiva el nombre de la clase de hardware que representa (por ejemplo, "Revisión del modelo del fabricante").

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

Paso siguiente