Home » AD CS’i Yöneticinin Gözünden Denetlemek: ADCS.ESC.Assessment ile ESC1–ESC16 Taraması
Posted in

AD CS’i Yöneticinin Gözünden Denetlemek: ADCS.ESC.Assessment ile ESC1–ESC16 Taraması

Eğer bir Active Directory ortamı yönetiyorsanız, muhtemelen bir yerlerde çalışan bir Certificate Authority (CA) vardır — belki yıllar önce kurulmuş, belki “smart card / VPN / Wi-Fi çalışsın” diye bir şablon eklenip unutulmuş. AD CS böyle bir bileşendir: kurulur, işler ve genelde de bakılmaz. Sorun şu ki saldırganlar bakıyor.

Bu yazıda, AD CS ortamınızı ESC1–ESC16 yanlış yapılandırmalarına karşı tarayan, tamamen read-only çalışan ADCS.ESC.Assessment modülünü tanıtacağım. Ama “şu aracı yayınladım” demekle bırakmayacağım; bir yönetici olarak neyi neden taradığını, nasıl çalıştıracağınızı ve çıkan raporu nasıl okuyup düzelteceğinizi de anlatacağım.

> 📦 Kurulum: “Install-Module -Name ADCS.ESC.Assessment -Scope CurrentUser”
> 🔗 PowerShell Gallery: https://www.powershellgallery.com/packages/ADCS.ESC.Assessment
> 💻 Kaynak kod: https://github.com/m3gTech/ADCS.CA.Assessment

## Önce problem: “ESC” tam olarak ne demek?

AD CS’te bir kullanıcı, bir sertifika şablonuna (template) enroll (kayıt) olarak sertifika alır. Bu sertifika bir kimliktir — Kerberos PKINIT veya Schannel ile o sertifikayı gösteren kişi, sertifikanın işaret ettiği hesap olarak kimlik doğrular.

Şimdi tek bir yanlış yapılandırmayı düşünün:

– Bir şablonda “enrollee supplies subject” açık (yani sertifikayı isteyen kişi, kime ait olacağını kendisi yazabiliyor — Subject Alternative Name / SAN).
– Aynı şablonun EKU’sunda Client Authentication var (yani kimlik doğrulamada kullanılabiliyor).
– Ve Domain Users bu şablona enroll olabiliyor.

Bu üçü bir araya geldiğinde (klasik **ESC1**), sıradan bir kullanıcı şunu der:
* “Bana bir sertifika ver, ama üstüne ‘Administrator@domain’ yaz.”
* CA bunu verir. Kullanıcı artık Domain Admin olarak kimlik doğrulayabilir. Tek bir sertifika isteğiyle, hiçbir parola kırmadan.

İşte “ESC” (Escalation) bu tür yanlış yapılandırma sınıflarının adı. Topluluk bunları ESC1’den ESC16’ya kadar numaralandırdı:

| ESC | Kısaca ne |
|—–|———–|
| **ESC1** | Enrollee-supplied SAN + auth EKU (yukarıdaki senaryo) |
| **ESC2** | Any-Purpose / SubCA EKU’lu şablon |
| **ESC3** | Enrollment Agent sertifikası kötüye kullanımı |
| **ESC4** | Şablon üzerinde zayıf ACL (yazma yetkisi = ESC1’e çevirme) |
| **ESC5** | PKI objeleri (CA objesi, NTAuthCertificates vb.) üzerinde zayıf ACL |
| **ESC6** | CA’da `EDITF_ATTRIBUTESUBJECTALTNAME2` bayrağı (her istek SAN kabul eder) |
| **ESC7** | CA üzerinde ManageCA / ManageCertificates yetkisi |
| **ESC8** | Web enrollment (HTTP) + NTLM relay |
| **ESC9** | Sertifikada güvenlik uzantısının (szOID) olmaması |
| **ESC10** | Zayıf sertifika eşlemeleri (weak certificate mapping) |
| **ESC11** | ICertPassage RPC şifrelemesinin zorunlu olmaması (relay) |
| **ESC12** | CA sunucusuna shell / HSM erişimi |
| **ESC13** | OID group link ile grup üyeliği kazanma |
| **ESC14** | `altSecurityIdentities` üzerinden zayıf explicit eşleme |
| **ESC15** | EKUwu — application policies enjeksiyonu (**CVE-2024-49019**) |
| **ESC16** | Güvenlik uzantısının devre dışı bırakılması |

Bu tablodaki her satır tek başına bir domain compromise yolu olabilir. Ve hepsi; onlarca şablon, birden çok CA, iç içe ACL’ler ve registry bayrakları arasına dağılmış durumda. Bunu elle, ‘certutil’ çıktılarını gözle tarayarak bulmaya çalışmak — mümkün ama saatler alan ve hata payı yüksek bir iş.

