В некоторых случаях администратору нужно определить какой процесс (программа) или пользователь изменил NTFS права доступа на папку или файл на файловом сервере Windows. В этой статье мы покажем, как отслеживать изменения NTFS разрешений на объектах файловой систем с помощью полит аудита, скриптов PowerShell и утилиты ProcMon.
Чтобы отслеживать изменения NTFS разрешений на объекты файловой системы Windows, вам нужно настроить политику аудита.
- Откройте редактор групповых политик. Если вы хотите настроить аудит доступа на одном конкретном сервере, запустите консоль редактора локальной групповой политики (
gpedit.msc
). Если нужно настроить аудит на нескольких устройствах в домене (например, на всех файловых серверах), нужно создать отдельную GPO с помощью консоли Group Policy Management (gpmc.msc
); - Перейдите в раздел GPO Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Audit Policies -> Object Access;
- Включите параметр Audit File System и выберите Success;
- Теперь нужно включить аудит в свойствах каталога, в котором нужно отслеживать изменения. Откройте свойства папки -> вкладка Security -> Advanced -> вкладка Auditing -> Continue -> нажмите кнопку Add и добавьте группу (select a principal), чьи действия вы хотите отслеживать. Мы указали здесь Everyone;Ранее мы показывали как использовать аудит файловой системы чтобы найти пользователя, который удалил файл или папку на файловом сервере Windows.
- Выберите Type=Success и в разделе Advanced Permissions включите опции Change Permissions и Take Ownership;
- Обновите настройки групповых политик на хосте:
gpupdate /force
Если кто-то изменил NTFS права на объекты в указанной папке, в журнале Security появится событий с EventID 4670.
Откройте консоль Event Viewer (
eventvwr.msc
) -> Windows Logs -> Security. Включите фильтр по событию с ID 4670 (
Permissions on an object were changed
). Откройте последнее событие.
В описании события видно имя пользователя, которые изменил разрешения (Account Name:) и имя процесса (
C:\Windows\explorer.exe
). В описании события видна информация о предыдущих разрешениях (Original Security Descriptor) и новый список доступа (New Security Descriptor).
Обратите внимание что разрешения указаны в формате DACL, и сложны для понимания.Для преобразования строки в формате Security Descriptor Definition Language в объект PSCustomObject нужно использовать встроенный PowerShell командлет ConvertFrom-SddlString.
Чтобы увидеть, какие группы доступа были изменение в NTFS разрешениях на объект, нужно сравнить старый и новый дескрипторы безопасности (скопируйте код SDDL из события 4670):
$oldperm=ConvertFrom-SddlString "D:PAI(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;S-1-5-21-1774357850-3643260196-2143367957-1125)(A;OICI;0x1301bf;;;S-1-5-21-1774357850-3643260196-2143367957-1124)"
$newperm=ConvertFrom-SddlString "D:PARAI(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;0x1301bf;;;S-1-5-21-1774357850-3643260196-2143367957-1124)(A;OICI;0x1200a9;;;S-1-5-21-1774357850-3643260196-2143367957-1125)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;BU)"
Compare-Object -ReferenceObject $oldperm.DiscretionaryAcl -DifferenceObject $newperm.DiscretionaryAcl|FL
В данном примере видно, что в новом ACL были добавлены права чтения для группы
Builtin\Users
.
Для поиска в журнале событий Windows можно использовать PowerShell командлет Get-WinEvent. Чтобы найти событий с Event ID 4670 и получить значения OldSd и NewSD из кода скрипта, можно использовать такой код:
$event=Get-WinEvent -FilterHashtable @{logname='Security';id=4670} -MaxEvents 1
[xml]$xmlevent = $event.ToXml()
$eventobj = New-Object System.Management.Automation.PSObject
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[1].name -Value $xmlevent.Event.EventData.Data[1].'#text'
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[8].name -Value $xmlevent.Event.EventData.Data[8].'#text'
$eventobj | Add-Member Noteproperty -Name $xmlevent.Event.EventData.Data[9].name -Value $xmlevent.Event.EventData.Data[9].'#text'
$eventobj|format-list
Если вам нужно только понять, какой процесс и пользователь меняют NTFS разрешения на папку, можно воспользоваться утилитой Process Monitor (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Она позволит в реальном времени найти источник изменений.
- Скачайте и запустите
procmon64.exe
; - Настройте следующие фильтры Filter-> Filter (
CTRL+S
)Path -> begin with -> укажите путь к папке ->IncludeOperation -> is -> SetSecurityFile -> Include - Теперь, если кто-то изменит NTFS права на любой объект в этой папке, в окне ProcMon появится новое событие. В нем видно процесс (explorer.exe) и имя пользователя, который изменил разрешения.