Cómo detectar quién cambió los permisos NTFS de archivo/carpeta en Windows
En algunos casos, el administrador necesita averiguar qué proceso (programa) o usuario ha cambiado los permisos NTFS en una carpeta o archivo específico en un servidor de archivos de Windows. Este artículo muestra cómo realizar un seguimiento de los cambios de permisos NTFS realizados en los objetos del sistema de archivos mediante la política de auditoría, los scripts de PowerShell y la herramienta ProcMon.
Debe configurar una política de auditoría para realizar un seguimiento de los cambios en los permisos NTFS en los objetos del sistema de archivos de Windows.
Abra el Editor de directivas de grupo. Si desea configurar la política de auditoría del sistema de archivos de auditoría en un servidor en particular, abra la consola del Editor de políticas de grupo local (
gpedit.msc). Si desea habilitar la auditoría en varios dispositivos de un dominio (por ejemplo, todos los servidores de archivos), debe crear un GPO independiente mediante la consola de administración de directivas de grupo (
gpmc.msc);
-
Vaya a Configuración del equipo -> Políticas -> Configuración de Windows -> Configuración de seguridad -> Configuración de política de auditoría avanzada -> Políticas de auditoría -> Acceso a objetos;
Habilite la opción Sistema de archivos de auditoría y seleccione Éxito;
Ahora debe habilitar la auditoría en las propiedades del directorio en el que desea realizar un seguimiento de los cambios de permisos. Abra las propiedades de la carpeta -> vaya a la pestaña Seguridad -> Avanzado -> pestaña Auditoría -> Continuar -> haga clic en Agregar y agregue un grupo (seleccione un principal) cuyas actividades desea rastrear. Hemos especificado Todos aquí;
Anteriormente, le mostramos cómo usar la auditoría del sistema de archivos para encontrar al usuario que eliminó un archivo o una carpeta en un servidor de archivos de Windows.
Seleccione Tipo=Éxito y habilite las opciones Cambiar permisos y Tomar propiedad en Permisos avanzados:
No olvide actualizar la configuración de la directiva de grupo en el host:
gpupdate /force
Ahora, si alguien ha cambiado los permisos de NTFS en los elementos de la carpeta especificada, aparecerá un evento con ID de evento 4670 en el registro de seguridad.
Abra la consola del Visor de eventos (
eventvwr.msc
) -> Registros de Windows -> Seguridad. Filtre la lista de eventos por EventID 4670 (
Permissions on an object were changed) y abra el último evento.
Verá el nombre del usuario que cambió el permiso (Nombre de la cuenta:) y el nombre del proceso (C:\Windows xplorer.exe) en la descripción del evento. También contiene información sobre la ACL anterior (Descriptor de seguridad original) y la nueva lista de permisos (Descriptor de seguridad nuevo).
Si desea almacenar más eventos en el registro de seguridad (durante un intervalo de tiempo más largo), deberá aumentar el tamaño del registro del Visor de eventos.
Tenga en cuenta que los permisos están en formato DACL y son difíciles de entender. Afortunadamente, puede usar el cmdlet integrado de PowerShell ConvertFrom-SddlString para convertir una cadena de lenguaje de definición de descriptor de seguridad en un PSCustomObject.
Para ver qué grupos de acceso han cambiado en los permisos NTFS del objeto, compare los descriptores de seguridad nuevos y antiguos (copie los valores SDDL del evento 4670):
$oldperm=ConvertFrom-SddlString "D:PAI(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;S-1-5-21-1774357850-3643260196-2143367957-1125)(A;OICI;0x1301bf;;;S-1-5-21-1774357850-3643260196-2143367957-1124)"
$newperm=ConvertFrom-SddlString "D:PARAI(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;0x1301bf;;;S-1-5-21-1774357850-3643260196-2143367957-1124)(A;OICI;0x1200a9;;;S-1-5-21-1774357850-3643260196-2143367957-1125)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;BU)"
Compare-Object -ReferenceObject $oldperm.DiscretionaryAcl -DifferenceObject $newperm.DiscretionaryAcl|FLEn este ejemplo, puede ver que la nueva ACL otorga permisos de lectura al
Builtin\Usersgrupo.
Puede usar el cmdlet Get-WinEvent PowerShell para buscar en el registro de eventos de Windows. Por ejemplo, puede usar el siguiente código para buscar eventos con ID de evento 4670 y obtener valores OldSD y NewSD del script:
$event=Get-WinEvent -FilterHashtable @{logname='Security';id=4670} -MaxEvents 1
[xml]$xmlevent = $event.ToXml()
$eventobj = New-Object System.Management.Automation.PSObject
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[1].name -Value $xmlevent.Event.EventData.Data[1].'#text'
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[8].name -Value $xmlevent.Event.EventData.Data[8].'#text'
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[9].name -Value $xmlevent.Event.EventData.Data[9].'#text'
$eventobj|format-listPuede utilizar el integrado
icacls.exeherramienta o el cmdlet Get-ACL PowerShell para hacer una copia de seguridad de los permisos NTFS actuales de un directorio.
Si necesita comprender qué proceso y usuario están cambiando los permisos NTFS en una carpeta, puede utilizar la utilidad Process Monitor. (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Le permite ubicar la fuente de los cambios de permisos a los objetos del sistema de archivos en tiempo real.
Descargue y ejecute procmon64.exe;
Configurar el filtro:
Filter-> Filter (CTRL+S)Path -> begin with -> Specify the folder path ->IncludeOperation -> is -> SetSecurityFile -> Include ;A partir de ahora, si alguien cambia los permisos NTFS en cualquier objeto de esa carpeta, verá un nuevo evento en la ventana de ProcMon. Aquí muestra el proceso (explorer.exe) y el nombre del usuario que cambió los permisos.






