Аудит Active Directory: типовые ошибки конфигурации и проверки

Большинство взломов домена используют не уязвимости, а ошибки настройки: лишние администраторы, пароли без срока действия, забытые учётные записи служб. Ниже проверки, которые можно выполнить самостоятельно. Все команды только читают данные, но выполняйте их на своём домене и с согласования ответственных.
Нужен модуль PowerShell ActiveDirectory (RSAT). Достаточно прав обычного пользователя домена для большинства запросов.
1. Кто состоит в привилегированных группах
"Domain Admins","Enterprise Admins","Schema Admins","Administrators" | ForEach-Object {
"== $_"
Get-ADGroupMember $_ -Recursive | Select-Object Name, SamAccountName, objectClass
}
Перечень должен быть коротким и состоять из отдельных административных учётных записей, а не из повседневных. Лишние участники — первая находка.
2. Устаревшие и «вечные» учётные записи
$d = (Get-Date).AddDays(-90)
Get-ADUser -Filter {Enabled -eq $true -and LastLogonDate -lt $d} -Properties LastLogonDate |
Select-Object SamAccountName, LastLogonDate
Get-ADUser -Filter {PasswordNeverExpires -eq $true -and Enabled -eq $true} |
Select-Object SamAccountName
Отключите учётные записи, которые не использовались более 90 дней, после согласования с владельцами. Пароли без срока действия допустимы для учётных записей служб, но только с длинным случайным паролем или gMSA.
3. Учётные записи служб с SPN (Kerberoasting)
Get-ADUser -Filter {ServicePrincipalName -like "*"} -Properties ServicePrincipalName, PasswordLastSet, MemberOf |
Select-Object SamAccountName, PasswordLastSet, ServicePrincipalName
Любой пользователь домена может запросить билет для такой учётной записи и подбирать пароль офлайн. Нужны длинные пароли (25+ символов) или gMSA, а также отсутствие у них административных прав.
4. Делегирование Kerberos
Get-ADComputer -Filter {TrustedForDelegation -eq $true} | Select-Object Name
Get-ADUser -Filter {TrustedForDelegation -eq $true} | Select-Object SamAccountName
Неограниченное делегирование разрешено только контроллерам домена. Остальное нужно заменить на ограниченное.
5. Пароль krbtgt
Get-ADUser krbtgt -Properties PasswordLastSet | Select-Object PasswordLastSet
Если пароль не менялся годами, после инцидента он должен быть сменён дважды с паузой между сменами. Порядок смены описан в документации Microsoft; выполняйте его по инструкции, не импровизируя.
6. Локальные администраторы и LAPS
Одинаковый пароль локального администратора на всех машинах позволяет перейти с одного компьютера на все. Решение — Windows LAPS (входит в современные Windows) или Microsoft LAPS. Проверка, что атрибут пароля заполняется:
Get-ADComputer -Filter * -Properties msLAPS-PasswordExpirationTime, ms-Mcs-AdmPwdExpirationTime |
Where-Object { -not $_.'msLAPS-PasswordExpirationTime' -and -not $_.'ms-Mcs-AdmPwdExpirationTime' } |
Select-Object Name
В выводе окажутся компьютеры без LAPS.
7. Подпись SMB и квота присоединения машин
Get-ADObject -Identity (Get-ADDomain).DistinguishedName -Properties 'ms-DS-MachineAccountQuota' |
Select-Object 'ms-DS-MachineAccountQuota'
Get-SmbServerConfiguration | Select-Object RequireSecuritySignature
Значение ms-DS-MachineAccountQuota по умолчанию 10, то есть любой пользователь может добавить в домен до 10 компьютеров. Обычно ставят 0. На контроллерах домена подпись SMB должна быть обязательной.
Инструменты для автоматизации
Те же проверки (и десятки других) собирают готовые средства с отчётом: PingCastle, Purple Knight, BloodHound (для просмотра путей к администратору). Запускайте их только в своём домене и храните отчёты как конфиденциальные: они описывают, как взять домен.
Как проверить результат
После исправлений повторите те же команды и сохраните выводы как контрольные. Проверьте, что вход пользователей и работа служб не нарушены, особенно после смены паролей учётных записей служб. Базовое администрирование Windows: служба обновлений; наблюдение за событиями безопасности: Wazuh.















