Поиск по сайту:

Настройка аудита доступа к файлам и папкам в Windows (GPO)


Политика аудита файловой системы в Windows позволяет отслеживать все события доступа к определенным файлам и папкам на диске. Администратор может включить политику аудита для определения событий создания, чтения, изменения и удаления файлов и папок в файловой системе NTFS. Аудит файловой системы чаще всего используется для контроля доступа и изменений в общих сетевых папках на файловых серверах Windows, к которым одновременно могут иметь доступ несколько пользователей.

Включить политику аудита доступа к объектам файловой системы в Windows

Аудит доступа к объектам файловой системы по умолчанию в Windows не включен. Аудит доступа можно включить с помощью групповой политики. Чтобы настроить политику аудита на автономном сервере, используйте консоль редактора локальной групповой политики (

gpedit.msc

). Если вам необходимо включить политику аудита на нескольких компьютерах в домене AD, используйте консоль управления объектами групповой политики домена (

gpmc.msc

).

  1. Откройте редактор объектов групповой политики и перейдите в Настройки Windows -> Настройки безопасности -> Конфигурация расширенной политики аудита -> Политики аудита системы -> Доступ к объектам.

  2. Откройте Аудит файловой системы и укажите, что должен регистрироваться только успешный доступ к объектам файловой системы (Настройте следующие события аудита -> Успех).

  3. Сохраните изменения и обновите настройки локальной групповой политики с помощью команды:

    gpupdate /force

Или включите политику аудита локальной файловой системы из командной строки.

Список доступных категорий аудита:

AuditPol.exe /list /subcategory:*

Включите аудит успешных событий доступа к объектам файловой системы:

AuditPol.exe /set /subcategory:"File System" /success:enable

Проверьте текущие настройки аудита:

AuditPol.exe /get /category:"Object Access"

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

Даже если в политике включен аудит доступа к файлам и папкам, фактические события не отправляются в средство просмотра событий. Параметры аудита для отслеживаемых файлов и папок должны быть включены и настроены вручную администратором.

Например, ваша задача — отслеживать события чтения/изменения/создания всех файлов в папке C:\Docs.

  1. Откройте свойства папки и перейдите на вкладку Безопасность -> Дополнительно -> Аудит.

  2. Нажмите Добавить и в поле Основной выберите пользователей и/или группы, события доступа к объектам которых вы хотите отслеживать. Выберите Пользователи, чтобы проверять доступ к файлам для всех пользователей, или выберите Все, если вы хотите включить события доступа к файлам по системным процессам.

  3. В поле «Тип» укажите отслеживать только успешные события доступа (

    Success

    )

  4. В разделе Применяется к вы можете указать, должна ли политика аудита применяться к папке, файлам или подпапкам (значение по умолчанию — Эта папка, подпапки и файлы).

  5. В списке Дополнительные разрешения выберите только те действия над файлами и папками, которые вы хотите отправить в журнал аудита. Например, чтобы отслеживать только события чтения и изменения файлов, выберите параметры:

    List folder/read data

    ,

    Create files / write data

    ,

    Create folders / append data

    )

    См. пример использования политик аудита Windows для поиска пользователя, который удалил файл из общей папки.

  6. Сохраните настройки аудита.

При настройке политик аудита доступа к файловой системе включите аудит только для тех папок и файлов, которые вам нужны. Размер файла журнала средства просмотра событий значительно увеличивается, если включен аудит доступа для большого количества элементов.

Чтобы включить аудит для определенного каталога, можно использовать 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

Перечислите настройки аудита папок:

(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

Политика аудита будет записывать журнал в средство просмотра событий, если какие-либо действия выполняются над файлами в папке с включенным аудитом. Чтобы просмотреть события:

  1. Откройте оснастку «Просмотр событий» (

    eventvwr.msc

    )

  2. Перейдите в раздел Журналы Windows -> Безопасность и отфильтруйте события по источнику:

    Microsoft Windows security auditing

    , Категория задачи:

    File System

  3. Откройте любое найденное событие. Например, событие с EventID 4663 («

    An attempt was made to access an object

    «) содержит информацию о пользователе, который взаимодействовал с файлом:

    Account Name

    :
    Имя файла:

    object_name

    :
    тип операции (в данном случае запись в файл): Доступ:

    WriteData (or AddFile)

Однако возможности фильтрации и поиска консоли «Просмотр событий» достаточно скудны, и использовать ее для поиска всех действий над конкретным файлом неудобно.

Лучше использовать PowerShell для поиска и перечисления всех событий доступа к определенному объекту файловой системы. Следующий сценарий PowerShell находит и перечисляет все события доступа к указанному файлу в средстве просмотра событий (командлет Get-WinEvent используется для запроса средства просмотра событий):

$fileName = "C:\\docs\\new_test_file.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  
} 
Write-Host $result.Id $result.TimeCreated $Account $objectName $fileOperation
}

Вы можете отправить полученный список событий аудита доступа в сборщик журналов, базу данных, текстовый файл журнала или отправить уведомление по электронной почте с помощью Send-MailMessage при доступе или изменении отслеживаемого файла.

Статьи по данной тематике