Политики аудита файловой системы Windows позволяют отслеживать все события доступа к определенным файлам и папкам на диске. С помощью политик аудита вы можете выявить события создания, чтения, изменения, удаления файлов и папок на файловой системе NTFS в Windows. Чаще всего аудит файловой используется для контроля доступа и изменений в общих сетевых папках, к которым одновременно могут обращаться несколько пользователей.
Включить политику аудита доступа к объектам файловой системы Windows
По умолчанию в Windows отключен аудит событий доступа к файлам и папкам. Включить аудит можно с помощью групповой политики. На отдельностоящем сервере для настройки политика аудита используется консоль редактора локальной групповой политики (
gpedit.msc
). Если вам нужно включить аудит сразу на множестве компьютеров в домене AD, используйте консоль управления доменными GPO (
gpmc.msc
).
- Откройте редактор GPO и перейдите в раздел Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> System Audit Policies -> Object Access;
- Откройте политику Audit File System и укажите, что вы хотите сохранять в журнал только успешные события доступа к объектам файловой системы (Configure the following audit events -> Success);
- Сохраните изменения и обновите настройки локальной групповой политики с помощью команды
gpupdate /force
.
Можно включить локальную политику аудита файловой системы из командной строки. Вывести доступные категории аудита:
AuditPol.exe /list /subcategory:*
Включить аудит успешных событий доступа к объектам файловой системы:
AuditPol.exe /set /subcategory:"File System" /success:enable
Вывести настройки категории аудита:
AuditPol.exe /get /category:"Object Access"
Настройка аудита событий на файлах и папках Windows
Несмотря на то, что в Windows включена политика аудита доступа к файлам и папкам, фактически событий в Event Viewer еще не попадают. Администратор должен вручную настроить параметры аудита на файлах и папках, которые нужно отслеживать.
К примеру, вы хотите отслеживать события чтения, изменения и создания файлов в каталоге C:\Docs.
- Откройте свойства папки и перейдите на вкладку Security -> Advanced -> Auditing;
- Нажмите кнопку Add и в поле Principal выберите пользователя или группы, чью события доступа нужно отслеживать. Если нужно отслеживать доступ для всех пользователей, выберите Users (или Everyone, если нужно контролировать доступ системных процессов);
- В списке Type укажите, что нужно отслеживать только успешные событий (
Success
); - В Applies to можно указать, нужно ли применить аудит для папки, файлов, вложенных объектов (по умолчанию выбрано This folder, subfolders and files);
- В списке Advanced permissions выберите только те действия с файлами и папками, которые вы хотите отправлять в журнал аудита. Например: события чтения (List folder/read data) и изменения файлов (Create files or folders / write or append data) На сайте есть отдельная статья, которая описывает как с помощью политик аудита найти пользователя, который удалил файл в общей сетевой папке.
- Сохраните настройки аудита.
Можно включить аудит для каталога с помощью PowerShell:
$Path = "C:\Docs"
$AuditChangesRules = New-Object System.Security.AccessControl.FileSystemAuditRule('BUILTIN\Users', 'Delete,DeleteSubdirectoriesAndFiles', 'none', 'none', 'Success')
$Acl = Get-Acl -Path $Path
$Acl.AddAuditRule($AuditChangesRules)
Set-Acl -Path $Path -AclObject $Acl
Настройки аудита папки можно вывести с помощью PowerShell:
(Get-Acl "C:\Docs\" -Audit).Audit
Чтобы рекурсивно просканировать все каталоги и найти папки, на которых включен аудит файловой системы, воспользуйтесь таким скриптом:
$folders=Get-ChildItem "c:\docs" -Recurse |Where-Object {$_.PSIsContainer}
foreach ($folder in $folders)
{
$auditacl=(Get-Acl $folder.FullName -Audit).audit
if ($auditacl -ne "") {write-host $folder.FullName}
}
Просмотр событий аудита доступа к файлам и папкам в Windows
Теперь, если с файлами в указанной папке выполняются какие-то действия, политика аудита записывает их в Event Viewer. Чтобы просмотреть события:
- Запустите консоль Event Viewer (
eventvwr.msc
); - Перейдите в раздел Windows Logs -> Security и отфильтруйте лог по источнику:
Microsoft Windows security auditing
, Task Category:File System
; . - Откройте содержимое любого события. Например в событии с EventID 4663 (
An attempt was made to access an object
) содержится информация:О пользователе, который произвел действие над фалйов:Subject: Account Name:
Имя файла:Object Name:
Тип операции (изменение файла в этом случае):Accesses: WriteData (or AddFile)
- Запустите консоль Event Viewer (
Однако из за ограниченных возможностей фильтрации и поиска в событиях Event Viewer, использовать эту консоль для поиска всех операции с определенным файлом довольно неудобно.
Для вывода всех событий, связанных с определенным объектом лучше использовть PowerShell. Следующий PowerShell скрипт выведет все события доступа, связанные с указанным файлом (для получения списка событий исопльзуется производительный командлет Get-WinEvent):
$fileName = "C:\\docs\\13131.txt" $results = Get-WinEvent -FilterHashtable @{logname='Security'; id=4663,4659} |` Where-Object { $_.message -match $fileName -and $_.message -notmatch "Account Name:\s*machine$*"}` foreach ($result in $results) { $Account = $result.properties[1].Value $objectName = $result.properties[6].Value $accessMask = $result.properties[8].Value if ( $accessMask -like "*00000000-*") { $accessMask=$result.properties[9].Value} $accessMask2 = $result.properties[9].Value $fileOperation = "" switch -Wildcard ($accessMask) { "*%%1538*" { $fileOperation = "READ_CONTROL" } "*%%4416*" { $fileOperation = "ReadData (or ListDirectory)" } "*%%4417*" { $fileOperation = "WriteData (or AddFile)" } "*%%4418*" { $fileOperation = "AppendData (or AddSubdirectory or CreatePipeInstance)" } "*%%4419*" { $fileOperation = "ReadEA" } "*%%4420*" { $fileOperation = "WriteEA" } "*%%4423*" { $fileOperation = "ReadAttributes" } "*%%4424*" { $fileOperation = "WriteAttributes" } "*%%4426*" { $fileOperation = "Delete" } "*%%4428*" { $fileOperation = "ReadControl" } "*%%4429*" { $fileOperation = "WriteDAC" } "*%%4430*" { $fileOperation = "WriteOwner" } "*%%4432*" { $fileOperation = "Synchronize" } "*%%4433*" { $fileOperation = "AccessSystemSecurity" } "*%%4434*" { $fileOperation = "MaximumAllowed" } "*%%4436*" { $fileOperation = "GenericAll" } "*%%4437*" { $fileOperation = "GenericExecute" } "*%%4438*" { $fileOperation = "GenericWrite" } "*%%4439*" { $fileOperation = "GenericRead" } "*%%1537*" { $fileOperation = "DELETE" } default { $fileOperation = "Unknown" } } Write-Host $result.Id $result.TimeCreated $Account $objectName $fileOperation }
Вы можете отправлять собранные события аудита в вашу систему сбора логов, базу данных, текстовый лог файл или отправлять email уведомление через Send-MailMessage при доступе/модификации отслеживаемого файла.