Il post di @Leo è corretto, tuttavia è possibile che si verifichino problemi di prestazioni durante la scansione di molti eventi. L'approccio ideale è costruire un filtro specifico per quello che stai cercando. Poiché il SID per il gruppo di amministratori locali è ben noto ( S-1-5-32-544
), è possibile utilizzare il seguente filtro XML. Uno può copiare / incollare questo in Visualizzatore eventi (Filtro registro corrente > XML) o utilizzarlo 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>
Per utilizzare con PowerShell, impostare il filtro XML su una variabile e quindi eseguire 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
Avvisi
Se desideri eseguire alcune azioni personalizzate dopo il verificarsi di un evento come questo, è possibile impostare gli avvisi tramite Scheduled Tasks
poiché di recente ho pubblicato sul mio blog - Avviso di registro eventi Microsoft . Farlo richiede due parti:
- Imposta attività pianificata
- Imposta script PowerShell
Attività pianificata
I seguenti comandi di PowerShell imposteranno l'attività pianificata in modo che si attivi solo quando un membro viene aggiunto a BuiltIn\Administrators
. Nota che molte di queste impostazioni di configurazione non sono disponibili tramite 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 PowerShell
Con l'installazione Attività pianificata, salva il seguente codice PowerShell in C:\AlertScripts\Security_4732.ps1
. Assicurati di personalizzare questo per l'uso con la tua e-mail. Anche se davvero può essere personalizzato come preferisci. Assicurati solo di consentire gli script firmati solo durante la distribuzione in produzione, che richiederà anche l'aggiornamento dell'attività pianificata.
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
Test
Si sono verificati problemi durante il tentativo di copiare / incollare query XML. Assicurati di eseguire un test accurato poiché ho avuto query apparentemente corrette e non funzionano nemmeno in Event Viewer. Non è stato fino a quando non li ho ridigitati manualmente che hanno funzionato di nuovo.
Documentazione
Microsoft ha fatto un lavoro molto migliore documentando gli eventi fornendo spiegazioni dettagliate. La pagina per questo particolare evento può essere trovata qui:
4732 (S): un membro è stato aggiunto a un locale abilitato alla sicurezza gruppo.
Qui troverai l'account elencato sotto Oggetto: è responsabile di presentare questa richiesta.