LDAP bağlantısında güvenlik: Bind, SASL, LDAPS, signing ve channel binding.
LDAP bind istemciyi authenticate eder; tek başına oturum güvenliğini açıklamaz. simple ve SASL farklı authentication biçimleridir. TLS, doğru sertifika doğrulamasıyla taşıma gizliliği ve bütünlüğü sağlar; LDAPServerIntegrity gereksinimini de karşılar. SASL signing/sealing ve TLS channel binding farklı durumlara yöneliktir. CBT, TLS üzerindeki SASL authentication için geçerlidir; TLS simple bind’de kullanılmaz.
1. Core Mechanism / Temel mekanizma
Bu ders RFC 4511 §4.2’deki BindRequest alternatiflerini (simple [0], sasl [3]) temel alır. Oturum türlerini birbirinden ayırır; TLS, SASL security layer ve channel binding her bind türüne aynı şekilde uygulanmaz. Oturum türü için Microsoft KB4563239 esas alınır: TLS, LDAPServerIntegrity gereksinimi için signing/integrity sağlar; CBT TLS üzerindeki SASL authentication için geçerlidir, TLS simple bind’de CBT yoktur ve istemcinin doğru sertifika doğrulamasına bağlıdır. Policy değerleri ve tanılama olayları Microsoft KB4520412 ile LDAP signing yönergesine göre kontrol edilmiştir.
Arabirimler ve belirtimler
- simple bind: BindRequest authentication=simple [0] OCTET STRING credential’ı (çoğunlukla parola) taşır; TLS simple bind’de CBT yoktur (RFC 4511 §4.2; KB4563239).
- SASL bind: authentication=sasl [3] SaslCredentials mechanism ve credentials alanlarını taşır; ör. Negotiate, Kerberos, NTLM veya Digest (RFC 4511 §4.2).
- TLS/LDAPS: 636 portunda bağlantı kurarken TLS başlar; 389’da StartTLS ile de bağlantı korunabilir. Doğru doğrulanan TLS, taşıma gizliliği ve bütünlüğü sağlar.
- LDAPServerIntegrity: LDAPServerIntegrity=2, ilgili korumasız oturumlarda signing’i zorunlu kılar. TLS signing/integrity sağlar ve bu gereksinimi karşılar; TLS olmayan SASL oturumunda istemci signing veya sealing istemelidir.
- SASL signing ve sealing: Mekanizmaya ve anlaşılan korumaya bağlı olarak TLS olmayan oturumlarda LDAP mesaj bütünlüğü ve gizliliği sağlayabilir.
- Channel binding (CBT): TLS üzerindeki SASL authentication’da auth bağlamını TLS oturumuna kriptografik olarak bağlar; TLS simple bind için geçerli değildir (KB4563239).
- Policy değerleri: NTDS\Parameters altındaki LDAPServerIntegrity (None=1, Require Signing=2) ve LdapEnforceChannelBinding (Never=0, When Supported=1, Always=2) (KB4520412).
Bind, 'kimsin' sorusunun cevabıdır
LDAP Bind, istemcinin sunucuya kendini tanıttığı authentication adımıdır (RFC 4511 §4.2). simple bind credential’ı simple [0] OCTET STRING seçeneğinde taşır; SASL bind ise mechanism ve credentials bilgisini sasl [3] seçeneğinde taşır.
Bind’in başarılı olması hangi korumaların kullanıldığını göstermez. TLS olmayan simple bind parolayı açık iletir; TLS simple bind taşıma katmanını korur ancak CBT kullanmaz. SASL bind’de mekanizmaya ve oturum türüne bağlı olarak signing veya sealing anlaşılabilir.
Farklı oturum korumaları: TLS, SASL signing/sealing ve CBT
TLS/LDAPS taşıma katmanını korur. Sunucu sertifikası doğru doğrulanıyorsa gizlilik ve bütünlük sağlar ve LDAPServerIntegrity gereksinimini karşılar. SASL signing, uygun TLS olmayan SASL oturumlarında LDAP mesaj bütünlüğü sağlar; SASL sealing, mekanizmaya bağlı olarak gizlilik de ekleyebilir. CBT farklı bir işi yapar: TLS üzerindeki SASL authentication bağlamını o TLS oturumuna bağlar ve TLS kanalları arasındaki relay’i önlemeye yardımcı olur (KB4563239).
CBT kuralını her bind türüne uygulama. Microsoft, TLS simple bind’e CBT eklenmediğini söylüyor; bu oturum türünde istemcinin sertifika adı ve iptal durumunu doğrulaması önemlidir. TLS+SASL authentication’da, belgelenen NTLM senaryosu dahil, ayrı relay kontrolü channel binding’dir.
AD'de bunu açan kontroller
AD domain controller’da “Domain controller: LDAP server signing requirements” policy’si LDAPServerIntegrity değerine karşılık gelir (None=1, Require Signing=2). TLS oturumları için TLS kanalı signing/integrity sağlar; TLS olmayan SASL oturumunda Require Signing, istemci signing istemediyse bind’i reddeder. Signing zorunluysa cleartext simple bind’ler de reddedilir (KB4520412; KB4563239).
“Domain controller: LDAP server channel binding token requirements” policy’si LdapEnforceChannelBinding değerlerine karşılık gelir (Never=0, When Supported=1, Always=2). Bu policy TLS üzerindeki ilgili SASL authentication oturumlarını yönetir; TLS simple bind’e etkisi yoktur (KB4563239). Güncel Microsoft Learn varsayılan bilgisine göre yeni Windows Server 2025 kurulumlarında signing varsayılan olarak zorunlu, CBT ise When Supported’dır; yükseltmeler mevcut policy’yi korur. Bu yüzden varsayılanlar kurulum geçmişine göre değişir; hedef DC’nin etkin policy’sini incele.
Neden bu ayrım relay'i belirler
Relay analizinde oturum türünü belirle. TLS üzerindeki SASL/NTLM authentication’da TLS transport’u şifreler ve korur, ancak CBT yoksa authentication context’i o TLS session’a bağlanmaz. TLS olmayan SASL oturumunda signing/sealing bütünlük ve gizlilik sağlar. Cleartext simple bind parolayı açığa çıkarır. Bunlar farklı senaryolardır; “TLS açık” tek başına yeterli bir değerlendirme değildir.
Hedef DC’nin etkin signing ve channel-binding policy’lerini, istemcinin bind türü ve mekanizmasını, TLS sertifika doğrulamasının sonucunu ve ilgili tanılama olaylarını birlikte kaydet. Sonraki NTLM relay dersi bu ayrımı kullanır.
Durum ve veri akışı
- İstemci LDAP 389/3268 portuna bağlanır veya 636/3269’da TLS başlatır; desteklenen portta StartTLS de kullanabilir.
- İstemci BindRequest gönderir: credential ile simple [0] ya da mechanism ve credential ile SASL [3].
- TLS olmayan SASL oturumunda signing/sealing anlaşılabilir. TLS+SASL oturumunda CBT eklenebilir; TLS simple bind CBT kullanmaz.
- LDAPServerIntegrity=2 ilgili korumasız oturumlarda koruma ister: imzasız TLS olmayan SASL ve cleartext simple bind’i reddeder. TLS kendisi signing/integrity sağlar ve bu gereksinimi karşılar.
- LdapEnforceChannelBinding=2 (Always), TLS üzerindeki ilgili SASL authentication için geçerli CBT ister; TLS simple bind üzerinde etkisi yoktur.
- Tanılama kanıtı oturum türüne göre okunur: 2887 kabul edilen imzasız TLS olmayan bind’leri özetler, 2888 reddedilen girişimleri özetler, 2889 diagnostic level 2+ ile istemciyi gösterir ve 3039 CBT doğrulama başarısızlığını bildirir.
2. Exploitation / İstismar
Broken trust assumption
Kırılan varsayım şudur: TLS tek başına her LDAP authentication’ı TLS oturumuna bağlar ve relay’i engeller.
Technical prerequisites
- Saldırganın bir authentication denemesini yakalayıp veya tetikleyip LDAP endpoint’ine relay edebildiği bir konum.
- TLS olmayan SASL relay yolu için hedef signing’i zorunlu kılmıyor ve istemci SASL signing/sealing anlaşmıyor.
- TLS+SASL/NTLM relay yolu için etkin policy CBT istemiyor ya da istemci policy kapsamında geçerli token sunmuyor.
- Kullanılan mekanizma ve hedef DC relayed authentication’ı kabul ediyor; hedef DC ve bind türü ayrıca değerlendirilmiş olmalı.
- Ayrı bir cleartext simple bind riski TLS’siz bağlantıda oluşur: parola açığa çıkar. TLS simple bind’de CBT yoktur; doğru TLS sunucu sertifikası doğrulaması gerekir.
Exploitation mechanism / İstismar mekanizması
Relay yolu oturum türüne bağlıdır. Signing zorunlu değilse imzasız TLS olmayan SASL bind kabul edilebilir; cleartext simple bind parolayı açığa çıkarır. TLS+SASL/NTLM oturumunda TLS kanalı korur, fakat geçerli CBT yoksa authentication context başka bir TLS session üzerinden relay edilebilir. TLS, LDAPServerIntegrity için signing/integrity sağlar; ancak SASL authentication’ı TLS’e channel-bind etmez. TLS simple bind ayrı bir durumdur: CBT eklenmez ve istemci sunucu sertifikasını doğru doğrulamalıdır.
Her kontrol farklı bir kapıyı kapatır
Relay analizini “TLS açık mı?” sorusunda bitirme. Bind’in simple mı SASL mı olduğunu, SASL mekanizması NTLM ise bunu, signing/sealing durumunu, TLS sertifika doğrulamasının başarıp başarmadığını ve ilgili TLS+SASL oturumunda CBT bulunup bulunmadığını kaydet.
Sonucu koşullu yaz: TLS olmayan imzasız SASL bind, CBT gerektirmeyen TLS+SASL/NTLM oturumu ve cleartext simple bind farklı bulgulardır ve etkileri de farklıdır.
Sürüm ve policy sonucu değiştirir
Aynı deneme farklı DC’lerde farklı sonuç verebilir; etkin policy, işletim sistemi sürümü ve kurulum/yükseltme geçmişi değişebilir. Bind türü de hangi policy’nin geçerli olduğunu belirler: TLS LDAP signing integrity gereksinimini karşılar, CBT ise TLS üzerindeki SASL authentication’a uygulanır; TLS simple bind’e uygulanmaz.
Hedef DC’deki etkin policy’yi ve gözlenen oturum bilgilerini birlikte raporla. Başka sunucunun varsayılanından sonuç çıkarma.
3. Defense & Detection / Savunma ve tespit
Telemetry scope
- 2886–2889 ve CBT tanılama olayları Security auditing değil; Microsoft-Windows-ActiveDirectory_DomainService provider’ı ile Directory Service log’unda tutulur.
- 2887 kabul edilmiş imzasız SASL/TLS olmayan ve cleartext simple bind’lerin 24 saatlik özetidir. 2888 reddedilen girişimlerin 24 saatlik özetidir. 2889 bu tür unsigned bind’i yapan istemciyi raporlar; “16 LDAP Interface Events” diagnostic level 2 (Basic) veya üzeri gerekir (KB4520412; Microsoft LDAP signing guidance).
- CBT olaylarının anlamı farklıdır: 3039 LDAP-over-TLS bind’inde CBT doğrulamasının başarısız olduğunu bildirir; 3040, CBT policy Never iken önceki 24 saatte gerçekleşen korumasız bind sayısını verir; 3041 Never policy için hatırlatma olayıdır (KB4520412).
- 3074/3075, CBT uyumluluğunu incelemeye yardımcı olur: 3074 bozuk CBT nedeniyle zorunlu kontrolde başarısız olacak bind’i; 3075 CBT destekleyen bir istemcinin token göndermediğini bildirir. LDAP Interface Events level 2+ ve CBT policy When Supported veya Always gerekir. Kullanılabilirlik Windows Server sürümüne ve yüklü güncellemelere bağlıdır (KB4520412).
Events and relevant fields
- Event 2889, Microsoft-Windows-ActiveDirectory_DomainService tarafından Directory Service günlüğüne yazılır. Belgelenen mesaj istemci IP/port’unu, denenen identity’yi ve Binding Type’ı içerir: 0 imzasız SASL bind, 1 cleartext üzerinden simple bind anlamına gelir.
- İncelenen kaynaklar render edilen alanları tarif eder, raw XML için adlandırılmış EventData şeması vermez. Bu nedenle sentetik artifact adsız Data öğeleri kullanır ve XML alan adları uydurmaz.
- 2887 per-client ayrıntısı olmayan 24 saatlik özet; 2889 diagnostic level 2+ açıkken istemci ayrıntısıdır. 2888, reddedilen unsigned-bind girişimlerinin özetidir (KB4520412 ve LDAP signing guidance).
Tanılama günlüğünü doğru okumak
2886–2889 ve CBT olayları Directory Service tanılamasıdır, Security-log auditing değildir. Event 2889 için LDAP Interface Events diagnostic level 2 veya üstü gerekir ve olay hacmi yüksek olabilir; bu kaydı sınırlı uyumluluk incelemesinde kullan.
TLS olmayan imzasız bind’leri 2887/2889 ile izle; CBT olaylarını kendi tetikleyicisine göre yorumla: 3039 validation failure, 3040 CBT Never altındaki korumasız-bind günlük sayacı, 3041 ise Never için hatırlatmadır. Daha sıkı policy uygulamadan önce istemcileri düzelt.
3074/3075 için CBT auditing, Windows Server 2022’ye Ağustos 2023’te, Windows Server 2019’a Ekim 2023’te eklendi. İlk sürümlerdeki ek etkinleştirme adımı Server 2022’de 14 Kasım 2023, Server 2019’da 9 Ocak 2024 güncellemesiyle kaldırıldı. LDAP Interface Events level 2+ ve When Supported veya Always koşulları yine geçerlidir. Bu olaylar, daha sıkı enforcement öncesinde ilgilenmen gereken istemcileri gösterir; uygulama testinin yerine geçmez.
Detection logic · XPath
*[System[(EventID=2889 or EventID=2887)]]Query assumptions
- İfade Directory Service log'unda 2889 ve 2887 olaylarını seçer; provider Microsoft-Windows-ActiveDirectory_DomainService varsayılır.
- 2889 yalnız LDAP Interface Events tanılama seviyesi 2+ açıkken üretilir; bu bir güvenlik denetimi (Security audit) değil tanılama günlüğüdür.
- Tanılama açık değilse imzasız bind'ler 2889 üretmez; 2887 yalnız özet verir. Olay yokluğu imzasız bind olmadığını kanıtlamaz.
- Sorgu gerçek Windows DC'sinde veya SIEM'de çalıştırılmadı; veri kümesi, hacim ve baseline yoktur.
False positives
- Eski veya yanlış yapılandırılmış ama meşru uygulamalar rutin olarak imzasız/simple bind yapıp 2887/2889 üretebilir.
- 2889 tanılama günlüğü olduğundan yüksek hacimli olabilir ve DC performansını etkiler; sürekli açık bırakılması önerilmez (Microsoft, dd941849).
- Tek bir 2889 kötü niyet değil, uyumsuz istemci demektir; migration döneminde beklenen bir sinyaldir.
- 2887 sayacı hangi istemcinin sorumlu olduğunu söylemez; kaynak tespiti için ek korelasyon gerekir.
Hardening
- 2887/2889 ile TLS olmayan imzasız bind’leri belirle. CBT için doğrulama hatasını (3039), Never policy altındaki sayaç/hatırlatmayı (3040/3041) ve uyumluluk sinyallerini (3074/3075) ayrı değerlendir. Olay görünmemesini uyumluluk kanıtı saymadan önce sürüm, güncelleme, diagnostic level ve policy koşullarını kontrol et.
- Uyumsuz istemcileri düzelt veya kullanım dışı bırak; ardından signing ve CBT enforcement’ı aşamalı uygula. Require Signing ve Always’a geçmeden uygulama davranışını doğrula.
- Hedef policy değerlerini doğru eşle: LDAPServerIntegrity=2 (Require Signing), LdapEnforceChannelBinding=2 (Always). CBT Always, TLS simple bind’e değil ilgili TLS+SASL oturumlarına uygulanır.
- Cleartext simple bind’i kapat; simple bind gerekli kaldıysa TLS’i doğru sunucu sertifikası doğrulamasıyla kullan.
- 2889 ayrıntısı yüksek hacim üretebilir ve DC performansını etkileyebilir; uyumluluk incelemesinde sınırlı süre diagnostic level 2 aç, sonra gereken işletim düzeyine geri al.
Örnekler üzerinde oku / Read the examples
ÖRNEĞİ BİRLİKTE OKUYALIM
EĞİTİM İÇİN HAZIRLANDIHangi istemci, hangi hesapla, nasıl bind yapmış?
Event 2889 · imzasız SASL bind’i okumak (sentetik kesit)
192.0.2.55:52310Örnekte bind’i yapan istemcinin adresi. System/Computer ise kaydı yazan DC’dir.
OUTREASON\svc-legacyİstemcinin doğrulatmaya çalıştığı hesap. Bu değer, kimlik doğrulamanın başarılı olduğu anlamına gelmez.
00: imzasız SASL bind. 1 olsaydı cleartext simple bind’i gösterecekti. Bu alan, istemcide hangi bağlantıyı inceleyeceğini söyler.
Bu örnek unsigned SASL bind girişimini gösterir. IP, attempted identity ve bind type birlikte okunur. 2889 tek başına bind kabulü, signing enforcement durumu veya saldırı kanıtı değildir.
Bu üç değer, belgelenen olay mesajını öğretmek için bu sentetik kesitte bu sıraya yerleştirildi. Gerçek Windows raw XML alan sırası doğrulanmış değildir. Ham metni değiştirirsen bu eşleştirme uygulanmaz.
Bu örneğin kapsamı
Bu kısmi, sentetik XML, Event 2889’un belgelenen mesajındaki üç değeri gösterir: istemci IP/port’u, denenen identity ve Binding Type. Buradaki 0 imzasız SASL bind demektir; 1 olsaydı cleartext simple bind’i gösterecekti. İncelenen Microsoft kaynakları adlandırılmış raw EventData şemasını veya alan sırasını doğrulamıyor. Adsız Data öğelerinin bu sırası eğitim içindir; gerçek Windows export’u olarak sunulmaz. Belgelenen olay seviyesi Information’dır; bu kesitte Level alanı yoktur. Adres TEST-NET-1 aralığından, identity kurgusaldır. Parser XML yapısını okur; olayın DC’de üretildiğini veya kimlik doğrulamanın başarılı olduğunu doğrulamaz.
Ham kaydı aç · EVENT-XML
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"><System><Provider Name="Microsoft-Windows-ActiveDirectory_DomainService"/><EventID>2889</EventID><Channel>Directory Service</Channel><Computer>DC01.outreason.example</Computer></System><EventData><Data>192.0.2.55:52310</Data><Data>OUTREASON\svc-legacy</Data><Data>0</Data></EventData></Event>İki yanlış kanı / Two reality checks
- Sanılan: LDAPS bağlantısı şifreliyse bind türünün önemi kalmaz.
- Gerçekte: Hangi kontrolün uygulanacağı bind türüne bağlıdır. TLS, LDAPServerIntegrity gereksinimini karşılar. Channel binding, TLS üzerindeki SASL authentication için geçerlidir; TLS simple bind CBT taşımaz. TLS üzerinden simple bind’de istemcinin sunucu sertifikasını doğru doğrulaması gerekir. CBT policy’yi değiştirmek bu bind’e token eklemez.
- Sanılan: LDAP signing ve channel binding aynı kontrolü yapar.
- Gerçekte: LDAP signing mesajların bütünlüğünü korur. Channel binding, SASL authentication’ı altındaki TLS oturumuna bağlar. Policy’nin adı veya bind’in başarılı olması, hangi korumanın kullanıldığını tek başına göstermez; bind mekanizmasını ve bağlantı türünü birlikte değerlendir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Bilgiyi hatırlamaktan bir adım ileri: koşulu değiştir, kanıtı oku, kararın nedenini anlat.
1 / 3 · SONUCU TAHMİN ET
TLS simple bind kullanılıyor. CBT için doğru yorum hangisi?
Bir ipucu
Channel binding hangi authentication/transport birleşimine uygulanır?
Cevabın gerekçesini oku
TLS simple bind CBT kullanmaz; doğru sunucu certificate doğrulaması önemlidir.
CBT TLS üzerindeki ilgili SASL authentication’a aittir.
2 / 3 · KANITI OKU
Bu kayıt hangi kontrolün failure sınırına işaret ediyor?
- Producer / Üreten host
- DC01
- Event ID
- 3039
- Session type / Oturum
- SASL over TLS
- Observed diagnostic / Tanı
- Channel-binding validation failure
Bir ipucu
Bind koruması ile directory object izni farklı.
Cevabın gerekçesini oku
Authentication’ın TLS oturumuna channel binding doğrulaması.
Bu tanı resource ACL veya attribute write sonucu değildir.
3 / 3 · KENDİN ANLAT
LDAP signing ile CBT’nin görevini birer cümlecikle ayır.
Bir ipucu
Message bütünlüğü ve channel’a binding iki ayrı ilişki.
Cevabın gerekçesini oku
Signing LDAP mesajlarının bütünlüğünü korur. CBT uygun TLS+SASL authentication context’ini altındaki TLS oturumuna bağlar. Hangi kontrolün uygulandığını bind türü, transport ve etkin policy birlikte gösterir; bind success tek başına göstermez.
- Signing’i mesaj bütünlüğüyle ilişkilendirdim.
- CBT’yi uygun SASL authentication’ın TLS oturumuna binding’iyle ilişkilendirdim.
Açıklaman otomatik puanlanmaz. Kontrol noktalarını kendi cevabınla karşılaştır.
Vaka terminalini aç · PowerShell / CMD
Eğitim simülasyonu · Komutlar ve çıktılar bu vakaya aittir.
Bu oturumdaki hesabın adını ve SID’sini oku.
Hazır script’i değiştirmeden çalıştırabilir veya aşağıdaki günlük komutları deneyebilirsin.
Ctrl / ⌘ + Enter: çalıştır · Shift + Enter: yeni satır
PS C:\Users\tunahan>
Uzun çıktı: terminalin içinde kaydırarak devamını oku.
Merak edersen: günlük komutları dene
Bir komuta dokun, sonra Çalıştır’a bas. Kullanıcı ve ağ bilgileri seçili örnek bilgisayara göre değişir.
Bu oturumdaki son komutlar
Bu pratikler öğrenme amaçlıdır; sertifika sınavının puanını etkilemez.
Kaynaklar / Sources
- RFC 4511 · LDAP: The Protocol
§4.2 Bind Operation; BindRequest simple [0]/sasl [3] AuthenticationChoice ve SaslCredentials. - Microsoft · LDAP signing for AD DS on Windows Server
Default security behavior, Upgrade considerations ve Event monitoring: 2 Ekim 2026 tarihli güncel sayfa, 2889’u istemciye özgü unsigned/cleartext bind ayrıntısı olarak tanımlıyor. - Microsoft · 2020, 2023, and 2024 LDAP channel binding and LDAP signing requirements (KB4520412)
Policy değerleri; tanılama olayları Table 1–3; 3074/3075 koşulları, Ağustos/Ekim 2023 eklemeleri ve Kasım 2023/Ocak 2024 etkinleştirme değişiklikleri. - Microsoft · LDAP session security settings after ADV190023 (KB4563239)
TLS simple bind’de CBT yoktur ve TLS LDAPServerIntegrity gereksinimini karşılar; LdapEnforceChannelBinding TLS+SASL oturumlarında geçerlidir. - Microsoft · LDAP Interface Events (Event 2889, archived)
Event 2889 source ve render edilen istemci IP/port ile denenen identity alanları; KB4520412 ve KB 935834 ile çapraz kontrol. - Microsoft · How to enable LDAP signing (KB 935834)
Event 2889: Information seviyesi, mesajdaki istemci IP/port, identity ve Binding Type (0 imzasız SASL; 1 simple); diagnostic level 2 ve günlük özetler. - Microsoft · Configure firewall for AD domains and trusts
LDAP 389 ve LDAP SSL 636 port ayrımı. - Microsoft · LDAP channel binding on Windows Server
Supported authentication methods ve olay koşulları: TLS+SASL ile TLS simple bind ayrımı; 3039/3074/3075 policy ve güncelleme koşulları.