Konfigurieren der Trusted Platform Module (TPM) Key Attestation

Seit Windows 8 ist es möglich, dass private Schlüssel für Zertifikate mit einem – sofern vorhanden – Trusted Platform Modul (TPM) geschützt werden. Dadurch ist eine Nichtexportierbarkeit des Schlüssels – auch mit Werkzeugen wie mimikatz – gegeben.

Auf den Ersten Blick ist allerdings nicht ersichtlich, dass nicht garantiert werden kann, dass auch wirklich ein TPM zum Einsatz kommt. Zwar wird keine Beantragung über die Microsoft Management Console oder AutoEnrollment möglich sein, wenn der Computer über kein TPM verfügt.

Es handelt sich jedoch bei der Konfiguration in der Zertifikatvorlage lediglich um eine Voreinstellung für den Client. Die Zertifizierungsstelle wird bei Beantragung nicht explizit prüfen, ob auch wirklich ein Trusted Platform Modul verwendet wurde.

Um sicherzustellen, dass der private Schlüssel einer Zertifikatanforderung wirklich mit einem Trusted Platform Modul geschützt wurde verbleibt also nur die TPM Key Attestation.

Funktionsweise

Bei der TPM Key Attestation überprüft die Zertifizierungsstelle, ob die Zertifikatanforderung mit dem Endorsement Key des Trusted Platform Moduls signiert wurde. Dies kann auf zwei Weisen erreicht werden:

  • EKPUB: Bei dieser Variante wird explizit den einzelnen Endorsement Keys der TPM der einzelnen Maschinen vertraut. Diese werden auf der Zertifizierungsstelle explizit hinterlegt.
  • EKCERT: Bei dieser Variante wird den Hersteller-Zertifizierungsstellen der TPMs der einzelnen Maschinen vertraut. Die TPMs werden anhand des Endorsement Zertifikats identifiziert. Die Hersteller-Zertifikate werden auf den Zertifizierungsstellen in einem speziellen Vertrauenssspeicher abgelegt.

Die dritte Option, User Credentials, bei welcher der Benutzer anhand seiner Anmeldedaten bestätigt, dass die Zertifikatanforderung mit einem TPM geschützt wurde, ist natürlich nicht wirklich sicher und wird hier daher nicht weiter behandelt.

Einrichtung der EKPUB Methode auf der Zertifizierungsstelle

Diese Methode hat den Nachteil, dass sie nicht gut skaliert. Ohne eine Managementlösung wird es praktisch unmöglich sein, (auf einem sicheren Weg!) alle Endorsement Keys zu ermitteln.

Die EKPUB Methode ist die strikteste und wird darum auch als "High Assurance Level" angesehen.

Endorsement Keys exportieren und hinterlegen

Auf der Zertifizierungsstelle wird ein Verzeichnis erzeugt, in welchem die Prüfsummen der Endorsement Keys als Datei abgespeichert werden. Mit folgendem Befehl wird das Verzeichnis anschließend in die Konfiguration der Zertifizierungsstelle aufgenommen.

certutil.exe -setreg CA\EndorsementKeyListDirectories +"<Verzeichnisname>"

Mit nachfolgendem Windows PowerShell-Befehl kann der Endorsement Key Hash eines Trusted Platform Moduls identifiziert und in eine kompatible Datei geschrieben werden.

New-Item `
-Path (Get-TpmEndorsementKeyInfo -HashAlgorithm SHA256).PublicKeyHash `
–ItemType File

Diese Dateien müssen nun für jeden Clientcomputer im zuvor auf der Zertifizierungsstelle konfigurierten Verzeichnis abgespeichert werden.

Einrichtung der EKCERT Methode auf der Zertifizierungsstelle

Die EKCERT Methode wird als "Medium Assurance Level" angesehen. Sie hat den Vorteil, dass nicht jeder einzelne Endorsement Key ermittelt werden muss. Stattdessen wird den Hersteller-Zertifizierungsstellen vertraut, welche (hoffentlich) ein Endorsementzertifikat für das jeweilige Trusted Platform Modul signiert haben.

Zertifikatspeicher auf der Zertifizierungsstelle erzeugen

Zunächst müssen auf der Zertifizierungsstelle zwei neue Zertifikatspeicher angelegt werden:

  • Endorsement Key Trusted Root Certification Authorities
  • Endorsement Key Intermediate Certification Authorities

Dies kann mit folgendem Windows PowerShell Befehlen erfolgen:

cd Cert:\LocalMachine
New-Item EKROOT
New-Item EKCA

Anschließend sollten diese Zertifikatspeicher in der Microsoft Management Console (MMC) für Zertifikate des Computerkontos (certlm.msc) auftauchen.

Zertifizierungsstellenzertifikate ermitteln

Microsoft bietet für den Host Guardian Service (HGS) eine Kabinettdatei an, welche die Hersteller-Zertifizierungsstellen für die gängigsten Trusted Platform Module beinhaltet. Diese kann auch für die TPM Key Attestation verwendet werden.

Die aktuellste Version der Liste kann von diesem Link heruntergeladen werden. Da es sehr komplex ist, alle Herstellerzertifikate zu pflegen, bietet sich dies als eine sinnvolle Ausgangsbasis an.

Möchte man diese Option nicht verwenden, oder ist das Herstellerzertifikat eines Computers nicht enthalten, kann es auch manuell aus dem TPM eines Computers extrahiert werden. Die Ermittlung eines Hersteller-Zertifikats aus einem Trusted Platform Modul ist im Artikel "Ermitteln und Exportieren eines Trusted Platform Module (TPM) Endorsement Zertifikats" beschrieben.

