Полный аудит безопасности рабочих станций в Active Directory: чек-лист 2026 | AdminWiki

Полный аудит безопасности рабочих станций в Active Directory: чек-лист 2026

13 августа 2026 12 мин. чтения
Содержание статьи

Введение: зачем нужен аудит безопасности рабочих станций

Рабочая станция с правами локального администратора, отключенным антивирусом или устаревшими обновлениями - это готовая точка входа для атаки. Злоумышленник, скомпрометировавший одну машину, получает плацдарм для бокового перемещения по домену, доступа к файловым ресурсам и попыток повышения привилегий до уровня администратора домена. Аудит безопасности рабочих станций в Active Directory выявляет такие машины до того, как ими воспользуются.

Полный аудит включает четыре ключевые области: анализ действующих GPO-политик, оценку локальных привилегий пользователей и групп, контроль состояния антивирусной защиты и проверку актуальности системных обновлений. Дополнительно проверяются брандмауэр, шифрование диска BitLocker и настройки UAC. В этой статье вы получите чек-лист проверок, готовые PowerShell-скрипты для автоматизации сбора данных и методику интерпретации результатов.

Материал ориентирован на системных администраторов и DevOps-инженеров, которые управляют доменной инфраструктурой на Windows Server 2016/2019/2022 и рабочими станциями Windows 10/11. Все скрипты проверены в реальных средах и не требуют сторонних коммерческих инструментов.

Подготовка к аудиту: необходимые права и инструменты

Перед запуском проверок убедитесь, что у вас есть доступ к домену и целевым машинам. От этого зависит, какие данные вы сможете собрать и насколько полным будет отчет.

Необходимые права и разрешения

Для чтения GPO и объектов компьютеров в Active Directory достаточно учетной записи с правами обычного пользователя домена. Чтение SYSVOL, где хранятся файлы групповых политик, доступно всем аутентифицированным пользователям. Для удаленного сбора данных с рабочих станций через WinRM или WMI потребуются права локального администратора на целевых машинах. На практике используют два подхода:

  • Делегированная учетная запись, добавленная в локальную группу «Администраторы» на всех рабочих станциях через GPO Restricted Groups.
  • Учетная запись администратора домена, если политика безопасности это допускает.

Проверьте, что служба WinRM запущена на целевых машинах. В доменной среде она часто включается через GPO: Computer Configuration → Policies → Administrative Templates → Windows Components → Windows Remote Management (WinRM) → WinRM Service → Allow remote server management through WinRM.

Инструменты автоматизации: PowerShell и не только

Основной инструмент - PowerShell 5.1 или 7.x с модулем ActiveDirectory. На управляющей машине установите RSAT (Remote Server Administration Tools). Для расширенного анализа путей атак можно использовать PingCastle и BloodHound, но базовый аудит полностью закрывается встроенными средствами.

Ключевые командлеты, которые понадобятся:

Get-GPO -All
Get-GPOReport -All -ReportType Xml
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate
Invoke-Command -ComputerName $computer -ScriptBlock { ... }
Get-CimInstance -ClassName Win32_ComputerSystem

Для массового сбора данных используйте Invoke-Command с параллельным выполнением. В PowerShell 7 доступен параметр -Parallel в ForEach-Object, который сокращает время обхода сотен машин с десятков минут до нескольких.

Чек-лист аудита безопасности рабочих станций

Используйте эту таблицу как план проверки. Каждая строка - отдельный этап аудита с указанием, что именно проверять и каким инструментом.

Область проверкиЧто проверяемИнструментКритичность
GPO-политикиПолитики паролей, блокировка учетных записей, User Rights Assignment, настройки Windows Defender, брандмауэр, политики аудитаGet-GPOReport, gpresultВысокая
Локальные привилегииЧлены групп Administrators, Remote Desktop Users, Power Users на каждой рабочей станцииGet-LocalGroupMember, Invoke-CommandВысокая
Антивирусная защитаСтатус Windows Defender, версия сигнатур, наличие сторонних антивирусов, актуальность базGet-MpComputerStatus, WMI AntiVirusProductВысокая
Системные обновленияУстановленные обновления, наличие критических патчей, статус WSUSGet-HotFix, Windows Update Agent APIВысокая
БрандмауэрВключен ли для доменного, частного и публичного профилейGet-NetFirewallProfileСредняя
BitLockerСтатус шифрования системного дискаGet-BitLockerVolumeСредняя
UACУровень контроля учетных записейРеестр HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\SystemСредняя
Неиспользуемые учетные записиЛокальные пользователи с неактивностью более 90 днейGet-LocalUser, LastLogonНизкая

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

