Autorisieren von überwachten Hosts mithilfe eines TPM-basierten Nachweises

Gilt für: Windows Server 2022, Windows Server 2019, Windows Server 2016

Der TPM-Modus verwendet einen TPM-Bezeichner (auch als Plattformbezeichner oder Endorsement Key [EKpub] bezeichnet), um zu ermitteln, ob ein bestimmter Host als "geschützt" autorisiert ist. Dieser Nachweismodus verwendet Messungen des sicheren Starts und der Codeintegrität, um sicherzustellen, dass sich ein angegebener Hyper-V-Host in einem fehlerfreien Zustand befindet und nur vertrauenswürdigen Code ausgeführt. Damit der Nachweis verstehen kann, was fehlerfrei ist und nicht, müssen Sie die folgenden Artefakte erfassen:

  1. TPM-Bezeichner (EKpub)

    • Diese Informationen sind für jeden Hyper-V-Host eindeutig.
  2. TPM-Baseline (Startmessungen)

    • Dies gilt für alle Hyper-V-Hosts, die auf derselben Hardwareklasse ausgeführt werden.
  3. Codeintegritätsrichtlinie (eine Allowlist zulässiger Binärdateien)

    • Dies gilt für alle Hyper-V-Hosts, die gemeinsame Hardware und Software gemeinsam nutzen.

Es wird empfohlen, die Baseline- und CI-Richtlinie von einem "Referenzhost" zu erfassen, der für jede eindeutige Klasse der Hyper-V-Hardwarekonfiguration in Ihrem Rechenzentrum repräsentativ ist. Ab version 1709 von Windows Server sind ci-Beispielrichtlinien unter C:\Windows\schemas\CodeIntegrity\ExamplePolicies enthalten.

Richtlinien für den Nachweis mit Versionsversion

Windows Server 2019 führt eine neue Nachweismethode namens v2-Nachweis ein, bei der ein TPM-Zertifikat vorhanden sein muss, um ekpub dem HGS hinzuzufügen. Mit der in Windows Server 2016 verwendeten v1-Nachweismethode konnten Sie diese Sicherheitsüberprüfung überschreiben, indem Sie das Flag -Force angeben, wenn Sie Add-HgsAttestationTpmHost oder andere TPM-Nachweis-Cmdlets ausführen, um die Artefakte zu erfassen. Ab Windows Server 2019 wird standardmäßig der v2-Nachweis verwendet, und Sie müssen das Flag -PolicyVersion v1 angeben, wenn Sie Add-HgsAttestationTpmHost ausführen, wenn Sie ein TPM ohne Zertifikat registrieren müssen. Das Flag -Force funktioniert nicht mit v2-Nachweis.

Ein Host kann nur bestätigen, wenn alle Artefakte (EKPub + TPM-Baseline + CI-Richtlinie) dieselbe Version des Nachweises verwenden. Der V2-Nachweis wird zuerst versucht. Wenn dies fehlschlägt, wird der v1-Nachweis verwendet. Wenn Sie also einen TPM-Bezeichner mit 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. Wenn die TPM-Baseline und die CI-Richtlinie mit dem v2-Nachweis erstellt wurden und Sie später einen geschützten Host ohne TPM-Zertifikat hinzufügen müssen, müssen Sie jedes Artefakt mit dem Flag -PolicyVersion v1 neu erstellen.

