«Скрипт аудита привилегированных групп AD — это не просто инструмент для получения списка пользователей. Это инструмент управления легитимностью, который переводит абстрактную политику безопасности в конкретные технические артефакты. В российской практике под 152-ФЗ и требованиями ФСТЭК такая автоматизация превращает формальный контроль в работающий механизм. Ключ — не в разовом запуске, а в интеграции скрипта в цикл постоянного мониторинга, где отклонения от эталонного состава групп становятся инцидентами.»
Автоматизация аудита привилегированных групп в Active Directory
Почему привилегированные группы — главная цель атаки
В инфраструктуре на основе Active Directory группа с максимальными правами, например Domain Admins, эквивалентна корневым ключам от всего домена. Членство в ней даёт возможность изменять конфигурацию контроллеров домена, перехватывать трафик, отключать систему безопасности или создавать скрытые учётные записи. При стандартных настройках аудита простой факт добавления пользователя в такую группу может не вызвать немедленного оповещения. Поэтому легитимность состава этих групп требует постоянного независимого контроля, выходящего за рамки встроенных журналов Windows.
Ключевые группы и их влияние
Понимание различий между группами критично для точного аудита. Не все административные группы равнозначны по уровню угрозы.
| Группа | Область влияния | Риск при компрометации |
|---|---|---|
| Enterprise Admins | Весь лес (все домены). | Катастрофический. Позволяет создавать/уничтожать домены, влиять на доверительные отношения. |
| Schema Admins | Схема каталога во всём лесе. | Высокий, с отложенным эффектом. Изменение схемы необратимо и может использоваться для создания скрытых атрибутов или классов объектов. |
| Domain Admins | Один домен. | Критический. Полный контроль над всеми объектами домена: пользователями, компьютерами, групповыми политиками. |
| Administrators (локальная группа) | Отдельный сервер или рабочая станция. | Высокий на уровне хоста. Членство Domain Admins добавляется сюда по умолчанию, что является распространённой точкой эскалации привилегий. |
| DnsAdmins | Служба DNS. | Серьёзный и часто недооценённый. Позволяет внедрить код, выполняемый с правами SYSTEM на контроллере домена. |
Базовый скрипт аудита: первичный снимок состояния
Следующий скрипт на PowerShell выполняет фундаментальную задачу: получает актуальный список членов критических групп. Это отправная точка для любого анализа.
# Импорт модуля ActiveDirectory
Import-Module ActiveDirectory
# Определение целевых привилегированных групп
$privilegedGroups = @("Domain Admins", "Enterprise Admins", "Schema Admins")
foreach ($group in $privilegedGroups) {
# Получение членов группы
$members = Get-ADGroupMember -Identity $group
# Форматирование вывода с указанием источника (группы)
$members | Select-Object @{Name='Group';Expression={$group}}, Name, SamAccountName
}
Как это работает технически
| Элемент скрипта | Назначение и особенности |
|---|---|
Import-Module ActiveDirectory |
Загружает командлеты для работы с AD. На клиенте требует установки средств RSAT (Remote Server Administration Tools). На контроллере домена — доступен по умолчанию. |
Get-ADGroupMember |
Выполняет LDAP-запрос к контроллеру домена, возвращая все объекты-члены указанной группы, включая вложенные группы (рекурсивно). Важно: для учёта косвенного членства через другие группы требуется дополнительная логика. |
Вычисляемое свойство @{Name='Group'...} |
Добавляет в результат столбец с именем группы, к которой относится запись. Это необходимо для консолидации вывода из цикла, особенно при экспорте в CSV. |
Требования к среде выполнения
- Права доступа: Учётная запись, запускающая скрипт, должна иметь права на чтение членства целевых групп. Обычно достаточно прав обычного пользователя домена, но в защищённых средах чтение привилегированных групп может быть ограничено.
- Сетевая доступность: Требуется связь с контроллером домена по портам LDAP (389) и, возможно, LDAP поверх SSL (636).
- Компоненты PowerShell: Наличие модуля
ActiveDirectory. На сервере он присутствует по умолчанию, на рабочей станции устанавливается как часть RSAT.
Расширенный скрипт для глубокого анализа
Базовый скрипт показывает «кто есть кто». Расширенная версия добавляет контекст: когда учётная запись последний раз использовалась, её тип и идентификатор. Это помогает отличать служебные учётные записи от пользовательских и выявлять неактивные аккаунты с высокими привилегиями — классический вектор атаки.
# Расширенный аудит с дополнительными атрибутами
Import-Module ActiveDirectory
$privilegedGroups = @(
"Domain Admins",
"Enterprise Admins",
"Schema Admins",
"Account Operators",
"Backup Operators",
"Server Operators",
"DnsAdmins"
)
$auditResults = @()
foreach ($group in $privilegedGroups) {
try {
$members = Get-ADGroupMember -Identity $group -ErrorAction Stop
foreach ($member in $members) {
# Запрос расширенных свойств объекта
$memberDetails = Get-ADObject -Identity $member.DistinguishedName -Properties Created, LastLogonDate, Enabled
$auditResult = [PSCustomObject]@{
ПривилегированнаяГруппа = $group
Имя = $member.Name
Логин = $member.SamAccountName
ТипОбъекта = $member.objectClass
Включен = $memberDetails.Enabled
ДатаСоздания = $memberDetails.Created
ПоследнийВход = $memberDetails.LastLogonDate
DistinguishedName = $member.DistinguishedName
}
$auditResults += $auditResult
}
}
catch {
# Логирование ошибок, например, если группа не найдена
Write-Warning "Не удалось обработать группу '$group': $_"
}
}
# Вывод результатов на экран и экспорт в CSV
$auditResults | Format-Table -AutoSize
$auditResults | Export-Csv -Path "C:AuditPrivGroupAudit_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Главное улучшение здесь — сбор атрибутов LastLogonDate и Enabled. Учётная запись, не входившая в систему годами, но остающаяся в группе Domain Admins, — это нарушение принципа минимальных привилегий и прямой риск.
Интеграция в цикл безопасности и соответствие требованиям
Однократный запуск скрипта — лишь начало. Его ценность раскрывается при интеграции в регулярные процессы.
1. Автоматизация и планирование
Настройте задание в Планировщике задач Windows для ежедневного или еженедельного запуска скрипта. Результаты следует сохранять с меткой времени и отправлять, например, в защищённое файловое хранилище или SIEM-систему. Это создаёт историческую базу для сравнения.
2. Валидация против эталонного состава
Скрипт можно модифицировать для сравнения текущего списка членов с эталонным («белым списком»), загружаемым из отдельного файла конфигурации. Любое расхождение — добавление или удаление учётной записи — должно генерировать оповещение. Это реализация базового принципа контроля целостности для конфигурации безопасности.
3. Связь с требованиями регуляторов (152-ФЗ, ФСТЭК)
Регулярный автоматизированный аудит привилегированных учётных записей напрямую соотносится с требованиями о контроле доступа и учёте действий пользователей. Сохраняемые отчёты (CSV-файлы) являются доказательной базой для проверок. Важно, чтобы процесс был документирован, а скрипт и его конфигурация хранились в системе контроля версий.
4. JIT-администрирование и контроль сессий
Скрипт аудита — инструмент мониторинга, но не управления. Для активного снижения рисков требуется переход к модели Just-In-Time (JIT). В этом подходе постоянное членство в группах типа Domain Admins отсутствует. Привилегии предоставляются на короткое время через отдельную систему управления привилегированным доступом (PAM). Скрипт в этом случае используется для верификации, что после окончания сессии учётная запись была корректно исключена из группы.
Практические шаги для внедрения
- Протестируйте скрипт в изолированной лабораторной среде. Убедитесь, что он корректно работает с учётом особенностей вашего домена (например, с нестандартными именами групп).
- Определите эталонный («разрешённый») состав для каждой привилегированной группы. Этот список должен быть утверждён и зафиксирован.
- Реализуйте механизм сравнения текущего состава с эталонным в скрипте. Рассмотрите возможность отправки алертов при отклонениях.
- Настройте автоматический запуск по расписанию с сохранением зашифрованных журналов на защищённом сервере отчётов, доступ к которому ограничен.
- Включите процедуру реагирования на инциденты, обнаруженные скриптом: кто уполномочен анализировать новые учётные записи в Domain Admins и принимать решение об их удалении или легитимации.
Таким образом, скрипт для аудита групп AD — это не изолированная утилита, а компонент системы контроля привилегий. Его эффективность определяется не сложностью кода, а тем, насколько плотно он встроен в цикл управления безопасностью: постоянный мониторинг, сравнение с эталоном, документирование и реагирование. В контексте российского регулирования это позволяет закрыть один из ключевых векторов атаки и формализовать процесс контроля доступа для аудиторов.