Domain Controller üzerinde güvenli olmayan LDAP bağlantılarını bulma

Okuma süresi - 5 dk.


Windows Server Active Directory (AD), dizin hizmeti, istemciler ve uygulamalar arasında iletişim kurmak için Lightweight Directory Access Protocol’ünü (LDAP) kullanır. LDAP, Internet Protocol (IP) ağlarındaki dizin hizmetlerine erişmek için kullanılan açık, endüstri standardı bir protokoldür.

İstemciler ve uygulamalar LDAP bind kullanarak Active Directory ile kimlik doğrulaması yapabilir. Simple, regular ve anonymous gibi birkaç farklı bind işlemi vardır. Simple binds, IP ağı üzerinden kullanıcı adlarını ve şifreleri açık metin olarak göndererek çalışır. LDAP, kimlik doğrulaması için Simple Binds ve Simple Authentication and Security Layer (SASL) bind’larını kullanır. Active Directory varsayılan olarak simple bind kabul eder. AD basit bağlamaları desteklese de, önerilen bir yaklaşım değildir.

Simple bind kullanan uygulamalarınız varsa, SASL’yi kullanmak için bunları güncellemeyi düşünebilirsiniz. Güncellenemeyen uygulamalarınız varsa, bir sonraki en iyi alternatif LDAP over Transport Layer Security (TLS) kullanmaktır. TLS’in uygulanması ve yönetilmesi daha karmaşıktır.

Active Directory LDAP channel binding ve LDAP signing

Varsayılan olarak, şu anda desteklenen tüm Windows sürümleri signed LDAP connections kullanmaktadır. Ancak yine de, LDAP signing ‘required’ olarak ayarlanmadığı sürece Active Directory LDAP simple binds kabul edecektir. Bir etki alanında LDAP ‘required’ olarak ayarlanırsa, LDAP simple binds başarısız olur. Bu nedenle, LDAP simple binds kullanılmadığından emin olmak istiyorsanız, AD’yi LDAP signing gerektirecek şekilde yapılandırmalısınız.

Active Directory etki alanınızda LDAP signing’i zorunlu kılmanın en kolay yolu Group Policy kullanmaktır. Group Policy’de LDAP signing’i ‘required’ olarak ayarlayarak bunu uygulayabilirsiniz. LDAP signing için düzenlemeniz gereken group policy ayarına aşağıdaki bölümden ulaşabilirsiniz.

Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options altındaki Domain controller: LDAP server signing requirements

Server signing’i ‘required’ olarak ayarlarsanız, tüm istemcilerinizi ‘required’ olarak da ayarladığınızdan emin olmalısınız. İstemci LDAP signing için group policy ayarı aşağıdaki bölümdedir.

Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options altındaki Network security: LDAP client signing requirements

Signing’i (imzalamayı) ‘required’ olarak ayarlarsanız, LDAP simple binds ve LDAPS simple bind istekleri reddedilir. Hiçbir Windows Server veya istemci AD’ye bağlanmak için LDAP simple bind veya LDAPS simple bind kullanmaz.

LDAP singning’i zorunlu kılmanın en kesin yolu, hem Network security: LDAP client signing requirements hem de Domain controller: LDAP server signing requirements ayarlarını Default Domain Policy ve Default Domain Controller Group Policy objelerinde ‘required’ olarak ayarlamaktır.

LDAP channel binding

Kullanıcılar dosya paylaşılan sunucular gibi domain-based sunucu kaynaklarına erişim istediklerinde, önce istemci LDAP kullanarak kimlik doğrulaması yapar. Channel binding tokens (CBT), kimlik doğrulama oturumunu bir dosya paylaşımına erişim durumunda Server Message Block (SMB) gibi belirli bir protokole bağlar. Buradaki amaç; domain controller sunucularını relay vulnerabilities açıklarına karşı korumaktır.

Güvenli olmayan LDAP bind kullanan istemci ve sunucuları nasıl buluruz?

Microsoft, Mart 2020 Güncelleştirmesi’nden Secure LDAP binds kullanımını zorlayacaklarını açıkladı. İlgili duyuruya aşağıdaki linkten erişebilirsiniz.

https://support.microsoft.com/en-us/help/4520412/2020-ldap-channel-binding-and-ldap-signing-requirement-for-windows

Bu, 389 portu üzerinden LDAP kullanan uygulamaların, Mart 2020’de yayınlanacak güncellemeler uygulandıktan sonra başarısız olacağı anlamına geliyor. Güvenli olmayan LDAP kullanan sunucu ya da istemcilerinizi bulmak için DC’lerde 2886 event’ini aramalısınız. Etki alanı denetleyicisi olan sunucunun LDAP signing gerektirecek şekilde yapılandırılmamış olduğunu görebilirsiniz. DC’de, SSL/TLS olmadan 10 basit bağlantı gerçekleştirildi bilgisi event 2887 içinde görülebilir.

Şu anda Require LDAP Signing ayarını zorunlu kılarsak bazı uygulamalarımızın çalışmayacağını biliyoruz. Bir sonraki işimiz bu bağlantıların nereden geldiğini bulmak.

Bu güvensiz bağlantıların hangi sunuculardan geldiğini bulabilmek için LDAP interface logging’i increase etmemiz gerekiyor. Ortamınızdaki her etki alanı denetleyicisinde de aşağıdaki komutu çalıştırmalısınız.

New-ItemProperty -Path ‘HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics’ -Name “16 LDAP Interface Events” -Value 2 -PropertyType DWORD -Force

LDAP

LDAP Interface logging ayarını yaptıktan sonra, her SASL bağlanma gerçekleştiğinde olay günlüğüne 2889 eventi kaydedilir.

Yukarıdaki ekran görüntüsünde bu bağlantının hangi IP adresinden (client ip address) geldiğini görebilirsiniz. Güvenli olmayan bağlantı yapan uygulamaları barındıran sunucuları bulmak için her DC’deki 2889 event id’leri gözlemlememiz gerekiyor.

Ortamımızda, 20’den fazla etki alanı denetleyiciniz olabilir. Bu da Tüm DC’ler’de 2889 olayını aramanız anlamına gelecektir. Bunu manuel olarak yapmanız oldukça zor olacaktır.

GitHub’da bizim için bu işi kolayca halledebilecek komut dosyasını indirebilirsiniz. Bu komut dosyası, belirli bir DC’den 2889 olaylarını sorgulayarak, ihtiyacımız olan bilgileri CSV formatında kaydediyor. Buraya tıklayarak Query-InsecureLDAPBinds.ps1 komut dosyasını indirebilirsiniz. Komut çıktısını .csv formatında aşağıdaki resimde görebilirsiniz.

Artık Simple bind kullanan sunucuları bulduğuma göre DC’leri “Enforce Require LDAP Signing” olacak şekilde ayarlayabilirim.