Как определить, кто изменил разрешения NTFS для файла/папки в Windows
В некоторых случаях администратору необходимо выяснить, какой процесс (программа) или пользователь изменил разрешения NTFS для определенной папки или файла на файловом сервере Windows. В этой статье показано, как отслеживать изменения разрешений NTFS, внесенные в объекты файловой системы, с помощью политики аудита, сценариев PowerShell и инструмента ProcMon.
Вам необходимо настроить политику аудита для отслеживания изменений разрешений NTFS для объектов файловой системы Windows.
Откройте редактор групповой политики. Если вы хотите настроить политику аудита файловой системы на конкретном сервере, откройте консоль редактора локальной групповой политики (
gpedit.msc). Если вы хотите включить аудит на нескольких устройствах в домене (например, на всех файловых серверах), вам необходимо создать отдельный объект групповой политики с помощью консоли управления групповыми политиками (
gpmc.msc);
-
Перейдите к Конфигурация компьютера -> Политики -> Настройки Windows -> Настройки безопасности -> Расширенная конфигурация политики аудита -> Политики аудита -> Доступ к объектам;
Включите параметр Аудит файловой системы и выберите Успех;
Теперь вам нужно включить аудит в свойствах каталога, в котором вы хотите отслеживать изменения разрешений. Откройте свойства папки -> перейдите на вкладку Безопасность -> Дополнительно -> вкладка Аудит -> Продолжить -> нажмите Добавить и добавьте группу (выберите принципала), действия которой вы хотите отслеживать. Здесь мы указали Все;
Ранее мы показали вам, как использовать аудит файловой системы, чтобы найти пользователя, который удалил файл или папку на файловом сервере Windows.
Выберите Тип=Успех и включите параметры Изменить разрешения и Взять на себя ответственность в расширенных разрешениях:
Не забудьте обновить настройки групповой политики на хосте:
gpupdate /force
Теперь, если кто-то изменил разрешения NTFS для элементов в указанной папке, в журнале безопасности появится событие с идентификатором события 4670.
Откройте консоль просмотра событий (
eventvwr.msc
) -> Журналы Windows -> Безопасность. Отфильтруйте список событий по EventID 4670 (
Permissions on an object were changed) и откройте последнее событие.
В описании события вы увидите имя пользователя, который изменил разрешение (Имя учетной записи:) и имя процесса ( C:\Windows\explorer.exe). Он также содержит информацию о предыдущем ACL (Исходный дескриптор безопасности) и новом списке разрешений (Новый дескриптор безопасности).
Если вы хотите хранить больше событий в журнале безопасности (за более длительный интервал времени), вам потребуется увеличить размер журнала просмотра событий.
Обратите внимание, что разрешения представлены в формате DACL и их сложно понять. К счастью, вы можете использовать встроенный командлет PowerShell ConvertFrom-SddlString для преобразования строки языка определения дескриптора безопасности в PSCustomObject.
Чтобы увидеть, какие группы доступа были изменены в разрешениях 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группа.
Вы можете использовать командлет PowerShell Get-WinEvent для поиска в журнале событий Windows. Например, вы можете использовать следующий код, чтобы найти события с идентификатором события 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Вы можете использовать встроенный
icacls.exeинструмент или командлет Get-ACL PowerShell для резервного копирования текущих разрешений NTFS для каталога.
Если вам нужно понять, какой процесс и пользователь меняют разрешения NTFS для папки, вы можете использовать утилиту Монитор процессов. (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Это позволяет вам найти источник изменений разрешений для объектов файловой системы в режиме реального времени.
Загрузите и запустите procmon64.exe;
Настройте фильтр:
Filter-> Filter (CTRL+S)Path -> begin with -> Specify the folder path ->IncludeOperation -> is -> SetSecurityFile -> Include ;С этого момента, если кто-то изменит разрешения NTFS для любого объекта в этой папке, вы увидите новое событие в окне ProcMon. Здесь показан процесс (explorer.exe) и имя пользователя, изменившего разрешения.






