Журналирование аудита Windows для доступа к ключам RemoteRegistry

Вопрос или проблема

Есть ли какой-либо способ включить аудит в Windows для событий реестра, таких как открытие пользователем ключа реестра через сеть с помощью службы RemoteRegistry (доступ через именованный канал winreg)?

Я пытался включить журнал аудита для доступа к объекту и выбрал операции с реестром, но, похоже, это включает только локальные, а не удаленные операции доступа.

Обновление:

Информация, которую я хотел бы записывать: откуда поступил запрос (IP-источник), аутентифицированное имя пользователя и, если доступно, какое право разрешило доступ, или почему доступ был заблокирован (если есть более подробная информация, чем просто отказано в доступе).

Я хотел бы, чтобы та же информация записывалась, если кто-то читал значение или класс ключа реестра.

Включение аудита удаленного реестра

  1. Включите службу Remote Registry, если она еще не работает.
Get-Service -Name RemoteRegistry -ComputerName $computerName | Set-Service -StartupType Manual -Status Running

Настройка политик аудита

  1. Включите политикe “Аудит доступа к объектам” для событий как успешных, так и неудачных. (Используйте Управление групповой политикой или локальную политику безопасности для настройки).

  2. Настройте аудит на конкретных ключах реестра.

  3. Откройте редактор реестра и перейдите к ключу, который вы хотите аудитировать.

  4. Кликните правой кнопкой мыши на ключ, выберите “Разрешения“, затем “Дополнительно“, и нажмите “Аудит“.

  5. Добавьте запись аудита для “Все” с разрешениями “Полный доступ“, применяемыми к “Этому ключу и подключам“.

  6. Включите подкатегорию “Аудит реестра” в Расширенной конфигурации политики аудита.

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)

  1. Откройте редактор реестра (regedit).

  2. Перейдите к ключу реестра, который вы хотите аудитировать. Кликните правой кнопкой мыши на ключ → Разрешения → Дополнительно → Аудит.

  3. Добавьте запись для “Все” или конкретных пользователей/групп с желаемыми типами доступа (например, Чтение, Запись).

$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, требует особенно аккуратной настройки, чтобы учитывать удаленные подключения. Поскольку стандартное логирование чаще всего сосредоточено на локальных событиях, требуется дополнительная настройка для отслеживания действий, инициированных удаленно.

Пример

  1. Включение службы RemoteRegistry: Первым шагом является обеспечение работы службы RemoteRegistry, если она не активна, так как именно эта служба позволяет осуществлять работу с реестром через сеть.

    Get-Service -Name RemoteRegistry -ComputerName $computerName | Set-Service -StartupType Manual -Status Running
  2. Настройка политик аудита:

    • Необходимо включить политику "Audit Object Access" для логирования успешных и неуспешных попыток доступа.
    • Используйте инструменты управления групповыми политиками или локальную политику безопасности для выполнения этой задачи. Это создаст основу для аудита доступа к объектам, в том числе к реестру.
  3. Конфигурация аудита на конкретных ключах реестра:

    • В редакторе реестра необходимо выбрать нужный ключ, открыть "Permissions" -> "Advanced" -> "Auditing" и добавить запись для аудитинга, например, для "Everyone".
    • Убедитесь, что проведение аудитинга настроено на "This key and subkeys" для отслеживания всех изменений в иерархии ключей.
  4. Активация подкатегории "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
    }
  5. Настройка системных списков контроля доступа (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-инфраструктуры, позволяя быстро реагировать на несанкционированные или подозрительные действия.

Оцените материал
Добавить комментарий

Капча загружается...