
PowerShell-Toolkit für AD CS-Auditing basierend auf dem PSPKI-Toolkit.
PowerShell-Toolkit zur Überwachung von Active Directory Certificate Services (AD CS).
Es basiert auf dem PKISolution PSPKI-Toolkit (Microsoft Public License). Dieses Repository enthält eine neuere Version von PSPKI als die in der PSGallery verfügbare (siehe das PSPKI-Verzeichnis). Vadims Podans (der Schöpfer von PSPKI) hat diese Version freundlicherweise zur Verfügung gestellt, da sie Patches für mehrere Fehler enthält.
Dieses README dient nur als Ausgangspunkt – vollständige Details und Abwehrhinweise finden Sie im Whitepaper "Certified Pre-Owned".
Das Modul enthält die folgenden Hauptfunktionen:
WARNUNG: Dieser Code ist Beta! Wir sind zuversichtlich, dass Invoke-PKIAudit die Umgebung nicht beeinträchtigt, da die abgefragte Datenmenge recht begrenzt ist. Wir haben keine gründlichen Tests mit Get-CertRequest gegenüber typischen CA-Server-Workloads durchgeführt. Get-CertRequest fragt die CA-Datenbank direkt ab und muss möglicherweise Tausende von Ergebnissen verarbeiten, was die Leistung beeinträchtigen könnte.
WENN ES KEINE ERGEBNISSE GIBT, IST DIES KEINE GARANTIE, DASS IHRE UMGEBUNG SICHER IST!!
WIR KÖNNEN AUCH NICHT GARANTIEREN, DASS UNSERE ENTSCHÄRFUNGSEMPFEHLUNGEN IHRE UMGEBUNG SICHER MACHEN ODER DEN BETRIEB NICHT BEHINDERN!
Es liegt in Ihrer Verantwortung, mit Ihrem Active Directory/PKI/Architektur-Team zu sprechen, um die besten Gegenmaßnahmen für Ihre Umgebung zu ermitteln.
Wenn der Code kaputt geht oder wir etwas übersehen haben, reichen Sie bitte ein Issue oder einen Pull-Request für eine Korrektur ein!
Installieren Sie die folgenden Komponenten auf einem Windows-Computer mit einer erhöhten PowerShell-Eingabeaufforderung (PowerShell-Version 5.1 oder höher):
* Das [PSPKI PowerShell-Modul](https://github.com/PKISolutions/PSPKI). Installieren Sie mit dem folgenden Befehl:```
Install-Module -Name PSPKI
Laden Sie das Modul herunter und extrahieren Sie es in einen Ordner. Importieren Sie dann das Modul mit den folgenden Befehlen:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# Prüfung von AD CS-Fehlkonfigurationen
Wenn Sie `Invoke-PKIAudit` ausführen, werden alle Überprüfungen gegen AD CS in der aktuellen Domäne durchgeführt, einschließlich der Aufzählung verschiedener Zertifizierungsstellen- und Zertifikatvorlageneinstellungen. Um eine bestimmte Zertifizierungsstelle zu prüfen, können Sie `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` oder `Invoke-PKIAudit -CAName X-Y-Z` ausführen.
Alle Fehlkonfigurationen (ESC1-8) werden als Eigenschaften der angezeigten CA-/Vorlagenergebnisse angezeigt, um die spezifische gefundene Fehlkonfiguration zu identifizieren.
Wenn Sie die Gruppen/Benutzer ändern möchten, die zum Testen der Registrierung/Zugriffskontrolle verwendet werden, ändern Sie den `$CommonLowprivPrincipals`-Regex am Anfang von `Invoke-PKIAudit.ps1`.
Wenn Sie alle CA-Informationen in eine CSV-Datei exportieren möchten, führen Sie Folgendes aus: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
Wenn Sie ALLE veröffentlichten Vorlageninformationen in eine CSV-Datei exportieren möchten (nicht nur anfällige Vorlagen), führen Sie Folgendes aus: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## Erläuterung der Ausgabe
Es gibt zwei Hauptabschnitte der Ausgabe: Details zu entdeckten Zertifizierungsstellen und Details zu potenziell anfälligen Vorlagen.
Für Ergebnisse der Zertifizierungsstelle:
| Certificate Authority Property | Description |
| ------------------------------ | ------------------------------------------------------------------ |
| ComputerName | Der Rechner, auf dem die Zertifizierungsstelle läuft. |
| CAName | Der Name der Zertifizierungsstelle. |
| ConfigString | Die vollständige Konfigurationszeichenfolge COMPUTER\CA_NAME. |
| IsRoot | Gibt an, ob es sich um eine Stammzertifizierungsstelle handelt. |
| AllowsUserSuppliedSans | Gibt an, ob die Zertifizierungsstelle das Flag `EDITF_ATTRIBUTESUBJECTALTNAME2` gesetzt hat. |
| VulnerableACL | Gibt an, ob die Zertifizierungsstelle eine anfällige ACL-Einstellung hat. |
| EnrollmentPrincipals | Sicherheitsprinzipale, die auf CA-Ebene über das `Enroll`-Privileg verfügen. |
| EnrollmentEndpoints | Die Webdienst-Registrierungsendpunkte der Zertifizierungsstelle. |
| NTLMEnrollmentEndpoints | Die Webdienst-Registrierungsendpunkte der Zertifizierungsstelle, bei denen NTLM aktiviert ist. |
| DACL | Die vollständigen Zugriffskontrollinformationen. |
| Misconfigurations | ESCX, das die spezifische vorhandene Fehlkonfiguration angibt (falls vorhanden). |
Für Ergebnisse der Zertifikatsvorlage:
| Property | Description |
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
| CA | Die vollständige CA-ConfigString, auf der die Vorlage veröffentlicht ist (null, wenn nicht veröffentlicht). |
| Name | Der Vorlagenname. |
| SchemaVersion | Die Schema-Version (1/2/3) der Vorlage. |
| OID | Der eindeutige Objektbezeichner für die Vorlage. |
| VulnerableTemplateACL | True, wenn die Vorlage eine anfällige ACL-Einstellung hat. |
| LowPrivCanEnroll | True, wenn Benutzer mit geringen Berechtigungen sich in der Vorlage registrieren können. |
| EnrolleeSuppliesSubject | True, wenn das Flag `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` vorhanden ist (d. h. Benutzer können beliebige SANs angeben). |
| EnhancedKeyUsage | Die in der Vorlage aktivierten Nutzungs-EKUs. |
| HasAuthenticationEku | True, wenn die Vorlage ein EKU hat, das die Authentifizierung ermöglicht. |
| HasDangerousEku | True, wenn die Vorlage ein "gefährliches" (Any Purpose oder null) EKU hat. |
| EnrollmentAgentTemplate | True, wenn die Vorlage das EKU "Certificate Request Agent" hat. |
| CAManagerApproval | True, wenn für die Registrierung eine Genehmigung durch einen Vorgesetzten erforderlich ist. |
| IssuanceRequirements | Informationen zur autorisierten Signatur. |
| ValidityPeriod | Wie lange das Zertifikat gültig ist. |
| RenewalPeriod | Der Verlängerungszeitraum für das Zertifikat. |
| Owner | Der Prinzipal, der das Zertifikat besitzt. |
| DACL | Die vollständigen Zugriffskontrollinformationen. |
| Misconfigurations | ESCX, das die spezifische vorhandene Fehlkonfiguration angibt (falls vorhanden). |
## ESC1 - Fehlkonfigurierte Zertifikatsvorlagen
### Details <!-- omit in toc -->
Dieses Szenario zur Privilegienausweitung tritt ein, wenn die folgenden Bedingungen erfüllt sind:
1. **Die Unternehmenszertifizierungsstelle gewährt Benutzern mit geringen Berechtigungen Registrierungsrechte.** Die Konfiguration der Unternehmenszertifizierungsstelle muss Benutzern mit geringen Berechtigungen die Möglichkeit geben, Zertifikate anzufordern. Weitere Einzelheiten finden Sie im Abschnitt „Hintergrund – Registrierung“ zu Beginn des Whitepapers.
2. **Die Genehmigung durch einen Vorgesetzten ist deaktiviert.** Diese Einstellung erfordert, dass ein Benutzer mit Zertifikat-Manager-Berechtigungen das angeforderte Zertifikat überprüft und genehmigt, bevor das Zertifikat ausgestellt wird. Weitere Einzelheiten finden Sie im Abschnitt „Hintergrund – Ausstellungsanforderungen“ zu Beginn des Whitepapers.
3. **Es sind keine autorisierten Signaturen erforderlich.** Diese Einstellung erfordert, dass jeder CSR von einem vorhandenen autorisierten Zertifikat signiert wird. Weitere Einzelheiten finden Sie im Abschnitt „Hintergrund – Ausstellungsanforderungen“ zu Beginn des Whitepapers.
4. **Ein übermäßig großzügiger Sicherheitsdeskriptor der Zertifikatsvorlage gewährt Benutzern mit geringen Berechtigungen Zertifikatsregistrierungsrechte.** Registrierungsrechte ermöglichen es einem Angreifer mit geringen Berechtigungen, ein Zertifikat basierend auf der Vorlage anzufordern und zu erhalten. Registrierungsrechte werden über den Sicherheitsdeskriptor des AD-Objekts der Zertifikatsvorlage gewährt.
5. **Die Zertifikatsvorlage definiert EKUs, die die Authentifizierung ermöglichen.** Zu den anwendbaren EKUs gehören Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (OID 1.3.6.1.5.2.3.4) oder Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2).
6. **Die Zertifikatsvorlage erlaubt Antragstellern, einen subjectAltName (SAN) in der CSR anzugeben.** Wenn ein Antragsteller den SAN in einer CSR angeben kann, kann der Antragsteller ein Zertifikat als beliebige Person (z. B. als Domänenadministrator) anfordern. Das AD-Objekt der Zertifikatsvorlage gibt an, ob der Antragsteller den SAN in seiner mspki-certificate-name-flag-Eigenschaft angeben kann. Die Eigenschaft mspki-certificate-name-flag ist eine Bitmaske, und wenn das Flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT vorhanden ist, kann ein Antragsteller den SAN angeben.
**TL;DR** Diese Situation bedeutet, dass ein nicht privilegierter Benutzer ein Zertifikat anfordern kann, das für die Domänenauthentifizierung verwendet werden kann, wobei er einen beliebigen alternativen Namen (wie einen Domänenadministrator) angeben kann. Dies kann zu einem funktionsfähigen Zertifikat für einen erhöhten Benutzer wie einen Domänenadministrator führen!
### Beispiel <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC1Template
SchemaVersion : 2
OID : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC1
Es gibt einige Optionen. Klicken Sie zunächst mit der rechten Maustaste auf die betroffene Zertifikatsvorlage in der Zertifikatsvorlagen-Konsole (certtmpl.msc) und wählen Sie "Eigenschaften".
Dieses Privilegienausweitungsszenario tritt auf, wenn die folgenden Bedingungen erfüllt sind:
Die Unternehmens-CA gewährt Benutzern mit niedrigen Berechtigungen Registrierungsrechte. Die Details sind die gleichen wie bei ESC1.
Die Manager-Genehmigung ist deaktiviert. Die Details sind die gleichen wie bei ESC1.
Es sind keine autorisierten Signaturen erforderlich. Die Details sind die gleichen wie bei ESC1.
Ein übermäßig permissiver Sicherheitsdeskriptor einer Zertifikatsvorlage gewährt Benutzern mit niedrigen Berechtigungen Zertifikatsregistrierungsrechte. Die Details sind die gleichen wie bei ESC1.
Die Zertifikatsvorlage definiert Any Purpose-EKUs oder kein EKU. Der Any Purpose (OID 2.5.29.37.0) kann für (Überraschung!) jeden Zweck verwendet werden, einschließlich der Clientauthentifizierung. Wenn keine EKUs angegeben sind – d. h. pkiextendedkeyusage ist leer oder das Attribut existiert nicht – dann ist das Zertifikat das Äquivalent eines untergeordneten CA-Zertifikats und kann für alles verwendet werden.
TL;DR Dies ist ESC1 sehr ähnlich, jedoch mit dem Any Purpose oder keinem EKU, muss das Flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT nicht vorhanden sein.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2
### Gegenmaßnahmen <!-- omit in toc -->
Es gibt einige Optionen. Klicken Sie zunächst mit der rechten Maustaste auf die betroffene Zertifikatsvorlage in der Zertifikatsvorlagen-Konsole (certtmpl.msc) und wählen Sie „Eigenschaften".
1. Entfernen Sie die Möglichkeit für Benutzer mit niedrigen Berechtigungen, sich für diese Vorlage zu registrieren, indem Sie unter „Sicherheit" die entsprechenden **Registrieren**-Berechtigungen entfernen.
* Dies ist wahrscheinlich die beste Lösung, da diese sensiblen EKUs für Benutzer mit niedrigen Berechtigungen nicht verfügbar sein sollten!
2. Aktivieren Sie **„CA-Zertifikats-Manager-Genehmigung"** unter „Ausstellungsanforderungen".
* Dadurch werden Anträge für diese Vorlage in die Warteschlange „Ausstehende Anforderungen" verschoben, die manuell von einem Zertifikats-Manager genehmigt werden müssen.
3. Aktivieren Sie **Authorized Signatures** unter „Ausstellungsanforderungen" (wenn Sie wissen, was Sie tun).
* Dadurch müssen CSR von einem Registrierungszertifikat eines Registrierungsagenten gegengezeichnet werden.
## ESC3 – Fehlkonfigurierte Registrierungsagent-Vorlagen
### Details <!-- omit in toc -->
Dieses Privilegien-Eskalationsszenario tritt ein, wenn die folgenden Bedingungen erfüllt sind:
1. **Die Unternehmenszertifizierungsstelle gewährt Benutzern mit niedrigen Berechtigungen Registrierungsrechte.** Die Details sind dieselben wie in ESC1.
2. **Die Manager-Genehmigung ist deaktiviert.** Die Details sind dieselben wie in ESC1.
3. **Es sind keine autorisierten Signaturen erforderlich.** Die Details sind dieselben wie in ESC1.
4. **Ein zu permissiver Sicherheitsdeskriptor der Zertifikatsvorlage gewährt Benutzern mit niedrigen Berechtigungen Zertifikatsregistrierungsrechte.** Die Details sind dieselben wie in ESC1.
5. **Die Zertifikatsvorlage definiert die EKU für den Zertifikatsanforderungsagenten.** Die EKU für den Zertifikatsanforderungsagenten (OID 1.3.6.1.4.1.311.20.2.1) ermöglicht es einem Principal, sich im Namen eines anderen Benutzers für eine _andere_ Zertifikatsvorlage zu registrieren.
6. **Registrierungsagenten-Einschränkungen sind auf der Zertifizierungsstelle nicht implementiert.**
**TL;DR** Jemand mit einem Zertifikatsanforderungs- (auch Registrierungs-) Agentenzertifikat kann sich im Namen eines beliebigen Benutzers in der Domäne für andere Zertifikate registrieren, und zwar für jede Schema-Version-1-Vorlage oder jede Schema-Version-2+-Vorlage, die die entsprechende Ausstellungsanforderung „Autorisierte Signaturen/Anwendungsrichtlinie" erfordert, es sei denn, es sind „Registrierungsagenten-Einschränkungen" auf Zertifizierungsstellenebene implementiert.
### Beispiel <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC3Template
SchemaVersion : 2
OID : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku : False
HasDangerousEku : False
EnrollmentAgentTemplate : True
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC3
Es gibt einige Optionen. Klicken Sie zunächst mit der rechten Maustaste auf die betroffene Zertifikatvorlage in der Zertifikatvorlagen-Konsole (certtmpl.msc) und klicken Sie auf „Eigenschaften“.
Sie können auch „Einschränkungen für Registrierungs-Agents“ über die Zertifizierungsstellen-Konsole (certsrv.msc) implementieren. Klicken Sie auf der betroffenen Zertifizierungsstelle mit der rechten Maustaste auf den CA-Namen und klicken Sie auf „Eigenschaften“ -> „Registrierungs-Agents“. Weitere Informationen zu diesem Ansatz finden Sie hier.
Zertifikatvorlagen sind sicherbare Objekte in Active Directory, was bedeutet, dass sie einen Sicherheitsdeskriptor haben, der angibt, welche Active Directory-Prinzipale bestimmte Berechtigungen für die Vorlage haben. Vorlagen mit angreifbarer Zugriffssteuerung gewähren unerwünschten Prinzipalen die Möglichkeit, Einstellungen in der Vorlage zu ändern. Mit Änderungsrechten kann ein Angreifer angreifbare EKUs (ESC1-ESC3) setzen, Einstellungen wie CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1) umschalten und/oder „Ausstellungsanforderungen“ wie Manager-Genehmigung oder autorisierte Signaturen entfernen.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4
### Gegenmaßnahmen <!-- omit in toc -->
Klicken Sie mit der rechten Maustaste auf die betroffene Zertifikatsvorlage in der Zertifikatsvorlagen-Konsole (certtmpl.msc) und wählen Sie "Eigenschaften".
Gehen Sie zu "Sicherheit" und entfernen Sie den gefährdeten Zugriffssteuerungseintrag.
## ESC5 – Anfällige PKI-AD-Objekt-Zugriffssteuerung
### Details <!-- omit in toc -->
Eine Reihe von Objekten außerhalb von Zertifikatsvorlagen und der Zertifizierungsstelle selbst können Sicherheitsauswirkungen auf das gesamte AD CS-System haben.
Diese Möglichkeiten umfassen (sind aber nicht beschränkt auf):
- AD-Computerobjekt des CA-Servers (d.h. Kompromittierung durch RBCD)
- RPC/DCOM-Server des CA-Servers
- PKI-bezogene AD-Objekte. Jedes untergeordnete AD-Objekt oder Container im Container CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (z.B. der Container für Zertifikatsvorlagen, Container für Zertifizierungsstellen, das NTAuthCertificates-Objekt usw.)
*Aufgrund des breiten Umfangs dieser spezifischen Fehlkonfiguration führen wir derzeit standardmäßig keine Prüfung auf ESC5 in diesem Toolkit durch.*
Zugriffspfade zum CA-Server selbst können in der aktuellen BloodHound-Sammlung gefunden werden.
Die Sicherheit des RPC/DCOM-Servers des CA-Servers erfordert eine manuelle Analyse.
Die folgenden Befehle geben eine Liste der Benutzer und das Kontroll-/Bearbeitungsrecht aus, das der Benutzer über ein PKI-bezogenes AD-Objekt hat.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
Stellen Sie sicher, dass alle Prinzipale in den Ergebnissen die aufgeführten Rechte zwingend benötigen. Oftmals haben Nicht-Tier-0-Konten (seien es niedrig privilegierte Benutzer/Gruppen oder niedriger privilegierte Nicht-AD-Serveradministratoren) die Kontrolle über PKI-bezogene AD-Objekte.
THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
### Gegenmaßnahmen <!-- omit in toc -->
Entfernen Sie alle anfälligen Zugriffssteuerungseinträge über Active Directory-Benutzer und -Computer (*dsa.msc*) oder ADSIEdit (*adsiedit.msc*) für Konfigurationsobjekte.
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### Details <!-- omit in toc -->
Wenn das Flag **EDITF_ATTRIBUTESUBJECTALTNAME2** in der Konfiguration einer Zertifizierungsstelle gesetzt ist, kann *JEDE* Zertifikatsanfrage beliebige alternative Antragstellernamen (SANs) angeben. Dies bedeutet, dass JEDE Vorlage, die für die Domänenauthentifizierung konfiguriert ist und auch nicht privilegierten Benutzern die Registrierung ermöglicht (z. B. die Standardvorlage **Benutzer**), missbraucht werden kann, um ein Zertifikat zu erhalten, das uns die Authentifizierung als Domänenadministrator (oder ein anderes aktives Benutzer-/Geräte-Konto) ermöglicht.
**DIESE EINSTELLUNG SOLLTE AUF KEINEN FALL IN IHRER UMGEBUNG GESETZT WERDEN.**
### Beispiel <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : True
VulnerableACL : False
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC6
[!] The above CA is misconfigured!
...(snip)...
[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:
CA : dc.theshire.local\theshire-DC-CA
Name : User
SchemaVersion : 1
OID : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\Enterprise Admins
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations :
Sofort entfernen Sie dieses Flag und starten Sie die betroffene Zertifizierungsstelle von einer PowerShell-Eingabeaufforderung mit erhöhten Rechten auf dem CA-Server neu:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force
## ESC7 – Angreifbare Zugriffskontrolle einer Zertifizierungsstelle
### Details <!-- omit in toc -->
Außerhalb von Zertifikatsvorlagen besitzt eine Zertifizierungsstelle selbst eine Reihe von Berechtigungen, die verschiedene CA-Aktionen absichern. Auf diese Berechtigungen kann über certsrv.msc zugegriffen werden, indem man mit der rechten Maustaste auf eine CA klickt, Eigenschaften auswählt und zur Registerkarte „Sicherheit“ wechselt.
Es gibt zwei Rechte, die sicherheitsrelevant und gefährlich sind, wenn unbeabsichtigte Prinzipale sie besitzen:
* **ManageCA** (auch bekannt als „CA-Administrator“) – ermöglicht administrative CA-Aktionen, einschließlich (entferntem) Setzen des Bits EDITF_ATTRIBUTESUBJECTALTNAME2, was zu ESC6 führt.
* **ManageCertificates** (auch bekannt als „Zertifikats-Manager/-Beauftragter“) – ermöglicht dem Prinzipal die Genehmigung ausstehender Zertifikatsanfragen und hebt damit die Ausstellungsanforderung „Manager Approval“ bzw. den entsprechenden Schutz auf.
### Beispiel <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : False
VulnerableACL : True
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC7
[!] The above CA is misconfigured!
Öffnen Sie die Zertifizierungsstellen-Konsole (certsrv.msc) auf der betroffenen CA, klicken Sie mit der rechten Maustaste auf den CA-Namen und wählen Sie "Eigenschaften".
Gehen Sie zu "Sicherheit" und entfernen Sie den anfälligen Zugriffssteuerungseintrag.
HINWEIS: Diese spezielle Prüfung in PSPKIAudit überprüft nur, ob NTLM für veröffentlichte Registrierungsendpunkte vorhanden ist. Sie prüft NICHT, ob Extended Protection for Authentication für diese NTLM-fähigen Endpunkte aktiviert ist, daher können Fehlalarme auftreten!
[!IMPORTANT]
NTLM-Authentifizierung ist für Konten in der Gruppe "Geschützte Benutzer" deaktiviert. Diese Prüfung kann fehlschlagen, wenn PSPKIAudit ausgeführt wird, während Sie als geschützter Benutzer angemeldet sind.
AD CS unterstützt mehrere HTTP-basierte Registrierungsmethoden über zusätzliche AD CS-Serverrollen, die Administratoren installieren können. Diese HTTP-basierten Zertifikatsregistrierungsschnittstellen sind alle anfällig für NTLM-Relay-Angriffe.
Durch NTLM-Relay kann ein Angreifer auf einem kompromittierten Rechner jedes eingehende NTLM-authentifizierende AD-Konto impersonieren. Während der Angreifer das Opferkonto impersoniert, könnte er auf diese Weboberflächen zugreifen und ein Client-Authentifizierungszertifikat basierend auf den Benutzer- oder Maschinenzertifikatvorlagen anfordern.
=== Certificate Authority ===
ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8
[!] The above CA is misconfigured!
### Mitigations <!-- omit in toc -->
Entfernen Sie entweder die HTTP(S)-Anmeldeendpunkte, deaktivieren Sie NTLM für die Endopints oder aktivieren Sie den erweiterten Schutz für die Authentifizierung. Siehe **Harden AD CS HTTP Endpoints – PREVENT8** im Whitepaper für weitere Details.
## Verschiedenes – Explizite Zuordnungen
Eine weitere mögliche Abhilfe für einige Situationen ist die Durchsetzung expliziter Zuordnungen für Zertifikate. Dadurch wird die Verwendung alternativer SANs in Zertifikaten bei der Authentifizierung bei Active Directory deaktiviert.
Für Kerberos erzwingt das Setzen des Schlüssels **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** auf 00000000 eine explizite Zuordnung. Weitere Details finden Sie in [KB4043463](https://mskb.pkisolutions.com/kb/4043463).
Das Deaktivieren expliziter Zuordnungen für SChannel ist nicht wirklich dokumentiert, aber basierend auf unseren Recherchen scheint das Setzen von 0x1 oder 0x2 auf den Schlüssel **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** SANs zu blockieren, erfordert jedoch weitere Tests.
# Überprüfung vorhandener ausgestellter Zertifikatsanforderungen
**WARNUNG:** Diese Funktionalität wurde in großen Umgebungen nur minimal getestet!
**Hinweis:** Siehe „Monitor User/Machine Certificate Enrollments – DETECT1“ im Whitepaper für weitere Informationen und zur Durchführung dieser Suchen mit certutil.
Wenn Sie vorhandene ausgestellte Zertifikatanforderungen untersuchen möchten, z. B. um zu sehen, ob in Anforderungen beliebige SANs angegeben wurden oder ob sie für bestimmte Vorlagen/von bestimmten Prinzipalen angefordert wurden, baut die Funktion `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` auf verschiedenen PSPKI-Funktionen auf, um mehr Kontextinformationen zu liefern.
Insbesondere wird die rohe Zertifikatssignieranforderung (Certificate Signing Request, CSR) für jedes derzeit in der Domäne ausgestellte Zertifikat extrahiert, und aus der Anfrage werden spezifische Informationen (d. h., ob ein SAN angegeben wurde, der Name des Anforderers/Maschine/Prozess usw.) konstruiert, um das CSR-Objekt anzureichern.
Die folgenden Flags können nützlich sein:
| Flag | Beschreibung |
| --------------------------- | ------------------------------------------------------------------------------------------- |
| **-HasSAN** | Nur ausgestellte Zertifikate zurückgeben, die einen alternativen Antragstellernamen (Subject Alternative Name) in der Anfrage angegeben haben. |
| **-Requester DOMAIN\USER** | Nur ausgestellte Zertifikatanforderungen für den angegebenen anfordernden Benutzer zurückgeben. |
| **-Template TEMPLATE_NAME** | Nur ausgestellte Zertifikatanforderungen für den angegebenen Vorlagennamen zurückgeben. |
<br/>
Um ALLE ausgestellten Zertifikatanforderungen als CSV zu exportieren, verwenden Sie `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.
Hier ist ein Beispiel für einen Eintrag, der eine Situation zeigt, in der mit Certify ein alternativer Antragstellername (Subject Alternative Name, SAN) angegeben wurde:```
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4602
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib : Administrator
SerialNumber : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:54:51 PM
StartDate : 6/3/2021 5:44:51 PM
EndDate : 6/3/2022 5:44:51 PM
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4603
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib :
SerialNumber : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:55:10 PM
StartDate : 6/3/2021 5:45:10 PM
EndDate : 6/3/2022 5:45:10 PM
Die Eigenschaft SubjectAltNamesExtension bedeutet, dass die x509-Erweiterung SubjectAlternativeNames verwendet wurde, um den SAN anzugeben, was bei Vorlagen mit dem Flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT der Fall ist. Die Eigenschaft SubjectAltNamesAttrib bedeutet, dass x509-Name/Wert-Paare verwendet wurden, was bei der Angabe eines SAN der Fall ist, wenn das CA-Flag EDITF_ATTRIBUTESUBJECTALTNAME2 gesetzt ist.
Vorhandene ausgestellte Zertifikate können mit der Funktion Revoke-Certificate von PSPKI widerrufen werden:
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
Zulässige Werte für -Reason sind "KeyCompromise", "CACompromise" und "Unspecified".