Beantragen eines durch ein Trusted Platform Modul (TPM) geschütztes Zertifikat – ohne ein TPM zu besitzen

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.

Somit können – wenn die Zertifikatbeantragung abseits der MMC erfolgt, beliebige Parameter für den privaten Schlüssel verwendet werden.

Zur Demonstration kann beispielsweise das PSCertificateEnrollment PowerShell Modul verwendet werden. Wir verwenden den Microsoft Software Key Storage Provider zur Erzeugung des Schlüsselpaars und markieren den privaten Schlüssel als exportierbar.

New-CertificateRequest `
-Exportable `
-Upn "rudi@intra.adcslabor.de" `
-Ksp "Microsoft Software Key Storage Provider"

Zur Sicherheit kann man noch einen Blick in die generierte Zertifikatanforderung werfen. Dort gibt es ein Attribut "Enrollment CSP", welches den verwendeten Key Storage Provider beinhaltet.

certutil noTPM.req

Die Zertifikatanforderung wird anschließend an die Zertifizierungsstelle übermittelt. Wir geben den Servernamen der Zertifizierungsstelle sowie den Namen der zu verwendenden Zertifikatvorlage mit an.

certreq ^
-config "CA02.intra.adcslabor.de\ADCS Labor Issuing CA 1" ^
-attrib "CertificateTemplate:ADCSLaborUserTPM" ^
-submit noTPM.req

Die Zertifizierungsstelle wird das Zertifikat im Regelfall nun ausstellen. An dieser Stelle ist bereits der Beweis erbracht, dass keine Prüfung des verwendeten CSP/KSP durch die Zertifzizierungsstelle stattfindet.

Das Zertifikat kann nun lokal installiert werden.

certreq -accept noTPM.cer

Wir werden imstande sein, den privaten Schlüssel zu exportieren.

Gegenmaßnahmen

Das TameMyCerts Policy Modul für die Microsoft Zertifizierungsstelle erlaubt die Einschränkung der Zertifikatanträge auf bestimmte Prozessnamen und kryptographische Anbieter. Die zur Entscheidungsfindung ausgewerteten Attribute wären allerdings mit entsprechendem Aufwand durch den Antragsteller manipulierbar, daher kann hier von keinem vollumfänglichen Schutz gesprochen werden.

Möchte man sicherstellen, dass private Schlüssel wirklich durch ein Trusted Platform Modul gesichert werden, muss die (deutlich komplexere) TPM Key Attestation eingesetzt werden.

Weiterführende Links: