Autorisieren von überwachten Hosts mithilfe von TPM-basiertem NachweisAuthorize guarded hosts using TPM-based attestation

Gilt für: Windows Server 2019, Windows Server (halbjährlicher Kanal), Windows Server 2016Applies to: Windows Server 2019, Windows Server (Semi-Annual Channel), Windows Server 2016

Der TPM-Modus verwendet einen TPM-Bezeichner (auch als Platt Form Bezeichner oder Endorsement Key [ekpub]bezeichnet), um zu bestimmen, ob ein bestimmter Host als "geschützt" autorisiert ist.TPM mode uses a TPM identifier (also called a platform identifier or endorsement key [EKpub]) to begin determining whether a particular host is authorized as "guarded." Bei diesem Nachweis werden sichere Start-und Code Integritäts Messungen verwendet, um sicherzustellen, dass sich ein bestimmter Hyper-V-Host in einem fehlerfreien Zustand befindet und nur vertrauenswürdiger Code ausgeführt wird.This mode of attestation uses Secure Boot and code integrity measurements to ensure that a given Hyper-V host is in a healthy state and is running only trusted code. Damit der Nachweis weiß, was nicht fehlerfrei ist, müssen Sie die folgenden Artefakte erfassen:In order for attestation to understand what is and is not healthy, you must capture the following artifacts:

  1. TPM-Bezeichner (ekpub)TPM identifier (EKpub)

    • Diese Informationen sind für jeden Hyper-V-Host eindeutig.This information is unique to each Hyper-V host
  2. TPM-Baseline (Start Messungen)TPM baseline (boot measurements)

    • Dies gilt für alle Hyper-V-Hosts, die auf derselben Hardware Klasse ausgeführt werden.This is applicable to all Hyper-V hosts that run on the same class of hardware
  3. Code Integritätsrichtlinie (eine Whitelist zulässiger Binärdateien)Code integrity policy (a whitelist of allowed binaries)

    • Dies gilt für alle Hyper-V-Hosts, die gemeinsame Hardware und Software gemeinsam verwenden.This is applicable to all Hyper-V hosts that share common hardware and software

Es wird empfohlen, die Baseline-und CI-Richtlinie von einem "Verweis Host" zu erfassen, der für jede eindeutige Klasse der Hyper-V-Hardwarekonfiguration innerhalb Ihres Rechenzentrums repräsentativ ist.We recommend that you capture the baseline and CI policy from a "reference host" that is representative of each unique class of Hyper-V hardware configuration within your datacenter. Ab Windows Server, Version 1709, sind die CI-Beispiel Richtlinien unter c:\windows\schemas\codeintegrity\examplepoliciesenthalten.Beginning with Windows Server version 1709, sample CI policies are included at C:\Windows\schemas\CodeIntegrity\ExamplePolicies.

Nachweis Richtlinien mit Versions AngabeVersioned attestation policies

In Windows Server 2019 wird eine neue Methode für den Nachweis namens " v2-Nachweis" eingeführt, in der ein TPM-Zertifikat vorhanden sein muss, um die ekpub-Datei zu HGS hinzuzufügen.Windows Server 2019 introduces a new method for attestation, called v2 attestation, where a TPM certificate must be present in order to add the EKPub to HGS. Mit der in Windows Server 2016 verwendeten v1-Nachweismethode konnten Sie diese Sicherheitsüberprüfung außer Kraft setzen, indem Sie das Flag "-Force" angeben, wenn Sie "Add-hgsattestationtpmhost" oder andere TPM-Nachweis-Cmdlets ausführen, um die Artefakte zu erfassen.The v1 attestation method used in Windows Server 2016 allowed you to override this safety check by specifying the -Force flag when you run Add-HgsAttestationTpmHost or other TPM attestation cmdlets to capture the artifacts. Ab Windows Server 2019 wird der V2-Nachweis standardmäßig verwendet, und Sie müssen das Flag "-PolicyVersion v1" angeben, wenn Sie "Add-hgsattestationtpmhost" ausführen müssen, wenn Sie ein TPM ohne Zertifikat registrieren müssen.Beginning with Windows Server 2019, v2 attestation is used by default and you need to specify the -PolicyVersion v1 flag when you run Add-HgsAttestationTpmHost if you need to register a TPM without a certificate. Das Flag-Force funktioniert nicht mit dem V2-Nachweis.The -Force flag does not work with v2 attestation.

