È 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.
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.
- Aprire l’Editor Criteri di Gruppo Locali console–
gpedit.msc
; - 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;
- 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.
- 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.
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.
$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.
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
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));
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
}
}
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()