Güvenlik duvarı üzerinden 389 numaralı bağlantı noktasına UDP bağlantısını engelleme
Genel Bakış
LDAP (Lightweight Directory Access Protocol), Active Directory'nin arkasındaki uygulama katmanı protokolüdür. Normalde TCP üzerinden çalışır, ancak UDP üzerinde 389 numaralı bağlantı noktasında çalışan bağlantısız bir varyantı da vardır — CLDAP (Connectionless LDAP). Windows istemcileri etki alanı denetleyicilerini bulmak için CLDAP kullanır (DC Locator hizmetinin gerçekleştirdiği „LDAP ping“). Modern Windows sürümleri birçok senaryoda DNS tabanlı keşfe ve TCP üzerinden LDAP'ye geri dönebilir, ancak CLDAP UDP 389 üzerinden hâlâ DC Locator işlemleri ve etki alanına katılım için kullanılır.
Güvenlik sorunu yansıma (amplifikasyon) istismarıdır. Bir saldırgan, bir sunucunun UDP 389 bağlantı noktasına küçük, sahte bir CLDAP isteği gönderir ve kaynak IP'yi istek kurbandan geliyormuş gibi görünecek şekilde taklit eder. Sunucu daha sonra kurbanın adresine çok daha büyük bir yanıt gönderir. Birçok açık sunucuyla çarpıldığında bu, kurbanı trafikle boğar. Geçmişte, LDAP yanıt boyutuna bağlı olarak 50× aşan amplifikasyon faktörleri gözlemlenmiştir — bu nedenle açık sunucular yansıtıcı olarak kullanılır.
Bu kılavuzun amacı, sunucunuzun böyle bir yansıtıcı olarak hareket etmesini engellemektir — meşru Active Directory işlevlerini bozmadan.
Adım 1: Sunucunuzun bir etki alanı denetleyicisi olup olmadığını belirleyin
Bu en önemli adımdır, çünkü neyi (varsa) engellemeniz gerektiğini belirler.
Standart bir Windows Server kurulumunda, UDP 389 bağlantı noktası normalde yalnızca sunucu bir etki alanı denetleyicisine yükseltildikten sonra Active Directory Etki Alanı Hizmetleri tarafından kullanılır. Normal bir Windows Server (web, uygulama, dosya sunucusu vb.) varsayılan olarak UDP 389'u dinlemez, bu nedenle başka bir uygulama (AD LDS veya üçüncü taraf bir LDAP hizmeti gibi) bu bağlantı noktasında bir CLDAP hizmeti sağlamadıkça CLDAP yansıtıcısı olarak istismar edilemez.
PowerShell'i yönetici olarak açın ve sunucunun etki alanındaki gerçek rolünü kontrol edin:
(Get-CimInstance Win32_ComputerSystem).DomainRole
Sonucun yorumlanması:
- 0 — Bağımsız İş İstasyonu (Standalone Workstation)
- 1 — Üye İş İstasyonu (Member Workstation)
- 2 — Bağımsız Sunucu (Standalone Server)
- 3 — Üye Sunucu (Member Server)
- 4 — Etki Alanı Denetleyicisi (geçmiş uyumluluk için „Backup Domain Controller“ olarak bildirilir — tüm modern Active Directory etki alanı denetleyicileri bu değeri döndürür)
- 5 — PDC Emülatörü FSMO rolünü tutan Etki Alanı Denetleyicisi (geçmiş uyumluluk için „Primary Domain Controller“ olarak bildirilir)
Sonuç 4 veya 5 değilse, sunucu bir etki alanı denetleyicisi değildir.
UDP 389'da gerçekten bir şey dinleyip dinlemediğini de doğrulayabilirsiniz:
Get-NetUDPEndpoint -LocalPort 389 -ErrorAction SilentlyContinue
Bu komut hiçbir şey döndürmezse, Windows UDP 389 bağlantı noktasını dinlemiyordur, dolayısıyla sunucu CLDAP hizmetleri sağlamaz ve bu saldırıya açık değildir.
Sunucunuz bir etki alanı denetleyicisi DEĞİLSE
UDP 389'da hiçbir şey dinlemediği için sunucu bir LDAP yansıtıcısı olarak istismar edilemez. Bu özel tehdit için güvenlik duvarı değişikliği gerekmez.
Güvenlik politikanızı belgelemek veya açık bir reddetme kuralı uygulamak isterseniz, aşağıdaki güvenlik duvarı kuralını yine de oluşturabilirsiniz. UDP 389 bağlantı noktasını dinleyen bir hizmet olmadığından, kuralın pratik bir etkisi yoktur.
Sunucunuz bir etki alanı denetleyicisi İSE
Bir etki alanı denetleyicisi gerçekten UDP 389'u dinler ve yansıtıcı olarak istismar edilebilir — ancak UDP 389 normal etki alanı işlemleri için de gereklidir.
Uyarı: Bir etki alanı denetleyicisinde gelen tüm UDP 389 trafiğini körü körüne engellemeyin. Etki alanına katılmış istemciler bir etki alanı denetleyicisini bulmak için CLDAP (UDP 389) kullanır ve etki alanına katılım için aynı bağlantı noktası gereklidir. Genel bir engelleme, istemcilerin etki alanı denetleyicisini bulmasını engelleyebilir ve oturum açma ile etki alanına katılım işlemlerini bozabilir.
Etki alanı denetleyicisinde doğru yaklaşım:
İdeal olarak, bir etki alanı denetleyicisine internetten hiç erişilememesi gerekir. Yansıma istismarı dışarıdan gelir, bu nedenle en temiz çözüm, DC'yi bir çevre güvenlik duvarının arkasında tutmak ve UDP 389'u herkese açık hale getirmemektir.
Sunucunun açık olması gerekiyorsa, UDP 389'u genel olarak engellemeyin. Bunun yerine, yalnızca harici/güvenilmeyen IP aralıklarından engelleyin ve dahili etki alanı alt ağlarınızı engelleme dışında bırakın. Bu, sahte harici istekleri (yansımaya neden olan) durdururken dahili istemcilerin çalışmasını sürdürür. Bu, aşağıda açıklanan kuralın Kapsam (Scope) ayarlarıyla yapılır.
Aynı kapsam ilkesi salt okunur etki alanı denetleyicileri (RODC) için de geçerlidir.
Güvenlik duvarı kuralının oluşturulması (gelen UDP 389'u engelle)
Windows Güvenlik Duvarı'nı açın ve sol taraftaki menüden Gelişmiş ayarlar'ı seçin:

Sol taraftaki menüden Gelen Kuralları'nı seçin:

Üst menüden Eylem → Yeni Kural... seçeneğine tıklayın:

Kural Oluşturma Sihirbazı açılır. Kural türü olarak Bağlantı Noktası'nı seçin ve İleri > seçeneğine tıklayın:

Sonraki sayfada UDP'yi seçin, ardından Belirli yerel bağlantı noktaları altında 389 yazın ve İleri > seçeneğine tıklayın:

Sonraki sayfada Bağlantıyı engelle'yi seçin ve İleri > seçeneğine tıklayın:

Son olarak, kurala bir ad verin, örneğin UDP LDAP block, ve Son'a tıklayın:

Aynı kural, betik oluşturma veya birden çok sunucuya uygulama için kullanışlı olan PowerShell'den oluşturulabilir:
New-NetFirewallRule -DisplayName "Block inbound UDP 389 (CLDAP)" -Direction Inbound -Protocol UDP -LocalPort 389 -Action Block
Uyarı: Bir etki alanı denetleyicisinde burada durmayın. Yukarıdaki kural UDP 389'u tüm kaynaklardan engeller, bu da dahili istemciler için etki alanı denetleyicisi konumlandırmasını bozar. Kapsamını belirlemeniz gerekir (sonraki adım).
Kuralın kapsamını belirleme (etki alanı denetleyicisinde gereklidir)
Kural oluşturulduktan sonra Özellikler'ini açın ve Kapsam (Scope) sekmesine gidin. Uzak IP adresi altında Bu IP adresleri'ni seçin ve engellemek istediğiniz harici veya güvenilmeyen aralıkları ekleyin. Dahili etki alanı alt ağlarınızı buraya eklemeyin — „Uzak IP adresi“ altında listelenen herhangi bir aralık, kuralın engelleyeceği bir aralıktır, bu nedenle dahili alt ağları listelemek kendi istemcilerinizi engeller. Yerel IP adresi'ni Herhangi bir IP adresi olarak bırakın.

Bu şekilde engelleme yalnızca belirttiğiniz güvenilmeyen harici kaynaklara uygulanırken, dahili istemciler (listelenmeyen) etkilenmeden kalır.
PowerShell'de aynı kapsam, yerleşik Internet anahtar sözcüğüyle uygulanabilir. Internet anahtar sözcüğü, Windows Güvenlik Duvarı'nın harici olarak sınıflandırdığı uzak adreslerle eşleşir; yerel bilgisayar, geri döngü (loopback) ve yaygın yerel ağ aralıkları hariç tutulur. Bu, harici trafiği engellerken dahili istemcileri etkilenmeden bırakır:
New-NetFirewallRule -DisplayName "Block inbound UDP 389 (CLDAP) from Internet" -Direction Inbound -Protocol UDP -LocalPort 389 -RemoteAddress Internet -Action Block -Profile Public,Private
Doğru yapılandırılmış bir etki alanı denetleyicisinde, etkin güvenlik duvarı profili normalde Etki Alanı'dır. Kuralı Genel ve Özel profillerle sınırlamak, normal etki alanı trafiğini etkilemesini önler. Bir etki alanı denetleyicisinde, yalnızca Internet anahtar sözcüğüne güvenmek yerine dahili alt ağlarınızı kuralın Kapsamında açıkça tanımlamak yine de en güvenlisidir — ağınız standart olmayan özel aralıklar kullanıyorsa, bunlar yanlış sınıflandırılabilir; bu durumda dahili aralıklarınızı elle listeleyin ve diğer her şeyi engelleyin.
Sonucu doğrulama
Uyarı: UDP 389'u doğrulamak için Test-NetConnection kullanmayın — yalnızca TCP bağlantılarını test eder ve UDP için yanıltıcı sonuçlar verir.
Bir sunucunun CLDAP isteklerine hâlâ yanıt verip vermediğini doğrulamanın en doğrudan yolu, etki alanına katılmış bir istemciden uygun bir LDAP ping göndermektir:
nltest /ping /server:DC_NAME
Bu, doğru biçimlendirilmiş bir CLDAP isteği gönderir ve yanıtı bildirir. DC_NAME'i etki alanı denetleyicinizin adıyla değiştirin.
İkincil bir kontrol olarak, başka bir makineden PortQry (ücretsiz bir Microsoft komut satırı aracı) kullanabilirsiniz:
portqry -n SERVER_NAME -p UDP -e 389
Yanıta bağlı olarak PortQry LISTENING veya FILTERED bildirebilir. PortQry'nin tam bir CLDAP LDAP ping yerine bir yoklama paketi gönderdiğini ve CLDAP hizmetinin bunu geçerli bir istek olarak tanımayabileceğini, bu nedenle bağlantı noktası açık olsa bile FILTERED bildirebileceğini unutmayın. Bu nedenle nltest /ping'i yetkili test, PortQry'yi ise kaba bir tamamlayıcı kontrol olarak değerlendirin.
Bir etki alanı denetleyicisinde, dahili istemciler için etki alanı konumlandırmasının hâlâ çalıştığını da doğrulayın:
nltest /dsgetdc:example.com
example.com'u etki alanı adınızla değiştirin. Başarılı bir yanıt, istemcilerin etki alanı denetleyicisini hâlâ bulabildiği anlamına gelir. Başarılı bir dsgetdc'nin tek başına CLDAP'nin UDP üzerinden çalıştığını kanıtlamadığını unutmayın, çünkü DC Locator, gerçekleştirilen işleme bağlı olarak CLDAP kullanılamıyorsa DNS sorgularına ve TCP üzerinden LDAP'ye geri dönebilir — bu nedenle yukarıdaki nltest /ping kontrolü daha doğrudan bir testtir.
Ek öneriler
Windows'u tamamen güncel tutun. Güvenlik güncelleştirmeleri, LDAP uygulamasının kendisindeki kritik güvenlik açıklarını (uzaktan kod yürütülmesine izin verebilecek hatalar gibi) giderir ve sunucuyu ele geçirilmekten korur. Bu, yansıma istismarından ayrı bir konudur — yama uygulamak sunucunun kendisini güçlendirirken, yukarıdaki güvenlik duvarı kapsam belirlemesi sunucunun başkalarına karşı yansıtıcı olarak kullanılmasını önler.
LDAP'yi genel olarak güçlendirmek için etki alanı denetleyicilerinde LDAP imzalamayı ve kanal bağlamayı etkinleştirin.
Hacimsel koruma için hız sınırlama ve DDoS filtreleme, Windows ana bilgisayarının kendisine değil, çevre güvenlik duvarına veya üst akış (upstream) sağlayıcısına aittir.
Özet: UDP 389'u engellemek ne zaman uygundur?
- Sunucu bir etki alanı denetleyicisi değil → işlem gerekmez (UDP 389 dinlemiyor).
- Güvenlik duvarının arkasında, internete açık olmayan etki alanı denetleyicisi → işlem gerekmez; herkese açık internetten uzak tutun.
- İnternete açık etki alanı denetleyicisi → kuralın kapsamını, güvenilir dahili alt ağları etkilemeden harici kaynakları engelleyecek şekilde belirleyin.