NTLM in Active Directory auditieren und einschränken
Schrittweise NTLM reduzieren: mit den Ereignissen 8001–8004 auditieren, Ursachen beheben, Ausnahmen festlegen, NTLMv1 entfernen und LmCompatibilityLevel 5 setzen.
Jede NTLM-Authentifizierung in Ihrer Domäne ist ein potenzielles Relay, ein potenzieller Hash, der offline geknackt werden kann, und eine Anmeldeinformation, die ohne Kenntnis des Kennworts weitergegeben werden kann. LDAP- und SMB-Signierung schließen bestimmte Relay-Ziele, doch die eigentliche Lösung besteht darin, NTLM dort nicht mehr zu verwenden, wo Kerberos funktioniert, und es dort abzulehnen, wo nichts Legitimes es benötigt. Microsoft hat NTLM 2024 als veraltet eingestuft, und Windows 11 24H2 sowie Windows Server 2025 enthalten NTLMv1 nicht mehr — der richtige Zeitpunkt also, um den verbleibenden Rest zu messen und zu verkleinern.
Dieser Leitfaden erweitert den kurzen Abschnitt „Restrict NTLM“ im Leitfaden zu NTLM und Legacy-Protokollen zu einem vollständigen Programm: die richtigen Überwachungseinstellungen aktivieren, die Ereignisse 8001 bis 8004 lesen, die häufigen Ursachen beheben, eine Ausnahmeliste aufbauen, die klein bleibt, und NTLMv1 endgültig entfernen.
Die Restrict-NTLM-Richtlinien
Alle Restrict-NTLM-Einstellungen sind Sicherheitsoptionen, keine administrativen Vorlagen:
Computer Configuration > Policies > Windows Settings > Security Settings >
Local Policies > Security Options > Network security: Restrict NTLM: ...| Einstellung | Gilt für | Audit-Wert | Erzwingungswert |
|---|---|---|---|
| Audit NTLM authentication in this domain | Domänencontroller | Enable all | – |
| NTLM authentication in this domain | Domänencontroller | – | Deny all (oder eine engere Verweigerung) |
| Add server exceptions in this domain | Domänencontroller | – | Server, die NTLM verwenden dürfen |
| Audit Incoming NTLM Traffic | Mitgliedsserver und Clients | Enable auditing for all accounts | – |
| Incoming NTLM traffic | Mitgliedsserver und Clients | – | Deny all accounts |
| Outgoing NTLM traffic to remote servers | Clients und Server | Audit all | Deny all |
| Add remote server exceptions for NTLM authentication | Clients und Server | – | Server, mit denen der Client weiterhin NTLM verwenden darf |
Die Ereignisse landen unter Applications and Services Logs > Microsoft > Windows > NTLM > Operational:
| Ereignis | Protokolliert auf | Bedeutung |
|---|---|---|
| 8001 | Client | Ausgehendes NTLM, das die Richtlinie für ausgehenden Verkehr blockieren würde |
| 8002 | Server | Eingehendes NTLM (einschließlich lokaler Konten), das die Richtlinie für eingehenden Verkehr blockieren würde |
| 8003 | Mitgliedsserver | Eingehendes NTLM mit einem Domänenkonto, das die Domänenrichtlinie blockieren würde |
| 8004 | Domänencontroller | An diesen DC durchgereichte NTLM-Authentifizierung: Benutzer, Arbeitsstation und der anfordernde Server (Name des sicheren Kanals) |
Wenn Sie eine Einstellung von Audit auf Verweigern umstellen, protokolliert derselbe Kanal die entsprechenden Blockierungsereignisse.
Schritt 1: Das Volumen messen
Aktivieren Sie die Überwachung überall über eine GPO, die ausschließlich Audit-Werte enthält. Der Überwachungsmodus ändert funktional nichts.
- Auf der OU Domain Controllers: Audit NTLM authentication in this domain = Enable all, Audit Incoming NTLM Traffic = Enable auditing for all accounts.
- Auf allen anderen Computern: Audit Incoming NTLM Traffic = Enable auditing for all accounts, Outgoing NTLM traffic to remote servers = Audit all.
Vergrößern Sie das Protokoll NTLM/Operational (8004 ist auf ausgelasteten DCs sehr gesprächig) und leiten Sie es zentral mit der Windows-Ereignisweiterleitung weiter. Sammeln Sie außerdem die Sicherheitsereignisse 4776 (Überprüfung der Anmeldeinformationen) auf DCs und 4624 überall: 4624 enthält das Feld LmPackageName, das angibt, ob eine Anmeldung NTLM V1, NTLM V2 oder LM verwendet hat.
Schritt 2: Zuerst NTLMv1 finden
NTLMv1-Antworten lassen sich schnell bis zum NT-Hash des Kontos knacken, daher hat es Vorrang vor allem anderen. Suchen Sie auf DCs und Servern danach:
$xpath = "*[System[EventID=4624] and EventData[Data[@Name='AuthenticationPackageName']='NTLM'] and EventData[Data[@Name='LmPackageName']!='NTLM V2']]"
$dcs = (Get-ADDomainController -Filter *).HostName
foreach ($dc in $dcs) {
Get-WinEvent -ComputerName $dc -LogName Security -FilterXPath $xpath -MaxEvents 2000 -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml(); $d = @{}
$x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[PSCustomObject]@{
DC = $dc; User = "$($d.TargetDomainName)\$($d.TargetUserName)"
Workstation = $d.WorkstationName; IP = $d.IpAddress; Package = $d.LmPackageName
}
}
} | Group-Object Workstation, User, Package | Sort-Object Count -Descending | Select-Object Count, NameFiltern Sie bei der Auswertung anonyme Anmeldungen (LmPackageName = -) heraus. Echtes NTLMv1 stammt meist von alten Nicht-Windows-Geräten, sehr alten Windows-Systemen oder Rechnern mit einer lokalen Richtlinie, die LmCompatibilityLevel unter 3 setzt.
Schritt 3: Das beobachtete NTLM klassifizieren
Fassen Sie 8004 auf den DCs nach dem anfordernden Server und der Client-Arbeitsstation zusammen:
foreach ($dc in $dcs) {
Get-WinEvent -ComputerName $dc -LogName 'Microsoft-Windows-NTLM/Operational' `
-FilterXPath '*[System[EventID=8004]]' -MaxEvents 20000 -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml(); $d = @{}
$x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[PSCustomObject]@{ Server = $d.SChannelName; User = $d.UserName; Client = $d.WorkstationName }
}
} | Group-Object Server | Sort-Object Count -Descending | Select-Object Count, Name -First 50Die Feldnamen im Ereignis-XML können zwischen Windows-Versionen leicht abweichen; prüfen Sie ein Ereignis mit $_.ToXml() und passen Sie das Skript an. Ordnen Sie dann jedes Server/Client-Paar einer Ursache zu:
- Zugriff per IP-Adresse. Kerberos benötigt einen SPN, und Clients versuchen standardmäßig keine IP-basierten SPNs. Ändern Sie Pfad, Laufwerkszuordnung oder Anwendungskonfiguration auf den DNS-Namen. Wo eine IP unvermeidbar ist, können Windows 10 und Server 2016 und höher Kerberos verwenden, wenn ein IP-SPN am Zielkonto registriert und auf dem Client der Registrierungswert
TryIPSPNunterHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parametersaktiviert ist. - Fehlende oder doppelte SPNs, CNAMEs und Load-Balancer-Namen. Registrieren Sie den Alias als SPN am Dienstkonto (
setspn -S) und finden Sie mitsetspn -XDuplikate, an denen das KDC scheitert und der Client auf NTLM zurückfällt. - Lokale Konten. Die Remotenutzung lokaler Konten ist immer NTLM. Ist Windows LAPS bereitgestellt, handelt es sich meist um Administratoren oder Werkzeuge, die lokale Anmeldeinformationen remote verwenden; stellen Sie sie auf Domänenkonten im passenden Tier um.
- Nicht-Domänen- und Arbeitsgruppengeräte, einschließlich Appliances. Entscheiden Sie pro Gerät: in die Domäne aufnehmen, auf Kerberos umstellen (viele Linux- und Appliance-Stacks unterstützen das mit einer Keytab) oder als Ausnahme akzeptieren.
- Anwendungen, die NTLM explizit statt Negotiate aufrufen. Sie benötigen eine Korrektur durch den Hersteller oder eine Ausnahme.
- Gesamtstrukturübergreifender Zugriff ohne Vertrauensstellung oder über eine Vertrauensstellung mit fehlerhaftem Namenssuffix-Routing. Korrigieren Sie das Routing oder akzeptieren Sie eine Ausnahme.
Schritt 4: In Ringen erzwingen
Verbleibendes NTLM härten
Heben Sie vor dem Blockieren die Anforderungen für das NTLM an, das Sie weiterhin zulassen. Diese Einstellungen können domänenweit gelten, sobald NTLMv1 verschwunden ist:
Network security: LAN Manager authentication level
= Send NTLMv2 response only. Refuse LM & NTLM (LmCompatibilityLevel = 5)
Network security: Minimum session security for NTLM SSP based (including secure RPC) clients
= Require NTLMv2 session security, Require 128-bit encryption
Network security: Minimum session security for NTLM SSP based (including secure RPC) servers
= Require NTLMv2 session security, Require 128-bit encryption
Network security: Do not store LAN Manager hash value on next password change = EnabledLmCompatibilityLevel befindet sich unter HKLM\SYSTEM\CurrentControlSet\Control\Lsa; die beiden Werte für die minimale Sitzungssicherheit sind NTLMMinClientSec und NTLMMinServerSec (537395200 für beide Optionen) unter Lsa\MSV1_0. Wenden Sie Stufe 5 zuerst auf DCs an, da diese die Domänenkonten validieren, dann auf alle übrigen Systeme.
NTLM für die sensibelsten Identitäten und Hosts blockieren
- Nehmen Sie Tier-0-Konten in Protected Users auf; Mitglieder können sich überhaupt nicht per NTLM authentifizieren.
- Verweigern Sie Outgoing NTLM traffic to remote servers auf Privileged Access Workstations, damit Administrator-Anmeldeinformationen diese niemals als NTLM verlassen.
- Verweigern Sie Incoming NTLM traffic auf Tier-0-Servern, die in den Audit-Daten kein legitimes NTLM zeigen.
NTLM in der Domäne mit Ausnahmen verweigern
Sobald das 8004-Volumen auf bekannte, akzeptierte Quellen gesunken ist, setzen Sie NTLM authentication in this domain auf den DCs auf einen Verweigerungswert und tragen die verbleibenden Server unter Add server exceptions in this domain ein (ein Servername pro Zeile, Platzhalter erlaubt). Beginnen Sie mit „Deny for domain accounts to domain servers“, das NTLM von Nicht-Domänenservern unberührt lässt, und verschärfen Sie dann. Jede Ausnahme braucht einen Verantwortlichen und ein Überprüfungsdatum; eine Ausnahmeliste, die nur wächst, ist keine Kontrolle.
Überprüfen
- Das 8004-Volumen auf den DCs geht außerhalb der Ausnahmeserver gegen null; Blockierungsereignisse treten nur für Quellen auf, die Sie blockieren wollten.
- Die 4624-NTLMv1-Abfrage aus Schritt 2 liefert nichts mehr.
- Registrierungsprüfungen auf einer Stichprobe von Hosts:
Invoke-Command -ComputerName $dcs -ScriptBlock {
[PSCustomObject]@{
Host = $env:COMPUTERNAME
LmCompat = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa').LmCompatibilityLevel
MinSrvSec = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0').NTLMMinServerSec
}
}- Ein Test mit einem Protected-Users-Konto über einen Pfad per IP-Adresse sollte fehlschlagen, während derselbe Pfad per DNS-Name mit Kerberos gelingt (
klistzeigt ein Ticket für den Dienst).
Was dabei ausfallen kann
- LmCompatibilityLevel 5 auf DCs legt alles lahm, was noch LM- oder NTLMv1-Antworten sendet: alte Kopierer und NAS-Geräte, ältere Unix-SMB-Clients und Systeme mit fest codierter niedriger Stufe.
- Minimale Sitzungssicherheit legt alte Clients und Appliances lahm, die weder NTLMv2-Sitzungssicherheit noch 128-Bit-Verschlüsselung aushandeln können.
- NTLM in der Domäne zu verweigern unterbindet Zugriff per IP, Remoteverwaltung mit lokalen Konten, Arbeitsgruppengeräte, manche VPN- und WLAN-Konfigurationen, die Benutzer über NTLM-basierte Protokolle validieren, sowie fest auf NTLM codierte Anwendungen — sofern sie nicht auf der Ausnahmeliste stehen.
- Ausgehendes NTLM auf PAWs zu verweigern legt Verwaltungswerkzeuge lahm, die Geräte per IP oder Appliances außerhalb der Domäne ansprechen; Administratoren brauchen dafür einen separaten Weg.
- Mitglieder von Protected Users verlieren NTLM vollständig; jeder Dienst, den sie nur über NTLM nutzen, funktioniert für sie nicht mehr.
Weiterführend: das Thema NTLM & Legacy-Protokolle, NTLM relay und pass-the-hash zu den Folgen einer NTLM-Exposition sowie Kerberos-Härtung, denn jeder entfernte NTLM-Fluss wird zu einem Kerberos-Fluss, der AES verwenden sollte.
Häufige Fragen
Warum verwenden Clients NTLM, obwohl Kerberos verfügbar ist?
Die häufigsten Gründe sind Verbindungen per IP-Adresse statt per Name, ein fehlender oder doppelter SPN, ein Name, der über einen CNAME oder Load Balancer ohne passenden SPN aufgelöst wird, lokale Konten, Arbeitsgruppen- oder Nicht-Domänengeräte, gesamtstrukturübergreifender Zugriff ohne Vertrauensstellung sowie Anwendungen, die das NTLM-Paket direkt aufrufen. Jede Ursache erfordert eine andere Lösung — klassifizieren Sie Ihre 8004-Ereignisse daher nach Ursache, bevor Sie über die Ausnahmeliste entscheiden.
Deaktiviert LmCompatibilityLevel 5 allein auf Clients NTLMv1?
Nein. Die Client-Einstellung steuert, was ein Rechner sendet. Die Einstellung, die NTLMv1- und LM-Antworten ablehnt, ist die auf dem validierenden Server — bei Domänenkonten also auf den Domänencontrollern. Setzen Sie Stufe 5 auf DCs, um NTLMv1 für Domänenkonten abzulehnen, und auf Mitgliedsservern, um es für deren lokale Konten abzulehnen. Am einfachsten setzen Sie sie überall über eine einzige GPO.
Ist es realistisch, NTLM vollständig zu blockieren?
Für die meisten Organisationen nicht domänenweit in einem Schritt. Realistisch ist es, NTLM für Tier-0-Konten und -Systeme zu blockieren, ausgehendes NTLM auf Privileged Access Workstations zu verweigern und NTLM in der Domäne mit einer kurzen, überprüften Ausnahmeliste zu verweigern. Microsoft hat NTLM als veraltet eingestuft und ergänzt Kerberos um Funktionen, die die verbleibenden Lücken schließen — wer die Nutzung jetzt reduziert, hat es bei der endgültigen Abschaltung deutlich leichter.
NTLM in Active Directory auditieren und einschränken