Ein Host kann nur überzeugen, ob für alle Artefakte (ekpub + TPM-Baseline und CI-Richtlinie) dieselbe Version des Nachweis verwendet wird.A host can only attest if all artifacts (EKPub + TPM baseline + CI Policy) use the same version of attestation. Der V2-Nachweis wird zuerst ausprobiert, und wenn dies nicht möglich ist, wird der v1-Nachweis verwendet.V2 attestation is tried first, and if that fails, v1 attestation is used. Dies bedeutet Folgendes: Wenn Sie eine TPM-ID mithilfe des v1-Nachweis registrieren müssen, müssen Sie auch das Flag "-PolicyVersion v1" angeben, um den v1-Nachweis zu verwenden, wenn Sie die TPM-Baseline erfassen und die CI-Richtlinie erstellen.This means if you need to register a TPM identifier by using v1 attestation, you need to also specify the -PolicyVersion v1 flag to use v1 attestation when you capture the TPM baseline and create the CI policy. Wenn die TPM-Baseline und die CI-Richtlinie mit dem V2-Nachweis erstellt wurden und Sie später einen überwachten Host ohne TPM-Zertifikat hinzufügen müssen, müssen Sie jedes artefaktelement mit dem Flag "-PolicyVersion v1" neu erstellen.If the TPM baseline and CI policy were created by using v2 attestation and then later you need to add a guarded host without a TPM certificate, you need to re-create each artifact with the -PolicyVersion v1 flag.

