Búsqueda de sitios web

¿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 al 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 los ajustes de auditoría mediante la directiva de grupo. Si necesita habilitar políticas de auditoría en varios servidores o computadoras, puede usar GPO de dominio (configurable usando 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 directivas 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. Abra la política Sistema de archivos de auditoría y especifique que desea registrar solo los eventos de acceso exitosos a los objetos del sistema de archivos (Configure los siguientes eventos de auditoría -> Correcto);

    También puede habilitar la auditoría del acceso a objetos locales mediante la política Acceso a objetos de auditoría en Configuración de Windows -> Configuración de seguridad -> Política local -> Política de auditoría. Sin embargo, es preferible usar la política de Auditoría del sistema de archivos porque solo realiza un seguimiento de los eventos de acceso a NTFS.

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

    gpupdate /force

Configuración de ajustes 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. Vaya a la pestaña 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 apropiados para ver las propiedades de auditoría de este objeto", haga clic en el botón Continuar.

Luego haga clic en el botón 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 de todos los usuarios, especifique el grupo Todos.

Luego, debe especificar qué permisos se deben registrar para acceder al objeto. Para guardar solo los 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 los eventos de eliminación de carpetas y archivos: Eliminar y Eliminar subcarpetas y archivos.

Consejo. Recuerde que la política de auditoría para objetos de Windows requiere recursos informáticos adicionales. Úselo con cuidado, siempre intente 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 Sistema de archivos -> Auditoría exitosa de eliminación de archivos aparece en el registro de seguridad con el ID de evento 4663 de la seguridad de Microsoft Windows fuente de auditoría.

Abra la consola mmc del Visor de eventos (

eventvwr.msc

), expanda la sección Registros de Windows -> Seguridad. 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\jsmith
Account Name:                     jsmith
Account Domain:                  CORP
Logon ID:                               0x32B12627
Object:Object Server:                        Security
Object Type:                          File
Object Name:                        E:\Distr\Backup.rar
Handle ID:                              0x7bc4
Resource Attributes:            S:AI
Process Information:
Process ID:                             0x4
Process Name:
Access Request Information:
Accesses:                               DELETE
Access Mask:                         0x10000

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 a restaurar.

¿Cómo escribir eventos de eliminación de archivos en la 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 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 usar las 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 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));

Nota. Un ejemplo de cómo acceder a una base de datos MySQL desde PowerShell se consideró anteriormente en el artículo Consulta de la base de datos MySQL con PowerShell.

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 = [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
}
}

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 = [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 los eventos en una base de datos externa, este registro de eventos se puede borrar.

Ahora bien, para saber quién ha eliminado el archivo “AnnualReport.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)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.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.

Nota. Dado que se ha encontrado un problema que 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 mediante el Programador de tareas o adjuntarse al ID de evento de eliminación de archivos (en caso de evento), que consume más recursos. Depende de los requisitos del sistema.

Consejo. Asegúrese de configurar 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, deberá 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 debe ser de al menos 64 MB y 262 MB en los servidores de archivos de Windows. La opción para 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 podrá analizar los eventos de eliminación de archivos en función de él. O puede filtrar los eventos de dichos procesos, como winword.exe, excel.exe, etc.

Registro de eventos de auditoría de eliminación de archivos 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. Use este script de PowerShell para guardar su salida en un archivo de texto:


$Outfile = "C:\Logs\Deleted-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
}
}

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 cumplir con sus requisitos.

Artículos relacionados