Come trovare chi ha concesso i privilegi di amministratore locale a un utente?

3

Un mio amico lavora in un'organizzazione e un bel giorno si è reso conto che ha accesso di amministratore locale sulla sua macchina. Mi ha giurato che inizialmente non aveva il privilegio e aveva bisogno di sollevare richieste per l'installazione di qualsiasi software. Ho verificato che anche la loro politica scritta lo dice.

Supponendo che qualche utente di dominio privilegiato lo abbia aggiunto per errore al gruppo di amministratori locali, come possiamo trovare l'utente che l'ha fatto?

Sarebbe utile se ottengo risposte specifiche su come controllare il registro di controllo e identificare l'utente che ha concesso il privilegio di amministratore locale al mio amico.

    
posta hax 26.01.2017 - 19:24
fonte

2 risposte

1

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:

  1. Imposta attività pianificata
  2. 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.

    
risposta data 25.08.2017 - 18:57
fonte
2

Puoi utilizzare Powershell per filtrare gli eventi giusti:

Get-EventLog Security -InstanceId 4732 

Ecco un comando di powershell per ottenere tutte le voci del registro eventi per le quali un utente è stato aggiunto agli amministratori locali:

Get-EventLog Security -InstanceId 4732 | '
Where-Object {$_.Message -like "*Administrators*"}' 
| Select-Object * 

Purtroppo non ho potuto testare il comando perché sono a casa e non ho accesso ad AD. Ma dovresti ottenere un risultato del genere:

EventID            : 4732
MachineName        : localhost
Data               : {}
Index              : 165325
Category           : (13826)
CategoryNumber     : 13826
EntryType          : SuccessAudit
Message            : A member was added to a security-enabled local group.

                     Subject:
                        Security ID:            SID of the user that added the user to the group.
                        Account Name:           bob
                        Account Domain:         contoso.com
                        Logon ID:               0x59461

                     Member:
                        Security ID:            SID of your friends user account
                        Account Name:           -

                     Group:
                        Security ID:            S-1-5-32-544
                        Group Name:             Administrators
                        Group Domain:           Builtin

                     Additional Information:
                        Privileges:             -
                        Expiration time:                %11
Source             : Microsoft-Windows-Security-Auditing
ReplacementStrings : {-, some sid, Users, Builtin...}
InstanceId         : 4732
TimeGenerated      : 26.01.2017 21:08:49
TimeWritten        : 26.01.2017 21:08:49
UserName           :
Site               :
Container          :

Forse hai bisogno di cambiare alcune cose nel mio script, ma dovresti avere tutte le informazioni, per trovare l'amministratore.

Modifica: cambiato il mio comando powershell. Ha ancora bisogno di un filtro per cercare il singolo utente.

    
risposta data 26.01.2017 - 21:30
fonte

Leggi altre domande sui tag