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 Microsoft Active Directory Certificate Services 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.
TameMyCerts ist Open Source und kann kostenfrei verwendet werden. Für den Einsatz im Unternehmensbereich empfiehlt sich jedoch der Abschluss eines Wartungsvertrags. Dies stellt sicher, dass Sie qualifizierte Unterstützung erhalten und dass das Modul langfristig in hoher Qualität weiterentwickelt werden kann.
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.
2 Gedanken zu „Beantragen eines durch ein Trusted Platform Modul (TPM) geschütztes Zertifikat – ohne ein TPM zu besitzen“
Kommentare sind geschlossen.