¿Cómo detectar quién eliminó un archivo en Windows Server con la política de auditoría?

Puede utilizar 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 el usuario que eliminó un archivo específico en el archivo. servidor.

Cuando elimina un archivo de una carpeta de red compartida, se elimina inmediatamente en lugar de enviarse a la papelera de reciclaje del usuario. La lista de archivos abiertos en la carpeta compartida se puede obtener de la siguiente manera.

¿Cómo habilitar la política 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 Política de grupo. Si necesita habilitar políticas de auditoría en varios servidores o equipos, puede utilizar los GPO de dominio (configurables mediante el gpmc.msc consola mmc). Si solo desea configurar la auditoría en un servidor, puede usar el Editor de políticas de grupo local.

  1. Abra la consola del Editor de políticas de grupo local – gpedit.msc;
  2. Vaya a la sección GPO con políticas de auditoría avanzadas: Configuración de Windows -> Configuración de seguridad -> Configuración de política de auditoría avanzada -> Acceso a objetos;
  3. Abre el Sistema de archivos de auditoría política y especifique que desea registrar solo eventos de acceso exitosos a los 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 el Acceso a objetos de auditoría política bajo Configuración de Windows -> Configuración de seguridad -> Política local -> Política de auditoría. Sin embargo, es preferible utilizar la política de auditoría del sistema de archivos porque solo realiza un seguimiento de los eventos de acceso NTFS.

  4. Guarde los cambios y actualice la configuración de la política de grupo local con el comando: gpupdate /force.

Configuración de 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 un seguimiento del acceso. Ejecute el Explorador de archivos y abra las propiedades de la carpeta. Ve a la Seguridad pestaña. Haga clic en el Avanzado botón -> ir al Revisión de cuentas pestaña.

Si el mensaje «Debe ser administrador o tener los privilegios adecuados para ver las propiedades de auditoría de este objeto.”Aparece, haga clic en el Continuar botón.

Luego haga clic en el Agregar para especificar el usuario o grupo para el que desea capturar eventos de auditoría. Si desea realizar un seguimiento de los eventos de acceso para todos los usuarios, especifique el Todos grupo.

Luego, debe especificar qué permisos utilizados para acceder al objeto deben registrarse. Para guardar solo eventos de eliminación de archivos en el registro de eventos, haga clic en el Mostrar permisos avanzados botón. En la lista de eventos, deje la auditoría solo para los eventos de eliminación de carpetas y archivos: Borrar y Eliminar subcarpetas y archivos.

configurar la auditoría de las acciones de eliminación de archivos en la carpeta compartida en la carpeta de Windows Server 2016

Consejo. Recuerde que la política de auditoría para objetos de Windows requiere recursos informáticos adicionales. Úselo con cuidado, siempre trate de minimizar la cantidad de objetos de auditoría y eventos para registrar.

$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 en la carpeta de red compartida, el evento de eliminación de archivo de Sistema de archivos -> Auditoría exitosa aparece en el registro de seguridad con ID de evento 4663 desde el Auditoría de seguridad de Microsoft Windows fuente.

Abre el Visor de eventos consola mmceventvwr.msc), ampliar la Registros de Windows -> Seguridad sección. Habilite el filtro de registro de eventos por EventID 4663.

ID de evento de eliminación de archivo 4663 en el registro de seguridad del visor de eventos de Windows

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:                            CORPjsmith
Account Name:                     jsmith
Account Domain:                  CORP
Logon ID:                               0x32B12627
Object:Object Server:                        Security
Object Type:                          File
Object Name:                        E:DistrBackup.rar
Handle ID:                              0x7bc4
Resource Attributes:            S:AI
Process Information:
Process ID:                             0x4
Process Name:
Access Request Information:
Accesses:                               DELETE
Access Mask:                         0x10000

Evento de auditoría de eliminación de archivos 4663 con nombre de usuario en el registro de seguridad

Después de habilitar la política de auditoría de acceso a archivos, puede encontrar 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 resultar 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 existe 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 nuevos eventos.

Puede guardar todos los eventos de eliminación de archivos en la base de datos SQL. Puede utilizar las bases de datos 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. Usaré 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 de 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));

Para obtener eventos con EventID 4663 del registro de seguridad para el 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 = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$Computer = $event.Event.System.computer
}
}