## Aracın yaptığı şey: bu 16 sınıfı sizin yerinize denetlemek

ADCS.ESC.Assessment, tam olarak bir yöneticinin elle yapması gereken bu denetimi otomatikleştirir. Tek komutla ortamı gezer, ilgili verileri okur, ESC1–16 kurallarını uygular ve sonucu puanlı bir rapora döker.

Yönetici için önemli üç davranış:

1) Ne topluyor?
– LDAP üzerinden ‘CN=Configuration’ altındaki PKI objelerini: sertifika şablonları, Enrollment Services (yayınlanmış CA’lar), NTAuthCertificates, OID container’ları ve bunların ACL’leri.
– CA sunucularından ‘certutil -getreg’ ile registry ayarlarını (örn. ‘EDITF_…’ bayrakları, RPC şifreleme politikası).
– Web enrollment endpoint’lerinin varlığını ‘HTTP GET/HEAD’ ile.

2) Nasıl karar veriyor?
Enrollment (kayıt) haklarını gerçek sertifika isteyerek değil, ACL analiziyle hesaplayarak değerlendirir. Yani “Domain Users bu şablona enroll olabilir mi?” sorusunu, şablonun DACL’indeki Enroll ACE’lerini çözerek yanıtlar — kimseye sertifika istemeden.

3) Neye asla dokunmuyor?
Bu, üretim ortamında çalıştırmayı güvenli kılan kısım. Araç tasarım gereği read-only ve non-destructive:

– Hiçbir sertifika istenmez, verilmez veya submit edilmez.
– Hiçbir AD / CA objesi oluşturulmaz, değiştirilmez veya silinmez.
– İzin verilen tek işlemler: LDAP ‘search’, ‘certutil -getreg’ (okuma), registry okuma ve HTTP ‘GET/HEAD’.

Certipy ‘find’ gibi saldırı odaklı araçlar da benzer bulguları çıkarır; farkımız, bu aracı bir denetim (audit) penceresinde, üretim CA’sına karşı, “acaba bir şeyi bozar mı?” endişesi olmadan çalıştırabilmenizdir.

## Kurulum ve ilk çalıştırma (adım adım)

1. Kurulum

Herhangi bir yönetim istasyonunda:

“`powershell
Install-Module -Name ADCS.ESC.Assessment -Scope CurrentUser
Import-Module ADCS.ESC.Assessment
“`

Hangi hesapla çalıştırmalı? Canlı modda araç, LDAP okuması ve CA registry okuması yapar.Domain’e katılı bir Windows makinede, PKI objelerini ve CA registry’sini okuyabilen bir hesap yeterlidir. Pratikte bu genelde bir Enterprise/Domain Admin ya da CA üzerinde okuma yetkisi verilmiş bir yönetim hesabıdır. Tercihen RSAT ActiveDirectory modülünü kullanır; yoksa ‘System.DirectoryServices’ fallback’ine düşer, yani RSAT şart değildir. En iyi sonuç için CA sunucu üzerinde çalıştırmanız önerilir.

2. Canlı tarama

“`powershell
Invoke-ESCAssessment -OutputPath .\out
“`

Bittiğinde `.\out` altında iki dosya bulursunuz:

“`
out\esc-assessment-report.html ← insan için
out\esc-assessment-report.json ← makine için
“`

3. Sadece “ne okuduğunu” görmek isterseniz (read-only teyidi)

Kurumsal politikanız gereği önce aracın gerçekten okuma yaptığını görmek isteyebilirsiniz. Analiz ve rapor üretmeden yalnızca toplanan bağlamı dökün:

“`powershell
Invoke-ESCAssessment -CollectOnly | Select-Object -ExpandProperty Context
“`

Bu, hangi şablon/CA/ACL verisinin toplandığını gösterir — hiçbir değerlendirme yapılmadan.

## Raporu okumak: skorlar ne anlama geliyor?

HTML raporu, bir yöneticinin “önce neye bakmalıyım?” sorusuna göre tasarlandı.

Posture Score (0–100) + harf notu (A–F): Ortamın genel durumu. 99 / A temiz bir ortama, 0 / F ise en az bir kritik ESC’nin sömürülebilir olduğu bir ortama işaret eder.
Severity dağılımı: Bulguların kritik / yüksek / orta / düşük kırılımı — hangi başlığa öncelik vereceğinizi gösterir. (HTML Report’ta kırmızı-turuncu barlar şeklinde card görünümünde gözükmekte)
ESC bazlı bulgu kartları: Her bulgu için:
Evidence (kanıt): Bulguyu tetikleyen tam veri (hangi şablon, hangi ACE, hangi registry bayrağı).
Etkilenen obje: Şablonun/CA’nın adı — doğrudan gidip bakabileceğiniz.
Remediation (düzeltme): Ne yapmanız gerektiği (örn. “şablondan enrollee-supplied SAN bayrağını kaldırın”, “CA’da `EDITF_ATTRIBUTESUBJECTALTNAME2`’yi devre dışı bırakın”).
– İlgili dokümana link.