Анализ действующих GPO-политик

Групповые политики - фундамент безопасности домена. Ошибка в GPO распространяется на сотни машин одновременно, поэтому аудит начинается именно с них.

Ключевые параметры безопасности в GPO

Проверьте следующие настройки в объектах групповой политики, примененных к OU с рабочими станциями:

  • Политики паролей: минимальная длина не менее 12 символов, сложность включена, максимальный срок действия не более 90 дней, история паролей не менее 10.
  • Блокировка учетных записей: порог блокировки 5-10 попыток, длительность блокировки не менее 15 минут.
  • User Rights Assignment: кто может входить локально, кто может завершать работу системы, кто имеет право на отладку программ. Проверьте, что группа Domain Admins не входит в локальную группу Administrators через GPO.
  • Windows Defender: включена защита в реальном времени, облачная защита, автоматическая отправка образцов, обновление сигнатур по расписанию.
  • Брандмауэр Windows: включен для всех трех профилей, входящие подключения блокируются по умолчанию.
  • Политики аудита: включен аудит входа в систему, доступа к объектам, изменения политик.

Для быстрой проверки примененных политик на конкретной машине используйте gpresult:

gpresult /S workstation01 /SCOPE COMPUTER /R /V

Эта команда покажет, какие GPO применены, и выведет результирующие настройки безопасности.

Автоматизация проверки GPO с помощью PowerShell

Для массового анализа всех GPO используйте Get-GPOReport с экспортом в XML и последующим парсингом. Следующий скрипт выводит сводку по ключевым параметрам безопасности:

$GPOs = Get-GPO -All
$Report = foreach ($gpo in $GPOs) {
    $xml = [xml](Get-GPOReport -Guid $gpo.Id -ReportType Xml)
    $settings = $xml.GPO.Computer.ExtensionData.Extension
    [PSCustomObject]@{
        Name = $gpo.DisplayName
        PasswordLength = ($settings | Where-Object {$_.Name -eq 'Security'} | Select-Xml -XPath "//MinimumPasswordLength").Node.InnerText
        LockoutThreshold = ($settings | Where-Object {$_.Name -eq 'Security'} | Select-Xml -XPath "//LockoutBadCount").Node.InnerText
        DefenderEnabled = ($settings | Where-Object {$_.Name -eq 'Windows Defender'} | Select-Xml -XPath "//DisableRealtimeMonitoring").Node.InnerText
        FirewallEnabled = ($settings | Where-Object {$_.Name -eq 'Windows Firewall'} | Select-Xml -XPath "//EnableFirewall").Node.InnerText
    }
}
$Report | Export-Csv -Path "C:\Audit\GPO_Security_Report.csv" -NoTypeInformation -Encoding UTF8

Скрипт создает CSV-файл с результатами по всем GPO. Машины, на которых результирующие настройки отличаются от эталонных, попадут в отчет об отклонениях.

Оценка локальных привилегий пользователей и групп

Избыточные локальные администраторы - одна из самых частых находок аудита. Каждый лишний пользователь с правами администратора увеличивает поверхность атаки: если его учетная запись скомпрометирована, злоумышленник получает полный контроль над машиной.

Поиск компьютеров с избыточными локальными администраторами

Следующий скрипт обходит все компьютеры домена, подключается к каждому через WinRM и выводит членов локальной группы Administrators:

$Computers = Get-ADComputer -Filter * -Properties OperatingSystem | Where-Object {$_.OperatingSystem -like '*Windows 10*' -or $_.OperatingSystem -like '*Windows 11*'}
$Results = foreach ($computer in $Computers) {
    try {
        $admins = Invoke-Command -ComputerName $computer.Name -ScriptBlock {
            Get-LocalGroupMember -Group 'Administrators' | Select-Object -ExpandProperty Name
        } -ErrorAction Stop
        [PSCustomObject]@{
            Computer = $computer.Name
            Admins = ($admins -join '; ')
            AdminCount = $admins.Count
        }
    } catch {
        [PSCustomObject]@{
            Computer = $computer.Name
            Admins = 'OFFLINE_OR_ACCESS_DENIED'
            AdminCount = -1
        }
    }
}
$Results | Export-Csv -Path "C:\Audit\LocalAdmins_Report.csv" -NoTypeInformation -Encoding UTF8