Leider verfügt nicht jedes TPM über ein Endorsementzertifikat, sodass auch der Fall eintreten kann, dass für bestimmte Computermodelle die EKCERT Methode nicht verwendet werden kann.

Zertifizierungsstellenzertifikate importieren

Zunächst sollte die Codesigatur der Kaninettdatei überprüft werden.

Get-AuthenticodeSignature .\TrustedTpm.cab

Anschließend kann die Kabinettdatei entpackt werden:

mkdir .\TrustedTPM
expand.exe -F:* TrustedTpm.cab .\TrustedTPM

Der Ordner enthält die Zertifikate und praktischerweise auch ein Installations-Script. Da dieses jedoch für den Host Guardian Service gedacht ist, muss es bearbeitet werden, um für eine Zertifizierungsstelle verwendet werden zu können.

Die Variablen $intermediateStore und $rootStore werden wie folgt angepasst:

$intermediateStore = "Cert:\LocalMachine\EKCA"
$rootStore = "Cert:\LocalMachine\EKROOT"

Die Datei ist digital signiert. Durch das Verändern der Datei wird die Signatur ungültig, was wir in diesem Fall in Kauf nehmen müssen.

Nun können die Zertifikate mit dem Script importiert werden.

.\setup.ps1

Die beiden Vertrauensspeicher sollten nun befüllt sein.

Funktionstest

Ob eine Zertifizierungsstelle einem bestimmten Endorsementzertifikat für die TPM Key Attestation vertraut, kann mit folgendem PowerShell-Befehl überprüft werden:

New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 "<Pfad-zum-Zertifikat>"| Confirm-CAEndorsementKeyInfo

Für den Export eines Endorsement Zertifikats siehe Artikel "Ermitteln und Exportieren eines Trusted Platform Module (TPM) Endorsement Zertifikats".

Zertifikatvorlage konfigurieren

Um TPM-geschützte Zertifikate ausstellen zu können, muss zunächst eine Zertifikatvorlage konfiguriert werden, welche den Microsoft Platform Crypto Provider verwendet. Dieser Vorgang ist im Artikel "Konfigurieren einer Zertifikatvorlage für die Verwendung des Microsoft Platform Crypto Provider, um Schutz des privaten Schlüssels durch ein Trusted Platform Module (TPM) zu ermöglichen" beschrieben.

Anschließend kann die Attestierung in der Karteikarte "Key Attestation" konfiguriert werden. Hierbei gibt es folgende Möglichkeiten:

Key AttestationBeschreibung
NoneDie Zertifikatanforderung wird nicht auf Attestierung überprüft. Das Zertifikat wird ausgestellt, auch wenn die Attestierung nicht erfolgreich war.
Required, if client is capableDie Zertifikatanforderung wird nur dann auf Attestierung überprüft, wenn der Client diese unterstützt. Das Zertifikat wird ausgestellt, auch wenn die Attestierung nicht erfolgreich war.
RequiredDie Zertifikatanforderung wird auf jeden Fall auf Attestierung überprüft und die Anforderung abgelegt, wenn diese nicht erfolgreich war.
Perform Attestation based onBeschreibung
User CredentialsDer Benutzer bestätigt, dass der private Schlüssel mit einem TPM geschützt ist, was natürlich nicht wirklich sicher ist.
Hardware certificateEntspricht der EKCERT Methode.
Hardware KeyEntspricht der EKPUB Methode.

Die Attestierungsmethoden können durch Mehrfachauswahl auch miteinander kombiniert werden. Somit können beispielsweise Clients, die über kein Endorsementzertifikat verfügen via EKPUB geprüft werden und alle anderen via EKCERT. Die "User credentials" Methode ist natürlich nicht wirklich sicher und sollte daher nicht verwendet werden.

Zertifikatrichtlinien in ausgestellten Zertifikaten inkludieren

Darüber hinaus kann angegeben werden, dass die Zertifizierungsstelle eine Ausstellungsrichtlinie (Issuance policy) in ein ausgestelltes Zertifikat schreibt, um die Art der Attestierung zu bestätigen.

OIDBedeutung
1.3.6.1.4.1.311.21.32TPM Key Attestattion: User Credentials: (Low Assurance)
1.3.6.1.4.1.311.21.31TPM Key Attestattion: Endorsement Certificate: (Medium Assurance)
1.3.6.1.4.1.311.21.30TPM Key Attestattion: Endorsement Key: (High Assurance)

Aus der Kombination dieser Optionen kann beispielsweise festgelegt werden, dass jeder Antragsteller zwar ein Zertifikat bekommt, aber nur solche, bei denen nachgewiesen werden kann, dass deren private Schlüssel mit einem TPM geschützt sind (was über die Ausstellungsrichtlinie im Zertifikat nachgewiesen werden kann), auch Zugang zu bestimmten Ressourcen gewährt wird.

Damit diese Richtlinien jedoch in ausgestellte Zertifikate geschrieben werden können, muss das Zertifizierungsstellen-Zertifikat auch entsprechend konfiguriert sein. Siehe hierzu die Artikel "Die Ausstellungsrichtlinien (Issuance Policies) für Trusted Platform (TPM) Key Attestation in ein Zertifizierungsstellen-Zertifikat aufnehmen" oder "Die Wildcard Ausstellungsrichtlinie (All Issuance Policies) in ein Zertifizierungsstellen-Zertifikat aufnehmen"

Fehlersuche

Fehlgeschlagene TPM-Attestierungen sind üblicherweise über die Ereignisse mit den Nummern 22 und 53 auf der Zertifizierungsstelle identifizierbar.

Weiterführende Links:

Externe Quellen