Translated ['src/windows-hardening/active-directory-methodology/ad-certi

This commit is contained in:
Translator 2025-09-07 20:21:31 +00:00
parent 53b10dd3da
commit 259b81b4a1

View File

@ -2,20 +2,20 @@
{{#include ../../../banners/hacktricks-training.md}}
**Questo è un riepilogo delle tecniche di persistenza del dominio condivise in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Controllalo per ulteriori dettagli.
**Questa è una sintesi delle tecniche di persistenza nel dominio condivise in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Consulta il documento per ulteriori dettagli.
## Forging Certificates with Stolen CA Certificates - DPERSIST1
## Falsificazione di certificati con certificati CA rubati - DPERSIST1
Come puoi capire che un certificato è un certificato CA?
Come puoi riconoscere che un certificato è un certificato CA?
Si può determinare che un certificato è un certificato CA se sono soddisfatte diverse condizioni:
- Il certificato è memorizzato sul server CA, con la sua chiave privata protetta dal DPAPI della macchina, o da hardware come un TPM/HSM se il sistema operativo lo supporta.
- I campi Issuer e Subject del certificato corrispondono al nome distinto della CA.
- È presente un'estensione "CA Version" esclusivamente nei certificati CA.
- Il certificato non ha campi Extended Key Usage (EKU).
- Il certificato è memorizzato sul server CA, con la sua chiave privata protetta dal DPAPI della macchina, oppure da hardware come TPM/HSM se il sistema operativo lo supporta.
- I campi Issuer e Subject del certificato corrispondono al distinguished name della CA.
- Un'estensione "CA Version" è presente esclusivamente nei certificati CA.
- Il certificato è privo dei campi Extended Key Usage (EKU).
Per estrarre la chiave privata di questo certificato, il tool `certsrv.msc` sul server CA è il metodo supportato tramite l'interfaccia grafica integrata. Tuttavia, questo certificato non differisce da altri memorizzati all'interno del sistema; pertanto, possono essere applicati metodi come la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) per l'estrazione.
Per estrarre la chiave privata di questo certificato, lo strumento `certsrv.msc` sul server CA è il metodo supportato tramite l'interfaccia grafica integrata. Tuttavia, questo certificato non differisce dagli altri memorizzati nel sistema; di conseguenza, possono essere applicati metodi come la [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) per l'estrazione.
Il certificato e la chiave privata possono anche essere ottenuti utilizzando Certipy con il seguente comando:
```bash
@ -36,28 +36,76 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
```
> [!WARNING]
> L'utente mirato per la falsificazione del certificato deve essere attivo e in grado di autenticarsi in Active Directory affinché il processo abbia successo. Falsificare un certificato per account speciali come krbtgt è inefficace.
> L'utente preso di mira per la falsificazione del certificato deve essere attivo e in grado di autenticarsi in Active Directory affinché il processo abbia successo. Falsificare un certificato per account speciali come krbtgt è inefficace.
Questo certificato falsificato sarà **valido** fino alla data di scadenza specificata e **finché il certificato CA radice è valido** (di solito da 5 a **10+ anni**). È anche valido per **macchine**, quindi combinato con **S4U2Self**, un attaccante può **mantenere la persistenza su qualsiasi macchina di dominio** finché il certificato CA è valido.\
Inoltre, i **certificati generati** con questo metodo **non possono essere revocati** poiché la CA non ne è a conoscenza.
Questo certificato falsificato sarà **valido** fino alla data di scadenza specificata e finché il certificato root CA è valido (di solito da 5 a **10+ anni**). È anche valido per le **macchine**, quindi, combinato con **S4U2Self**, un attaccante può **mantenere la persistenza su qualsiasi macchina del dominio** per tutto il periodo di validità del certificato CA.\
Inoltre, i **certificati generati** con questo metodo **non possono essere revocati**, poiché la CA non ne è a conoscenza.
## Fiducia nei certificati CA non autorizzati - DPERSIST2
### Operare con Strong Certificate Mapping Enforcement (2025+)
L'oggetto `NTAuthCertificates` è definito per contenere uno o più **certificati CA** all'interno del suo attributo `cacertificate`, che Active Directory (AD) utilizza. Il processo di verifica da parte del **controller di dominio** prevede il controllo dell'oggetto `NTAuthCertificates` per un'entrata corrispondente alla **CA specificata** nel campo Issuer del **certificato** di autenticazione. L'autenticazione procede se viene trovata una corrispondenza.
Dal 11 febbraio 2025 (dopo il rollout di KB5014754), i domain controller impostano per default **Full Enforcement** per le mappature dei certificati. In pratica ciò significa che i tuoi certificati falsificati devono o:
Un certificato CA autofirmato può essere aggiunto all'oggetto `NTAuthCertificates` da un attaccante, a condizione che abbia il controllo su questo oggetto AD. Normalmente, solo i membri del gruppo **Enterprise Admin**, insieme a **Domain Admins** o **Administrators** nel **dominio radice della foresta**, hanno il permesso di modificare questo oggetto. Possono modificare l'oggetto `NTAuthCertificates` utilizzando `certutil.exe` con il comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA126`, oppure impiegando il [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
- Contenere un legame forte con l'account di destinazione (per esempio, la SID security extension), oppure
- Essere abbinati a una mappatura esplicita e forte nell'attributo `altSecurityIdentities` dell'oggetto di destinazione.
Questa capacità è particolarmente rilevante quando utilizzata in combinazione con un metodo precedentemente descritto che coinvolge ForgeCert per generare certificati dinamicamente.
Un approccio affidabile per la persistenza è emettere un certificato falsificato concatenato all'Enterprise CA rubata e poi aggiungere una mappatura esplicita e forte al principal della vittima:
```powershell
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
$SerialR = '1200000000AC11000000002B' # serial in reversed byte order
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
```
Note
- Se puoi creare certificati falsificati che includono l'estensione di sicurezza SID, questi verranno mappati implicitamente anche con Full Enforcement. Altrimenti, preferisci mappature esplicite e robuste. Vedi
[account-persistence](account-persistence.md) per ulteriori informazioni sulle mappature esplicite.
- La revoca non aiuta i difensori qui: i certificati falsificati sono sconosciuti al database CA e quindi non possono essere revocati.
## Trusting Rogue CA Certificates - DPERSIST2
The `NTAuthCertificates` object is defined to contain one or more **certificati CA** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **controller di dominio** involves checking the `NTAuthCertificates` object for an entry matching the **CA specificata** in the Issuer field of the authenticating **certificato**. Authentication proceeds if a match is found.
Un certificato CA self-signed può essere aggiunto all'oggetto `NTAuthCertificates` da un attaccante, a condizione che abbia il controllo su questo oggetto AD. Normalmente, solo i membri del gruppo **Enterprise Admin**, insieme a **Domain Admins** o **Administrators** nel **forest roots domain**, hanno il permesso di modificare questo oggetto. Possono modificare l'oggetto `NTAuthCertificates` usando `certutil.exe` con il comando `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, oppure impiegando lo [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
Additional helpful commands for this technique:
```bash
# Add/remove and inspect the Enterprise NTAuth store
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
certutil -enterprise -viewstore NTAuth
certutil -enterprise -delstore NTAuth <Thumbprint>
# (Optional) publish into AD CA containers to improve chain building across the forest
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
```
Questa capacità è particolarmente rilevante quando usata insieme a un metodo descritto in precedenza che utilizza ForgeCert per generare dinamicamente certificati.
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
## Configurazione malevola - DPERSIST3
Le opportunità per la **persistenza** attraverso **modifiche del descrittore di sicurezza dei componenti AD CS** sono abbondanti. Le modifiche descritte nella sezione "[Domain Escalation](domain-escalation.md)" possono essere implementate in modo malevolo da un attaccante con accesso elevato. Questo include l'aggiunta di "diritti di controllo" (ad es., WriteOwner/WriteDACL/etc.) a componenti sensibili come:
Le opportunità per **persistence** tramite modifiche dei security descriptor dei componenti di **AD CS** sono numerose. Le modifiche descritte nella sezione "[Domain Escalation](domain-escalation.md)" possono essere implementate in modo malevolo da un attacker con accesso elevato. Questo include l'aggiunta di "control rights" (ad es., WriteOwner/WriteDACL/etc.) a componenti sensibili quali:
- L'oggetto computer AD del **server CA**
- Il **server RPC/DCOM del server CA**
- Qualsiasi **oggetto o contenitore AD discendente** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (ad esempio, il contenitore dei modelli di certificato, il contenitore delle autorità di certificazione, l'oggetto NTAuthCertificates, ecc.)
- **Gruppi AD a cui sono delegati diritti per controllare AD CS** per impostazione predefinita o dall'organizzazione (come il gruppo Cert Publishers integrato e qualsiasi dei suoi membri)
- L'oggetto **computer AD del CA server**
- Il **server RPC/DCOM del CA server**
- Qualsiasi **oggetto AD discendente o contenitore** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (ad esempio, il Certificate Templates container, il Certification Authorities container, l'oggetto NTAuthCertificates, ecc.)
- **AD groups delegati con diritti di controllo su AD CS** di default o dalla organizzazione (come il gruppo incorporato Cert Publishers e qualsiasi suo membro)
Un esempio di implementazione malevola coinvolgerebbe un attaccante, che ha **permessi elevati** nel dominio, nell'aggiungere il permesso **`WriteOwner`** al modello di certificato **`User`** predefinito, con l'attaccante che è il principale per il diritto. Per sfruttare questo, l'attaccante cambierebbe prima la proprietà del modello **`User`** a se stesso. Successivamente, il **`mspki-certificate-name-flag`** verrebbe impostato su **1** sul modello per abilitare **`ENROLLEE_SUPPLIES_SUBJECT`**, consentendo a un utente di fornire un Subject Alternative Name nella richiesta. Successivamente, l'attaccante potrebbe **iscriversi** utilizzando il **modello**, scegliendo un nome di **domain administrator** come nome alternativo, e utilizzare il certificato acquisito per l'autenticazione come DA.
Un esempio di implementazione malevola coinvolgerebbe un attacker, che ha **elevated permissions** nel dominio, che aggiunge il permesso **`WriteOwner`** al template di certificato di default **`User`**, con l'attaccante come principale per il diritto. Per sfruttare ciò, l'attaccante cambierebbe prima la proprietà del template **`User`** su se stesso. Successivamente, la **`mspki-certificate-name-flag`** verrebbe impostata a **1** sul template per abilitare **`ENROLLEE_SUPPLIES_SUBJECT`**, permettendo a un utente di fornire un Subject Alternative Name nella richiesta. In seguito, l'attaccante potrebbe **enroll** usando il **template**, scegliendo come nome alternativo un **domain administrator**, e utilizzare il certificato acquisito per l'autenticazione come DA.
Impostazioni pratiche che un attacker può configurare per la persistence a lungo termine nel dominio (vedi {{#ref}}domain-escalation.md{{#endref}} per dettagli completi e rilevamento):
- Flag di policy della CA che permettono SAN dalle richieste (ad es., abilitare `EDITF_ATTRIBUTESUBJECTALTNAME2`). Questo mantiene percorsi simili a ESC1 sfruttabili.
- DACL del template o impostazioni che permettono issuance con capacità di autenticazione (ad es., aggiungere Client Authentication EKU, abilitare `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
- Controllare l'oggetto `NTAuthCertificates` o i container della CA per reintrodurre continuamente issuer rogue se i defenders tentano di pulire.
> [!TIP]
> In ambienti hardenizzati dopo KB5014754, accoppiare queste misconfigurazioni con mappature esplicite e forti (`altSecurityIdentities`) assicura che i certificati emessi o forged rimangano utilizzabili anche quando i DC applicano il strong mapping.
## Riferimenti
- Microsoft KB5014754 Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- Certipy Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
{{#include ../../../banners/hacktricks-training.md}}