Windows Event Forwarding für Domänencontroller
Eine WEF-Pipeline für Domänencontroller aufbauen: quellinitiierte Abonnements, GPO, Protokollzugriff, XPath-Abfragen, Collector-Dimensionierung und Integritätsprüfungen.
Das Security-Protokoll eines Domänencontrollers ist ein Ringpuffer, der sich selbst überschreibt – auf einem ausgelasteten DC oft innerhalb von Stunden. Ein Angreifer mit Domain-Admin-Rechten kann es außerdem löschen. Jede Erkennung, die davon abhängt, die Protokolle auf dem DC selbst zu lesen, ist fragil. Sie hängt davon ab, dass das Ereignis überlebt, dass der DC erreichbar ist und dass niemand wevtutil cl Security ausgeführt hat. Windows Event Forwarding (WEF) ist in Windows integriert und überträgt Ereignisse von jedem DC innerhalb von Sekunden an einen zentralen Windows Event Collector (WEC). Von dort übernimmt sie ein SIEM-Agent.
Dieser Leitfaden baut eine produktionsreife WEF-Pipeline für Domänencontroller mit quellinitiierten Abonnements auf: Collector, GPO, Zugriff auf das Security-Protokoll, Abonnementabfrage, Dimensionierung und Integritätsüberwachung. Die Überwachungsrichtlinie, die festlegt, welche Ereignisse überhaupt entstehen, behandelt der Grundlagenleitfaden zu Auditing und Erkennung. Die Referenz der Ereignis-IDs erklärt, welche Sie behalten sollten.
Architektur
- Quellen. Jeder DC sowie AD-CS-, AD-FS- und Entra-Connect-Server. Die integrierte Weiterleitungskomponente läuft im WinRM-Dienst als Network Service und sendet Ereignisse über WS-Management.
- Collector. Ein dedizierter Windows Server mit dem Dienst Windows Event Collector (
Wecsvc), der in das ProtokollForwardedEventsoder in benutzerdefinierte Kanäle empfängt. - Nachgelagert. Ein SIEM-Agent oder der Azure Monitor Agent auf dem Collector leitet die Ereignisse weiter. Der Collector ist ein Puffer, nicht der Langzeitspeicher.
Der Collector hält eine Kopie jedes Sicherheitsereignisses aller DCs; behandeln Sie ihn daher als sensibles System. Verwalten Sie ihn aus demselben Tier wie die DCs oder aus einem dedizierten Sicherheits-Tier, das DC-Admins nicht administrieren können. Es geht darum, dass ein kompromittierter Domain Admin die Beweise nicht unbemerkt löschen kann. Nehmen Sie ihn in jedem Fall in Ihr Tier-0-Inventar auf.
Messen: Ereignisvolumen vor dem Aufbau
Dimensionieren Sie anhand realer Zahlen. Messen Sie auf zwei oder drei repräsentativen DCs, wie schnell das Security-Protokoll umläuft:
$log = Get-WinEvent -ListLog Security
$first = Get-WinEvent -LogName Security -MaxEvents 1 -Oldest
$last = Get-WinEvent -LogName Security -MaxEvents 1
$span = ($last.TimeCreated - $first.TimeCreated).TotalSeconds
[pscustomobject]@{
DC = $env:COMPUTERNAME
RecordCount = $log.RecordCount
HoursCovered = [math]::Round($span / 3600, 1)
AvgEventsPerSec = [math]::Round($log.RecordCount / $span, 1)
LogSizeMB = [math]::Round($log.FileSize / 1MB)
}Messen Sie erneut während der Anmeldespitze am Montagmorgen. Gehen Sie für die Planung von etwa 1 KB pro weitergeleitetem Ereignis aus, wenn ContentFormat auf Events gesetzt ist, und multiplizieren Sie mit den Spitzenwerten an Ereignissen pro Sekunde über alle DCs. Daraus ergibt sich die Aufnahmerate für den Collector-Datenträger und die SIEM-Lizenz.
Den Collector aufbauen
Auf einem dedizierten Mitgliedsserver mit Windows Server 2022 oder 2025:
# WinRM-Listener (auf aktuellen Windows Servern standardmäßig aktiviert), dann Wecsvc mit verzögertem automatischem Start
winrm quickconfig -q
wecutil qc /q
# Das Protokoll ForwardedEvents vergrößern und auf ein dediziertes Volume verschieben
wevtutil sl ForwardedEvents /ms:2147483648 /lfn:"E:\Logs\ForwardedEvents.evtx"
Get-WinEvent -ListLog ForwardedEvents | Select-Object LogName, MaximumSizeInBytes, LogFilePathLegen Sie das Protokoll auf ein schnelles, dediziertes Volume. Prüfen Sie bei Collectoren unter Windows Server 2016 und 2019 das von Microsoft dokumentierte Problem, bei dem sich Quellen nicht verbinden können, weil WinRM und Wecsvc einen Diensthost mit der falschen HTTP-URL-ACL teilen. Wenden Sie die dokumentierte Korrektur an, bevor Sie irgendetwas anderes untersuchen.
Die Quellen per GPO konfigurieren
Erstellen Sie eine GPO, die mit der OU Domain Controllers verknüpft ist (und mit den OUs weiterer Tier-0-Server, von denen Sie weiterleiten).
-
Quellen auf den Collector verweisen.
Computer Configuration > Policies > Administrative Templates > Windows Components > Event Forwarding > Configure target Subscription Manager: Enabled, mit dem Wert:Server=http://wec01.corp.example.com:5985/wsman/SubscriptionManager/WEC,Refresh=60 -
Sicherstellen, dass WinRM läuft.
Computer Configuration > Policies > Windows Settings > Security Settings > System Services > Windows Remote Management (WS-Management): Automatic. -
Der Weiterleitungskomponente das Lesen des Security-Protokolls erlauben. Die Weiterleitungskomponente läuft als Network Service, das das Security-Protokoll standardmäßig nicht lesen kann. Nehmen Sie entweder
NT AUTHORITY\NETWORK SERVICEin die integrierte Gruppe Event Log Readers auf, oder erweitern Sie die Kanal-ACL überComputer Configuration > Policies > Administrative Templates > Windows Components > Event Log Service > Security > Configure log access. Bei der zweiten Option hängen Sie(A;;0x1;;;NS)an die vorhandene SDDL an, die Sie mitwevtutil gl Securityauslesen.
Auf DCs ist Event Log Readers eine domänenweite integrierte Gruppe. Eine einzige Mitgliedschaftsänderung, einmal auf einem beliebigen DC ausgeführt, deckt daher alle DCs ab:
net localgroup "Event Log Readers" "NT AUTHORITY\NETWORK SERVICE" /add- Den Datenverkehr zulassen. DCs benötigen ausgehend TCP 5985 zum Collector, und der Collector benötigt eingehend 5985 ausschließlich von den DCs. Bilden Sie dies in Ihrer DC-Firewallrichtlinie ab.
Starten Sie nach gpupdate WinRM auf jedem DC neu oder starten Sie den DC neu, damit die Weiterleitungskomponente die neue Mitgliedschaft in Event Log Readers übernimmt.
Das Abonnement erstellen
Erstellen Sie das Abonnement als XML, damit es versioniert und reproduzierbar ist. Die SDDL in AllowedSourceDomainComputers erteilt der Gruppe Domain Controllers (DD) die Berechtigung, es zu verwenden:
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
<SubscriptionId>DC-Security</SubscriptionId>
<SubscriptionType>SourceInitiated</SubscriptionType>
<Description>Security events from domain controllers</Description>
<Enabled>true</Enabled>
<Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
<ConfigurationMode>Custom</ConfigurationMode>
<Delivery Mode="Push">
<Batching>
<MaxItems>500</MaxItems>
<MaxLatencyTime>30000</MaxLatencyTime>
</Batching>
<PushSettings>
<Heartbeat Interval="900000"/>
</PushSettings>
</Delivery>
<Query><![CDATA[
<QueryList>
<Query Id="0">
<Select Path="Security">*[System[(EventID=1102 or EventID=4719 or EventID=4706 or EventID=4707 or EventID=4716)]]</Select>
<Select Path="Security">*[System[(EventID>=4720 and EventID<=4767)]]</Select>
<Select Path="Security">*[System[(EventID=4768 or EventID=4769 or EventID=4771 or EventID=4776)]]</Select>
<Select Path="Security">*[System[(EventID=4662 or EventID=5136 or EventID=5137 or EventID=5138 or EventID=5139 or EventID=5141)]]</Select>
<Select Path="Security">*[System[(EventID=4624 or EventID=4625 or EventID=4648 or EventID=4672 or EventID=4697)]]</Select>
<Select Path="System">*[System[(EventID=7045)]]</Select>
<Select Path="Directory Service">*[System[(EventID=2887 or EventID=2889 or EventID=2089)]]</Select>
</Query>
</QueryList>
]]></Query>
<ReadExistingEvents>false</ReadExistingEvents>
<TransportName>HTTP</TransportName>
<ContentFormat>Events</ContentFormat>
<Locale Language="en-US"/>
<LogFile>ForwardedEvents</LogFile>
<AllowedSourceNonDomainComputers></AllowedSourceNonDomainComputers>
<AllowedSourceDomainComputers>O:NSG:BAD:P(A;;GA;;;DD)</AllowedSourceDomainComputers>
</Subscription>Anmerkungen zu den gewählten Einstellungen:
- Benutzerdefinierte Zustellung (
Custom) mit einer maximalen Latenz von 30 Sekunden liegt nah am integrierten ModusMinLatency, erlaubt aber, die Stapelgröße festzulegen. Der ModusNormalkann Ereignisse um bis zu 15 Minuten verzögern – zu langsam für Alarmierung. ContentFormatEventsverzichtet auf den gerenderten Meldungstext und halbiert den Speicherbedarf ungefähr. Ihr SIEM rendert die Meldung aus den Ereignisdaten.- Mehrere
Select-Elemente statt einer langenor-Kette. Lange XPath-Ausdrücke stoßen an Längenbegrenzungen für Abfragen und schlagen an der Quelle stillschweigend fehl. ReadExistingEventsfalseverhindert, dass jeder DC beim Erstellen des Abonnements sein gesamtes Protokoll erneut sendet. Setzen Sie den Wert vorübergehend auftrue, wenn Sie Daten nachladen müssen.
Legen Sie für AD-CS-Server (4886 bis 4900) ein separates Abonnement mit eigener SDDL oder Sicherheitsgruppe an, statt das DC-Abonnement zu erweitern.
wecutil cs C:\WEF\DC-Security.xml
wecutil gs DC-SecuritySkalierung und Ausfallsicherheit
Ein einzelner Collector ist ein Single Point of Failure für Ihre Erkennung. Sobald das erste Abonnement funktioniert, härten Sie das Design:
- Zwei Collectoren, ein Name. Verweisen Sie die GPO für den Subscription Manager auf einen DNS-Alias, oder tragen Sie zwei
Server=-Einträge in die Richtlinie ein. Ein DNS-Alias schickt jede Quelle jeweils nur an einen Collector: Für ein Failover muss der Alias umgestellt werden, doppelte Aufnahme entsteht aber nicht. Die Richtlinie akzeptiert auch mehrere Werte, und jede Quelle leitet dann an jeden aufgeführten Collector weiter: Das bringt echte Redundanz, verdoppelt aber die Aufnahme; entscheiden Sie also, was wichtiger ist: Verfügbarkeit oder SIEM-Kosten. - Nach Volumen aufteilen, nicht nur nach Serverrolle. Wenn eine Handvoll DCs an Hub-Standorten die meisten Ereignisse erzeugt, geben Sie ihnen einen eigenen Collector. Ein Collector, der zurückfällt, zeigt wachsende Abstände zwischen
TimeCreatedund dem Zeitpunkt, an dem Ereignisse inForwardedEventsankommen. - Benutzerdefinierte Kanäle für Daten mit hohem Volumen. Alles in
ForwardedEventsliegt in einer Datei. Sehr große Umgebungen bauen auf dem Collector benutzerdefinierte Ereigniskanäle (einen pro Abonnement), damit sich jeder separat dimensionieren und aufbewahren lässt und eine Flut von 4662-Ereignissen seltenere, wertvollere Ereignisse nicht verdrängen kann. - Erst weiterleiten, dann kürzen. Der Collector ist ein Puffer. Lassen Sie den SIEM-Agenten kontinuierlich daraus lesen und behalten Sie lokal nur wenige Tage. Fällt das SIEM aus, rettet Sie genau dieser Puffer – dimensionieren Sie ihn daher für Ihren längsten realistischen SIEM-Ausfall.
- Den Collector selbst überwachen. Alarmieren Sie, wenn der Dienst Windows Event Collector stoppt, wenn der Speicherplatz auf dem Protokoll-Volume knapp wird und wenn das Protokoll
ForwardedEventsseine maximale Größe erreicht.
Überprüfen
Bestätigen Sie auf dem Collector, dass jeder DC aktiv ist und aktuell liefert:
wecutil gr DC-Security # Laufzeitstatus pro Quelle: Active, Heartbeat-Zeit, Fehler
Get-WinEvent -LogName ForwardedEvents -MaxEvents 20 |
Select-Object TimeCreated, MachineName, Id
# DCs, die in der letzten Stunde nichts geliefert haben
$dcs = (Get-ADDomainController -Filter *).HostName
$seen = Get-WinEvent -FilterHashtable @{ LogName='ForwardedEvents'; StartTime=(Get-Date).AddHours(-1) } |
Select-Object -ExpandProperty MachineName -Unique
$dcs | Where-Object { $_ -notin $seen }Lesen Sie auf einem DC, der nicht liefert, das Protokoll Microsoft-Windows-Eventlog-ForwardingPlugin/Operational. Ereignis 100 bedeutet, dass das Abonnement erstellt wurde. Fehler wie 104 und 105 beschreiben Verbindungs- oder Zugriffsprobleme – meist eine Firewallregel, eine falsche URL des Subscription Managers oder fehlender Lesezugriff auf das Security-Protokoll.
Get-WinEvent -LogName 'Microsoft-Windows-Eventlog-ForwardingPlugin/Operational' -MaxEvents 10 |
Format-List TimeCreated, Id, MessageFühren Sie anschließend einen durchgängigen Test durch. Fügen Sie ein Testkonto einer überwachten Gruppe hinzu, entfernen Sie es wieder und bestätigen Sie, dass 4728 und 4729 innerhalb Ihres Latenzziels im SIEM ankommen. Übernehmen Sie eine geplante Version der obigen Prüfung auf „stumme DCs“ in Ihr Monitoring. Ein DC, der nicht mehr weiterleitet, ist selbst ein Erkennungsmerkmal.
Was dadurch nicht mehr funktioniert
- Konflikte mit der WinRM-Härtung. GPOs, die den WinRM-Dienst auf Servern deaktivieren, oder Firewall-Baselines, die ausgehend 5985 von DCs blockieren, stoppen die Weiterleitung stillschweigend. Die Weiterleitungskomponente versucht es erneut, ohne Fehler im System-Protokoll anzuzeigen.
- Ein Collector-Ausfall bedeutet eine Lücke. Quellen führen ein Lesezeichen und senden erneut, sobald der Collector zurück ist – aber nur, solange die Ereignisse noch im lokalen Protokoll existieren. Halten Sie die Security-Protokolle der DCs groß genug (mehrere GB), um einen Collector-Ausfall von mindestens einem Tag abzudecken.
- Last auf den DCs. Die Weiterleitungskomponente benötigt wenig CPU, aber
ReadExistingEventsmit dem Werttruebei einem großen Protokoll erzeugt einen Last- und Netzwerkschub auf allen DCs gleichzeitig. - SIEM-Kosten. Das Weiterleiten von 4624 Typ 3 und 4662 von ausgelasteten DCs kann das Aufnahmevolumen dominieren. Filtern Sie am Collector oder im SIEM erst, nachdem Sie die Daten gesehen haben. Was Sie an der Quelle filtern, ist endgültig verloren.
- Uhrzeit und Benennung.
MachineNamein weitergeleiteten Ereignissen ist der FQDN der Quelle. Umbenannte oder neu aufgebaute DCs erscheinen als neue Quellen; passen Sie daher alle Dashboards pro DC an.
Weiterführende Lektüre: Speisen Sie diese Pipeline mit Ködersignalen aus Honeytokens und Deception, schützen Sie den Collector als Teil von Tier 0 und privilegierter Zugriff, und sehen Sie sich den gesamten Bereich Auditing, Protokollierung & Erkennung an.
Häufige Fragen
Sollte ich für Domänencontroller quellinitiierte oder collectorinitiierte Abonnements verwenden?
Quellinitiierte. Die DCs erfahren über Gruppenrichtlinien vom Collector und senden ihm die Ereignisse, sodass der Collector keine administrativen Rechte auf den DCs benötigt und neue DCs automatisch einbezogen werden, sobald sie in die OU Domain Controllers heraufgestuft werden. Collectorinitiierte Abonnements erfordern, dass sich der Collector mit einem Konto, das das Security-Protokoll lesen kann, mit jeder Quelle verbindet – also eine Anmeldeinformation mit Rechten auf Tier 0, die auf dem Collector liegt.
Ist der Datenverkehr von Windows Event Forwarding über HTTP-Port 5985 verschlüsselt?
Ja, in einer Domäne. Mit Kerberos-Authentifizierung verschlüsselt WinRM die Nutzdaten der Nachricht auch über den HTTP-Transport, sodass Ereignisse auf der Leitung nicht lesbar sind. HTTPS auf Port 5986 mit Zertifikaten wird hauptsächlich für Quellen benötigt, die keine Domänenmitglieder sind, oder wenn eine Richtlinie TLS auf Transportebene verlangt. Behalten Sie Kerberos bei und aktivieren Sie weder Basic-Authentifizierung noch AllowUnencrypted auf dem WinRM-Client oder -Dienst, nur damit die Weiterleitung funktioniert.
Wie viele Domänencontroller kann ein einzelner Windows Event Collector verarbeiten?
Bei DCs ist selten die Anzahl der Quellen die Grenze, sondern die Ereignisrate. Ein Collector mit schnellen Datenträgern und ausreichend Arbeitsspeicher verarbeitet einige Tausend Ereignisse pro Sekunde, und ausgelastete DCs können in Spitzenzeiten jeweils Hunderte pro Sekunde erzeugen. Messen Sie Ihre Ereignisse pro Sekunde während der Anmeldespitze am Montagmorgen und dimensionieren Sie so, dass jeder Collector deutlich unter seiner Obergrenze läuft. Verteilen Sie DCs mit hohem Volumen auf zwei Collectoren und verwenden Sie mehrere Abonnements statt eines großen.
Windows Event Forwarding für Domänencontroller