Вопрос или проблема
Есть ли какой-либо способ включить аудит в Windows для событий реестра, таких как открытие пользователем ключа реестра через сеть с помощью службы RemoteRegistry (доступ через именованный канал winreg)?
Я пытался включить журнал аудита для доступа к объекту и выбрал операции с реестром, но, похоже, это включает только локальные, а не удаленные операции доступа.
Обновление:
Информация, которую я хотел бы записывать: откуда поступил запрос (IP-источник), аутентифицированное имя пользователя и, если доступно, какое право разрешило доступ, или почему доступ был заблокирован (если есть более подробная информация, чем просто отказано в доступе).
Я хотел бы, чтобы та же информация записывалась, если кто-то читал значение или класс ключа реестра.
Включение аудита удаленного реестра
- Включите службу Remote Registry, если она еще не работает.
Get-Service -Name RemoteRegistry -ComputerName $computerName | Set-Service -StartupType Manual -Status Running
Настройка политик аудита
-
Включите политикe “Аудит доступа к объектам” для событий как успешных, так и неудачных. (Используйте Управление групповой политикой или локальную политику безопасности для настройки).
-
Настройте аудит на конкретных ключах реестра.
-
Откройте редактор реестра и перейдите к ключу, который вы хотите аудитировать.
-
Кликните правой кнопкой мыши на ключ, выберите “Разрешения“, затем “Дополнительно“, и нажмите “Аудит“.
-
Добавьте запись аудита для “Все” с разрешениями “Полный доступ“, применяемыми к “Этому ключу и подключам“.
-
Включите подкатегорию “Аудит реестра” в Расширенной конфигурации политики аудита.
Invoke-Command -ComputerName $targetComputer -ScriptBlock {
# Включение политик аудита
auditpol /set /subcategory:"Registry" /success:enable /failure:enable
# Настройка правил аудита для конкретного ключа реестра
$registryPath = "HKLM:\SOFTWARE\YourKeyPath"
$acl = Get-Acl -Path $registryPath
$rule = New-Object System.Security.AccessControl.RegistryAuditRule("Everyone", "ReadKey", "ContainerInherit,ObjectInherit", "None", "Success,Failure")
$acl.AddAuditRule($rule)
Set-Acl -Path $registryPath -AclObject $acl
}
Настройка списков управления доступом системы (SACLs)
-
Откройте редактор реестра (
regedit
). -
Перейдите к ключу реестра, который вы хотите аудитировать. Кликните правой кнопкой мыши на ключ → Разрешения → Дополнительно → Аудит.
-
Добавьте запись для “Все” или конкретных пользователей/групп с желаемыми типами доступа (например, Чтение, Запись).
$registryPath = "HKLM:\SOFTWARE\YourKeyPath"
$identity = "Everyone"
$rights = "FullControl"
$inheritanceFlags = "ContainerInherit,ObjectInherit"
$propagationFlags = "None"
$auditFlags = "Success,Failure"
Invoke-Command -ComputerName $targetComputer -ScriptBlock {
param($regPath, $id, $r, $iFlags, $pFlags, $aFlags)
$acl = Get-Acl -Path $regPath
$rule = New-Object System.Security.AccessControl.RegistryAuditRule($id, $r, $iFlags, $pFlags, $aFlags)
$acl.AddAuditRule($rule)
Set-Acl -Path $regPath -AclObject $acl
} -ArgumentList $registryPath, $identity, $rights, $inheritanceFlags, $propagationFlags, $auditFlags
Проверка:
Invoke-Command -ComputerName $targetComputer -ScriptBlock {
param($regPath)
(Get-Acl -Path $regPath).Audit
} -ArgumentList $registryPath
ID событий для мониторинга
- 4656: Запрошена ручка к объекту
- 4663: Совершена попытка доступа к объекту
- 4660: Объект был удален
Отправьте их на сервер SYSlog по вашему выбору:
Invoke-Command -ComputerName $targetComputer -ScriptBlock {
wecutil qc /q
winrm quickconfig -q
Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager -Name 1 -Value "Server=http://collector.domain.com:5985/wsman/SubscriptionManager/WEC"
}
Вы можете настроить подписку, чтобы принудительно отправлять их в нужный конечный статус:
wecutil cs "Remote Registry Audit" /e:true /tn:"Microsoft-Windows-Security-Auditing" /tid:4656,4663,4660 /l:Custom
Если это сервер, для которого вы хотите отправлять логи, вы можете установить nxlog
для отправки логов:
# Установка NXLog (пример)
choco install nxlog-ce -y
# Настройка NXLog для пересылки событий Windows в syslog
$nxlogConfig = @"
<Input eventlog>
Module im_msvistalog
Query <QueryList><Query Id="0"><Select Path="Security">*[System[(EventID=4656 or EventID=4663 or EventID=4660)]]</Select></Query></QueryList>
</Input>
<Output syslog>
Module om_udp
Host syslog.server.com
Port 514
</Output>
<Route 1>
Path eventlog => syslog
</Route>
"@
Set-Content -Path "C:\Program Files\nxlog\conf\nxlog.conf" -Value $nxlogConfig
# Перезапуск службы NXLog
Restart-Service nxlog
Ответ или решение
Вопрос, касающийся аудита доступа к ключам реестра Windows через службу RemoteRegistry, является актуальным для специалистов, ответственных за безопасность и мониторинг сетей. Давайте детально разберем, как можно настроить аудит таких действий, предоставляя исчерпывающую информацию об источнике доступа, имени аутентифицированного пользователя и причинах блокировки при неудачном доступе.
Теория
Windows предоставляет механизмы для настройки аудита объектов, включая ключи реестра, что позволяет фиксировать события доступа, изменения и удаления объектов. Однако аудит через сеть, с использованием службы RemoteRegistry, требует особенно аккуратной настройки, чтобы учитывать удаленные подключения. Поскольку стандартное логирование чаще всего сосредоточено на локальных событиях, требуется дополнительная настройка для отслеживания действий, инициированных удаленно.
Пример
-
Включение службы RemoteRegistry: Первым шагом является обеспечение работы службы RemoteRegistry, если она не активна, так как именно эта служба позволяет осуществлять работу с реестром через сеть.
Get-Service -Name RemoteRegistry -ComputerName $computerName | Set-Service -StartupType Manual -Status Running
-
Настройка политик аудита:
- Необходимо включить политику "Audit Object Access" для логирования успешных и неуспешных попыток доступа.
- Используйте инструменты управления групповыми политиками или локальную политику безопасности для выполнения этой задачи. Это создаст основу для аудита доступа к объектам, в том числе к реестру.
-
Конфигурация аудита на конкретных ключах реестра:
- В редакторе реестра необходимо выбрать нужный ключ, открыть "Permissions" -> "Advanced" -> "Auditing" и добавить запись для аудитинга, например, для "Everyone".
- Убедитесь, что проведение аудитинга настроено на "This key and subkeys" для отслеживания всех изменений в иерархии ключей.
-
Активация подкатегории "Audit Registry" в продвинутой конфигурации аудит-политик:
Invoke-Command -ComputerName $targetComputer -ScriptBlock { auditpol /set /subcategory:"Registry" /success:enable /failure:enable $registryPath = "HKLM:\SOFTWARE\YourKeyPath" $acl = Get-Acl -Path $registryPath $rule = New-Object System.Security.AccessControl.RegistryAuditRule("Everyone", "ReadKey", "ContainerInherit,ObjectInherit", "None", "Success,Failure") $acl.AddAuditRule($rule) Set-Acl -Path $registryPath -AclObject $acl }
-
Настройка системных списков контроля доступа (SACLs):
- Также повторяем шаги по добавлению прав аудитинга для "Everyone" или конкретных пользователей/групп с нужными уровнями доступа (например, чтение, запись).
Применение
После настройки вышеперечисленных шагов, необходимо следить за определенными ID событий в журнале безопасности Windows, такими как:
- 4656: Получение дескриптора объекта.
- 4663: Попытка доступа к объекту.
- 4660: Удаление объекта.
Эти события нужно перенаправить на сервер SYSlog для удобного мониторинга и анализа. Вы можете использовать службу WECS для централизованного сбора и отправки журналов:
Invoke-Command -ComputerName $targetComputer -ScriptBlock {
wecutil qc /q
winrm quickconfig -q
Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager -Name 1 -Value "Server=http://collector.domain.com:5985/wsman/SubscriptionManager/WEC"
}
Дополнительно, чтобы обеспечить надежную отправку логов на удаленный сервер, вы можете установить nxlog и настроить его соответствующим образом:
# Установка NXLog
choco install nxlog-ce -y
# Конфигурация NXLog для пересылки событий Windows на syslog
$nxlogConfig = @"
<Input eventlog>
Module im_msvistalog
Query <QueryList><Query Id="0"><Select Path="Security">*[System[(EventID=4656 or EventID=4663 or EventID=4660)]]</Select></Query></QueryList>
</Input>
<Output syslog>
Module om_udp
Host syslog.server.com
Port 514
</Output>
<Route 1>
Path eventlog => syslog
</Route>
"@
Set-Content -Path "C:\Program Files\nxlog\conf\nxlog.conf" -Value $nxlogConfig
# Перезапустить службу NXLog
Restart-Service nxlog
Внедрение этой комплексной системы аудитинга поможет вам отслеживать доступ к ключам реестра на удаленных компьютерах, фиксируя важную информацию, такую как IP-адрес источника запроса, имя пользователя и причины отказа в доступе. Это существенно повысит защищенность IT-инфраструктуры, позволяя быстро реагировать на несанкционированные или подозрительные действия.