Her bulguya ayrıca 0–10 arası bir risk skoru verilir; böylece 40 bulgu çıksa bile hangilerini hızlıca kapatmanız gerektiği bellidir.

JSON tarafı ise otomasyon içindir. Şema şu biçimdedir:

“`json
{ “schemaVersion”: “…”, “meta”: { … }, “summary”: { … }, “findings”: [ … ] }
“`

Bunu bir SIEM’e besleyebilir, iki tarama arasındaki farkı (yeni açılan bir şablon, geri gelen bir bayrak) ‘diff’ ile yakalayabilir veya değişiklik yönetimi kayıtlarınıza kanıt olarak ekleyebilirsiniz. Örneğin taramayı bir scheduled task ile haftalık çalıştırıp JSON’ı arşivlemek, “AD CS postürümüz zaman içinde nasıl değişti?” sorusuna somut bir yanıt verir.

## İleri kullanım: yönetici eklentileri

Canlı modda, denetimi derinleştiren opsiyonel bayraklar var:

– ‘-ExportCaData’ — CA registry ayarlarını ve verilmiş sertifikaların envanterini dışa aktarır (okuma). Bir olay incelemesinde “bu şablondan geçen ay kaç sertifika çıkmış?” sorusuna bakmak için.
– ‘-BackupCa’ — CA’nın **read-only** yedeğini alır (değişiklik yapmadan, dökümantasyon/kanıt amaçlı).
– ‘-AnalyzeTemplateUsage’ — hangi şablonların gerçekte hiç kullanılmadığını gösterir. Kullanılmayan ama yayında duran riskli bir şablon, kapatmanız gereken ilk şeydir.

Bu eklentiler için modül ayrıca ‘Export-EscCaData’ komutunu da dışa aktarır.

## İleri kullanım: Full komut kullanımı ve çıktısı

– CA Backup ve CRL Export işlemleri ve Analyze Template Usage taramalarını tek komut altında aşağıdaki gibi kullanabilirsiniz.

CA Backup alabilmek için parola belirle:
$pwd = Read-Host "Backup Secret Password: " -AsSecureString

Invoke-ESCAssessment -OutputPath .\report -ExportCaData -BackupCa -CaBackupPassword $pwd -AnalyzeTemplateUsage

Bulunduğunuz dizinde report klasörü oluşturur. Report klasörünün altında hem raporları hem de CRL ve CA Export işlemleri ile backup dosyalarını bulabilirsiniz.

Rapor çıktısı aşağıdaki gibi olacaktır.

HTML Output
esc-assessment-report

 

Ekran Görüntülerinden bir kaç kesit aşağıdaki gibidir.


## Etik ve yasal not

ADCS.ESC.Assessment bir savunma / audit aracıdır. Yalnızca sahibi olduğunuz veya yazılı test izniniz bulunan ortamlarda çalıştırın. Read-only oluşu size ortamı bozmama garantisi verir; yetki sınırlarına saygı ise sizin sorumluluğunuzdadır.

## Kapanış ve yol haritası

AD CS’i güvende tutmanın ilk adımı onu görebilmektir. Bir yönetici olarak elinizde, üretimde güvenle çalıştırabileceğiniz, çıktısını hem insan hem makine okuyabileceğiniz ve size “önce şunu düzelt” diyen bir aracın olması, bu görünürlüğü haftalık bir rutine dönüştürmenizi sağlar.

Bu v0.1.0 — ilk genel sürümdür. Raporlama iyileştirmeleri, ek ESC teknikleri için tespit derinliği ve daha fazla fixture üzerinde çalışmaya devam ediyorum. Geri bildirim, issue ve katkılar için repo açık:

– 📦 PowerShell Gallery: https://www.powershellgallery.com/packages/ADCS.ESC.Assessment
– 💻 GitHub: https://github.com/m3gTech/ADCS.CA.Assessment
– 🌐 Web: https://www.emregul.com.tr · https://www.m3g.com.tr

Ortamınızda çalıştırdığınızda ne bulduğunuzu duymak isterim.

Faydalı olması dileğiyle..

Mustafa Emre GÜL — m3g Yazılım ve Danışmanlık

Leave a Reply

Your email address will not be published. Required fields are marked *