Erfassen Sie den TPM-Bezeichner (Platt Form Bezeichner oder ekpub) für jeden Host.Capture the TPM identifier (platform identifier or EKpub) for each host

  1. Stellen Sie in der Fabric-Domäne sicher, dass das TPM auf den einzelnen Hosts zur Verwendung bereit ist, d. h., das TPM ist initialisiert, und der Besitz wurde abgerufen.In the fabric domain, make sure the TPM on each host is ready for use - that is, the TPM is initialized and ownership obtained. Sie können den Status des TPM überprüfen, indem Sie die TPM-Verwaltungskonsole (TPM. msc) öffnen oder Get-TPM in einem Windows PowerShell-Fenster mit erhöhten Rechten ausführen.You can check the status of the TPM by opening the TPM Management Console (tpm.msc) or by running Get-Tpm in an elevated Windows PowerShell window. Wenn das TPM nicht den Status bereit aufweist, müssen Sie es initialisieren und dessen Besitz festlegen.If your TPM is not in the Ready state, you will need to initialize it and set its ownership. Dies kann in der TPM-Verwaltungskonsole oder durch Ausführen von Initialize-TPMerfolgen.This can be done in the TPM Management Console or by running Initialize-Tpm.

  2. Führen Sie auf jedem überwachten Host den folgenden Befehl in einer Windows PowerShell-Konsole mit erhöhten Rechten aus, um die ekpub-Datei abzurufen.On each guarded host, run the following command in an elevated Windows PowerShell console to obtain its EKpub. Ersetzen Sie für <HostName>den eindeutigen Hostnamen durch etwas, das zum Identifizieren dieses Hosts geeignet ist. dabei kann es sich um den Hostnamen oder den Namen handeln, der von einem Fabric-Inventur Dienst (falls verfügbar) verwendet wird.For <HostName>, substitute the unique host name with something suitable to identify this host - this can be its hostname or the name used by a fabric inventory service (if available). Benennen Sie die Ausgabedatei unter Verwendung des Host namens.For convenience, name the output file using the host's name.

    (Get-PlatformIdentifier -Name '<HostName>').InnerXml | Out-file <Path><HostName>.xml -Encoding UTF8
    
  3. Wiederholen Sie die vorherigen Schritte für jeden Host, der zu einem überwachten Host werden soll, und stellen Sie sicher, dass jede XML-Datei einen eindeutigen Namen erhältRepeat the preceding steps for each host that will become a guarded host, being sure to give each XML file a unique name.

  4. Stellen Sie die resultierenden XML-Dateien für den HGS-Administrator bereit.Provide the resulting XML files to the HGS administrator.

  5. Öffnen Sie in der HGS-Domäne eine Windows PowerShell-Konsole mit erhöhten Rechten auf einem HGS-Server, und führen Sie den folgenden Befehl aus.In the HGS domain, open an elevated Windows PowerShell console on an HGS server and run the following command. Wiederholen Sie den Befehl für jede der XML-Dateien.Repeat the command for each of the XML files.

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

    Hinweis

    Wenn beim Hinzufügen eines TPM-Bezeichners zu einem nicht vertrauenswürdigen Endorsement Key-Zertifikat (ekcert) ein Fehler auftritt, stellen Sie sicher, dass die vertrauenswürdigen TPM -Stamm Zertifikate dem HGS-Knoten hinzugefügt wurden.If you encounter an error when adding a TPM identifier regarding an untrusted Endorsement Key Certificate (EKCert), ensure that the trusted TPM root certificates have been added to the HGS node. Darüber hinaus verwenden einige TPM-Anbieter keine ekcerts.Additionally, some TPM vendors do not use EKCerts. Sie können überprüfen, ob ein ekcert fehlt, indem Sie die XML-Datei in einem Editor wie z. b. Editor öffnen und auf eine Fehlermeldung mit dem Hinweis, dass kein ekcert gefunden wurde, prüfen.You can check if an EKCert is missing by opening the XML file in an editor such as Notepad and checking for an error message indicating no EKCert was found. Wenn dies der Fall ist und Sie sich darauf verlassen, dass das TPM auf dem Computer authentisch ist, können Sie den -Force-Parameter verwenden, um den Host Bezeichner zu HGS hinzuzufügen.If this is the case, and you trust that the TPM in your machine is authentic, you can use the -Force parameter to add the host identifier to HGS. In Windows Server 2019 müssen Sie auch den -PolicyVersion v1-Parameter verwenden, wenn Sie -Forceverwenden.In Windows Server 2019, you need to also use the -PolicyVersion v1 parameter when using -Force. Dadurch wird eine Richtlinie erstellt, die mit dem Verhalten von Windows Server 2016 konsistent ist, und Sie müssen beim Registrieren der CI-Richtlinie und der TPM-Baseline auch -PolicyVersion v1 verwenden.This creates a policy consistent with the Windows Server 2016 behavior and will require you to use -PolicyVersion v1 when registering the CI policy and the TPM baseline as well.

Erstellen und Anwenden einer Code IntegritätsrichtlinieCreate and apply a code integrity policy

Mit einer Code Integritätsrichtlinie kann sichergestellt werden, dass nur die ausführbaren Dateien, denen Sie Vertrauen, auf einem Host ausgeführt werden dürfen, ausgeführt werden dürfen.A code integrity policy helps ensure that only the executables you trust to run on a host are allowed to run. Schadsoftware und andere ausführbare Dateien außerhalb der vertrauenswürdigen ausführbaren Dateien können nicht ausgeführt werden.Malware and other executables outside the trusted executables are prevented from running.

Für jeden überwachten Host muss eine Code Integritätsrichtlinie angewendet werden, damit abgeschirmte VMS im TPM-Modus ausgeführt werden können.Each guarded host must have a code integrity policy applied in order to run shielded VMs in TPM mode. Sie geben die exakten Code Integritäts Richtlinien an, denen Sie Vertrauen, indem Sie Sie zu HGS hinzufügen.You specify the exact code integrity policies you trust by adding them to HGS. Code Integritäts Richtlinien können konfiguriert werden, um die Richtlinie zu erzwingen, jegliche Software zu blockieren, die die Richtlinie nicht einhält, oder einfach ein Ereignis zu überwachen (protokollieren, wenn Software, die nicht in der Richtlinie definiert ist).Code integrity policies can be configured to enforce the policy, blocking any software that does not comply with the policy, or simply audit (log an event when software not defined in the policy is executed).

