Certified Cloud Developer


Seit meinem Einstieg in die Softwareentwicklung in den 80er-Jahren habe ich mich kontinuierlich in der jeweils aktuellen Technologie bewegt: von Assembler über C++ und Lisp/Common Lisp in den 1980er-Jahren, gefolgt von Java und Python in den 1990er-Jahren, später C# und .NET. Seit 2024 widme ich mich verstärkt wieder der Softwareentwicklung, nun im Kontext von KI-gestützten Systemen.

Als Anthropic-Certified Claude Developer setze ich moderne KI-Entwicklungsmethoden produktiv ein: Aufgaben, die früher Wochen an Entwicklungszeit beansprucht hätten, lassen sich heute in Stunden umsetzen. Aktuelles Beispiel ist Kontor, eine von mir entwickelte Handelsoberfläche mit Claude-API-Anbindung und einem eigenständigen Trader-Agent für KI-gestützte Marktanalyse, inklusive eines öffentlichen Wirtschaftskalenders mit allen Terminen.

Engineering is a Passion


Als System-Engineer (MCITP, CCP-V und AI Fluency & Claude Expert) betreue ich Netzwerkinfrastrukturen, führe Planungen durch, schule Mitarbeiter und führe Migrationen von Netzwerk, Server- als auch Client Infrastrukturen bis zum mittleren Enterprise Umfeld durch. Mein Aufgabengebiet umfasste der IT Support von mittelständischen Unternehmen als auch die Umsetzung von Projekten in Server und Clientnetzwerken unter den Betriebssystemen Microsoft, Mac OS und Linux resp. den Hypervisoren VMware, Hyper V und Citrix.

Mein Knowhow und Wissen sammelte ich in Projekten im Bereich öffentlicher und privater Auftraggeber.

 

NTLMv1 und LDAP-Signing:
der Nachweis vor der Härtung

BLG-1479-ch-deLernanleitung5 Minuten

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
  1. Auf einen Blick
  2. Warum der Nachweis zählt
  3. Welche Ereignisse du brauchst
  4. Auditing einschalten
  5. Beispiel 1: NTLMv1 und NTLMv2 als Pivot
  6. Beispiel 2: Unsignierte LDAP-Binds
  7. Vom Messen zum Abschalten
  8. Typische Fehler beim Auswerten
  9. Grenzen der Methode
  10. Einordnung: Was das für Admins heisst
  11. Fazit
  12. Änderungshistorie
Goldenes Vorhängeschloss mit geöffnetem Bügel und Schlüssel (Symbolfoto zu Authentifizierung und Härtung)
Veraltete NTLMv1-Nutzer finden
Vor der Härtung prüfen
Foto: qimono / Pixabay

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:

  1. 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.
  2. LDAP-Events per Registry. Unter HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics setzt du 16 LDAP Interface Events auf 2, damit das Event 2889 entsteht.
  3. 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:

  1. Auditing aktivieren und sieben bis dreissig Tage sammeln.
  2. Den Report für alle Domain Controller und die wichtigen Member-Server erzeugen.
  3. Pivot und Aggregat auswerten: wer, wohin, mit welchem Konto, über welchen Prozess.
  4. Die Anwendungen umstellen auf LDAPS (Port 636), Kerberos oder Dienstkonten mit sauberer Konfiguration.
  5. 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

Änderungshistorie

  • — Artikel veröffentlicht.