Сравните полученный список с эталонным. В эталон обычно входят: локальная учетная запись Administrator, группа Domain Admins (если это предусмотрено политикой), специализированная группа поддержки. Все остальные - кандидаты на удаление.

Анализ привилегий через групповые политики Restricted Groups

Restricted Groups - механизм GPO, который централизованно управляет членством в локальных группах. Если Restricted Groups настроены, они перезаписывают локальные изменения при каждом обновлении политики. Проверьте их настройки:

Get-GPO -All | ForEach-Object {
    $gpo = $_
    $xml = [xml](Get-GPOReport -Guid $gpo.Id -ReportType Xml)
    $restrictedGroups = $xml.GPO.Computer.ExtensionData.Extension | Where-Object {$_.Name -eq 'Restricted Groups'}
    if ($restrictedGroups) {
        Write-Output "GPO: $($gpo.DisplayName)"
        $restrictedGroups.InnerXml
    }
}

Если Restricted Groups не используются, локальные администраторы управляются вручную или через скрипты. Это повышает риск расхождений между машинами. Рекомендация - внедрить Restricted Groups для групп Administrators и Remote Desktop Users, чтобы гарантировать единый состав на всех рабочих станциях.

Контроль состояния антивирусной защиты

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

Проверка статуса Windows Defender на рабочих станциях

Командлет Get-MpComputerStatus возвращает полный статус встроенного антивируса. Для массовой проверки используйте:

$Computers = Get-ADComputer -Filter * -Properties OperatingSystem | Where-Object {$_.OperatingSystem -like '*Windows 10*' -or $_.OperatingSystem -like '*Windows 11*'}
$Results = foreach ($computer in $Computers) {
    try {
        $status = Invoke-Command -ComputerName $computer.Name -ScriptBlock {
            Get-MpComputerStatus | Select-Object AntivirusEnabled, RealTimeProtectionEnabled, AntivirusSignatureVersion, AntivirusSignatureLastUpdated, QuickScanEndTime
        } -ErrorAction Stop
        [PSCustomObject]@{
            Computer = $computer.Name
            AntivirusEnabled = $status.AntivirusEnabled
            RealTimeProtection = $status.RealTimeProtectionEnabled
            SignatureVersion = $status.AntivirusSignatureVersion
            SignatureUpdated = $status.AntivirusSignatureLastUpdated
            LastScan = $status.QuickScanEndTime
        }
    } catch {
        [PSCustomObject]@{
            Computer = $computer.Name
            AntivirusEnabled = 'ERROR'
            RealTimeProtection = 'ERROR'
            SignatureVersion = 'ERROR'
            SignatureUpdated = 'ERROR'
            LastScan = 'ERROR'
        }
    }
}
$Results | Export-Csv -Path "C:\Audit\Defender_Status.csv" -NoTypeInformation -Encoding UTF8

Критичные отклонения: AntivirusEnabled = False, RealTimeProtection = False, SignatureUpdated старше 7 дней. Машины с такими значениями требуют немедленного вмешательства.

Обнаружение сторонних антивирусов и их актуальности

Если в организации используются сторонние антивирусы (Kaspersky, ESET, CrowdStrike), проверьте их наличие и состояние через WMI:

Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState, timestamp

Поле productState содержит закодированный статус. Значение 397568 означает «включен и обновлен», 393472 - «включен, но базы устарели», 262144 - «отключен». Для массовой проверки оберните команду в Invoke-Command аналогично предыдущему скрипту.

Обратите внимание на машины, где установлено несколько антивирусов одновременно. Конфликт между ними может привести к отключению защиты обоих.

Проверка актуальности системных обновлений

Устаревшие обновления - прямой путь к эксплуатации известных уязвимостей. Аудит должен выявить машины, которые не получают патчи вовремя.

Автоматизация проверки обновлений с помощью PowerShell

Командлет Get-HotFix выводит установленные обновления. Для проверки наличия конкретного критического патча используйте:

