Vous pouvez utiliser l’audit d’événements d’accès aux objets du système de fichiers pour identifier un utilisateur spécifique qui a créé, supprimé ou modifié un fichier spécifique. Dans cet article, nous allons vous montrer comment configurer l’audit d’événements pour les fichiers sur un dossier réseau partagé sur Windows Server 2016. Après avoir configuré l’audit, vous pouvez utiliser les informations de l’observateur d’événements pour trouver l’utilisateur qui a supprimé un fichier spécifique sur le serveur de fichiers.
Comment activer la Stratégie d’audit d’accès aux fichiers et aux dossiers sous Windows ?
Par défaut, l’audit d’accès aux objets du système de fichiers n’est pas activé sur Windows Server. Vous pouvez activer et configurer les paramètres d’audit à l’aide de la stratégie de groupe. Si vous devez activer les stratégies d’audit sur plusieurs serveurs ou ordinateurs, vous pouvez utiliser des GPO de domaine (configurables à l’aide de la console mmc gpmc.msc
). Si vous ne souhaitez configurer l’audit que sur un seul serveur, vous pouvez utiliser l’Éditeur de stratégie de groupe local.
- Ouvrez la console de l’Éditeur de stratégie de groupe local –
gpedit.msc
; - Accédez à la section GPO avec Stratégies d’audit avancées : Paramètres Windows – > Paramètres de sécurité – > Configuration avancée de la Stratégie d’audit – > Accès aux objets ;
- Ouvrez la stratégie Système de fichiers d’audit et spécifiez que vous souhaitez enregistrer uniquement les événements d’accès réussis aux objets du système de fichiers (Configurez les événements d’audit suivants – > Succès);
Vous pouvez également activer l’audit de l’accès aux objets locaux à l’aide de la stratégie d’accès aux objets d’audit sous Paramètres Windows – > Paramètres de sécurité – > Stratégie locale – > Stratégie d’audit. Cependant, l’utilisation de la stratégie d’audit du système de fichiers est préférable car elle ne suit que les événements d’accès NTFS.
- Enregistrez les modifications et mettez à jour vos paramètres de stratégie de groupe locaux à l’aide de la commande :
gpupdate /force
.
Configuration des paramètres d’audit de fichiers supprimés sur un Dossier partagé
Vous devez maintenant configurer l’audit dans les propriétés du dossier réseau de partage auquel vous souhaitez suivre l’accès. Exécutez l’Explorateur de fichiers et ouvrez les propriétés du dossier. Accédez à l’onglet Sécurité. Cliquez sur le bouton Avancé – > accédez à l’onglet Audit.
Si le message » Vous devez être administrateur ou avoir reçu les privilèges appropriés pour afficher les propriétés d’audit de cet objet » apparaît, cliquez sur le bouton Continuer.
Puis cliquez sur le bouton Ajouter pour spécifier l’utilisateur ou le groupe pour lequel vous souhaitez capturer les événements d’audit. Si vous souhaitez suivre les événements d’accès pour tous les utilisateurs, spécifiez le groupe Tout le monde.
Ensuite, vous devez spécifier les autorisations utilisées pour accéder à l’objet qui doivent être enregistrées. Pour enregistrer uniquement les événements de suppression de fichiers dans le journal des événements, cliquez sur le bouton Afficher les autorisations avancées. Dans la liste des événements, laissez l’audit uniquement pour les événements de suppression de dossiers et de fichiers – Supprimez et Supprimez les sous-dossiers et les fichiers.
$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
Maintenant, si l’utilisateur supprime un fichier ou un dossier dans le dossier réseau partagé, l’événement de suppression du fichier de réussite de l’audit du système de fichiers – > apparaît dans le journal de sécurité avec l’ID d’événement 4663 de la source d’audit de sécurité Microsoft Windows.
Ouvrez la console mmc de l’observateur d’événements (eventvwr.msc
), développez la section de sécurité des journaux Windows – >. Activez le filtre du journal des événements par l’EventID 4663.
Ouvrez l’un des événements restants dans l’Observateur d’événements. Comme vous pouvez le voir, il contient des informations sur le nom du fichier supprimé, le compte de l’utilisateur qui a supprimé le fichier et le nom du processus.
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
Après avoir activé la stratégie d’audit d’accès aux fichiers, vous pouvez trouver dans le journal de sécurité :
- Qui a supprimé le fichier du dossier réseau partagé et quand cela s’est produit;
- Quelle application (processus) a été utilisée pour supprimer le fichier;
- Quelle est la date de la sauvegarde à restaurer.
Comment écrire des événements de suppression de fichiers dans une base de données SQL (MySQL / MSSQL)?
Cependant, même si l’audit des fichiers supprimés est activé, il peut être gênant de trouver quelque chose dans les journaux. Premièrement, il est assez difficile de trouver une entrée spécifique parmi des milliers d’événements (dans Windows, il n’existe aucun outil pratique pour rechercher un événement avec un filtre flexible). Deuxièmement, si un fichier a été supprimé il y a longtemps, cet événement peut être absent des journaux, car il a été remplacé par de nouveaux événements.
Vous pouvez enregistrer tous les événements de suppression de fichiers dans la base de données SQL. Vous pouvez utiliser les bases de données Microsoft SQL Server, Elasticsearch ou MySQL/MariaDB pour stocker vos événements.
Dans cet exemple, nous allons vous montrer comment consigner les événements d’audit dans une table de base de données distincte sur un MySQL. J’utiliserai le format de tableau suivant:
- Nom du serveur ;
- Nom du fichier supprimé ;
- Date et heure ;
- Nom de l’utilisateur qui a supprimé le fichier.
La requête MySQL pour créer cette table ressemble à ceci:
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 vous souhaitez utiliser la base de données Microsoft SQL Server, consultez l’article » Comment exécuter une requête de serveur MSSQL à partir de PowerShell ? »
Pour obtenir des événements avec EventID 4663 à partir du journal de sécurité pour la journée en cours, vous pouvez utiliser le script PowerShell suivant:
$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
}
}
Le script PowerShell suivant écrira les données que vous obtenez dans la base de données MySQL sur un serveur distant (avec l’adresse 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()