¿Cómo encontrar quién le otorgó privilegios de administrador local a un usuario?

3

Un amigo mío trabaja en una organización y un buen día se dio cuenta de que tiene acceso de administrador local en su máquina. Me juró que inicialmente no tenía el privilegio y que necesitaba presentar solicitudes para instalar cualquier software. Verifiqué que su política escrita también lo dice.

Suponiendo que algún usuario de dominio privilegiado lo haya agregado al grupo de administración local por error, ¿cómo podemos encontrar al usuario que hizo eso?

Sería útil si recibiera respuestas específicas sobre cómo revisar el registro de auditoría e identificar al usuario que otorgó privilegios de administrador local a mi amigo.

    
pregunta hax 26.01.2017 - 19:24
fuente

2 respuestas

1

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:

  1. Configurar la tarea programada
  2. 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.

    
respondido por el user2320464 25.08.2017 - 18:57
fuente
2

Puedes usar Powershell para filtrar los eventos correctos:

Get-EventLog Security -InstanceId 4732 

Aquí se incluye un comando de powershell para obtener todas las entradas del registro de eventos para las cuales un usuario fue agregado a los administradores locales:

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

Lamentablemente, no pude probar el comando porque estoy en casa y no tengo acceso a AD. Pero deberías obtener una salida como esa:

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          :

Tal vez necesites cambiar algunas cosas en mi script, pero deberías tener toda la información para encontrar al administrador.

Editar: Cambiado mi comando de PowerShell. Todavía necesita un filtro para buscar al usuario individual.

    
respondido por el Leo 26.01.2017 - 21:30
fuente

Lea otras preguntas en las etiquetas