Saltar al contenido

Windows Event Forwarding para controladores de dominio

Construya una canalización de Windows Event Forwarding para los DC: suscripciones iniciadas por el origen, GPO, acceso a registros, XPath, dimensionamiento y estado.

Florian Amette8 min de lectura

El registro Security de un controlador de dominio es un búfer circular que se sobrescribe a sí mismo, a menudo en cuestión de horas en un DC con mucha actividad. Un atacante con derechos de Domain Admin también puede borrarlo. Cualquier detección que dependa de leer los registros en el propio DC es frágil: depende de que el evento sobreviva, de que el DC sea accesible y de que nadie haya ejecutado wevtutil cl Security. Windows Event Forwarding (WEF) está integrado en Windows y envía los eventos de cada DC a un Windows Event Collector (WEC) central en cuestión de segundos. Desde ahí, un agente del SIEM los recoge.

Esta guía construye una canalización WEF de producción para controladores de dominio con suscripciones iniciadas por el origen: el recopilador, la GPO, el acceso al registro Security, la consulta de la suscripción, el dimensionamiento y la supervisión del estado. La directiva de auditoría que decide qué eventos existen se trata en la guía pilar de auditoría y detección. La referencia de ID de evento explica cuáles conservar.

Arquitectura

  • Orígenes. Todos los DC, además de los servidores de AD CS, AD FS y Entra Connect. El reenviador integrado se ejecuta dentro del servicio WinRM como Network Service y envía los eventos mediante WS-Management.
  • Recopilador. Un Windows Server dedicado que ejecuta el servicio Windows Event Collector (Wecsvc) y recibe los eventos en el registro ForwardedEvents o en canales personalizados.
  • Destino posterior. Un agente del SIEM o Azure Monitor Agent en el recopilador reenvía los eventos. El recopilador es un búfer, no el almacenamiento a largo plazo.

El recopilador guarda una copia de cada evento de seguridad de los DC, así que trátelo como un sistema sensible. Adminístrelo desde el mismo nivel que los DC, o desde un nivel de seguridad dedicado que los administradores de los DC no puedan administrar. La idea es que un Domain Admin comprometido no pueda borrar la evidencia sin que nadie se entere. En cualquier caso, inclúyalo en su inventario de Tier 0.

Medir: volumen de eventos antes de construir

Dimensione a partir de cifras reales. En dos o tres DC representativos, mida la rapidez con la que rota el registro Security:

PowerShell
$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)
}

Vuelva a medir durante el pico de inicios de sesión del lunes por la mañana. Para la planificación, calcule aproximadamente 1 KB por evento reenviado con ContentFormat establecido en Events y multiplíquelo por los eventos por segundo en el pico de todos los DC. Eso le da la tasa de ingesta para el disco del recopilador y para la licencia del SIEM.

Construir el recopilador

En un servidor miembro dedicado con Windows Server 2022 o 2025:

PowerShell
# Agente de escucha de WinRM (habilitado de forma predeterminada en las versiones actuales de Windows Server) y, después, inicio automático retrasado de Wecsvc
winrm quickconfig -q
wecutil qc /q

# Ampliar el registro ForwardedEvents y moverlo a un volumen dedicado
wevtutil sl ForwardedEvents /ms:2147483648 /lfn:"E:\Logs\ForwardedEvents.evtx"
Get-WinEvent -ListLog ForwardedEvents | Select-Object LogName, MaximumSizeInBytes, LogFilePath

Coloque el registro en un volumen dedicado y rápido. En los recopiladores con Windows Server 2016 y 2019, revise el problema documentado por Microsoft en el que los orígenes no pueden conectarse porque WinRM y Wecsvc comparten un host de servicio con una ACL de URL HTTP incorrecta. Aplique la corrección documentada antes de investigar cualquier otra cosa.

Configurar los orígenes con GPO

Cree una GPO vinculada a la OU Domain Controllers (y a las OU de los demás servidores de Tier 0 desde los que reenvíe).

  1. Dirigir los orígenes al recopilador. Computer Configuration > Policies > Administrative Templates > Windows Components > Event Forwarding > Configure target Subscription Manager: Enabled, con el valor:

    Server=http://wec01.corp.example.com:5985/wsman/SubscriptionManager/WEC,Refresh=60

  2. Asegurarse de que WinRM se ejecuta. Computer Configuration > Policies > Windows Settings > Security Settings > System Services > Windows Remote Management (WS-Management): Automatic.

  3. Permitir que el reenviador lea el registro Security. El reenviador se ejecuta como Network Service, que de forma predeterminada no puede leer el registro Security. Agregue NT AUTHORITY\NETWORK SERVICE al grupo integrado Event Log Readers, o amplíe la ACL del canal mediante Computer Configuration > Policies > Administrative Templates > Windows Components > Event Log Service > Security > Configure log access. Con la segunda opción, añada (A;;0x1;;;NS) al SDDL existente obtenido con wevtutil gl Security.

