- Аудит удаления файлов в сетевой папке на Windows Server
- Включаем политику аудита доступа к файлам и папкам в Windows
- Настройка аудита событий удаления файлов из конкретной папки
- Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
- Запись информации о событиях удаления файлов в текстовый файл
- Аудит файловой системы Audit File System
Аудит удаления файлов в сетевой папке на Windows Server
С помощью аудита событий доступа к объектам файловой системы вы можете определить конкретного пользователя, который создал, удалил или изменил определенный файл. В этой статье мы покажем, как настроить аудит событий удаления объектов в общей сетевой папке на Windows Server 2016. После настройки аудита, вы можете с помощью информации в журнале событий найти пользователя, который удалил на файловом сервере.
Включаем политику аудита доступа к файлам и папкам в Windows
По умолчанию в Windows Server не включен аудит событий доступа к объектам на файловой системе. Вы можете включить и настроить аудит событий с помощью групповой политики. Если нужно включить политики аудита на нескольких серверах или компьютера, можно использовать доменные GPO (настраиваются с помощью консоли управления gpmc.msc). Если нужно настроить аудит только на одном сервере, можно воспользоваться локальной групповой политикой.
- Запустите консоль редактора локальной политики – gpedit.msc ;
- Перейдитевраздел GPO срасширенными политиками аудитаWindows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Object Access;
- Откройте политику Audit File System и укажите, что вы хотите сохранять в журнал только успешные события доступа к объектам файловой системы (Configure the following audit events -> Success);
Настройка аудита событий удаления файлов из конкретной папки
Теперь нужно настроить аудит в свойствах общей сетевой папки, доступ к которой вы хотите отслеживать. Запустите проводник и откройте свойства общей папки. Перейдите на вкладку Security. Нажмите кнопку Advanced -> вкладка Auditing.
Если появится сообщение You must be an administrator or have been given the appropriate privileges to view the audit properties of this object, нажмите кнопку Continue.
Затем нажмите кнопку Add чтобы указать пользователя или группу, для которых нужно записывать все события аудита. Если вы хотите отслеживать события для всех пользователей, укажите группу Everyone.
Затем нужно указать использование каких разрешений доступа к объекту нужно записывать в лог. Чтобы сохранять в Event Log только события удаления файлов, нажмите кнопку Show advanced permissions. В списке событий оставьте аудит только для событий удаления папок и файлов — Delete и Delete subfolders and files.
$Path = «D:\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
Теперь, если пользователь удалит любой файл или папку в сетевой папке, в журнале безопасности системы появляется событие File System -> Audit Succes c Event ID 4663 от источника Microsoft Windows security auditing.
Откройте mmc консоль Event Viewer ( eventvwr.msc ), разверните секцию Windows Logs -> Security. Включите фильтр событий по EventID 4663.
Откройте любой их оставшихся событий в Event Viewer. Как вы видите, в нем есть информация об имени удаленного файла и учетной записи пользователя, который удалил файл.
После настройки аудита, найдите в журнале Security вы сможете найти с:
- Кто и когда удалил файл в сетевой папке;
- Из какого приложения удален файл;
- На какой момент времени нужно восстанавливать бэкап данного каталога.
Запись событий удаления файлов в SQL базу (MySQL/MSSQL)
Если после включения аудита удаления файлов в сетевой папке, вы видите в журнале много событий, найти что-то в логах бывает проблематично. Во-первых, найти нужную запись среди тысячи событий довольно сложно (в Windows отсутствуют вменяемые средства поиска интересующего события с возможностью гибкой фильтрации), а во-вторых, если файл был удален давно, это событие может просто отсутствовать в журнале, т.к. было перезатерто более новыми.
Вы можете записывать все нужные событий в отдельную SQL базу данных. Для хранения событий можно использовать Microsoft SQL Server, Elasticsearch или MySQL/MariaDB.
В этом примере мы покажем, как записывать события аудита в отдельную таблицу БД на сервере MySQL. Формат таблицы:
- Имя сервера;
- Имя удаленного файла
- Время удаления;
- Имя пользователя, удалившего файл.
MySQL запрос на создание такой таблицы будет выглядеть так:
CREATE TABLE track_del (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));
Если вы хотите использовать Microsoft SQL, обратите внимание на статью “Как выполнить запрос к MSSQL Server из скрипта PowerShell?”.
Для получения событий с EventID 4663 из журнала Security за текущий день можно использовать такой PowerShell скрипт:
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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
>
>
Следующий PowerShell скрипт запишет полученные данные в БД MySQL на удаленном сервере:
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]@
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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 track_del (server,file_name,dt_time,user_name ) VALUES (‘$Computer’,’$File’,’$Time’,’$User’)»
$sql.ExecuteNonQuery()
>
>
$Reader.Close()
$Connection.Close()
Теперь, чтобы узнать, кто удалил файл «document1 — Copy.DOC». Достаточно в консоли PowerShell выполнить следующий скрипт.
$DeletedFile = «%document1 — Copy.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]@
$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 track_del 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()
В результате в консоли PS появится имя пользователя и время удаления файла.
Скрипт сброса данных из журнала в БД можно выполнять один раз в конце дня по планировщику или повесить триггер на событие удаления (On Event), что более ресурсоемко. Все зависит от требования к системе.
Можно создать реагировать простую веб страницу на php для получения информации о событиях удаления файлов в более удобном виде. Задача решается силами любого php программиста за 1-2 часа.
Запись информации о событиях удаления файлов в текстовый файл
Если вы не хотите вести отдельную БД, можно сохранять события аудита удалений файлов в текстовый лог файл. Воспользуйтесь таким PowerShell скриптом:
$Outfile = «C:\ps\delete-file-log.txt»
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
Get-WinEvent -FilterHashTable @
$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
>
>
Итак, мы предложили идею и некий общий каркас системы аудита и хранения информации об удаленных файлах в сетевых шарах, при желании ее с лёгкостью можно будет модифицировать под ваши нужды.
Аудит файловой системы Audit File System
Относится к: Applies to
- Windows 10 Windows 10
- Windows Server 2016 Windows Server 2016
Дополнительные сведения о применимости старых версий операционной системы читайте в статье Audit File System. For more details about applicability on older operating system versions, read the article Audit File System.
Система аудита файлов определяет, генерирует ли операционная система события аудита при попытке пользователей получить доступ к объектам файловой системы. Audit File System determines whether the operating system generates audit events when users attempt to access file system objects.
События аудита создаются только для объектов, настроенных списков управления доступом к системе(SACLs), и только в том случае, если запрашиваемый тип доступа (например, Запись, чтение или изменение) и учетная запись, в которую запрос соответствует настройкам SACL. Audit events are generated only for objects that have configured system access control lists (SACLs), and only if the type of access requested (such as Write, Read, or Modify) and the account making the request match the settings in the SACL.
Если аудит успешно включен, запись аудита создается каждый раз, когда любая учетная запись успешно имеет доступ к объекту файловой системы с соответствием SACL. If success auditing is enabled, an audit entry is generated each time any account successfully accesses a file system object that has a matching SACL. Если включен аудит сбоя, запись аудита создается каждый раз, когда любой пользователь безуспешно пытается получить доступ к объекту файловой системы, который имеет соответствие SACL. If failure auditing is enabled, an audit entry is generated each time any user unsuccessfully attempts to access a file system object that has a matching SACL.
Эти события необходимы для отслеживания активности объектов файлов, которые являются конфиденциальными или ценными и требуют дополнительного мониторинга. These events are essential for tracking activity for file objects that are sensitive or valuable and require extra monitoring.
Объем событий. Изменяется в зависимости от настройки файловой системы SACL. Event volume: Varies, depending on how file system SACLs are configured.
События аудита для файловой системы SACL поумолчанию не создаются. No audit events are generated for the default file system SACLs.
Эта подкатегория позволяет проверять попытки пользователей получать доступ к объектам файловой системы, удалять объекты файловой системы, а также изменять операции по изменению разрешений и действия по созданию жестких ссылок. This subcategory allows you to audit user attempts to access file system objects, file system object deletion and permissions change operations and hard link creation actions.
Только одно событие ,»4658:ручка объекта была закрыта», зависит от подкатегории обработки обработки аудита (аудит успешности должен быть включен). Only one event, “4658: The handle to an object was closed,” depends on the Audit Handle Manipulation subcategory (Success auditing must be enabled). Все остальные события создаются без дополнительной конфигурации. All other events generate without any additional configuration.
Тип компьютера Computer Type | Общий успех General Success | Общий сбой General Failure | Более сильный успех Stronger Success | Более сильный сбой Stronger Failure | Комментарии Comments |
---|---|---|---|---|---|
Контроллер домена Domain Controller | IF IF | IF IF | IF IF | IF IF | Настоятельно рекомендуется разработать политику мониторинга безопасности файловой системы и определить соответствующие saCLs для объектов файловой системы для различных шаблонов и ролей операционной системы. We strongly recommend that you develop a File System Security Monitoring policy and define appropriate SACLs for file system objects for different operating system templates and roles. Не вступайте в эту подкатегорию, если вы не планировали использовать и анализировать собранную информацию. Do not enable this subcategory if you have not planned how to use and analyze the collected information. Кроме того, важно удалить неавтические, избыточные saCLs. It is also important to delete non-effective, excess SACLs. В противном случае журнал аудита будет перегружен бесполезными сведениями. Otherwise the auditing log will be overloaded with useless information. События сбоя могут показывать неудачные попытки доступа к определенным объектам файловой системы. Failure events can show you unsuccessful attempts to access specific file system objects. Сначала рассмотрите возможность включения этой подкатегории для критически важных компьютеров после разработки политики мониторинга безопасности файловой системы для них. Consider enabling this subcategory for critical computers first, after you develop a File System Security Monitoring policy for them. |
Сервер участника Member Server | IF IF | IF IF | IF IF | IF IF | |
Workstation Workstation | IF IF | IF IF | IF IF | IF IF |
Список событий: Events List:
4656(S, F): запрашивалась ручка объекта. 4656(S, F): A handle to an object was requested.
4658(S). Ручка объекта была закрыта. 4658(S): The handle to an object was closed.
4660(S). Объект был удален. 4660(S): An object was deleted.
4663(S): была предпринята попытка доступа к объекту. 4663(S): An attempt was made to access an object.
4664(S): была предпринята попытка создать твердую ссылку. 4664(S): An attempt was made to create a hard link.
4985(S): Состояние транзакции изменилось. 4985(S): The state of a transaction has changed.
5051(-): Файл был виртуализирован. 5051(-): A file was virtualized.
4670(S): Разрешения на объект были изменены. 4670(S): Permissions on an object were changed.