Detekce nešifrovaných LDAP dotazů v prostředí Active Directory
Detekce nešifrovaných LDAP dotazů v prostředí Active Directory
Tento návod popisuje, jak v prostředí s Active Directory zjistit, zda dochází k nešifrovaným LDAP dotazům. Cílem je poskytnout přehled metod detekce a postup pro aktivaci logování, které pomáhá vyhodnotit rizika spojená s nezabezpečenou komunikací.
1. Úvod do problému
LDAP (Lightweight Directory Access Protocol) je často používán bez zabezpečení na portu 389. To může vést k odposlechu nebo úpravě dat v síti.
- Nešifrovaný LDAP umožňuje přenášet citlivé informace v čitelné podobě ⚠
- Pro bezpečný provoz doporučujeme LDAPS (port 636) nebo LDAP over StartTLS
2. Události v Event Logu
2.1 Základní monitorování (Event ID 2887)
- Každých 24 hodin
- Informuje o tom, že došlo k nešifrovaným LDAP dotazům
- Neobsahuje IP adresy
2.2 Detailní přehled (Event ID 2888, 2889)
- Vyžaduje zapnutí rozšířeného logování
- Obsahuje IP adresy klientů
- Pomáhá identifikovat konkrétní zařízení 📌
2.3 Zablokované dotazy (Event ID 2890)
- Zaznamenává pokusy o nešifrované připojení, které bylo odmítnuto
- Aktivní při nastavení
LDAPServerIntegrity = 2
2.4 Varování o slabé konfiguraci (Event ID 2886)
- Upozorňuje, že řadič domény nepodporuje LDAP signing ani sealing ⚠
- Indikátor špatně zabezpečené konfigurace
3. Zapnutí diagnostického logování
3.1 Změna registru lokálně
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics" /v "16 LDAP Interface Events" /t REG_DWORD /d 2 /f
- Změny se obvykle projeví bez restartu, ale někdy je vhodné restartovat DC
3.2 Nasazení pomocí GPO (přes Preferences)
- Používáme Group Policy Preferences > Windows Settings > Registry
- Přidáme klíče do
HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics
- GPO aplikujeme na OU s řadiči domény
4. Vyhodnocení událostí pomocí PowerShellu
4.1 Export unikátních IP, uživatelů a typů spojení z eventů 2889
$ComputerName = "localhost"
$Hours = 24
$InsecureLDAPBinds = @()
$StartTime = (Get-Date).AddHours(-$Hours)
$Events = Get-WinEvent -ComputerName $ComputerName -FilterHashtable @{
LogName = 'Directory Service'
Id = 2889
StartTime = $StartTime
}
foreach ($Event in $Events) {
try {
$eventXml = [xml]$Event.ToXml()
$EventData = $eventXml.Event.EventData.Data
$ClientInfo = $EventData[0]
$IPAddress = $ClientInfo.Substring(0, $ClientInfo.LastIndexOf(":"))
$User = $EventData[1]
$BindTypeCode = [int]$EventData[2]
switch ($BindTypeCode) {
0 { $BindType = "Unsigned" }
1 { $BindType = "Simple" }
default { $BindType = "Unknown" }
}
$Row = [PSCustomObject]@{
IPAddress = $IPAddress
User = $User
BindType = $BindType
}
$InsecureLDAPBinds += $Row
}
catch {
Write-Warning "Chyba při zpracování události: $_"
}
}
$UniqueBinds = $InsecureLDAPBinds | Sort-Object IPAddress, User, BindType -Unique
$OutputFile = ".\InsecureLDAPBinds.csv"
$UniqueBinds | Export-Csv -NoTypeInformation -Encoding UTF8 $OutputFile
5. Prevence nešifrovaného LDAP
5.1 Vynucení LDAP signing
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" /v "LDAPServerIntegrity" /t REG_DWORD /d 2 /f
- Všechny klienty je nutné předem otestovat ✅
Shrnutí
✅ Nešifrovaný LDAP představuje bezpečnostní riziko
✅ Události 2887–2890 poskytují různé úrovně informací
✅ Detailní logování lze zapnout přes registr nebo GPO
✅ PowerShell pomáhá identifikovat konkrétní zařízení
✅ Nastavení LDAPServerIntegrity=2 zvyšuje bezpečnost, ale může přerušit kompatibilitu