Puede usar la auditoría de eventos de acceso a objetos del sistema de archivos para identificar a un usuario específico que creó, eliminó o modificó un archivo específico. En este artículo, le mostraremos cómo configurar la auditoría de eventos para archivos en una carpeta de red compartida en Windows Server 2016. Después de configurar la auditoría, puede usar la información del Visor de eventos para encontrar al usuario que eliminó un archivo específico en el servidor de archivos.
¿Cómo habilitar la Directiva de Auditoría de Acceso a Archivos y Carpetas en Windows?
De forma predeterminada, la auditoría de acceso a objetos del sistema de archivos no está habilitada en Windows Server. Puede habilitar y configurar la configuración de auditoría mediante la Directiva de grupo. Si necesita habilitar directivas de auditoría en varios servidores o equipos, puede usar GPO de dominio (configurables mediante la consola gpmc.msc
mmc). Si solo desea configurar la auditoría en un servidor, puede usar el Editor de directivas de grupo local.
- Abra la consola del Editor de Directivas de Grupo Local–
gpedit.msc
; - Vaya a la sección GPO con directivas de auditoría avanzadas: Configuración de Windows – > Configuración de seguridad – > Configuración de Directiva de auditoría avanzada – > Acceso a objetos;
- Abra la directiva del sistema de archivos de auditoría y especifique que desea registrar solo los eventos de acceso correcto en objetos del sistema de archivos (Configure los siguientes eventos de auditoría -> Éxito);
También puede habilitar la auditoría del acceso a objetos locales mediante la directiva de acceso a objetos de auditoría en Configuración de Windows – > Configuración de seguridad – > Directiva local – > Directiva de auditoría. Sin embargo, es preferible usar la directiva de auditoría del sistema de archivos porque solo rastrea los eventos de acceso NTFS.
- Guarde los cambios y actualice la configuración de la directiva de grupo local con el comando:
gpupdate /force
.
Configurar la configuración de Auditoría de archivos eliminados en una carpeta compartida
Ahora debe configurar la auditoría en las propiedades de la carpeta de red compartida a la que desea realizar el seguimiento del acceso. Ejecute el Explorador de archivos y abra las propiedades de la carpeta. Ve a la pestaña de seguridad. Haga clic en el botón Avanzado – > vaya a la pestaña Auditoría.
Si aparece el mensaje «Debe ser administrador o tener los privilegios adecuados para ver las propiedades de auditoría de este objeto», haga clic en el botón Continuar.
A continuación, haga clic en el botón Agregar para especificar el usuario o grupo para el que desea capturar los eventos de auditoría. Si desea realizar un seguimiento de los eventos de acceso para todos los usuarios, especifique el grupo Todos.
A continuación, debe especificar los permisos utilizados para acceder al objeto que se deben registrar. Para guardar solo eventos de eliminación de archivos en el Registro de eventos, haga clic en el botón Mostrar permisos avanzados. En la lista de eventos, deje la auditoría solo para eventos de eliminación de carpetas y archivos: Eliminar y Eliminar subcarpetas y archivos.
$Path = "E:\Public"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('Everyone', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl
Ahora, si el usuario elimina cualquier archivo o carpeta de la carpeta de red compartida, el evento Sistema de archivos -> Audit Success file delete aparece en el registro de seguridad con ID de evento 4663 de la fuente de auditoría de seguridad de Microsoft Windows.
Abra la consola mmc del visor de eventos (eventvwr.msc
), expanda la sección de seguridad de Registros de Windows ->. Habilite el filtro de registro de eventos por EventID 4663.
Abra cualquiera de los eventos restantes en el Visor de eventos. Como puede ver, contiene información sobre el nombre del archivo eliminado, la cuenta del usuario que eliminó el archivo y el nombre del proceso.
An attempt was made to access an object.Subject:Security ID: CORP\jsmithAccount Name: jsmithAccount Domain: CORPLogon ID: 0x32B12627Object:Object Server: SecurityObject Type: FileObject Name: E:\Distr\Backup.rarHandle ID: 0x7bc4Resource Attributes: S:AIProcess Information:Process ID: 0x4Process Name:Access Request Information:Accesses: DELETEAccess Mask: 0x10000
Después de habilitar la directiva de auditoría de acceso a archivos, puede encontrarlo en el registro de seguridad:
- Quién eliminó el archivo de la carpeta de red compartida y cuándo sucedió;
- Qué aplicación (proceso) se utilizó para eliminar el archivo;
- Cuál es la fecha de la copia de seguridad que se restaurará.
¿Cómo Escribir Eventos de Eliminación de archivos en una base de datos SQL (MySQL/MSSQL)?
Sin embargo, incluso si la auditoría de los archivos eliminados está habilitada, puede ser problemático encontrar algo en los registros. En primer lugar, es bastante difícil encontrar una entrada específica entre miles de eventos (en Windows no hay una herramienta conveniente para buscar un evento con un filtro flexible). En segundo lugar, si un archivo se eliminó hace mucho tiempo, este evento puede estar ausente en los registros, ya que fue sobrescrito por eventos nuevos.
Puede guardar todos los eventos de eliminación de archivos en la base de datos SQL. Puede usar bases de datos de Microsoft SQL Server, Elasticsearch o MySQL/MariaDB para almacenar sus eventos.
En este ejemplo, le mostraremos cómo registrar eventos de auditoría en una tabla de base de datos separada en un MySQL. Voy a utilizar el siguiente formato de tabla:
- nombre del Servidor;
- Nombre del archivo eliminado;
- Fecha y hora;
- Nombre del usuario que ha eliminado el archivo.
La consulta MySQL para crear esta tabla se ve así:
CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
Si desea utilizar la base de datos de Microsoft SQL Server, consulte el artículo » ¿Cómo ejecutar una consulta de servidor MSSQL desde PowerShell?»
Para obtener eventos con EventID 4663 del registro de seguridad del día actual, puede usar el siguiente script de PowerShell:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$User = $event.Event.EventData.Data."#text"
$Computer = $event.Event.System.computer
}
}
El siguiente script de PowerShell escribirá los datos que obtenga en la base de datos MySQL en un servidor remoto (con la dirección IP 10.1.1.13):
Add-Type –Path 'C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'
$Connection = @{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = $_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data."#text"
$File = $File.Replace('\','|')
$User = $event.Event.EventData.Data."#text"
$Computer = $event.Event.System.computer
$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"
$sql.ExecuteNonQuery()
}
}
$Reader.Close()
$Connection.Close()