Für welche Zwecke ein digitales Zertifikat verwendet werden darf, wird über die Zertifikaterweiterungen "Key Usage" und "Extended Key Usage" gesteuert. In der "Extended Key Usage" Zertifikaterweiterung werden die erweiterten Schlüsselverwendungen eingetragen, für welche das Zertifikat verwendet werden darf.
Es gibt jedoch bei von einer Microsoft Zertifizierungsstelle ausgestellten Zertifikaten noch eine weitere Zertifikaterweiterung namens "Anwendungsrichtlinien" (engl. "Application Policies"), die ebenfalls eine der Extended Key Usages Erweiterung sehr ähnliche Liste enthält.
Justin Bollinger von TrustedSec hat herausgefunden, dass es bei Offline-Zertifikatanforderungen gegen Zertifikatvorlagen der Schema-Version 1 möglich ist (ähnlich wie bei der Security Identifier Erweiterung), beliebige Application Policies im Zertifikatantrag mitzusenden, welche unverändert in das ausgestellte Zertifikat übernommen werden und anschließend für einen Angriff auf die Active Directory Gesamtstruktur verwendet werden können. Der Angriff wurde auf den Namen ESC15 getauft.
Wie funktioniert der Angriff?
Der Angriff funktioniert, indem ein Angreifer eine der Standard Version-1 Zertifikatvorlagen ausnutzt, sofern diese auf einer Zertifizierungsstelle veröffentlicht ist.
In den meisten Fällen wird dies die "Webserver"-Vorlage sein, da diese den berechtigten Antragstellern erlaubt, die Identität des ausgestellten Zertifikats im Zertifikatantrag mit zu übergeben (Option "Supply in the Request").
Ausgestellte Zertifikate würden sich jedoch nicht zur Rechteerhöhung eignen, da sie nur das Extended Key Usage (EKU) "Server Authentication" beinhalten, also nur eine Server-Identität abbilden können.
Hier kommt die Application Policies Zertifikaterweiterung ins Spiel. Hierbei handelt es sich um eine Microsoft-proprietäre Zertifikaterweiterung aus den Zeiten von Windows (Server) 2000. Sie ist inhaltlich der "Extended Key Usage" Erweiterung sehr ähnlich, und laut Microsoft war sie auch für vergleichbare Funktionen gedacht.
Application policy is Microsoft specific and is treated much like Extended Key Usage.
Der Angreifer kann seinem Zertifikatantrag eine entsprechende "Application Policies" Erweiterung hinzufügen, welche beispielsweise "Client Authentication" beinhaltet.
Das ausgestellte Zertifikat wird diese Erweiterung dann 1:1 übernehmen.
Noch spannender wird es, wie sich Anwendungen nun verhalten.
Wie Justin Bollinger herausgefunden hat, eignen sich solche Zertifikate einwandfrei zum Anmelden am Active Directory. Eine Rechteerhöhung bis zum Enterprise Administrator ist mit einem solchen Zertifikat somit möglich.
Darüber hinaus sind auch andere Microsoft-Bibliotheken anfällig. Beispielsweise könnte auch eine "Application Policy" für Codesignatur beantragt werden und entsprechend böswilliger Code signiert werden.
Ist es wirklich so einfach?
Meiner Meinung nach nicht wirklich, denn müssen viele Umstände müssen zusammenkommen, damit der Angriff funktioniert:
- Der Fehler besteht nur bei Version 1 Zertifikatvorlagen.
- Der Fehler besteht nur bei Offline-Zertifikatvorlagen, also solchen, bei welchen der Antragsteller die Identität des ausgestellten Zertifikats ohnehin frei wählen darf.
- Zum Ausnutzen des Fehlers benötigt der Angreifer Rechte, Zertifikate von der entsprechenden Zertifikatvorlage zu beantragen.
- Es gibt einfache Gegenmaßnahmen, welche nachfolgend beschrieben werden.
Es ist jedoch davon auszugehen, dass es noch viele generell schlecht abgesicherte Installationen der Active Direectory Certificate Services gibt.
Aktuell gibt es noch keinen Patch von Microsoft (ich gehe auch davon aus, dass so schnell keiner kommen wird).
Gegenmaßnahmen
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
Deaktivieren der Version 1 Standard-Zertifikatvorlagen
Folgende Zertifikatvorlagen sind anfällig für den Angriff:
- ExchangeUserSignature
- ExchangeUser
- CEPEncryption
- OfflineRouter
- IPSECIntermediateOffline
- SubCA
- CA
- WebServer
- EnrollmentAgentOffline
Werden diese von der Zertifizierungsstelle entfernt, ist auch kein Angriff gegen sie mehr möglich. Es ist generell sinnvoll, keine Version 1 Zertifikatvorlagen einzusetzen, sondern stets selbst definierte, welche von den mitgelieferten Version 2 und 3 Zertifikatvorlagen abstammen.
Der Entdecker der Lücke hat hierfür auch ein Script bereitgestellt, es geht jedoch noch einfacher:
"ExchangeUserSignature", "ExchangeUser", "CEPEncryption", "OfflineRouter", "IPSECIntermediateOffline", "SubCA", "CA", "WebServer", "EnrollmentAgentOffline" | % { if ( (Get-CATemplate).Name.Contains($_)) { Remove-CATemplate -Force }}
Die Veröffentlichung von Version 1 Zertifikatvorlagen direkt bei der Installation der Zertifizierungsstelle verhindern
Installiert man eine Microsoft Zertifizierungsstelle mit Standardeinstellungen, werden die Standard Zertifikatvorlagen automatisch auf der Zertifizierungsstelle veröffentlicht.
Dieses Verhalten kann jedoch mit Setzen der LoadDefaultTemplates Direktive zu "false" in einer Konfigurationdatei (capolicy.inf) unterbunden werden. Eine Minimale Variante einer solchen Datei könnte wie folgt aussehen:
[Version]
Signature="$Windows NT$"
[Certsrv_Server]
LoadDefaultTemplates=0
Die Datei muss im Verzeichnis C:\Windows mit ANSI / Windows-1252 (Latin-1, Westeuropäisch) Kodierung abgespeichert werden, bevor die Zertifizierungsstellen-Rolle konfiguriert wird.
Die von mir verwendeten und auf GitHub veröffentlichten Installations-Scripts für Microsoft-Zertifizierungsstellen berücksichtigen dies entsprechend.
Entfernen der "Application Policies" Zertifikaterweiterung aus ausgestellten Zertifikaten
In der Standardeinstellung ist das Windows Default Policy Modul der Zertifizierungsstelle dafür verantwortlich, dass diese Zertifikaterweiterung in ausgestellte Zertifikate geschrieben wird.
Die "Application Policies" Zertifikaterweiterung kann mit folgendem Kommandozeilenbefehl auf der Zertifizierungsstelle deaktiviert werden.
certutil -setreg policy\DisableExtensionList +1.3.6.1.4.1.311.21.10
Der Zertifizierungsstellen-Dienst muss anschließend neu gestartet werden, damit die Änderungen wirksam werden.
Ab diesem Moment ausgestellte Zertifikate enthalten nur noch die "Extended Key Usage" Erweiterung, aber nicht mehr die "Application Policies" Erweiterung.
Die von mir verwendeten und auf GitHub veröffentlichten Installations-Scripts für Microsoft-Zertifizierungsstellen berücksichtigen dies entsprechend.
Sonstiges
Ausprobieren mit PSCertificateEnrollment
Ich habe das PSCertifiateEnrollment PowerShell-Modul um die Application Policies Erweiterung ergänzt, sodass das Szenario einfach nachgestellt werden kann.
Import-Module PSCertificateEnrollment
$Csr = New-CertificateRequest -Upn "Administrator@domain.tld" -ApplicationPolicy ClientAuthentication
$Csr | Get-IssuedCertificate -ConfigString "CA-Name\Hostname" -CertificateTemplate "WebServer"
Hilft hier ein Policy Modul?
Ja und nein.
Der Fehler liegt im Windows Default Policy Modul, welches zum Lieferumfang der Active Directory Certificate Services gehört. Es wäre auch sehr einfach, einen Schutz in das TameMyCerts Policy Modul zu integrieren.
Jedoch reichen meiner Ansicht nach die mit Bordmitteln zur Verfügung stehenden Gegenmaßnahmen vollkommen aus, um den Angriff unwirksam zu machen. Schlecht konfigurierte und schlecht abgesicherte Zertifizierungsstellen kann auch ein Patch nicht retten.
Sinnvoll ist es aber auf alle Fälle, bei Offline Zertifikatvorlagen grundsätzlich die verwendbaren Zertifikat-Felder sowie Format und Umfang der beantragbaren Identitäten möglichst stark einzuschränken. Dies kann mit dem TameMyCerts Policy Modul für die Microsoft Active Directory Services mit Leichtigkeit umgesetzt werden.
Weiterführende Links:
- Wie das TameMyCerts Policy Modul für Active Directory Certificate Services (ADCS) Angriffe gegen den ESC1 Angriffsvektor verhindern kann
- Grundlagen: Konfigurationsdatei für die Zertifizierungsstelle (capolicy.inf)
- Die "Application Policies" Zertifikaterweiterung
- Beschreibung der Generationen von Zertifikatvorlagen
- Häufig verwendete erweiterte Schlüsselverwendungen (Extended Key Usages) und Ausstellungsrichtlinien (Issuance Policies)
- Änderungen an der Zertifikatausstellung und an der zertifikatbasierten Anmeldung am Active Directory mit dem Patch für Windows Server vom 10. Mai 2022 (KB5014754)
Externe Quellen
- EKUwu: Not just another AD CS ESC (Justin Bollinger / TrustedSec)
- Understanding ESC15: A New Privilege Escalation Vulnerability in Active Directory Certificate Services (ADCS) (Forestall)