Erfassen des TPM-Bezeichners (Plattformbezeichner oder EKpub) für jeden Host

  1. Stellen Sie in der Fabricdomäne sicher, dass das TPM auf jedem Host einsatzbereit ist. Das heißt, das TPM wird initialisiert und der Besitz erworben. Sie können den Status des TPM überprüfen, indem Sie die TPM-Verwaltungskonsole (tpm.msc) öffnen oder Get-Tpm in einem Fenster mit erhöhten Windows PowerShell ausführen. Wenn Sich Ihr TPM nicht im Status Bereit befindet, müssen Sie es initialisieren und den Besitz festlegen. Dies kann in der TPM-Verwaltungskonsole oder durch Ausführen von Initialize-Tpm erfolgen.

  2. Führen Sie auf jedem geschützten Host den folgenden Befehl in einer Konsole mit Windows PowerShell, um den EKpub zu erhalten. Ersetzen <HostName>Sie für den eindeutigen Hostnamen durch etwas, das zur Identifizierung dieses Hosts geeignet ist. Dies kann sein Hostname oder der Name sein, der von einem Fabric-Inventurdienst verwendet wird (falls verfügbar). Benennen Sie der Einfachheit halber die Ausgabedatei mit dem Hostnamen.

    (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 sicheren Host wird, und geben Sie jeder XML-Datei einen eindeutigen Namen.

  4. Stellen Sie die resultierenden XML-Dateien für den HGS-Administrator zur Verfügung.

  5. Öffnen Sie in der HGS-Domäne eine Konsole mit Windows PowerShell auf einem HGS-Server, und führen Sie den folgenden Befehl aus. Wiederholen Sie den Befehl für jede der XML-Dateien.

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

    Hinweis

    Wenn beim Hinzufügen eines TPM-Bezeichners zu einem nicht vertrauenswürdigen Endorsement Key Certificate (EKCert) ein Fehler auftritt, stellen Sie sicher, dass die vertrauenswürdigen TPM-Stammzertifikate dem HGS-Knoten hinzugefügt wurden. Darüber hinaus verwenden einige TPM-Anbieter keine EKCerts. Sie können überprüfen, ob ein EKCert fehlt, indem Sie die XML-Datei in einem Editor wie Editor öffnen und nach einer Fehlermeldung überprüfen, die angibt, dass kein EKCert gefunden wurde. Wenn dies der Fall ist und Sie davon vertrauen, dass das TPM auf Ihrem Computer authentifiziert ist, -Force können Sie den -Parameter verwenden, um den Hostbezeichner dem HGS hinzuzufügen. In Windows Server 2019 müssen Sie auch den --PolicyVersion v1Parameter verwenden, wenn Sie verwenden-Force. Dadurch wird eine Richtlinie erstellt, die mit dem verhaltenden Windows Server 2016 konsistent -PolicyVersion v1 ist. Sie müssen sie auch beim Registrieren der CI-Richtlinie und der TPM-Baseline verwenden.

Erstellen und Anwenden einer Codeintegritätsrichtlinie

Eine Codeintegritätsrichtlinie hilft sicherzustellen, dass nur die ausführbaren Dateien, denen Sie vertrauen, auf einem Host ausgeführt werden dürfen. Schadsoftware und andere ausführbare Dateien, die nicht als vertrauenswürdig gelten, können nicht ausgeführt werden.

Auf jeden geschützten Host muss eine Codeintegritätsrichtlinie angewendet werden, um abgeschirmte VMs im TPM-Modus ausführen zu können. Sie geben die genauen Codeintegritätsrichtlinien an, die Sie vertrauen, indem Sie sie dem HGS hinzufügen. Codeintegritätsrichtlinien können so konfiguriert werden, dass sie die Richtlinie erzwingen, Software blockieren, die nicht der Richtlinie entsprechen, oder einfach überwachen (ein Ereignis protokollieren, wenn in der Richtlinie nicht definierte Software ausgeführt wird).

Ab Windows Server Version 1709 sind Beispielcodeintegritätsrichtlinien in Windows unter C:\Windows\schemas\CodeIntegrity\ExamplePolicies enthalten. Es werden zwei Richtlinien für Windows Server empfohlen:

  • AllowMicrosoft: Lässt alle von Microsoft signierten Dateien zu. Diese Richtlinie wird für Serveranwendungen wie SQL oder Exchange oder , wenn der Server von agents überwacht wird, die von Microsoft veröffentlicht wurden.
  • DefaultWindows_Enforced: Lässt nur Dateien zu, die in Windows enthalten sind, und lässt keine anderen von Microsoft veröffentlichten Anwendungen zu, z. B. Office. Diese Richtlinie wird für Server empfohlen, auf denen nur integrierte Serverrollen und -features wie Hyper-V ausgeführt werden.

Es wird empfohlen, zuerst die CI-Richtlinie im Überwachungsmodus (Protokollierung) zu erstellen, um zu prüfen, ob etwas fehlt, und dann die Richtlinie für Hostproduktionsworkloads zu erzwingen.

Wenn Sie das Cmdlet New-CIPolicy verwenden, um Ihre eigene Codeintegritätsrichtlinie zu generieren, müssen Sie die zu verwendenden Regelebenen festlegen. Es wird empfohlen, eine primäre Ebene Publisher Fallback auf Hash zu verwenden, wodurch die meisten digital signierten Software aktualisiert werden können, ohne die CI-Richtlinie zu ändern. Neue Software, die vom gleichen Herausgeber geschrieben wurde, kann auch auf dem Server installiert werden, ohne die CI-Richtlinie zu ändern. Ausführbare Dateien, die nicht digital signiert sind, werden gehasht. Für Updates dieser Dateien müssen Sie eine neue CI-Richtlinie erstellen. Weitere Informationen zu den verfügbaren CI-Richtlinienregelebenen finden Sie unter Bereitstellen von Codeintegritätsrichtlinien: Richtlinienregeln und Dateiregeln und Cmdlet-Hilfe.

  1. Generieren Sie auf dem Referenzhost eine neue Codeintegritätsrichtlinie. Mit den folgenden Befehlen wird eine Richtlinie auf Publisher-Ebene mit Fallback auf Hash erstellt. Anschließend wird die XML-Datei in das Binärdateiformat konvertiert, Windows und HGS die CI-Richtlinie anwenden und messen müssen.

    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. Die Ausführung nicht autorisierter Binärdateien auf dem Host wird nicht blockiert. Sie sollten erzwungene Richtlinien nur in der Produktion verwenden.

  2. Behalten Sie die Richtliniendatei für die Codeintegrität (XML-Datei) bei, in der Sie sie leicht finden können. Sie müssen diese Datei später bearbeiten, um die CI-Richtlinie zu erzwingen oder Änderungen aus zukünftigen Systemupdates zusammenführungen zu können.

  3. Wenden Sie die CI-Richtlinie auf Ihren Referenzhost an:

    1. Führen Sie den folgenden Befehl aus, um den Computer für die Verwendung Ihrer CI-Richtlinie zu konfigurieren. Sie können die CI-Richtlinie auch mit Gruppenrichtlinie oder 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.

  4. Testen Sie die Codeintegritätsrichtlinie, indem Sie eine typische Workload ausführen. Dies kann die Ausführung von VMs, Fabric-Verwaltungs-Agents, Sicherungs-Agents oder Problembehandlungstools auf dem Computer umfassen. Überprüfen Sie, ob Verstöße gegen die Codeintegrität bestehen, und aktualisieren Sie bei Bedarf Ihre CI-Richtlinie.

  5. Ändern Sie Ihre CI-Richtlinie in den erzwungenen Modus, indem Sie die folgenden Befehle für Ihre aktualisierte CI-Richtlinien-XML-Datei ausführen.

    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 mit den folgenden Befehlen auf alle Hosts (mit identischer Hardware- und Softwarekonfiguration) an:

    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. Alle Kernelmodustreiber, die nicht mit der CI-Richtlinie kompatibel sind, können das Starten des Computers verhindern.

  7. Geben Sie die Binärdatei (in diesem Beispiel HW1CodeIntegrity_enforced.p7b) für den HGS-Administrator an.

  8. Kopieren Sie in der HGS-Domäne die Codeintegritätsrichtlinie auf einen HGS-Server, und führen Sie den folgenden Befehl aus.

    Geben <PolicyName>Sie für einen Namen für die CI-Richtlinie an, der den Typ des Hosts beschreibt, auf den er angewendet wird. Eine bewährte Methode besteht im Benennen nach dem Make/Model Ihres Computers und nach jeder speziellen Softwarekonfiguration, die darauf ausgeführt wird.
    Geben <Path>Sie für den Pfad und den Dateinamen der Codeintegritätsrichtlinie an.

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

    Hinweis

    Wenn Sie eine Richtlinie für die Integrität signierten Codes verwenden, registrieren Sie eine nicht signierte Kopie derselben Richtlinie beim HGS. Die Signatur für Codeintegritätsrichtlinien wird verwendet, um Aktualisierungen der Richtlinie zu steuern, wird jedoch nicht im Host-TPM gemessen und kann daher nicht vom HGS bestätigt werden.

    Hinweis

    Wenn Sie eine Richtlinie für die Integrität signierten Codes verwenden, registrieren Sie eine nicht signierte Kopie derselben Richtlinie beim HGS. Die Signatur für Codeintegritätsrichtlinien wird verwendet, um Aktualisierungen der Richtlinie zu steuern, wird jedoch nicht im Host-TPM gemessen und kann daher nicht vom HGS bestätigt werden.

Erfassen der TPM-Baseline für jede eindeutige Hardwareklasse

Für jede eindeutige Hardwareklasse in Ihrem Rechenzentrumsf fabric ist eine TPM-Baseline erforderlich. Verwenden Sie erneut einen "Verweishost".

  1. Überprüfen Sie auf dem Referenzhost, ob die Rolle Hyper-V und das Feature Hyper-V-Unterstützung für die Host-Überwachung installiert sind.

    Warnung

    Das Hyper-V-Supportfeature des Host-Wächters ermöglicht den virtualisierungsbasierten Schutz der Codeintegrität, die mit einigen Geräten möglicherweise nicht kompatibel ist. Es wird dringend empfohlen, diese Konfiguration in Ihrem Lab zu testen, bevor Sie dieses Feature aktivieren. Andernfalls kann es zu unerwarteten Fehlern und sogar zu Datenverlusten oder zu einem Bluescreen (STOP-Fehler) kommen.

    Install-WindowsFeature Hyper-V, HostGuardian -IncludeManagementTools -Restart
    
  2. Um die Baselinerichtlinie zu erfassen, führen Sie den folgenden Befehl in einer Konsole mit erhöhten Windows PowerShell aus.

    Get-HgsAttestationBaselinePolicy -Path 'HWConfig1.tcglog'
    

    Hinweis

    Sie müssen das Flag -SkipValidation verwenden, wenn für den Referenzhost kein sicherer Start aktiviert ist, eine IOMMU vorhanden ist, die virtualisierungsbasierte Sicherheit aktiviert und ausgeführt wird oder eine Codeintegritätsrichtlinie angewendet wird. Diese Überprüfungen sollen Sie auf die Mindestanforderungen für die Ausführung einer abgeschirmten VM auf dem Host aufmerksam machen. Die Verwendung des Flags -SkipValidation ändert die Ausgabe des Cmdlets nicht. es werden lediglich die Fehler still gemacht.

  3. Geben Sie dem HGS-Administrator die TPM-Baseline (TCGlog-Datei) an.

  4. Kopieren Sie in der Domäne HGS die TCGlog-Datei auf einen HGS-Server, und führen Sie den folgenden Befehl aus. In der Regel benennen Sie die Richtlinie nach der Klasse der Hardware, die sie darstellt (z. B. "Manufacturer Model Revision").

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

Nächster Schritt