mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
136 lines
8.6 KiB
Markdown
136 lines
8.6 KiB
Markdown
# AD Sertifikati
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
## Uvod
|
||
|
||
### Komponente sertifikata
|
||
|
||
- The **Subject** sertifikata označava njegovog vlasnika.
|
||
- A **Public Key** je u paru sa privatnim ključem kako bi povezao sertifikat sa njegovim zakonitim vlasnikom.
|
||
- The **Validity Period**, definisan putem datuma **NotBefore** i **NotAfter**, označava važeći period sertifikata.
|
||
- Jedinstveni **Serial Number**, koji obezbeđuje Certificate Authority (CA), identifikuje svaki sertifikat.
|
||
- The **Issuer** označava CA koja je izdala sertifikat.
|
||
- **SubjectAlternativeName** omogućava dodatna imena za subject, povećavajući fleksibilnost identifikacije.
|
||
- **Basic Constraints** identifikuju da li je sertifikat za CA ili krajnji entitet i definišu ograničenja upotrebe.
|
||
- **Extended Key Usages (EKUs)** određuju specifične namene sertifikata, kao što su code signing ili email encryption, pomoću Object Identifiers (OIDs).
|
||
- The **Signature Algorithm** specificira metod za potpisivanje sertifikata.
|
||
- The **Signature**, kreirana privatnim ključem izdavaoca, garantuje autentičnost sertifikata.
|
||
|
||
### Posebne napomene
|
||
|
||
- **Subject Alternative Names (SANs)** proširuju primenjivost sertifikata na više identiteta, što je ključno za servere sa više domena. Bezbedni procesi izdavanja su vitalni da bi se izbegli rizici impersonacije ako napadači manipulišu specifikacijom SAN-a.
|
||
|
||
### Certificate Authorities (CAs) u Active Directory (AD)
|
||
|
||
AD CS prepoznaje CA sertifikate u AD forestu kroz određene kontejnere, od kojih svaki ima jedinstvenu ulogu:
|
||
|
||
- **Certification Authorities** kontejner sadrži poverene root CA sertifikate.
|
||
- **Enrolment Services** kontejner sadrži informacije o Enterprise CA i njihovim certificate templates.
|
||
- **NTAuthCertificates** objekat uključuje CA sertifikate ovlašćene za AD autentikaciju.
|
||
- **AIA (Authority Information Access)** kontejner olakšava validaciju lanca sertifikata pomoću posredničkih (intermediate) i cross-CA sertifikata.
|
||
|
||
### Nabavka sertifikata: Tok zahteva klijenta za sertifikat
|
||
|
||
1. Proces započinje kada klijenti pronađu Enterprise CA.
|
||
2. CSR se kreira i sadrži public key i ostale podatke, nakon generisanja para public-private ključeva.
|
||
3. CA procenjuje CSR u odnosu na dostupne certificate templates i izdaje sertifikat na osnovu permisija definisanih šablonom.
|
||
4. Nakon odobrenja, CA potpisuje sertifikat svojim privatnim ključem i vraća ga klijentu.
|
||
|
||
### Certificate Templates
|
||
|
||
Definisani u AD, ovi šabloni navode podešavanja i dozvole za izdavanje sertifikata, uključujući dozvoljene EKU-ove i prava za enrolovanje ili izmene, što je kritično za upravljanje pristupom servisima za sertifikate.
|
||
|
||
## Enrolovanje sertifikata
|
||
|
||
Proces enrolovanja sertifikata pokreće administrator koji **kreira šablon sertifikata**, koji potom **objavljuje** Enterprise Certificate Authority (CA). Time je šablon dostupan za enrolovanje klijenata, što se postiže dodavanjem imena šablona u polje `certificatetemplates` objekta u Active Directory.
|
||
|
||
Da bi klijent mogao da zatraži sertifikat, moraju mu biti dodeljena **prava za enrolovanje**. Ta prava su definisana kroz security descriptor-e na šablonu sertifikata i na samom Enterprise CA. Dozvole moraju biti dodeljene na oba mesta da bi zahtev bio uspešan.
|
||
|
||
### Prava za enrolovanje šablona
|
||
|
||
Ova prava su specificirana kroz Access Control Entries (ACEs), i detalji dozvola uključuju, na primer:
|
||
|
||
- **Certificate-Enrollment** i **Certificate-AutoEnrollment** prava, svako povezano sa specifičnim GUID-ovima.
|
||
- **ExtendedRights**, dozvoljavajući sve extended permisije.
|
||
- **FullControl/GenericAll**, pružajući potpunu kontrolu nad šablonom.
|
||
|
||
### Prava za enrolovanje na Enterprise CA
|
||
|
||
Prava CA su navedena u njegovom security descriptor-u, dostupnom preko Certificate Authority management konzole. Neka podešavanja čak omogućavaju udaljeni pristup korisnicima sa niskim privilegijama, što može predstavljati sigurnosni rizik.
|
||
|
||
### Dodatne kontrole izdavanja
|
||
|
||
Mogu važiti određene kontrole, kao što su:
|
||
|
||
- **Manager Approval**: Stavlja zahteve u pending stanje dok ih ne odobri menadžer za sertifikate.
|
||
- **Enrolment Agents and Authorized Signatures**: Specifikuju broj potrebnih potpisa na CSR-u i neophodne Application Policy OID-ove.
|
||
|
||
### Metode za zahtevanje sertifikata
|
||
|
||
Sertifikati se mogu tražiti putem:
|
||
|
||
1. Windows Client Certificate Enrollment Protocol (MS-WCCE), korišćenjem DCOM interfejsa.
|
||
2. ICertPassage Remote Protocol (MS-ICPR), preko named pipes ili TCP/IP.
|
||
3. certificate enrollment web interface, uz instaliranu Certificate Authority Web Enrollment ulogu.
|
||
4. Certificate Enrollment Service (CES), u saradnji sa Certificate Enrollment Policy (CEP) servisom.
|
||
5. Network Device Enrollment Service (NDES) za mrežne uređaje, koristeći Simple Certificate Enrollment Protocol (SCEP).
|
||
|
||
Korisnici na Windows-u mogu takođe zahtevati sertifikate preko GUI-ja (`certmgr.msc` ili `certlm.msc`) ili alata iz komandne linije (`certreq.exe` ili PowerShell komande `Get-Certificate`).
|
||
```bash
|
||
# Example of requesting a certificate using PowerShell
|
||
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
|
||
```
|
||
## Certificate Authentication
|
||
|
||
Active Directory (AD) podržava autentifikaciju pomoću sertifikata, prvenstveno koristeći protokole **Kerberos** i **Secure Channel (Schannel)**.
|
||
|
||
### Kerberos Authentication Process
|
||
|
||
U Kerberos procesu autentifikacije, zahtev korisnika za Ticket Granting Ticket (TGT) se potpisuje koristeći **privatni ključ** korisnikovog sertifikata. Ovaj zahtev prolazi kroz nekoliko provera od strane kontrolera domena, uključujući **validnost**, **putanju** i **status opoziva** sertifikata. Provere takođe uključuju verifikaciju da sertifikat potiče iz poverenog izvora i potvrdu prisustva izdavaoca u **NTAUTH skladištu sertifikata**. Uspešne provere rezultuju izdavanjem TGT-a. Objekat **`NTAuthCertificates`** u AD, koji se nalazi na:
|
||
```bash
|
||
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
|
||
```
|
||
je centralno za uspostavljanje poverenja za autentifikaciju sertifikatom.
|
||
|
||
### Secure Channel (Schannel) Authentication
|
||
|
||
Schannel omogućava sigurne TLS/SSL veze, gde tokom handshake-a klijent predstavlja sertifikat koji, ako je uspešno verifikovan, ovlašćuje pristup. Mapiranje sertifikata na AD nalog može uključivati Kerberosovu funkciju **S4U2Self** ili **Subject Alternative Name (SAN)** sertifikata, između ostalih metoda.
|
||
|
||
### AD Certificate Services Enumeration
|
||
|
||
AD-ove usluge sertifikata mogu se enumerisati kroz LDAP upite, otkrivajući informacije o **Enterprise Certificate Authorities (CAs)** i njihovim konfiguracijama. Ovo je dostupno svakom korisniku autentifikovanom u domenu bez posebnih privilegija. Alati kao što su **[Certify](https://github.com/GhostPack/Certify)** i **[Certipy](https://github.com/ly4k/Certipy)** koriste se za enumeraciju i procenu ranjivosti u AD CS okruženjima.
|
||
|
||
Komande za korišćenje ovih alata uključuju:
|
||
```bash
|
||
# Enumerate trusted root CA certificates, Enterprise CAs and HTTP enrollment endpoints
|
||
# Useful flags: /domain, /path, /hideAdmins, /showAllPermissions, /skipWebServiceChecks
|
||
Certify.exe cas [/ca:SERVER\ca-name | /domain:domain.local | /path:CN=Configuration,DC=domain,DC=local] [/hideAdmins] [/showAllPermissions] [/skipWebServiceChecks]
|
||
|
||
# Identify vulnerable certificate templates and filter for common abuse cases
|
||
Certify.exe find
|
||
Certify.exe find /vulnerable [/currentuser]
|
||
Certify.exe find /enrolleeSuppliesSubject # ESC1 candidates (CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT)
|
||
Certify.exe find /clientauth # templates with client-auth EKU
|
||
Certify.exe find /showAllPermissions # include template ACLs in output
|
||
Certify.exe find /json /outfile:C:\Temp\adcs.json
|
||
|
||
# Enumerate PKI object ACLs (Enterprise PKI container, templates, OIDs) – useful for ESC4/ESC7 discovery
|
||
Certify.exe pkiobjects [/domain:domain.local] [/showAdmins]
|
||
|
||
# Use Certipy for enumeration and identifying vulnerable templates
|
||
certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
|
||
|
||
# Enumerate Enterprise CAs and certificate templates with certutil
|
||
certutil.exe -TCAInfo
|
||
certutil -v -dstemplate
|
||
```
|
||
## Izvori
|
||
|
||
- [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)
|
||
- [GhostPack/Certify](https://github.com/GhostPack/Certify)
|
||
- [GhostPack/Rubeus](https://github.com/GhostPack/Rubeus)
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|