Кто изменил права доступа к файлу или папке в Windows?

В некоторых случаях администратору нужно определить какой процесс (программа) или пользователь изменил NTFS права доступа на папку или файл на файловом сервере Windows. В этой статье мы покажем, как отслеживать изменения NTFS разрешений на объектах файловой систем с помощью полит аудита, скриптов PowerShell и утилиты ProcMon.

Чтобы отслеживать изменения NTFS разрешений на объекты файловой системы Windows, вам нужно настроить политику аудита.

  1. Откройте редактор групповых политик. Если вы хотите настроить аудит доступа на одном конкретном сервере, запустите консоль редактора локальной групповой политики ( gpedit.msc ). Если нужно настроить аудит на нескольких устройствах в домене (например, на всех файловых серверах), нужно создать отдельную GPO с помощью консоли Group Policy Management ( gpmc.msc );
  2. Перейдите в раздел GPO Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Audit Policies -> Object Access ;
  3. Включите параметр Audit File System и выберите Success ; Включить аудит файловой системы через GPO
  4. Теперь нужно включить аудит в свойствах каталога, в котором нужно отслеживать изменения. Откройте свойства папки -> вкладка Security -> Advanced -> вкладка Auditing -> Continue -> нажмите кнопку Add и добавьте группу (select a principal), чьи действия вы хотите отслеживать. Мы указали здесь Everyone ;
    Ранее мы показывали как использовать аудит файловой системы чтобы найти пользователя, который удалил файл или папку на файловом сервере Windows .
  5. Выберите Type = Success и в разделе Advanced Permissions включите опции Change Permissions и Take Ownership ; настройка правил аудита папки
  6. Обновите настройки групповых политик на хосте: 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).

событие Event ID 4670 - Permissions on an object were changed

Чтобы хранить в журнале Security большее количество событий (за больший интервал времени) нужно увеличить размер лога Event Viewer .

Обратите внимание что разрешения указаны в формате 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 .

Показать какие изменения были добавлены в NTFS разрешения папки

Для поиска в журнале событий 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 разрешения каталога из события с помощью PowerShell командлета Get-WinEvent

Для резервного копирования текущих NTFS разрешений каталога можно использовать утилиту icacls.exe или PowerShel командлет Get-ACL .

Если вам нужно только понять, какой процесс и пользователь меняют NTFS разрешения на папку, можно воспользоваться утилитой Process Monitor ( https://learn.microsoft.com/en-us/sysinternals/downloads/procmon ). Она позволит в реальном времени найти источник изменений.

  1. Скачайте и запустите procmon64.exe ;
  2. Настройте следующие фильтры Filter-> Filter ( CTRL+S )Path -> begin with -> укажите путь к папке ->IncludeOperation -> is -> SetSecurityFile -> Include настройка фильтра в Process Monitor
  3. Теперь, если кто-то изменит NTFS права на любой объект в этой папке, в окне ProcMon появится новое событие. В нем видно процесс (explorer.exe) и имя пользователя, который изменил разрешения. procmon вывести пользователя, который изменил NTFS права на файл или папку
EnglishRussianUkrainian