En los DC, Event Log Readers es un grupo integrado de ámbito de dominio, así que un único cambio de pertenencia, ejecutado una vez en cualquier DC, cubre todos los DC:

PowerShell
net localgroup "Event Log Readers" "NT AUTHORITY\NETWORK SERVICE" /add
  1. Permitir el tráfico. Los DC necesitan TCP 5985 saliente hacia el recopilador, y el recopilador necesita 5985 entrante solo desde los DC. Refléjelo en su directiva de firewall de los DC.

Después de gpupdate, reinicie WinRM en cada DC, o reinicie el equipo, para que el reenviador tenga en cuenta la nueva pertenencia a Event Log Readers.

Crear la suscripción

Cree la suscripción en XML para que esté bajo control de versiones y sea reproducible. El SDDL de AllowedSourceDomainComputers concede al grupo Domain Controllers (DD) permiso para usarla:

XML
<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&gt;=4720 and EventID&lt;=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>

Notas sobre las decisiones:

  • La entrega Custom con una latencia máxima de 30 segundos se parece al modo integrado MinLatency, pero le permite dimensionar los lotes. El modo Normal puede retrasar los eventos hasta 15 minutos, lo que es demasiado lento para generar alertas.
  • ContentFormat Events descarta el texto del mensaje representado, lo que reduce el almacenamiento aproximadamente a la mitad. Su SIEM construye el mensaje a partir de los datos del evento.
  • Varios elementos Select en lugar de una larga cadena de or. Las expresiones XPath largas alcanzan los límites de longitud de consulta y fallan en el origen sin avisar.
  • ReadExistingEvents false evita que cada DC vuelva a enviar todo su registro al crear la suscripción. Establézcalo temporalmente en true si necesita recuperar datos anteriores.

Añada una suscripción independiente para los servidores de AD CS (4886 a 4900) con su propio SDDL o grupo de seguridad, en lugar de ampliar la suscripción de los DC.

PowerShell
wecutil cs C:\WEF\DC-Security.xml
wecutil gs DC-Security

Escala y resiliencia

Un único recopilador es un punto único de fallo para su detección. Cuando la primera suscripción funcione, refuerce el diseño:

  • Dos recopiladores, un nombre. Dirija la GPO del administrador de suscripciones a un alias DNS, o indique dos entradas Server= en la directiva. Un alias DNS envía cada origen a un solo recopilador a la vez: la conmutación por error implica redirigir el alias, pero no hay ingesta duplicada. La directiva también acepta varios valores, y cada origen reenvía entonces a todos los recopiladores de la lista: eso aporta una redundancia real pero duplica la ingesta, así que decida qué pesa más, la disponibilidad o el coste del SIEM.
  • Divida por volumen, no solo por función del servidor. Si unos pocos DC de sitios centrales producen la mayoría de los eventos, deles su propio recopilador. Un recopilador que se retrasa muestra diferencias crecientes entre TimeCreated y el momento en que los eventos llegan a ForwardedEvents.
  • Canales personalizados para los datos de gran volumen. Todo lo que hay en ForwardedEvents es un único archivo. Los entornos muy grandes crean canales de eventos personalizados en el recopilador (uno por suscripción) para poder dimensionar y conservar cada uno por separado, y para que una avalancha de eventos 4662 no desplace eventos más escasos y más valiosos.
  • Primero enviar, luego recortar. El recopilador es un búfer. Deje que el agente del SIEM lea de él continuamente y conserve solo unos días en local. Si el SIEM cae, ese búfer es lo que le salva, así que dimensiónelo para la interrupción del SIEM más larga que sea realista.
  • Supervise el propio recopilador. Genere alertas cuando se detenga el servicio Windows Event Collector, cuando quede poco espacio en el volumen de registros y cuando el registro ForwardedEvents alcance su tamaño máximo.

Verificar

En el recopilador, confirme que cada DC está activo y ha enviado eventos recientemente:

PowerShell
wecutil gr DC-Security          # estado en tiempo de ejecución por origen: Active, hora del latido, errores
Get-WinEvent -LogName ForwardedEvents -MaxEvents 20 |
  Select-Object TimeCreated, MachineName, Id

# DC que no han entregado nada en la última hora
$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 }

