hacktricks/windows-hardening/active-directory-methodology/ad-certificates.md

147 lines
10 KiB
Markdown
Raw Normal View History

# AD Certificates
2022-08-31 17:18:31 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-08-31 17:18:31 +00:00
<details>
2022-08-31 17:18:31 +00:00
<summary>Support HackTricks</summary>
2024-01-02 18:28:27 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-08-31 17:18:31 +00:00
</details>
{% endhint %}
2022-08-31 17:18:31 +00:00
2024-02-10 13:03:23 +00:00
## Introduzione
2022-08-31 20:58:00 +00:00
### Componenti di un Certificato
2022-08-31 17:18:31 +00:00
- Il **Soggetto** del certificato denota il suo proprietario.
- Una **Chiave Pubblica** è abbinata a una chiave privata per collegare il certificato al suo legittimo proprietario.
- Il **Periodo di Validità**, definito dalle date **NotBefore** e **NotAfter**, segna la durata effettiva del certificato.
- Un **Numero di Serie** unico, fornito dall'Autorità di Certificazione (CA), identifica ciascun certificato.
2024-02-10 13:03:23 +00:00
- L'**Emittente** si riferisce alla CA che ha emesso il certificato.
- **SubjectAlternativeName** consente nomi aggiuntivi per il soggetto, migliorando la flessibilità di identificazione.
- **Basic Constraints** identificano se il certificato è per una CA o un'entità finale e definiscono le restrizioni d'uso.
- **Extended Key Usages (EKUs)** delineano gli scopi specifici del certificato, come la firma del codice o la crittografia delle email, attraverso Identificatori di Oggetto (OIDs).
2024-02-10 13:03:23 +00:00
- L'**Algoritmo di Firma** specifica il metodo per firmare il certificato.
- La **Firma**, creata con la chiave privata dell'emittente, garantisce l'autenticità del certificato.
2022-08-31 17:18:31 +00:00
### Considerazioni Speciali
2022-08-31 20:58:00 +00:00
- I **Subject Alternative Names (SANs)** espandono l'applicabilità di un certificato a più identità, cruciale per i server con più domini. Processi di emissione sicuri sono vitali per evitare rischi di impersonificazione da parte di attaccanti che manipolano la specifica SAN.
2022-08-31 20:58:00 +00:00
2024-02-10 13:03:23 +00:00
### Autorità di Certificazione (CA) in Active Directory (AD)
2022-08-31 20:58:00 +00:00
AD CS riconosce i certificati CA in un bosco AD attraverso contenitori designati, ognuno con ruoli unici:
2022-08-31 17:18:31 +00:00
- Il contenitore **Certification Authorities** contiene certificati CA radice fidati.
- Il contenitore **Enrolment Services** dettaglia le CA aziendali e i loro modelli di certificato.
- L'oggetto **NTAuthCertificates** include certificati CA autorizzati per l'autenticazione AD.
- Il contenitore **AIA (Authority Information Access)** facilita la validazione della catena di certificati con certificati CA intermedi e incrociati.
2022-08-31 17:18:31 +00:00
### Acquisizione del Certificato: Flusso di Richiesta del Certificato Client
2022-08-31 17:18:31 +00:00
2024-02-10 13:03:23 +00:00
1. Il processo di richiesta inizia con i client che trovano una CA aziendale.
2. Viene creato un CSR, contenente una chiave pubblica e altri dettagli, dopo aver generato una coppia di chiavi pubblica-privata.
3. La CA valuta il CSR rispetto ai modelli di certificato disponibili, emettendo il certificato in base ai permessi del modello.
4. Una volta approvato, la CA firma il certificato con la sua chiave privata e lo restituisce al client.
2022-08-31 17:18:31 +00:00
### Modelli di Certificato
2022-08-31 17:18:31 +00:00
Definiti all'interno di AD, questi modelli delineano le impostazioni e i permessi per l'emissione dei certificati, inclusi EKU consentiti e diritti di iscrizione o modifica, critici per gestire l'accesso ai servizi di certificato.
2022-08-31 17:18:31 +00:00
## Iscrizione al Certificato
2022-08-31 17:18:31 +00:00
Il processo di iscrizione per i certificati è avviato da un amministratore che **crea un modello di certificato**, che viene poi **pubblicato** da un'Autorità di Certificazione (CA) aziendale. Questo rende il modello disponibile per l'iscrizione del client, un passaggio ottenuto aggiungendo il nome del modello al campo `certificatetemplates` di un oggetto Active Directory.
2022-08-31 17:18:31 +00:00
Per un client per richiedere un certificato, devono essere concessi **diritti di iscrizione**. Questi diritti sono definiti da descrittori di sicurezza sul modello di certificato e sulla CA aziendale stessa. I permessi devono essere concessi in entrambe le posizioni affinché una richiesta abbia successo.
2022-08-31 17:18:31 +00:00
### Diritti di Iscrizione del Modello
2022-08-31 17:18:31 +00:00
Questi diritti sono specificati attraverso Access Control Entries (ACEs), dettagliando permessi come:
- Diritti di **Certificate-Enrollment** e **Certificate-AutoEnrollment**, ciascuno associato a GUID specifici.
- **ExtendedRights**, che consentono tutti i permessi estesi.
- **FullControl/GenericAll**, fornendo il controllo completo sul modello.
2022-08-31 17:18:31 +00:00
### Diritti di Iscrizione della CA Aziendale
2022-08-31 17:18:31 +00:00
I diritti della CA sono delineati nel suo descrittore di sicurezza, accessibile tramite la console di gestione dell'Autorità di Certificazione. Alcune impostazioni consentono anche a utenti con privilegi ridotti l'accesso remoto, il che potrebbe essere una preoccupazione per la sicurezza.
2022-08-31 17:18:31 +00:00
### Controlli Aggiuntivi per l'Emissione
2022-08-31 17:18:31 +00:00
Possono applicarsi controlli specifici, come:
- **Approvazione del Manager**: pone le richieste in uno stato di attesa fino all'approvazione da parte di un manager di certificati.
- **Agenti di Iscrizione e Firme Autorizzate**: specificano il numero di firme richieste su un CSR e i necessari OIDs di Politica Applicativa.
2022-08-31 17:18:31 +00:00
### Metodi per Richiedere Certificati
2022-08-31 17:18:31 +00:00
2024-02-10 13:03:23 +00:00
I certificati possono essere richiesti tramite:
1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), utilizzando interfacce DCOM.
2. **ICertPassage Remote Protocol** (MS-ICPR), tramite pipe nominate o TCP/IP.
3. L'**interfaccia web di iscrizione ai certificati**, con il ruolo di Web Enrollment dell'Autorità di Certificazione installato.
4. Il **Certificate Enrollment Service** (CES), in combinazione con il servizio di Politica di Iscrizione ai Certificati (CEP).
5. Il **Network Device Enrollment Service** (NDES) per dispositivi di rete, utilizzando il Simple Certificate Enrollment Protocol (SCEP).
2022-08-31 17:18:31 +00:00
Gli utenti Windows possono anche richiedere certificati tramite l'interfaccia GUI (`certmgr.msc` o `certlm.msc`) o strumenti da riga di comando (`certreq.exe` o il comando `Get-Certificate` di PowerShell).
2024-02-08 03:08:28 +00:00
```powershell
# Example of requesting a certificate using PowerShell
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
```
## Autenticazione con Certificato
2022-08-31 17:18:31 +00:00
Active Directory (AD) supporta l'autenticazione con certificato, utilizzando principalmente i protocolli **Kerberos** e **Secure Channel (Schannel)**.
2022-08-31 17:18:31 +00:00
### Processo di Autenticazione Kerberos
2022-08-31 17:18:31 +00:00
Nel processo di autenticazione Kerberos, la richiesta di un utente per un Ticket Granting Ticket (TGT) è firmata utilizzando la **chiave privata** del certificato dell'utente. Questa richiesta subisce diverse validazioni da parte del controller di dominio, inclusi la **validità**, il **percorso** e lo **stato di revoca** del certificato. Le validazioni includono anche la verifica che il certificato provenga da una fonte affidabile e la conferma della presenza dell'emittente nel **NTAUTH certificate store**. Validazioni riuscite portano all'emissione di un TGT. L'oggetto **`NTAuthCertificates`** in AD, si trova a:
2024-02-08 03:08:28 +00:00
```bash
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
```
è centrale per stabilire fiducia per l'autenticazione dei certificati.
2022-08-31 17:18:31 +00:00
### Autenticazione Secure Channel (Schannel)
2022-08-31 17:18:31 +00:00
Schannel facilita connessioni TLS/SSL sicure, dove durante un handshake, il client presenta un certificato che, se validato con successo, autorizza l'accesso. La mappatura di un certificato a un account AD può coinvolgere la funzione **S4U2Self** di Kerberos o il **Subject Alternative Name (SAN)** del certificato, tra i vari metodi.
2022-08-31 17:18:31 +00:00
### Enumerazione dei Servizi di Certificato AD
2022-08-31 17:18:31 +00:00
I servizi di certificato di AD possono essere enumerati tramite query LDAP, rivelando informazioni sulle **Enterprise Certificate Authorities (CAs)** e le loro configurazioni. Questo è accessibile da qualsiasi utente autenticato nel dominio senza privilegi speciali. Strumenti come **[Certify](https://github.com/GhostPack/Certify)** e **[Certipy](https://github.com/ly4k/Certipy)** sono utilizzati per l'enumerazione e la valutazione delle vulnerabilità negli ambienti AD CS.
2022-08-31 17:18:31 +00:00
I comandi per utilizzare questi strumenti includono:
2022-08-31 17:18:31 +00:00
```bash
2024-02-08 03:08:28 +00:00
# Enumerate trusted root CA certificates and Enterprise CAs with Certify
Certify.exe cas
# Identify vulnerable certificate templates with Certify
Certify.exe find /vulnerable
2022-09-02 13:32:02 +00:00
2024-02-08 03:08:28 +00:00
# Use Certipy for enumeration and identifying vulnerable templates
certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
2022-08-31 17:18:31 +00:00
2024-02-08 03:08:28 +00:00
# Enumerate Enterprise CAs and certificate templates with certutil
certutil.exe -TCAInfo
certutil -v -dstemplate
2022-08-31 17:18:31 +00:00
```
2024-02-10 13:03:23 +00:00
## Riferimenti
2022-08-31 17:18:31 +00:00
* [https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf)
* [https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html](https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html)
{% hint style="success" %}
Impara e pratica il hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-08-31 17:18:31 +00:00
<details>
2022-08-31 17:18:31 +00:00
<summary>Supporta HackTricks</summary>
2024-01-02 18:28:27 +00:00
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
2022-08-31 17:18:31 +00:00
</details>
{% endhint %}