Mit Windows Server 2025 und aktuellen Security-Baselines werden NTLMv1 und unsignierte LDAP-Binds zum Ausfallrisiko. Wer sie abschalten will, braucht einen Nachweis, welche Systeme, Konten und Prozesse sie noch nutzen. Der Artikel zeigt, welche Auditing-Einstellungen du vorher aktivierst, welche Event-IDs du auswertest (4624, 4776, 8001 bis 8004 und 2886 bis 2889) und wie zwei gekürzte PowerShell-Beispiele daraus eine Pivot-Tabelle nach Ziel, Quelle und Protokoll bauen. Dazu kommen ein Ablauf von der Messung bis zur Umstellung, die typischen Fehler beim Auswerten und die Grenzen der Methode.
Inhalt 12 Abschnitte

Wer NTLMv1 abschaltet oder LDAP-Signing erzwingt, riskiert Ausfälle. Ein Audit über vier Log-Quellen zeigt vorher, wer betroffen wäre.
Auf einen Blick
- Windows Server 2025 und aktuelle Baselines drängen NTLM zurück. Anwendungen mit NTLMv1 oder Simple Bind auf Port 389 fallen danach aus.
- Die Daten liegen in drei Logs verteilt. Security (4624, 4776), NTLM Operational (8001 bis 8004) und Directory Service (2886 bis 2889).
- Ohne Auditing gibt es keine Treffer. Die Einstellungen aktivierst du sieben bis dreissig Tage vor der Auswertung.
- Die Auswertung endet in einer Pivot-Tabelle. Sie zeigt pro Ziel und Quelle, wie oft LM, NTLMv1 und NTLMv2 vorkamen.
Warum der Nachweis zählt
Ein Domain Controller, der nur noch NTLMv2 und signierte LDAP-Verbindungen akzeptiert, ist sicherer. Er ist aber auch der Grund, warum am Montagmorgen der Scanner nicht mehr in den Ordner speichert. Typische Kandidaten sind Fachapplikationen, Multifunktionsdrucker, Scanner und ältere Appliances.
Die Informationen dazu liegen verteilt. Anmeldungen stehen im Security-Log, NTLM-Details im Operational-Log, unsignierte Binds im Directory-Service-Log. Wer sie nicht zusammenführt, rät. Ein Nachweis pro Server ersetzt das Raten durch eine Liste mit Namen.
Microsoft beschreibt die Einstellung in der Anleitung zum Aktivieren von LDAP-Signing. Einen Überblick über das Protokoll liefert die NTLM-Übersicht.
Welche Ereignisse du brauchst
| Quelle | Event-IDs | Was sie zeigen | Wo |
|---|---|---|---|
Security |
4624 |
Anmeldung mit Paket und Protokollversion |
Domain Controller und Member |
Security |
4776 |
NTLM-Validierung am Domain Controller |
Domain Controller |
NTLM Operational |
8001 bis 8004 |
Ausgehender und eingehender NTLM-Verkehr |
Member-Server und DC |
Directory Service |
2886 bis 2889 |
Unsignierte und Klartext-LDAP-Binds |
Domain Controller |
Der Report erkennt die Rolle automatisch. Ein Wert von 4 oder mehr in Win32_ComputerSystem.DomainRole bedeutet Domain Controller. Dort wertet er 4776, 4624 mit Logon-Typ 3 und 9 sowie 2889 und 2887 aus. Auf Member-Servern liest er 4624 und 8001 bis 8004.
Auditing einschalten
Ohne Vorbereitung bleiben die Logs leer. Drei Einstellungen sind nötig:
- NTLM-Audit per GPO. Die Einstellung Network security: Restrict NTLM: Audit incoming NTLM traffic liefert die Events 8001 bis 8004 auf Membern. Auf Domain Controllern gilt Audit NTLM authentication in this domain. Die Doku zur Domänen-Richtlinie erklärt die Werte.
- LDAP-Events per Registry. Unter
HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnosticssetzt du16 LDAP Interface Eventsauf 2, damit das Event 2889 entsteht. - Security-Log ausreichend gross dimensionieren. Sonst rotiert der Zeitraum weg, bevor du ihn auswertest.
Lass das Auditing sieben bis dreissig Tage laufen. Seltene Jobs wie Monatsabschlüsse oder Quartalsberichte tauchen erst in diesem Fenster auf.
Beispiel 1: NTLMv1 und NTLMv2 als Pivot
Das gekürzte Skript liest das Event 4624 der letzten Tage. Es ordnet jede NTLM-Anmeldung einem Protokoll zu und zählt pro Ziel und Quelle.
$filter = @{ LogName = 'Security'; Id = 4624; StartTime = (Get-Date).AddDays(-$Days) } $rows = foreach ($comp in $ComputerName) { $events = Invoke-Command -ComputerName $comp -ScriptBlock { param($f) Get-WinEvent -FilterHashtable $f -ErrorAction SilentlyContinue } -ArgumentList (,$filter) foreach ($e in $events) { $data = @{} foreach ($d in ([xml]$e.ToXml()).Event.EventData.Data) { $data[$d.Name] = $d.'#text' } if ($data['AuthenticationPackageName'] -ne 'NTLM') { continue } $proto = switch -Regex ($data['LmPackageName']) { '^(?i)\s*NTLM\s*V?\s*2\s*$' { 'NTLM2'; break } '^(?i)\s*NTLM\s*V?\s*1\s*$' { 'NTLM1'; break } '^(?i)\s*(LM|LANMAN)\s*$' { 'LM'; break } default { 'Andere' } } $src = $data['IpAddress'] if ([string]::IsNullOrWhiteSpace($src) -or $src -eq '-') { $src = $data['WorkstationName'] } [pscustomobject]@{ Ziel = $comp; Quelle = $src; Account = $data['TargetUserName']; Protokoll = $proto } } }
Danach gruppiert ein Group-Object nach Ziel und Quelle und zählt LM, NTLM1, NTLM2 und Andere in eigenen Spalten. Die Sortierung nach NTLM1 und LM zeigt die kritischen Quellen oben. Die Tabelle landet als CSV auf der Platte und lässt sich in Excel weiterverarbeiten.
Beispiel 2: Unsignierte LDAP-Binds
Das Event 2889 nennt die IP-Adresse des Clients und das Konto, mit dem er sich bindet. Das zweite Skript fasst beides zusammen und zählt die Treffer.
$events = Get-WinEvent -FilterHashtable @{ LogName = 'Directory Service'; Id = 2889; StartTime = (Get-Date).AddHours(-$Hours) } -ErrorAction SilentlyContinue $events | ForEach-Object { $ip = if ($_.Message -match 'Client IP address:\s+([0-9a-fA-F\.:]+)') { $Matches[1] -replace ':\d+$', '' } $account = if ($_.Message -match 'authenticate as:\s+([^\r\n]+)') { $Matches[1].Trim() } [pscustomobject]@{ ClientIp = $ip; Account = $account } } | Group-Object ClientIp, Account | Select-Object @{ n = 'ClientIp'; e = { $_.Group[0].ClientIp } }, @{ n = 'Account'; e = { $_.Group[0].Account } }, Count | Sort-Object Count -Descending | Format-Table -AutoSize
Taucht dort ein Drucker oder eine Fachapplikation auf, kennst du den Kandidaten für die Umstellung. Hinter einem Proxy oder Load Balancer steht allerdings dessen Adresse und nicht die des echten Clients.
Vom Messen zum Abschalten
Der Ablauf ist kurz, braucht aber Geduld:
- Auditing aktivieren und sieben bis dreissig Tage sammeln.
- Den Report für alle Domain Controller und die wichtigen Member-Server erzeugen.
- Pivot und Aggregat auswerten: wer, wohin, mit welchem Konto, über welchen Prozess.
- Die Anwendungen umstellen auf LDAPS (Port 636), Kerberos oder Dienstkonten mit sauberer Konfiguration.
- NTLMv1 sperren oder LDAP-Signing erzwingen und danach erneut messen.
Dabei bleibt die Zuordnung von Konto oder Prozess zur Anwendung Handarbeit. Der Report nennt den Namen, aber nicht den Verantwortlichen. Nach dem Abschalten bestätigt die Wiederholung der Messung, dass keine Treffer mehr auftreten. Eine passende Gesamtplanung für das Upgrade zeigt der Artikel Zwölf Prüfungen vor adprep.
Typische Fehler beim Auswerten
| Symptom | Ursache | Massnahme |
|---|---|---|
Keine Events 8001 bis 8004 |
NTLM-Audit-GPO fehlt oder Operational-Log ist aus |
Richtlinie setzen und Log aktivieren |
Kein Event 2889 |
Diagnostics-Level nicht gesetzt |
Registry-Wert auf 2 stellen |
Event 2887 selten |
Es erscheint nur einmal pro 24 Stunden |
Zeitraum entsprechend wählen |
Leere IP bei 4624 |
Quelle ist nur über den Workstation-Namen bekannt |
Fallback auf WorkstationName nutzen |
Remote-Abfrage langsam |
Grosse Security-Logs über WinRM |
Zeitraum verkleinern oder lokal laufen lassen |
Grenzen der Methode
Die Auswertung sieht nur Ereignisse im Aufbewahrungszeitraum des Logs. Das Event 2889 zeigt unsignierte und Klartext-Binds, aber keine Details zum Channel Binding. NTLM ohne LmPackageName zählt der Report als unbekannt. Die Skripte sind gekürzte Beispiele, syntaktisch geprüft und vor dem produktiven Einsatz im Lab zu testen. Passe ausserdem umgebungsspezifische Werte wie DNS-Suffixe und die Liste bekannter Hosts an.
Einordnung: Was das für Admins heisst
Wer vor einem Upgrade auf Windows Server 2025 oder vor dem Anwenden einer Baseline steht, sollte diese Messung zuerst planen. Sie kostet Tage an Wartezeit, aber kaum Arbeit. Rechne mit einer Liste von fünf bis zwanzig Geräten, die für die Umstellung Rückfragen an Hersteller oder Fachabteilungen auslösen. Die Messung liefert dir ausserdem das Argument für die Geschäftsleitung, warum ein Gerät ersetzt oder ein Update eingespielt werden muss. Ohne Nachweis bleibt jede Härtung ein Glücksspiel.
Fazit
NTLMv1 und unsignierte LDAP-Binds lassen sich nur dann gefahrlos abschalten, wenn du weisst, wer sie noch nutzt. Vier Event-Quellen reichen dafür aus. Zwei kleine Skripte machen aus ihnen eine Liste mit Quelle, Ziel und Konto. Miss zuerst, stelle die betroffenen Anwendungen um und prüfe danach erneut.
Geschrieben von Andreas Brauckmann
Änderungshistorie
- — Artikel veröffentlicht.