В некоторых случаях администратору нужно определить какой процесс (программа) или пользователь изменил 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:Windowsexplorer.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 были добавлены права чтения для группы BuiltinUsers
.
Для поиска в журнале событий 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) и имя пользователя, который изменил разрешения.