Ab Windows Server, Version 1709, sind Beispielcode Integritäts Richtlinien in Windows unter c:\windows\schemas\codeintegrity\examplepoliciesenthalten.Starting with Windows Server version 1709, sample code integrity policies are included with Windows at C:\Windows\schemas\CodeIntegrity\ExamplePolicies. Für Windows Server werden zwei Richtlinien empfohlen:Two policies are recommended for Windows Server:

  • Allowmicrosoft: erlaubt alle Dateien, die von Microsoft signiert wurden.AllowMicrosoft: Allows all files signed by Microsoft. Diese Richtlinie wird für Server Anwendungen, z. b. SQL oder Exchange, empfohlen, oder wenn der Server von Agents überwacht wird, die von Microsoft veröffentlicht wurden.This policy is recommended for server applications such as SQL or Exchange, or if the server is monitored by agents published by Microsoft.
  • DefaultWindows_Enforced: erlaubt nur Dateien, die in Windows enthalten sind und keine anderen von Microsoft veröffentlichten Anwendungen, wie z. b. Office, zulässt.DefaultWindows_Enforced: Allows only files that shipped in Windows and doesn't permit other applications released by Microsoft, such as Office. Diese Richtlinie wird für Server empfohlen, auf denen nur integrierte Server Rollen und Features wie z. b. Hyper-V ausgeführt werden.This policy is recommended for servers that run only built-in server roles and features such as Hyper-V.

Es wird empfohlen, zuerst die CI-Richtlinie im Überwachungsmodus (Protokollierungs Modus) zu erstellen, um festzustellen, ob Sie etwas hat, und dann die Richtlinie für Host produktionsworkloads zu erzwingen.It is recommended that you first create the CI policy in audit (logging) mode to see if it's missing anything, then enforce the policy for host production workloads.