Auditoría de seguridad de Windows: propiedades del evento 4663

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)MySQLMySQL Connector Net 6.9.8Assembliesv4.5MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{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 = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$File = $File.Replace(‘’,’|’)
$User = $event.Event.EventData.Data[1]."#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()

Después de guardar eventos en una base de datos externa, este registro de eventos se puede borrar.

Ahora, para averiguar quién ha eliminado el archivo «Informe Anual.DOC“, Basta con ejecutar el siguiente script en la consola de PowerShell:
$DeletedFile = "%AnnualReport.DOC%"
Set-ExecutionPolicy RemoteSigned
Add-Type –Path ‘C:Program Files (x86)MySQLMySQL Connector Net 6.9.8Assembliesv4.5MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=10.1.1.13;uid=posh;pwd=P@ssw0rd;database=aduser'}
$Connection.Open()
$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter
$MYSQLDataSet = New-Object System.Data.DataSet
$MYSQLCommand.Connection=$Connection
$MYSQLCommand.CommandText="SELECT user_name,dt_time    from  deleted_items where file_name LIKE '$DeletedFile'"
$MYSQLDataAdapter.SelectCommand=$MYSQLCommand
$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")
foreach($DataSet in $MYSQLDataSet.tables[0])
{
write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time
}
$Connection.Close()

Ahora puede ver el nombre de usuario y la hora en que se eliminó el archivo en la consola PS.

seleccione el evento de eliminación de archivos de mysql db

Nota. Dado que se ha detectado un problema, el símbolo ««No está escrito en la base de datos, lo hemos reemplazado por»|”. Entonces, si tiene que mostrar la ruta completa al archivo, puede realizar un reemplazo inverso al seleccionar de la base de datos:

$DataSet.file_name.Replace(‘|’,’’).

La secuencia de comandos para escribir la información del registro de eventos en la base de datos se puede ejecutar al final del día usando el Programador de tareas o adjuntarse a la eliminación de archivos EventID (On Event), que consume más recursos. Depende de los requisitos del sistema.

Consejo. Asegúrese de establecer el tamaño máximo del archivo de registro de eventos de seguridad para que sea lo suficientemente grande como para registrar todos los eventos del día. De lo contrario, tendrá que ejecutar la tarea de exportar los datos a la base de datos más de una vez al día o incluso en el disparador. Normalmente, el Tamaño máximo de registro en las estaciones de trabajo tiene que ser al menos 64 MB y 262 MB en los servidores de archivos de Windows. La opción de sobrescribir eventos antiguos debe dejarse habilitada (Sobrescribir eventos según sea necesario).

Si es necesario, puede crear una página web PHP simple para obtener la información sobre los usuarios que han eliminado archivos de una forma más conveniente.

Consejo importante. Si el registro contiene una entrada de que el usuario eliminó el archivo, no se apresure a interpretarlo como una acción deliberada o maliciosa. Muchos programas (especialmente las aplicaciones de MS Office) crean un archivo temporal al guardar los cambios y luego eliminan la versión anterior del archivo. En este caso, habilite el registro del nombre del proceso (ProcessName fileld), desde el cual se eliminó el archivo, y puede analizar los eventos de eliminación de archivos basados ​​en él. O puede filtrar los eventos de dichos procesos, como winword.exe, excel.exe, etc.

Archivo de registro Eliminar eventos de auditoría en un archivo de texto

Si no desea utilizar un servidor de base de datos independiente, puede guardar los eventos de auditoría de eliminación de archivos en un archivo de registro de texto sin formato. Utilice este script de PowerShell para guardar su salida en un archivo de texto:

$Outfile = "C:LogsDeleted-file-history-log.txt"
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$File = $event.Event.EventData.Data[6]."#text"
$User = $event.Event.EventData.Data[1]."#text"
$strLog = $Computer + " " + $File + " " + $Time + " " +  $User
$strLog  | out-file $Outfile –append
}
}

guardar el historial de eventos de eliminación de archivos en un archivo de texto usando powershell

Entonces, hemos sugerido una idea y el modelo general del sistema para auditar y almacenar la información sobre los archivos eliminados en las carpetas de red compartidas. Si es necesario, se puede modificar fácilmente para satisfacer sus necesidades.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *