Come rilevare chi ha cancellato un file su Windows Server con criteri di controllo?

È possibile utilizzare il controllo degli eventi di accesso agli oggetti del file system per identificare un utente specifico che ha creato, eliminato o modificato un file specifico. In questo articolo, ti mostreremo come configurare il controllo degli eventi per i file in una cartella di rete condivisa su Windows Server 2016. Dopo aver configurato il controllo, è possibile utilizzare le informazioni del visualizzatore eventi per trovare l’utente che ha eliminato un file specifico sul file server.

Quando si elimina un file da una cartella di rete condivisa, viene eliminato immediatamente invece di essere inviato al cestino dell’utente. L’elenco dei file aperti nella cartella di condivisione può essere ottenuto come segue.

Come abilitare i criteri di controllo dell’accesso a file e cartelle su Windows?

Per impostazione predefinita, il controllo di accesso agli oggetti del file System non è abilitato su Windows Server. È possibile abilitare e configurare le impostazioni di controllo utilizzando Criteri di gruppo. Se è necessario abilitare i criteri di controllo su più server o computer, è possibile utilizzare i GPO di dominio (configurabili utilizzando la console gpmc.msc mmc). Se si desidera configurare il controllo solo su un server, è possibile utilizzare l’editor criteri di gruppo locale.

  1. Aprire l’Editor Criteri di Gruppo Locali console– gpedit.msc;
  2. Vai all’oggetto criteri di gruppo sezione con avanzati criteri di controllo: Impostazioni di Windows -> Impostazioni di Protezione -> Avanzate Criteri di Controllo Configurazione -> Oggetto dell’Accesso;
  3. Aprire il Controllo File di Sistema e criteri di specificare che si desidera accedere solo gli eventi di accesso agli oggetti del file system (Configurare le seguenti eventi di controllo -> Successo);
    È inoltre possibile abilitare il controllo dell’accesso agli oggetti locali utilizzando il criterio di accesso agli oggetti di controllo in Impostazioni di Windows -> Impostazioni di sicurezza -> Criterio locale -> Criterio di controllo. Tuttavia, è preferibile utilizzare il criterio di controllo del file system perché tiene traccia solo degli eventi di accesso NTFS.

    abilita i criteri del file system di controllo su Windows server

  4. Salva le modifiche e aggiorna le impostazioni dei criteri di gruppo locali utilizzando il comando: gpupdate /force.

Configurazione delle impostazioni di controllo del file eliminato in una cartella condivisa

Ora è necessario configurare il controllo nelle proprietà della cartella di rete condivisa a cui si desidera tenere traccia dell’accesso. Eseguire Esplora file e aprire le proprietà della cartella. Vai alla scheda Sicurezza. Fare clic sul pulsante Avanzate – > vai alla scheda Controllo.

Se viene visualizzato il messaggio “È necessario essere un amministratore o sono stati assegnati i privilegi appropriati per visualizzare le proprietà di controllo di questo oggetto”, fare clic sul pulsante Continua.

configurare le impostazioni di controllo in una cartella condivisa

Quindi fare clic sul pulsante Aggiungi per specificare l’utente o il gruppo per il quale si desidera acquisire gli eventi di controllo. Se si desidera tenere traccia degli eventi di accesso per tutti gli utenti, specificare il gruppo Everyone.

Quindi è necessario specificare quali autorizzazioni utilizzate per accedere all’oggetto devono essere registrate. Per salvare solo gli eventi di eliminazione dei file nel registro eventi, fare clic sul pulsante Mostra autorizzazioni avanzate. Nell’elenco eventi, lasciare il controllo solo per gli eventi di eliminazione di cartelle e file: Elimina ed Elimina sottocartelle e file.

configura l'audit delle azioni di eliminazione dei file sulla cartella condivisa su Windows Server 2016folder

Tip. Ricorda che i criteri di controllo per gli oggetti Windows richiedono risorse di elaborazione aggiuntive. Usalo con attenzione, cerca sempre di ridurre al minimo il numero di oggetti ed eventi di controllo da registrare.

$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

Ora, se l’utente elimina qualsiasi file o cartella nella cartella di rete condivisa, il File System -> Verifica successo file elimina evento viene visualizzato nel registro di sicurezza con ID evento 4663 dalla fonte di controllo di sicurezza di Microsoft Windows.

Aprire la console mmc Visualizzatore eventi (eventvwr.msc), espandere i registri di Windows -> Sezione Sicurezza. Abilitare il filtro registro eventi da EventID 4663.

 id evento eliminazione file 4663 nel registro di sicurezza di visualizzatore eventi di Windows

Aprire uno qualsiasi degli eventi rimanenti nel Visualizzatore eventi. Come puoi vedere, contiene informazioni sul nome del file eliminato, sull’account dell’utente che ha eliminato il file e sul nome del processo.

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

eliminazione dei file di audit evento 4663 con nome utente nel registro di protezione

Dopo l’abilitazione di accesso ai file dei criteri di controllo, è possibile trovare del registro di Protezione :

  • Chi ha cancellato il file dalla cartella di rete condivisa e quando è accaduto;
  • Che applicazione (processo) è stato utilizzato per eliminare il file;
  • Qual è la data di backup da ripristinare.

Come scrivere eventi di eliminazione di file nel database SQL (MySQL/MSSQL)?

Tuttavia, anche se l’audit dei file eliminati è abilitato, può essere problematico trovare qualcosa nei log. In primo luogo, è abbastanza difficile trovare una voce specifica tra migliaia di eventi (in Windows non ci sono strumenti utili per cercare un evento con un filtro flessibile). In secondo luogo, se un file è stato eliminato molto tempo fa, questo evento potrebbe essere assente nei registri, poiché è stato sovrascritto da nuovi eventi.

È possibile salvare tutti gli eventi di eliminazione file nel database SQL. È possibile utilizzare i database Microsoft SQL Server, Elasticsearch o MySQL / MariaDB per archiviare gli eventi.

In questo esempio, ti mostreremo come registrare gli eventi di controllo in una tabella di database separata su un MySQL. Userò il seguente formato di tabella:

  • Nome del server;
  • Nome del file eliminato;
  • Data e ora;
  • Nome dell’utente che ha eliminato il file.

La query MySQL per creare questa tabella ha questo aspetto:

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 esempio di come accedere a un database MySQL da PowerShell è stato considerato in precedenza nell’articolo Interrogazione del database MySQL con PowerShell.

Se si desidera utilizzare il database Microsoft SQL Server, consultare l’articolo “Come eseguire una query server MSSQL da PowerShell?”

Per ottenere gli eventi con id Evento 4663 dal registro di Protezione per il giorno corrente, è possibile utilizzare il seguente script di 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
}
}

Windows Security audit - evento 4663 proprietà

Il prossimo script di PowerShell scrivere i dati che si ottiene per il database MySQL su un server remoto (con l’indirizzo 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()

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.