Wenn Sie das Cmdlet " New-cipolicy " verwenden, um eine eigene Code Integritätsrichtlinie zu generieren, müssen Sie die zu verwendenden Regel Ebenen festlegen.If you use the New-CIPolicy cmdlet to generate your own code integrity policy, you will need to decide the rule levels to use. Wir empfehlen eine primäre Ebene des Verlegers mit Fall Back auf Hash, sodass die meisten digital signierten Software aktualisiert werden kann, ohne die CI-Richtlinie zu ändern.We recommend a primary level of Publisher with fallback to Hash, which allows most digitally signed software to be updated without changing the CI policy. Neue Software, die vom selben Verleger geschrieben wird, kann auch auf dem Server installiert werden, ohne dass die CI-Richtlinie geändert wird.New software written by the same publisher can also be installed on the server without changing the CI policy. Ausführbare Dateien, die nicht digital signiert sind, werden Hashwerte aufweisen: bei Updates für diese Dateien müssen Sie eine neue CI-Richtlinie erstellen.Executables that are not digitally signed will be hashed -- updates to these files will require you to create a new CI policy. Weitere Informationen zu den verfügbaren CI-Richtlinien Regel Ebenen finden Sie unter Bereitstellen von Code Integritäts Richtlinien: Richtlinien Regeln und Datei Regeln und Cmdlet-Hilfe.For more information about the available CI policy rule levels, see Deploy code integrity policies: policy rules and file rules and cmdlet help.

  1. Generieren Sie auf dem Referenz Host eine neue Code Integritätsrichtlinie.On the reference host, generate a new code integrity policy. Die folgenden Befehle erstellen eine Richtlinie auf Verleger Ebene mit Fall Back auf Hash.The following commands create a policy at the Publisher level with fallback to Hash. Anschließend wird die XML-Datei in das Binärdatei Format konvertiert, und HGS müssen die CI-Richtlinie anwenden bzw. messen.It then converts the XML file to the binary file format Windows and HGS need to apply and measure the CI policy, respectively.

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

    Hinweis

    Der obige Befehl erstellt eine CI-Richtlinie nur im Überwachungsmodus.The above command creates a CI policy in audit mode only. Nicht autorisierte Binärdateien können nicht auf dem Host ausgeführt werden.It will not block unauthorized binaries from running on the host. Sie sollten nur erzwungene Richtlinien in der Produktionsumgebung verwenden.You should only use enforced policies in production.

  2. Behalten Sie die Datei mit der Code Integritätsrichtlinie (XML-Datei) bei, wo Sie Sie leicht finden können.Keep your Code Integrity policy file (XML file) where you can easily find it. Sie müssen diese Datei zu einem späteren Zeitpunkt bearbeiten, um die CI-Richtlinie zu erzwingen oder Änderungen von zukünftigen Updates, die im System vorgenommen wurden, zusammenzuführen.You will need to edit this file later to enforce the CI policy or merge in changes from future updates made to the system.

  3. Anwenden der CI-Richtlinie auf den Verweis Host:Apply the CI policy to your reference host:

    1. Führen Sie den folgenden Befehl aus, um den Computer zur Verwendung Ihrer CI-Richtlinie zu konfigurieren.Run the following command to configure the machine to use your CI policy. Sie können die CI-Richtlinie auch mit Gruppenrichtlinie oder System Center Virtual Machine Managerbereitstellen.You can also deploy the CI policy with Group Policy or System Center Virtual Machine Manager.

      Invoke-CimMethod -Namespace root/Microsoft/Windows/CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{ FilePath = "C:\temp\HW1CodeIntegrity.p7b" }
      
    2. Starten Sie den Host neu, um die Richtlinie anzuwenden.Restart the host to apply the policy.

  4. Testen Sie die Code Integritätsrichtlinie, indem Sie eine typische Arbeitsauslastung ausführen.Test the code integrity policy by running a typical workload. Hierzu zählen u. a. die Ausführung von VMS, fabricverwaltungs-Agents, Sicherungs-Agents oder Tools zur Problembehandlung auf dem Computer.This may include running VMs, any fabric management agents, backup agents, or troubleshooting tools on the machine. Überprüfen Sie, ob Code Integritäts Verletzungen vorliegen, und aktualisieren Sie ggf. die CI-Richtlinie.Check if there are any code integrity violations and update your CI policy if necessary.

  5. Ändern Sie die CI-Richtlinie in den erzwungenen Modus, indem Sie die folgenden Befehle für die aktualisierte CI-Richtlinien-XML-Datei ausführenChange your CI policy to enforced mode by running the following commands against your updated CI policy XML file.

    Set-RuleOption -FilePath 'C:\temp\HW1CodeIntegrity.xml' -Option 3 -Delete
    
    ConvertFrom-CIPolicy -XmlFilePath 'C:\temp\HW1CodeIntegrity.xml' -BinaryFilePath 'C:\temp\HW1CodeIntegrity_enforced.p7b'
    
  6. Wenden Sie die CI-Richtlinie auf alle Ihre Hosts (mit identischer Hardware-und Softwarekonfiguration) mithilfe der folgenden Befehle an:Apply the CI policy to all of your hosts (with identical hardware and software configuration) using the following commands:

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

    Hinweis

    Seien Sie vorsichtig, wenn Sie CI-Richtlinien auf Hosts anwenden und Software auf diesen Computern aktualisieren.Be careful when applying CI policies to hosts and when updating any software on these machines. Alle Kernelmodustreiber, die nicht mit der CI-Richtlinie kompatibel sind, können verhindern, dass der Computer gestartet wird.Any kernel mode drivers that are non-compliant with the CI Policy may prevent the machine from starting up.

  7. Stellen Sie die Binärdatei (in diesem Beispiel HW1CodeIntegrity_erzwungen. p7b) für den HGS-Administrator bereit.Provide the binary file (in this example, HW1CodeIntegrity_enforced.p7b) to the HGS administrator.

  8. Kopieren Sie in der HGS-Domäne die Code Integritätsrichtlinie auf einen HGS-Server, und führen Sie den folgenden Befehl aus.In the HGS domain, copy the code integrity policy to an HGS server and run the following command.

    Geben Sie für <PolicyName>einen Namen für die CI-Richtlinie ein, die den Hosttyp beschreibt, auf den Sie angewendet wird.For <PolicyName>, specify a name for the CI policy that describes the type of host it applies to. Eine bewährte Vorgehensweise besteht darin, den Namen nach dem Make/Model Ihres Computers und allen darauf laufenden speziellen Software Konfigurationen zu benennen.A best practice is to name it after the make/model of your machine and any special software configuration running on it.
    Geben Sie für <Path>den Pfad und den Dateinamen der Code Integritätsrichtlinie an.For <Path>, specify the path and filename of the code integrity policy.

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

