Политики аудита файловой системы 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 при доступе/модификации отслеживаемого файла.
Интересная заметка, спасибо! Еще бы написали про то, как и чем эти логи потом парсить на предмет интересующих событий, таких например как попытка удалить Васей файлов из папки «важное» и пр. примеры.
Скорее всего есть возможность читать EventLog. Через API по-любому есть такая возможность. В Visual Studio Есть такой одноимённый компонент, но я им ни разу не пользовался. Ну, а так или в сети искать, или в MSDN.
А насколько влияет включение аудита на производительность?
Производительность, естественно несколько снижается, т.к. теперь информация о всех операциях с файлами должна попасть в журнал.
Естественно, для нескольких сотен — тысяч аудируемых документов, скорее всего падение производительности будет незаметным. Для большого же массива каталогов и файлов с часто изменяемой информации, аудит всех операций может просадить производительность сервера.
Поэтому нужно учесть несколько нюансов
1) Необходимо увеличить размер журнала Security (иначе в зависимости от настроек он будет либо часто перезатираться, либо после переполнения блокироваться на дальнейшую запись)
2) нежелательно включать аудит на все объекты файловой системы (или делать это только осознанно), обычно аудит включен для конкретных контролируемых папок или файлов в них, либо же используется в целях диагностики и отладки
3) если включен аудит на неком каталоге, то общая производительность будет снижаться прямо пропорционально количеству файлов в ней (т.е. лучше свести количество файлов, доступ к которым аудируется до необходимого минимума)
Настроил все как в стать но в журнале безопасность не видно к каким конкретно файлам был доступ, что удалили и кто удалил… в общем не очень понятно как это работает..
Roman Сложно сказать что у вас конкретно не работает..
Опишите подробно что вы сделали (лучше со скриншотами) и заведите новую тему на нашем форуме (http://forum.winitpro.ru/) — попробуем вам помочь
Разобрался, работает. Только вот событие в ID 4660 (удален объект) не видно какой именно файл был удален…
Где и как это точно можно посмотреть?
Второй вопрос где можно глянуть список всех папок и файлов у которых включен аудит?
Почему в этой статье вы не слова не упомянули о том что в WinServer 2008 эти 9 объектов разбиты ещё не подобъекты?..
Посмотреть и включить/выключить их почему то можно только в командной строке:
auditpol /get /category:* — выводит список и состояние подобъектов
auditpol /set /subcategory:»ИМЯ КАТЕГОРИИ ПО РУССКИ» /failure:disable /success:disable — отключение подкатегории
auditpol /set /subcategory:»ИМЯ КАТЕГОРИИ ПО РУССКИ» /failure:enable /success:enable — включение подкатегории
Таким образом отключим некоторые подкатегории можно значительно сократить потом ненужных вам событий!
Лучше расскажите, как это у Вас /set вообще работает? У меня на любую категорию ответ один:
Ошибка 0x00000057 произошла:
Параметр задан неверно.
1. Вся информация об операциях с аудируемыми объектами будет присутствовать в журнале безопасности. Имя конкретного файла смотрите в свойствах конкретного события. На самом деле искать в нем без дополнительных телодвижений проблематично.
Мы обычно выгружаем эти события скриптом, а потом парсим их на информацию о нужном файле.
2. Хм, интересный вопрос — как это сделать встроенными средствами — не знаю. Видимо придется скрипт ваять
Спасибо за важное дополнение! Статью немного дополнил
доброго дня. Можете поделиться скриптом, выгружающим логи?
Скрипт потерян вместе с местом работы, где я был в 2012 году 🙂
Ну и сейчас скрипты не модно — тенденция слать все логи на ELK или graylog и там парсить.
Все равно не вижу даже в свойствах имени файла который был удален..
Может что-то я не донастроил?..
—
—
4660
0
0
12800
0
0x8020000000000000
9856773
Security
SERVER.mydomen.ru
—
S-1-5-21-1534995794-3278245879-885158751-1247
sergey70
MYDOMEN
0x45528ca1a
Security
0x1f1c
0x4
{00000000-0000-0000-0000-000000000000}
Включите аудит только событий удаления файлов и папок.
Удалите файл. Затем в журнале Windows Logs->Secutiry ищите событие
Keywords:Audit Success, Task Category:File System, EventID:4656
содержит примерно такой текст:
A handle to an object was requested.
Subject:
Security ID: serv1\winadmin
Account Name: winadmin
Account Domain: serv1
Logon ID: 0x13a659
Object:
Object Server: Security
Object Type: File
Object Name: C:\Distr\rest\New Rich Text Document.rtf
Handle ID: 0xe08
Process Information:
Process ID: 0xbc8
Process Name: C:\Windows\explorer.exe
Access Request Information:
Transaction ID: {00000000-0000-0000-0000-000000000000}
Accesses: DELETE
SYNCHRONIZE
ReadAttributes
Access Reasons: DELETE: Granted by D:(A;ID;FA;;;BA)
SYNCHRONIZE: Granted by D:(A;ID;FA;;;BA)
ReadAttributes: Granted by D:(A;ID;FA;;;BA)
Access Mask: 0x110080
Privileges Used for Access Check: —
Restricted SID Count: 0
А нельзя делать аудит этих событий допустим в mssql?
Как-то на Powershell приходилось реализовывать выгрузку данных из Windows Event Log с нескольких компов и загрузку инфы в базу MS SQL. К реализации доступа уже нет, но смысл такой:
командой Powershell Get-EventLog получаем нужные логи, и потом сторонней функцией (готовой функции в POSH нет, но гуглится на раз) загружаем данные в таблицу MSSQL.
Спасибо, будем пытаться:)
Написал мануал по выгрузке из журнала событий удаления файлов и загрузки их в БД mysql. Пользуйтесь: https://winitpro.ru/index.php/2016/05/04/prostaya-sistema-audita-udaleniya-fajlov-i-papok-dlya-windows-server/
Есть пачка серверов на Вин2003
на каждом сервере есть свои сетевый шары
Нужно всем этим шарам включить аудит (чтение/запись) — как это сделать через ГПО а не руками??
Пачку в отдельную группу домена. На эту группу отдельную политику аудита. На каждой шаре, если имена разные, правка реестра.
Если включать политику аудита для домена (глобально на несколько серверов входящих в домен) то нужно пойти по пути:
Пуск -> Администрирование -> Управление групповой политикой -> Создаем политику -> Открываем политику -> Конфигурация компьютера -> Политики -> Параметры безопасности -> Локальные политики
И уже тут включаем аудит?
Я правильно понимаю?
Такой вопрос: Я настроил Audit Policy в домене, а на FS настроил в дополнительных настройках безопасности общей папки — Аудит — только Delete. Почему журнал забивается событиями для предоставления доступа пользователям и предоставления прав на чтение аттрибутов и синхронизации.
Я не понимаю — как сделать так, чтоб в журнал записывались только те, события, аудит которых я указал в свойствах папки?
пробовали, гиганские логи, на всякий случай — ставьте квоту на папку логов аудита, иначе сервак упадет из за недостатка места
Что-то PS матерится на скрипт который экспортирует данные в файл
ParserError:
Line |
3 | foreach ($result in $results) {
| ~~
| Unexpected token 'in' in expression or statement.
Возможно аудит не включен или нет таких событий., поэтому список в $results пустой.
Нужно добавить проверку…
Да в том-то и фокус, что и аудит включен и события есть
Это матернулся PS 7.4.1
Старый 5.1 ругался на несбалансированность скобок еще
Unexpected token 'in' in expression or statement.
Тут как бы и не о том. Вообще «in» не ожидал увидеть. Ошибка парсинга, а не выполнения же.
Попробуй скрпт в PowerShell ISE
Извините, а в строке скрипта
s*machine$*"}`
апостроф на конце не лишний?Или перед ним пипа пропущена? Что вряд-ли.
поэтому возможно и ругалось:
Старый 5.1 ругался на несбалансированность скобок еще
Unexpected token ‘in’ in expression or statement.
Всё замечательно! Только либо у меня лыжи не едут, либо….
Делаю AuditPol.exe /get /category:»Object Access», в ответ прилетает
Ошибка 0x00000057 произошла:
Параметр задан неверно.
И так на любую комбинацию /get или /set
Какая ОС? командная строка должна быть запущена с правами администратора
Здравствуйте,
для парсинга логов хочу использовать ADAudit Plus, с файловыми серверами аудит настроить просто, а вот с локальными папками на рабочих станциях (в домене) как я понял нужно делать через File Integrity Monitoring, но получить данные у меня не получилось. Есть у кого-нибудь опыт настройки?
Здравствуйте, такой маленький вопрос.
По случайности включила аудит в «Безопасность» — «Дополнительно» — «Аудит», при этом его заранее не настраивая и ничего не включала, просто нажала «ОК» не зная, что я делаю (хотела посмотреть все функции общего доступа к папке).
Как теперь его убрать/удалить?
Аудит отключается в свойствах папки.
Не настроены профили, аудит никак не отключить ибо никаких кнопок попросту нет. В конфигурации компьютера тоже ничего не включала.