$RequiredKB = 'KB5034441'  # Пример критического обновления
$Computers = Get-ADComputer -Filter * -Properties OperatingSystem | Where-Object {$_.OperatingSystem -like '*Windows 10*' -or $_.OperatingSystem -like '*Windows 11*'}
$Results = foreach ($computer in $Computers) {
    try {
        $hotfix = Invoke-Command -ComputerName $computer.Name -ScriptBlock {
            Get-HotFix -Id $using:RequiredKB -ErrorAction SilentlyContinue
        } -ErrorAction Stop
        [PSCustomObject]@{
            Computer = $computer.Name
            KBInstalled = if ($hotfix) {$true} else {$false}
            LastHotFix = (Invoke-Command -ComputerName $computer.Name -ScriptBlock { Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1 -ExpandProperty InstalledOn } -ErrorAction SilentlyContinue)
        }
    } catch {
        [PSCustomObject]@{
            Computer = $computer.Name
            KBInstalled = 'ERROR'
            LastHotFix = 'ERROR'
        }
    }
}
$Results | Export-Csv -Path "C:\Audit\Updates_Report.csv" -NoTypeInformation -Encoding UTF8

Интеграция с WSUS или другими системами управления обновлениями

Если в организации развернут WSUS, получите отчет о статусе обновлений из него. PowerShell-командлеты для WSUS доступны после установки роли на сервере:

Get-WsusComputer -ComputerTargetGroups 'All Computers' | Select-Object FullDomainName, LastReportedStatusTime, LastSyncTime

Машины, которые не синхронизировались с WSUS более 30 дней, не получают обновления и требуют проверки агента Windows Update. Альтернативы WSUS - SCCM или сторонние решения вроде Patch Manager Plus, но принцип аудита тот же: сравнение фактического состояния с эталонным списком обязательных обновлений.

Дополнительные проверки безопасности рабочих станций

Четыре основные области закрывают большую часть рисков, но полный аудит включает и дополнительные проверки.

Проверка состояния брандмауэра

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

Invoke-Command -ComputerName workstation01 -ScriptBlock {
    Get-NetFirewallProfile | Select-Object Name, Enabled
}

Ожидаемый результат: Enabled = True для Domain, Private и Public. Если публичный профиль отключен, машина уязвима при подключении к внешним сетям.

Проверка шифрования диска BitLocker

Шифрование защищает данные при физической краже устройства. Проверьте статус:

Invoke-Command -ComputerName workstation01 -ScriptBlock {
    Get-BitLockerVolume -MountPoint 'C:' | Select-Object ProtectionStatus, EncryptionPercentage, KeyProtector
}

ProtectionStatus = On означает, что шифрование активно. EncryptionPercentage должно быть 100. Если BitLocker не используется, рассмотрите внедрение через GPO с хранением ключей восстановления в Active Directory.

Анализ результатов и выявление отклонений

Собранные данные бесполезны без сравнения с эталоном. Определите целевые значения для каждой проверки и выявите машины, которые от них отклоняются.

Создание сводного отчета по аудиту

Объедините результаты всех проверок в один HTML-отчет. Следующий скрипт собирает данные из CSV-файлов и выделяет проблемные машины:

$GPOReport = Import-Csv "C:\Audit\GPO_Security_Report.csv"
$AdminsReport = Import-Csv "C:\Audit\LocalAdmins_Report.csv"
$DefenderReport = Import-Csv "C:\Audit\Defender_Status.csv"
$UpdatesReport = Import-Csv "C:\Audit\Updates_Report.csv"

$Summary = foreach ($computer in $AdminsReport) {
    $defender = $DefenderReport | Where-Object {$_.Computer -eq $computer.Computer}
    $updates = $UpdatesReport | Where-Object {$_.Computer -eq $computer.Computer}
    [PSCustomObject]@{
        Computer = $computer.Computer
        AdminCount = $computer.AdminCount
        DefenderEnabled = $defender.AntivirusEnabled
        SignatureAge = if ($defender.SignatureUpdated) { (Get-Date) - [datetime]$defender.SignatureUpdated } else { $null }
        LastHotFix = $updates.LastHotFix
        Compliant = if ($computer.AdminCount -le 3 -and $defender.AntivirusEnabled -eq 'True' -and $defender.SignatureUpdated -gt (Get-Date).AddDays(-7)) { $true } else { $false }
    }
}
$Summary | ConvertTo-Html -Title 'Audit Report' | Out-File "C:\Audit\Audit_Summary.html"