Erfassen der TPM-Baseline für jede eindeutige Hardware KlasseCapture the TPM baseline for each unique class of hardware

Eine TPM-Baseline ist für jede eindeutige Hardware Klasse in Ihrer Rechenzentrums Struktur erforderlich.A TPM baseline is required for each unique class of hardware in your datacenter fabric. Verwenden Sie erneut einen "Verweis Host".Use a "reference host" again.

  1. Stellen Sie auf dem Referenz Host sicher, dass die Hyper-v-Rolle und die Hyper-v-Unterstützung des Host-Überwachungs Diensts installiert sind.On the reference host, make sure that the Hyper-V role and the Host Guardian Hyper-V Support feature are installed.

    Warnung

    Die Hyper-V-Unterstützung des Host-Überwachungs Diensts ermöglicht den virtualisierungsbasierten Schutz der Code Integrität, der möglicherweise mit einigen Geräten nicht kompatibel ist.The Host Guardian Hyper-V Support feature enables Virtualization-based protection of code integrity that may be incompatible with some devices. Wir empfehlen dringend, diese Konfiguration in Ihrem Lab zu testen, bevor Sie diese Funktion aktivieren.We strongly recommend testing this configuration in your lab before enabling this feature. Andernfalls kann es zu unerwarteten Fehlern und sogar zu Datenverlusten oder zu einem Bluescreen (STOP-Fehler) kommen.Failure to do so may result in unexpected failures up to and including data loss or a blue screen error (also called a stop error).

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. Führen Sie den folgenden Befehl in einer Windows PowerShell-Konsole mit erhöhten Rechten aus, um die Baseline-Richtlinie aufzuzeichnen.To capture the baseline policy, run the following command in an elevated Windows PowerShell console.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    Hinweis

    Sie müssen das Flag " -skipvalidation " verwenden, wenn auf dem Referenz Host kein sicherer Start aktiviert ist, ein IOMMU vorhanden ist, die virtualisierungsbasierte Sicherheit aktiviert ist und ausgeführt wird, oder eine Code Integritätsrichtlinie angewendet wird.You will need to use the -SkipValidation flag if the reference host does not have Secure Boot enabled, an IOMMU present, Virtualization Based Security enabled and running, or a code integrity policy applied. Diese Überprüfungen sind so konzipiert, dass Sie die Mindestanforderungen für das Ausführen einer abgeschirmten VM auf dem Host kennen.These validations are designed to make you aware of the minimum requirements of running a shielded VM on the host. Wenn Sie das Flag "-skipvalidation" verwenden, wird die Ausgabe des Cmdlets nicht geändert. die Fehler werden lediglich mit einem Fehler verursacht.Using the -SkipValidation flag does not change the output of the cmdlet; it merely silences the errors.

  3. Stellen Sie die TPM-Baseline (tcglog-Datei) für den HGS-Administrator bereit.Provide the TPM baseline (TCGlog file) to the HGS administrator.

  4. Kopieren Sie in der HGS-Domäne die Datei tcglog auf einen HGS-Server, und führen Sie den folgenden Befehl aus.In the HGS domain, copy the TCGlog file to an HGS server and run the following command. In der Regel benennen Sie die Richtlinie nach der Klasse der Hardware, die Sie repräsentiert (z. b. "Hersteller Modell Revision").Typically, you will name the policy after the class of hardware it represents (for example, "Manufacturer Model Revision").

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

Nächster SchrittNext step