
PowerShell toolkit per auditing di AD CS basato sul toolkit PSPKI.
Toolkit PowerShell per il controllo di Active Directory Certificate Services (AD CS).
È costruito sulla base del toolkit PSPKI di PKISolution (licenza pubblica Microsoft). Questo repository contiene una versione più recente di PSPKI rispetto a quella disponibile in PSGallery (vedi la directory PSPKI). Vadims Podans (il creatore di PSPKI) ha gentilmente fornito questa versione poiché contiene correzioni per diversi bug.
Questo README è solo un punto di partenza - per dettagli completi e indicazioni difensive, consulta il whitepaper "Certified Pre-Owned".
Il modulo contiene le seguenti funzioni principali:
AVVERTENZA: Questo codice è beta! Siamo fiduciosi che Invoke-PKIAudit non avrà impatto sull'ambiente poiché la quantità di dati che interroga è piuttosto limitata. Non abbiamo fatto test rigorosi con Get-CertRequest contro carichi di lavoro tipici del server CA. Get-CertRequest interroga direttamente il database della CA e potrebbe dover elaborare migliaia di risultati, il che potrebbe influire sulle prestazioni.
NESSUN RISULTATO NON GARANTISCE CHE IL TUO AMBIENTE SIA SICURO!!
INOLTRE NON POSSIAMO GARANTIRE CHE I NOSTRI CONSIGLI DI MITIGAZIONE RENDANO IL TUO AMBIENTE SICURO O NON CAUSINO INTERRUZIONI DELLE OPERAZIONI!
È tua responsabilità parlare con il/i tuo/i team di Active Directory/PKI/Architettura per determinare le migliori mitigazioni per il tuo ambiente.
Se il codice si rompe, o ci siamo persi qualcosa, per favore invia un problema o una richiesta di pull per una correzione!
Installa quanto segue su una macchina Windows utilizzando un prompt PowerShell elevato (versione PowerShell 5.1 o successiva):
* Il modulo PowerShell [PSPKI](https://github.com/PKISolutions/PSPKI). Installalo con il seguente comando:```
Install-Module -Name PSPKI
Scarica il modulo ed estrailo in una cartella. Quindi, importa il modulo usando i seguenti comandi:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# Verifica delle configurazioni errate di AD CS
Eseguendo `Invoke-PKIAudit` verranno eseguite tutte le verifiche di controllo su AD CS nel dominio corrente, inclusa l'enumerazione delle varie impostazioni dell'Autorità di Certificazione e dei Modelli di Certificato. Per verificare una CA specifica, è possibile eseguire `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` o `Invoke-PKIAudit -CAName X-Y-Z`.
Eventuali configurazioni errate (ESC1-8) appariranno come proprietà sui risultati della CA/dei modelli visualizzati per identificare la specifica configurazione errata trovata.
Se si desidera modificare i gruppi/utenti utilizzati per testare l'iscrizione/il controllo degli accessi, modificare l'espressione regolare `$CommonLowprivPrincipals` all'inizio di `Invoke-PKIAudit.ps1`
Se si desidera esportare tutte le informazioni della CA in un csv, eseguire: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
Se si desidera esportare tutte le informazioni dei modelli pubblicati in un csv (non solo quelli vulnerabili), eseguire: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## Spiegazione dell'output
Ci sono due sezioni principali nell'output: i dettagli sulle CA scoperte e i dettagli sui modelli potenzialmente vulnerabili.
Per i risultati dell'autorità di certificazione:
| Proprietà | Descrizione |
| ------------------------- | ------------------------------------------------------------------------------- |
| ComputerName | Il sistema su cui è in esecuzione la CA. |
| CAName | Il nome della CA. |
| ConfigString | La stringa di configurazione completa COMPUTER\NOME_CA. |
| IsRoot | Se la CA è una CA radice. |
| AllowsUserSuppliedSans | Se la CA ha il flag `EDITF_ATTRIBUTESUBJECTALTNAME2` impostato. |
| VulnerableACL | Se la CA ha un'impostazione ACL vulnerabile. |
| EnrollmentPrincipals | I principali che hanno il privilegio `Enroll` a livello di CA. |
| EnrollmentEndpoints | Gli endpoint di iscrizione dei servizi web della CA. |
| NTLMEnrollmentEndpoints | Gli endpoint di iscrizione dei servizi web della CA che hanno NTLM abilitato. |
| DACL | Le informazioni complete sul controllo degli accessi. |
| Misconfigurations | ESCX che indica la specifica configurazione errata presente (se presente). |
Per i risultati del modello di certificato:
| Proprietà | Descrizione |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| CA | La stringa ConfigString completa della CA su cui è pubblicato il modello (null se non pubblicato). |
| Name | Il nome del modello. |
| SchemaVersion | La versione dello schema (1/2/3) del modello. |
| OID | L'identificatore univoco dell'oggetto per il modello. |
| VulnerableTemplateACL | True se il modello ha un'impostazione ACL vulnerabile. |
| LowPrivCanEnroll | True se gli utenti con privilegi bassi possono iscriversi al modello. |
| EnrolleeSuppliesSubject | True se il flag `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` è presente (cioè gli utenti possono fornire SAN arbitrari). |
| EnhancedKeyUsage | Gli EKU di utilizzo abilitati nel modello. |
| HasAuthenticationEku | True se il modello ha un EKU che consente l'autenticazione. |
| HasDangerousEku | True se il modello ha un EKU "pericoloso" (Any Purpose o null). |
| EnrollmentAgentTemplate | True se il modello ha l'EKU "Certificate Request Agent". |
| CAManagerApproval | True se sono necessarie approvazioni da parte del manager per l'iscrizione. |
| IssuanceRequirements | Informazioni sulla firma autorizzata. |
| ValidityPeriod | Per quanto tempo il certificato è valido. |
| RenewalPeriod | Il periodo di rinnovo del certificato. |
| Owner | Il principale che possiede il certificato. |
| DACL | Le informazioni complete sul controllo degli accessi. |
| Misconfigurations | ESCX che indica la specifica configurazione errata presente (se presente). |
## ESC1 - Modelli di certificato configurati in modo errato
### Details <!-- omit in toc -->
Questo scenario di escalation dei privilegi si verifica quando sono soddisfatte le seguenti condizioni:
1. **La CA enterprise concede diritti di iscrizione agli utenti con privilegi bassi.** La configurazione della CA enterprise deve consentire agli utenti con privilegi bassi di richiedere certificati. Per maggiori dettagli, vedere la sezione "Background - Enrollment" all'inizio del whitepaper.
2. **L'approvazione del manager è disabilitata.** Questa impostazione richiede che un utente con permessi di "manager" dei certificati riveda e approvi il certificato richiesto prima che venga emesso. Per maggiori dettagli, vedere la sezione "Background - Issuance Requirements" all'inizio del whitepaper.
3. **Non sono richieste firme autorizzate.** Questa impostazione richiede che qualsiasi CSR sia firmato da un certificato autorizzato esistente. Per maggiori dettagli, vedere la sezione "Background - Issuance Requirements" all'inizio del whitepaper.
4. **Un descrittore di sicurezza del modello di certificato eccessivamente permissivo concede diritti di iscrizione al certificato agli utenti con privilegi bassi.** Avere diritti di iscrizione al certificato consente a un utente malintenzionato con privilegi bassi di richiedere e ottenere un certificato basato sul modello. I diritti di iscrizione vengono concessi tramite il descrittore di sicurezza dell'oggetto AD del modello di certificato.
5. **Il modello di certificato definisce EKU che consentono l'autenticazione.** Gli EKU applicabili includono Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (OID 1.3.6.1.5.2.3.4) o Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2).
6. **Il modello di certificato consente ai richiedenti di specificare un subjectAltName (SAN) nel CSR.** Se un richiedente può specificare il SAN in un CSR, può richiedere un certificato come chiunque (ad esempio, un utente amministratore di dominio). L'oggetto AD del modello di certificato specifica se il richiedente può specificare il SAN nella sua proprietà mspki-certificate-name-flag. La proprietà mspki-certificate-name-flag è una maschera di bit e se il flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT è presente, il richiedente può specificare il SAN.
**TL;DR** Questa situazione significa che un utente non privilegiato può richiedere un certificato utilizzabile per l'autenticazione di dominio, dove può specificare un nome alternativo arbitrario (come un amministratore di dominio). Ciò può portare a un certificato funzionante per un utente elevato come un amministratore di dominio!
### Example <!-- 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
Ci sono alcune opzioni. Innanzitutto, clicca con il tasto destro sul modello di certificato interessato nella Console dei Modelli di Certificato (certtmpl.msc) e clicca su "Proprietà"
Questo scenario di escalation dei privilegi si verifica quando sono soddisfatte le seguenti condizioni:
La CA Enterprise concede diritti di iscrizione agli utenti con privilegi bassi. I dettagli sono gli stessi di ESC1.
L'approvazione del manager è disabilitata. I dettagli sono gli stessi di ESC1.
Non sono richieste firme autorizzate. I dettagli sono gli stessi di ESC1.
Un descrittore di sicurezza del modello di certificato eccessivamente permissivo concede diritti di iscrizione ai certificati agli utenti con privilegi bassi. I dettagli sono gli stessi di ESC1.
Il modello di certificato definisce EKU Any Purpose o nessuna EKU. L'Any Purpose (OID 2.5.29.37.0) può essere utilizzato per (sorpresa!) qualsiasi scopo, inclusa l'autenticazione client. Se non sono specificate EKU - cioè pkiextendedkeyusage è vuoto o l'attributo non esiste - allora il certificato è equivalente a un certificato CA subordinato e può essere utilizzato per qualsiasi cosa.
TL;DR Questo è molto simile a ESC1, tuttavia con Any Purpose o nessuna EKU, il flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT non deve essere presente.
[!] 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
### Mitigazioni <!-- omit in toc -->
Ci sono alcune opzioni. Prima, fare clic con il tasto destro sul modello di certificato interessato nella Console dei modelli di certificato (certtmpl.msc) e fare clic su "Proprietà"
1. Rimuovere la possibilità per gli utenti con privilegi bassi di iscriversi a questo modello tramite "Sicurezza" e rimuovendo il privilegio **Registra** appropriato.
* Questa è probabilmente la soluzione migliore, poiché questi EKU sensibili non dovrebbero essere disponibili per gli utenti con privilegi bassi!
2. Abilitare **"Approvazione del responsabile dei certificati CA"** in "Requisiti di emissione".
* Questo inserisce le richieste per questo modello nella coda "Richieste in sospeso" che deve essere approvata manualmente da un responsabile dei certificati.
3. Abilitare **"Firme autorizzate"** in "Requisiti di emissione" (se sai cosa stai facendo).
* Questo obbliga i CSR a essere co-firmati da un certificato di agente di registrazione.
---
## ESC3 - Modelli di agente di registrazione malconfigurati
### Dettagli <!-- omit in toc -->
Questo scenario di escalation dei privilegi si verifica quando sono soddisfatte le seguenti condizioni:
1. **La CA enterprise concede diritti di registrazione agli utenti con privilegi bassi.** I dettagli sono gli stessi di ESC1.
2. **L'approvazione del responsabile è disabilitata.** I dettagli sono gli stessi di ESC1.
3. **Non sono richieste firme autorizzate.** I dettagli sono gli stessi di ESC1.
4. **Un descrittore di sicurezza del modello di certificato eccessivamente permissivo concede diritti di registrazione dei certificati agli utenti con privilegi bassi.** I dettagli sono gli stessi di ESC1.
5. **Il modello di certificato definisce l'EKU Certificate Request Agent.** L'EKU Certificate Request Agent (OID 1.3.6.1.4.1.311.20.2.1) consente a un principal di iscriversi _ad un altro_ modello di certificato per conto di un altro utente.
6. **Le restrizioni degli agenti di registrazione non sono implementate sulla CA.**
**TL;DR** Un soggetto in possesso di un certificato di agente di richiesta certificati (noto anche come certificato di agente di registrazione) può iscriversi ad altri certificati per conto di qualsiasi utente del dominio, per qualsiasi modello di Schema Versione 1 o qualsiasi modello di Schema Versione 2+ che richieda il requisito di emissione "Firme autorizzate/Criteri applicazione" appropriato, a meno che le "Restrizioni dell'agente di registrazione" non siano implementate a livello di CA.
### Esempio <!-- 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
Ci sono alcune opzioni. Per prima cosa, fai clic con il tasto destro sul modello di certificato interessato nella Console Modelli di Certificato (certtmpl.msc) e seleziona "Proprietà"
Puoi anche implementare le "Restrizioni dell'agente di registrazione" tramite la console Autorità di Certificazione (certsrv.msc). Sulla CA interessata, fai clic con il tasto destro sul nome della CA e seleziona "Proprietà" -> "Agenti di registrazione". Ulteriori informazioni su questo approccio sono disponibili qui.
I modelli di certificato sono oggetti proteggibili in Active Directory, il che significa che hanno un descrittore di sicurezza che specifica quali entità di Active Directory hanno autorizzazioni specifiche sul modello. I modelli che hanno un controllo di accesso vulnerabile concedono a entità non previste la possibilità di modificare le impostazioni del modello. Con i diritti di modifica, un attaccante può impostare EKU vulnerabili (ESC1-ESC3), attivare impostazioni come CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1) e/o rimuovere i "Requisiti di emissione" come l'approvazione del manager o le firme autorizzate.
[!] 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
### Mitigazioni <!-- omit in toc -->
Fare clic con il tasto destro sul modello di certificato interessato nella Console Modelli di Certificato (certtmpl.msc) e selezionare "Proprietà".
Andare su "Sicurezza" e rimuovere la voce di controllo accesso vulnerabile.
## ESC5 - Controllo accesso vulnerabile agli oggetti AD PKI
### Dettagli <!-- omit in toc -->
Numerosi oggetti al di fuori dei modelli di certificato e della stessa autorità di certificazione possono avere un impatto sulla sicurezza dell'intero sistema AD CS.
Queste possibilità includono (ma non si limitano a):
- Oggetto computer AD del server CA (ad esempio, compromissione tramite RBCD)
- Server RPC/DCOM del server CA
- Oggetti AD correlati a PKI. Qualsiasi oggetto AD discendente o contenitore nel contenitore CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (ad esempio, il contenitore Modelli di Certificato, il contenitore Autorità di Certificazione, l'oggetto NTAuthCertificates, ecc.)
*A causa dell'ampia portata di questa specifica errata configurazione, attualmente non controlliamo ESC5 per impostazione predefinita in questo toolkit.*
I percorsi di accesso al server CA stesso sono disponibili nell'attuale raccolta di BloodHound.
La sicurezza del server RPC/DCOM del server CA richiede un'analisi manuale.
I seguenti comandi restituiscono un elenco di utenti e il diritto di controllo/modifica che l'utente ha su un oggetto AD correlato a PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
Assicurati che tutti i principal nei risultati richiedano assolutamente i diritti elencati. Spesso account non di livello 0 (che siano utenti/gruppi a bassi privilegi o amministratori di server non AD con privilegi inferiori) hanno il controllo di oggetti AD correlati a PKI.
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
### Mitigazioni <!-- omit in toc -->
Rimuovere eventuali voci di controllo degli accessi vulnerabili tramite Utenti e computer di Active Directory (*dsa.msc*) o ADSIEdit (*adsiedit.msc*) per gli oggetti di configurazione.
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### Dettagli <!-- omit in toc -->
Se il flag **EDITF_ATTRIBUTESUBJECTALTNAME2** è attivato nella configurazione di un'Autorità di Certificazione, *QUALSIASI* richiesta di certificato può specificare nomi alternativi del soggetto (SAN) arbitrari. Ciò significa che QUALSIASI modello configurato per l'autenticazione di dominio che consente anche a utenti non privilegiati di iscriversi (ad esempio, il modello predefinito **Utente**) può essere abusato per ottenere un certificato che ci consente di autenticarci come amministratore di dominio (o qualsiasi altro utente/macchina attivo).
**QUESTA IMPOSTAZIONE NON DOVREBBE ASSOLUTAMENTE ESSERE ATTIVATA NEL TUO AMBIENTE.**
### Esempio <!-- 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 :
Rimuovere immediatamente questo flag e riavviare l'autorità di certificazione interessata da un prompt di PowerShell con diritti elevati sul server CA:``` 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 - Controllo di accesso vulnerabile dell'Autorità di Certificazione
### Dettagli <!-- omit in toc -->
Al di fuori dei modelli di certificato, un'autorità di certificazione stessa possiede un insieme di permessi che proteggono varie azioni della CA. Questi permessi possono essere consultati da certsrv.msc, facendo clic destro su una CA, selezionando Proprietà e passando alla scheda Security.
Ci sono due diritti che sono sensibili per la sicurezza e pericolosi se soggetti non intenzionali li possiedono:
* **ManageCA** (aka "Amministratore CA") - consente azioni amministrative sulla CA, inclusa l'attivazione (remota) del bit EDITF_ATTRIBUTESUBJECTALTNAME2, risultando in ESC6.
* **ManageCertificates** (aka "Responsabile/Ufficiale dei Certificati") - consente al soggetto di approvare le richieste di certificato in sospeso, annullando il requisito/protezione di emissione "Manager Approval"
### Esempio <!-- 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!
Apri la console Autorità di certificazione (certsrv.msc) sulla CA interessata, fai clic destro sul nome della CA e seleziona "Proprietà".
Vai su "Sicurezza" e rimuovi la voce di controllo accessi vulnerabile.
NOTA: questo controllo specifico in PSPKIAudit verifica solo se NTLM è presente per eventuali endpoint di enrollment pubblicati. Non verifica se la protezione estesa per l'autenticazione (Extended Protection for Authentication) è presente per questi endpoint abilitati a NTLM, quindi possono verificarsi falsi positivi!
[!IMPORTANTE]
L'autenticazione NTLM è disabilitata per gli account nel gruppo Protected Users. Questo controllo potrebbe fallire se si esegue PSPKIAudit mentre si è connessi come Utente Protetto.
AD CS supporta diversi metodi di enrollment basati su HTTP tramite ruoli del server AD CS aggiuntivi che gli amministratori possono installare. Queste interfacce di enrollment certificati basate su HTTP sono tutte vulnerabili ad attacchi di relay NTLM.
Utilizzando il relay NTLM, un attaccante su una macchina compromessa può impersonare qualsiasi account AD che autentica in entrata con NTLM. Mentre impersona l'account vittima, un attaccante potrebbe accedere a queste interfacce web e richiedere un certificato di autenticazione client basato sui modelli di certificato User o Machine.
=== 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 -->
Rimuovere gli endpoint di iscrizione HTTP(S), disabilitare NTLM per gli endpoint, o abilitare la Protezione Estesa per l'Autenticazione. Vedere **Harden AD CS HTTP Endpoints – PREVENT8** nel whitepaper per maggiori dettagli.
---
## Varie - Mappature Esplicite
Un'altra possibile mitigazione per alcune situazioni è imporre mappature esplicite per i certificati. Questo disabilita l'uso di SAN alternative nei certificati durante l'autenticazione ad Active Directory.
Per Kerberos, impostare la chiave **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** a 00000000 forza una mappatura esplicita. Ci sono maggiori dettagli in [KB4043463](https://mskb.pkisolutions.com/kb/4043463).
Disabilitare le mappature esplicite per SChannel non è realmente documentato, ma basandoci sulla nostra ricerca, impostare 0x1 o 0x2 alla chiave **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** sembra bloccare le SAN, ma sono necessari ulteriori test.
# Analisi delle Richieste di Certificato Emesse Esistenti
**ATTENZIONE:** questa funzionalità è stata testata minimamente in ambienti grandi!
**Nota:** vedere 'Monitor User/Machine Certificate Enrollments - DETECT1' nel whitepaper per informazioni aggiuntive e come eseguire queste ricerche con certutil.
Se si desidera esaminare le richieste di certificato emesse esistenti, ad esempio per vedere se alcune richieste specificavano SAN arbitrarie, o erano state richieste per template specifici/da parte di specifici principal, la funzione `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` si basa su varie funzioni PSPKI per fornire maggiori informazioni contestuali.
Specificatamente, il Certificate Signing Request (CSR) grezzo viene estratto per ogni certificato attualmente emesso nel dominio, e informazioni specifiche (ad esempio, se era specificato un SAN, il nome/computer/processo del richiedente, ecc.) vengono costruite dalla richiesta per arricchire l'oggetto CSR.
I seguenti flag possono essere utili:
| Flag | Descrizione |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **-HasSAN** | Restituisce solo i certificati emessi che hanno un Subject Alternative Name specificato nella richiesta. |
| **-Requester DOMAIN\USER** | Restituisce solo le richieste di certificato emesse per l'utente richiedente specifico. |
| **-Template TEMPLATE_NAME** | Restituisce solo le richieste di certificato emesse per il nome del template specificato. |
<br/>
Per esportare TUTTE le richieste di certificato emesse in csv, usare `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.
Ecco un esempio di voce di risultato che mostra una situazione in cui un Subject Alternative Name (SAN) è stato specificato con Certify:```
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
La proprietà SubjectAltNamesExtension indica che l'estensione x509 SubjectAlternativeNames è stata utilizzata per specificare il SAN, cosa che accade per i modelli con il flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. La proprietà SubjectAltNamesAttrib indica che sono state utilizzate coppie nome/valore x509, cosa che accade quando si specifica un SAN quando è impostato il flag CA EDITF_ATTRIBUTESUBJECTALTNAME2.
I certificati emessi esistenti possono essere revocati utilizzando la funzione Revoke-Certificate di PSPKI:
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
I valori applicabili per -Reason sono "KeyCompromise", "CACompromise" e "Unspecified".