Критичные отклонения требуют немедленного устранения: отключенный антивирус, отсутствующие критические обновления, неожиданные локальные администраторы. Средние отклонения - устаревшие сигнатуры, отключенный брандмауэр в публичном профиле, отсутствие BitLocker - планируются к исправлению в течение недели.

Рекомендации по устранению выявленных уязвимостей

Каждая типичная проблема имеет стандартное решение. Применяйте исправления через GPO, чтобы они распространялись на все машины автоматически.

Исправление проблем с GPO

Если аудит выявил слабые политики паролей или отключенный Defender, исправьте их в GPO, примененном к OU с рабочими станциями:

  • Включение Defender: Computer Configuration → Policies → Administrative Templates → Windows Components → Microsoft Defender Antivirus → Turn off Microsoft Defender Antivirus → Not Configured или Disabled.
  • Политики паролей: Computer Configuration → Policies → Windows Settings → Security Settings → Account Policies → Password Policy. Установите минимальную длину 12, включите сложность.
  • Брандмауэр: Computer Configuration → Policies → Windows Settings → Security Settings → Windows Firewall with Advanced Security. Включите для всех профилей.

После изменения GPO принудительно обновите политики на целевых машинах: Invoke-GPUpdate -Computer workstation01 -Force.

Управление локальными привилегиями

Для удаления лишних администраторов используйте Restricted Groups. Создайте GPO, который задает точный состав группы Administrators:

Computer Configuration → Policies → Windows Settings → Security Settings → Restricted Groups
Add Group: Administrators
Members: DOMAIN\Workstation_Admins, DOMAIN\Domain_Admins

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

Invoke-Command -ComputerName workstation01 -ScriptBlock {
    Remove-LocalGroupMember -Group 'Administrators' -Member 'DOMAIN\user01'
}

Автоматизация регулярного аудита и мониторинга

Разовый аудит выявляет текущие проблемы, но безопасность требует постоянного контроля. Автоматизируйте запуск скриптов по расписанию.

Настройка запланированных задач для аудита

Создайте задачу в Task Scheduler на управляющей машине для еженедельного запуска скриптов:

$Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-File C:\Audit\RunAllAuditScripts.ps1'
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 6am
$Principal = New-ScheduledTaskPrincipal -UserId 'DOMAIN\AuditAccount' -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName 'Weekly Workstation Audit' -Action $Action -Trigger $Trigger -Principal $Principal

Скрипт RunAllAuditScripts.ps1 должен последовательно запускать все проверки из этой статьи и сохранять результаты в папку с датой. Добавьте отправку уведомлений по email при обнаружении критичных отклонений:

if ($Summary | Where-Object {$_.Compliant -eq $false}) {
    Send-MailMessage -From 'audit@domain.local' -To 'admin@domain.local' -Subject 'Critical audit findings' -Body ($Summary | Where-Object {$_.Compliant -eq $false} | Out-String) -SmtpServer 'smtp.domain.local'
}

Интеграция с системами мониторинга (Zabbix, Prometheus) возможна через экспорт результатов в формат, который они умеют забирать. Минимальный вариант - запись в лог-файл и настройка агента на его чтение.

Заключение

Регулярный аудит безопасности рабочих станций в Active Directory - это процесс, который выявляет проблемы до того, как они превратятся в инциденты. Начните с чек-листа из этой статьи, автоматизируйте сбор данных с помощью приведенных скриптов и внедрите еженедельный запуск проверок. Ключевые шаги: анализ GPO, контроль локальных привилегий, проверка антивируса и обновлений, дополнительные проверки брандмауэра и BitLocker. Результаты сравнивайте с эталоном и устраняйте отклонения через групповые политики. Такой подход снижает риск компрометации домена и поддерживает безопасность на приемлемом уровне без ручного обхода каждой машины.

Для более широкого контекста по аудиту инфраструктуры изучите полное руководство по аудиту безопасности IT-инфраструктуры и аудит политик и прав доступа IAM. Если вы управляете смешанной средой, обратите внимание на комплексный аудит для DevOps и администраторов.

Поделиться:
Сохранить гайд? В закладки браузера