La publicación de @Leo es correcta, sin embargo, es posible que tenga problemas de rendimiento si se combina con muchos eventos. El enfoque ideal es construir un filtro específico para lo que está buscando. Como el SID para el grupo de administradores locales es conocido ( S-1-5-32-544
), se puede usar el siguiente filtro XML. Uno puede copiar / pegar esto en el Visor de eventos (Filtrar registro actual > XML) o usarlo con PowerShell.
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4732)]]
and
*[EventData[Data[@Name='TargetSid'] and Data='S-1-5-32-544']]
</Select>
</Query>
</QueryList>
Para usar con PowerShell, establezca el filtro XML en una variable y luego ejecute Get-WinEvent
.
$xmlFilter = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4732)]]
and
*[EventData[Data[@Name='TargetSid'] and Data='S-1-5-32-544']]
</Select>
</Query>
</QueryList>
"@
Get-WinEvent -FilterXml $xmlFilter
Alertas
Si desea ejecutar alguna acción personalizada después de que ocurra un evento como este, es posible configurar alertas a través de Scheduled Tasks
ya que recientemente publiqué en mi blog - Microsoft Event Log Alerting . Hacerlo requiere dos partes:
- Configurar la tarea programada
- Configurar el script de PowerShell
Tarea programada
Los siguientes comandos de PowerShell configurarán la tarea programada para que solo se active cuando se agregue un miembro a BuiltIn\Administrators
. Tenga en cuenta que muchos de estos ajustes de configuración no están disponibles a través de la GUI.
# NOTE - ExecutionPolicy set to Unrestricted should only be used for testing.
$Action = New-ScheduledTaskAction -NoLogo '
-Execute "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" '
-NoProfile '
-NonInteractive '
-WindowStyle Hidden '
-File .\Security_4732.ps1 -RecordID $(eventRecordID) '
-ExecutionPolicy Unrestricted' '
-WorkingDirectory "C:\AlertScripts\"
$Principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" '
-LogonType ServiceAccount
$Settings = New-ScheduledTaskSettingsSet -DisallowDemandStart '
-Compatibility Win8 '
-Hidden '
-WakeToRun '
-RunOnlyIfNetworkAvailable '
-AllowStartIfOnBatteries
$Settings.RunOnlyIfIdle = $FALSE
$Settings.ExecutionTimeLimit = "PT5M"
$Settings.StartWhenAvailable = $TRUE
$Settings.StopIfGoingOnBatteries = $FALSE
$Settings.DisallowStartOnRemoteAppSession = $FALSE
$Settings.DisallowStartIfOnBatteries = $FALSE
# Create Trigger via Security Event ID 4732 & Local Admin Group
$cimTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger '
-Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger
$Trigger = New-CimInstance -CimClass $cimTriggerClass -ClientOnly
$Trigger.Subscription = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4732)]]
and
*[EventData[Data[@Name='TargetSid'] and Data='S-1-5-32-544']]
</Select>
</Query>
</QueryList>
"@
$Trigger.ExecutionTimeLimit = 'PT5M'
$Trigger.Enabled = $TRUE
# Set ValueQueries so the RecordID can be passed to the script
$Trigger.ValueQueries = [CimInstance[]]$(Get-CimClass -ClassName MSFT_TaskNamedValue '
-Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskNamedValue)
$Trigger.ValueQueries[0].Name = "eventRecordID"
$Trigger.ValueQueries[0].Value = "Event/System/EventRecordID"
Register-ScheduledTask -TaskName "Security_4732" '
-Description "Run script when user is added to local administrators group." '
-TaskPath "\AlertScripts\" '
-Action $Action '
-Trigger $Trigger '
-Settings $Settings '
-Principal $Principal
Script de PowerShell
Con la configuración de tareas programadas, guarde el siguiente código de PowerShell en C:\AlertScripts\Security_4732.ps1
. Asegúrese de personalizar esto para su uso con su propio correo electrónico. Aunque realmente se puede personalizar como quieras. Solo asegúrese de permitir solo los scripts firmados cuando se implementan en producción, lo que también requerirá la actualización de la tarea programada.
param([int]$RecordID)
$xmlQuery = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*
[System[(EventRecordID=$($RecordID))]]
</Select>
</Query>
</QueryList>
"@
$triggeredEvent = Get-WinEvent -FilterXml $xmlQuery
Send-MailMessage -To "[email protected]" -From "$($env:COMPUTERNAME)@my-domain.local" '
-SmtpServer "smtp.my-domain.local" '
-Subject "User Added to Local Administrators Group" '
-Body "RecordID: $($RecordID)'r'n$($triggeredEvent.Message)" '
-Priority High
Pruebas
Ha habido problemas al intentar copiar / pegar consultas XML. Asegúrese de realizar una prueba exhaustiva, ya que he tenido consultas aparentemente correctas que ni siquiera funcionan en el Visor de eventos. No fue hasta que los volví a escribir manualmente que trabajaron de nuevo.
Documentación
Microsoft ha hecho un trabajo mucho mejor documentando eventos al proporcionar explicaciones detalladas. La página de este evento en particular se puede encontrar aquí:
4732 (S): se agregó un miembro a un local con capacidad de seguridad. grupo.
Aquí encontrará la cuenta enumerada en Asunto: es responsable de realizar esta solicitud.