En un DC que no entrega eventos, lea Microsoft-Windows-Eventlog-ForwardingPlugin/Operational. El evento 100 significa que se creó la suscripción. Los errores como el 104 y el 105 describen fallos de conectividad o de acceso, normalmente una regla de firewall, una URL del administrador de suscripciones incorrecta o la falta de acceso de lectura al registro Security.

PowerShell
Get-WinEvent -LogName 'Microsoft-Windows-Eventlog-ForwardingPlugin/Operational' -MaxEvents 10 |
  Format-List TimeCreated, Id, Message

A continuación, ejecute una prueba de extremo a extremo. Agregue y quite una cuenta de prueba de un grupo supervisado y confirme que los eventos 4728 y 4729 llegan al SIEM dentro de su objetivo de latencia. Incorpore a la supervisión una versión programada de la comprobación de «DC silenciosos» anterior. Un DC que deja de reenviar es en sí mismo una detección.

Qué se rompe

  • Conflictos con el hardening de WinRM. Las GPO que deshabilitan el servicio WinRM en los servidores, o las líneas de base de firewall que bloquean el 5985 saliente desde los DC, detienen el reenvío sin avisar. El reenviador reintenta sin mostrar errores en el registro System.
  • Una caída del recopilador implica un hueco. Los orígenes guardan un marcador y reenvían cuando el recopilador vuelve, pero solo mientras los eventos sigan existiendo en el registro local. Mantenga los registros Security de los DC lo bastante grandes (varios GB) para cubrir una caída del recopilador de al menos un día.
  • Carga en los DC. El reenviador consume poca CPU, pero ReadExistingEvents con valor true sobre un registro grande provoca un pico de carga y de tráfico de red en todos los DC a la vez.
  • Coste del SIEM. Reenviar los eventos 4624 de tipo 3 y 4662 de los DC con mucha actividad puede dominar el volumen de ingesta. Filtre en el recopilador o en el SIEM solo después de haber visto los datos. Si filtra en el origen, los pierde para siempre.
  • Reloj y nombres. MachineName en los eventos reenviados es el FQDN del origen. Los DC renombrados o reconstruidos aparecen como orígenes nuevos, así que actualice los paneles que tenga por DC.

Lecturas relacionadas: alimente esta canalización con señales de señuelos mediante honeytokens y engaño, proteja el recopilador como parte de Tier 0 y acceso privilegiado y consulte toda el área de auditoría, registro y detección.

Preguntas frecuentes

¿Debo usar suscripciones iniciadas por el origen o por el recopilador para los controladores de dominio?

Iniciadas por el origen. Los DC conocen el recopilador mediante directiva de grupo y le envían los eventos, así que el recopilador no necesita derechos administrativos en los DC y los nuevos DC se incorporan automáticamente al promoverse en la OU Domain Controllers. Las suscripciones iniciadas por el recopilador exigen que este se conecte a cada origen con una cuenta capaz de leer el registro Security, lo que implica que en el recopilador reside una credencial con derechos sobre Tier 0.

¿El tráfico de Windows Event Forwarding está cifrado sobre HTTP en el puerto 5985?

Sí, en un dominio. Con autenticación Kerberos, WinRM cifra la carga del mensaje incluso sobre el transporte HTTP, así que los eventos no se pueden leer en la red. HTTPS en el puerto 5986 con certificados es necesario sobre todo para orígenes que no son miembros del dominio, o cuando la directiva exige TLS en la capa de transporte. Mantenga Kerberos y no habilite la autenticación Basic ni AllowUnencrypted en el cliente o el servicio WinRM para hacer funcionar el reenvío.

¿Cuántos controladores de dominio puede gestionar un Windows Event Collector?

En los DC, el límite rara vez es el número de orígenes, sino la tasa de eventos. Un recopilador con discos rápidos y memoria suficiente gestiona unos pocos miles de eventos por segundo, y cada DC con mucha actividad puede producir cientos por segundo en los picos. Mida sus eventos por segundo durante los picos de inicio de sesión del lunes por la mañana y dimensione para que cada recopilador funcione muy por debajo de su techo. Reparta los DC de mayor volumen entre dos recopiladores y use varias suscripciones en lugar de una sola grande.

Windows Event Forwarding para controladores de dominio

Guías relacionadas

Kerberos y autenticación

Defensa contra Kerberoasting y AS-REP roasting

Reduzca la exposición a Kerberoasting y AS-REP roasting: inventario de SPN, eliminación de obsoletos, gMSA y AES, un honey SPN y detección de picos de 4769 RC4.

Básico