Зачем нужны гранулярные политики паролей
В стандартной конфигурации Active Directory политика паролей задаётся через Default Domain Policy и действует одинаково для всех пользователей домена. Это создаёт проблему: требование 12-символьного пароля со сменой каждые 30 дней подходит для администраторов, но избыточно для обычных пользователей. И наоборот — 8 символов со сменой раз в 90 дней слишком слабо для привилегированных учёток.
Fine-Grained Password Policy (FGPP), доступная начиная с Windows Server 2008 (DFL 2008+), решает эту проблему. FGPP позволяет назначать разные политики паролей разным группам пользователей через объекты Password Settings Object (PSO). Типичная схема:
- Администраторы — 14+ символов, смена каждые 30 дней, блокировка после 3 попыток
- Обычные пользователи — 10+ символов, смена каждые 90 дней, блокировка после 5 попыток
- Сервисные учётки — 20+ символов, без смены (managed service accounts), блокировка после 10 попыток
Требования для использования FGPP
Для работы FGPP необходимы следующие условия:
- Функциональный уровень домена (DFL) — Windows Server 2008 или выше
- PSO назначаются на группы безопасности или напрямую на пользователей (не на OU!)
- Настройка требует прав Domain Admins или делегированных прав на контейнер
CN=Password Settings Container,CN=System,DC=domain,DC=com
Проверьте текущий функциональный уровень домена:
# PowerShell
(Get-ADDomain).DomainMode
# Ожидаемый результат: Windows2016Domain или выше
Создание PSO через PowerShell
Password Settings Object (PSO) — это объект AD класса msDS-PasswordSettings, хранящий параметры политики паролей. Каждый PSO имеет приоритет (Precedence) — при конфликте побеждает PSO с наименьшим числом.
PSO для администраторов
Создадим строгую политику для группы Domain Admins:
# Создание PSO для администраторов
New-ADFineGrainedPasswordPolicy -Name "PSO-Admins" `
-DisplayName "Строгая политика для администраторов" `
-Precedence 10 `
-MinPasswordLength 14 `
-PasswordHistoryCount 24 `
-ComplexityEnabled $true `
-ReversibleEncryptionEnabled $false `
-MaxPasswordAge "30.00:00:00" `
-MinPasswordAge "1.00:00:00" `
-LockoutThreshold 3 `
-LockoutDuration "00:30:00" `
-LockoutObservationWindow "00:30:00" `
-ProtectedFromAccidentalDeletion $true
# Назначение PSO на группу
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" -Subjects "Domain Admins"
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" -Subjects "Enterprise Admins"
Параметр -PasswordHistoryCount 24 запрещает повторное использование последних 24 паролей. -MinPasswordAge "1.00:00:00" предотвращает циклическую смену паролей для обхода истории.
PSO для обычных пользователей
Умеренная политика для стандартных сотрудников:
# Создание PSO для обычных пользователей
New-ADFineGrainedPasswordPolicy -Name "PSO-Users" `
-DisplayName "Стандартная политика для пользователей" `
-Precedence 20 `
-MinPasswordLength 10 `
-PasswordHistoryCount 12 `
-ComplexityEnabled $true `
-ReversibleEncryptionEnabled $false `
-MaxPasswordAge "90.00:00:00" `
-MinPasswordAge "1.00:00:00" `
-LockoutThreshold 5 `
-LockoutDuration "00:15:00" `
-LockoutObservationWindow "00:15:00" `
-ProtectedFromAccidentalDeletion $true
# Назначение на группу Domain Users
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Users" -Subjects "Domain Users"
PSO для сервисных учётных записей
Для сервисных аккаунтов — длинный пароль без обязательной смены:
# Создание группы для сервисных учёток
New-ADGroup -Name "SVC-Accounts" -GroupScope Global -GroupCategory Security `
-Path "OU=Groups,DC=example,DC=com"
# Создание PSO
New-ADFineGrainedPasswordPolicy -Name "PSO-ServiceAccounts" `
-DisplayName "Политика для сервисных учёток" `
-Precedence 15 `
-MinPasswordLength 20 `
-PasswordHistoryCount 24 `
-ComplexityEnabled $true `
-MaxPasswordAge "0.00:00:00" `
-MinPasswordAge "0.00:00:00" `
-LockoutThreshold 10 `
-LockoutDuration "01:00:00" `
-LockoutObservationWindow "01:00:00" `
-ProtectedFromAccidentalDeletion $true
# Назначение
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-ServiceAccounts" -Subjects "SVC-Accounts"
Значение MaxPasswordAge "0.00:00:00" означает «пароль не истекает». Для сервисных учёток это допустимо при условии использования длинных паролей (20+ символов) и мониторинга попыток входа.
Создание PSO через Active Directory Administrative Center
Для тех, кто предпочитает графический интерфейс, FGPP можно настроить через ADAC (Active Directory Administrative Center).
Пошаговая инструкция
Откройте ADAC и выполните следующие шаги:
- В левой панели перейдите в
domain (local) → System → Password Settings Container - В правой панели «Tasks» нажмите «New → Password Settings»
- Заполните параметры:
- Name: PSO-Admins
- Precedence: 10
- Minimum password length: 14
- Password history count: 24
- Maximum password age: 30 дней
- Account lockout: 3 попытки / 30 минут
- В разделе «Directly Applies To» нажмите «Add» и выберите группу «Domain Admins»
- Нажмите «OK» для создания PSO
ADAC удобен для визуального контроля существующих PSO, но для массового создания и модификации рекомендуется PowerShell.
Проверка и диагностика применённых политик
После создания PSO важно убедиться, что они корректно применяются к целевым пользователям. Active Directory выбирает политику по следующему алгоритму: если на пользователя назначено несколько PSO (через разные группы), применяется PSO с наименьшим Precedence.
Команды диагностики
Проверка эффективной политики для конкретного пользователя:
# Какая политика применяется к пользователю?
Get-ADUserResultantPasswordPolicy -Identity "admin.ivanov"
# Список всех PSO в домене
Get-ADFineGrainedPasswordPolicy -Filter *
# Кому назначен конкретный PSO?
Get-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins"
# Детали конкретного PSO
Get-ADFineGrainedPasswordPolicy -Identity "PSO-Admins" | Format-List *
# Проверка: попадает ли пользователь в группу с PSO?
Get-ADPrincipalGroupMembership -Identity "admin.ivanov" | Where-Object {
$groups = Get-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins"
$groups.Name -contains $_.Name
}
Если Get-ADUserResultantPasswordPolicy возвращает пустой результат, к пользователю применяется Default Domain Policy.
Рекомендации по проектированию политик
Грамотное проектирование политик паролей — баланс между безопасностью и удобством пользователей. Слишком строгие требования приводят к тому, что пользователи записывают пароли на стикерах.
Современные рекомендации NIST и Microsoft
Актуальные рекомендации (NIST SP 800-63B, Microsoft Security Baseline) отличаются от традиционных подходов:
| Параметр | Традиционный подход | Современный подход (NIST) |
|---|
| Минимальная длина | 8 символов | 12-14 символов (или парольная фраза) |
| Complexity | Обязательно | Необязательно при длине 12+ |
| Смена пароля | Каждые 60-90 дней | Только при компрометации |
| Блокировка | 3-5 попыток | 5-10 попыток + MFA |
NIST рекомендует отказаться от обязательной периодической смены паролей, так как это снижает качество паролей. Вместо этого — длинные парольные фразы + MFA. Если бизнес-процессы требуют смену — установите 180-365 дней для обычных пользователей.
Аудит и мониторинг событий паролей
Настройка аудита позволяет отслеживать попытки взлома, блокировки учётных записей и смену паролей.
Ключевые события для мониторинга
Включите аудит через Group Policy и отслеживайте следующие события в Security Log:
- Event ID 4723 — пользователь попытался изменить пароль учётной записи
- Event ID 4724 — администратор сбросил пароль пользователя
- Event ID 4740 — учётная запись заблокирована
- Event ID 4767 — учётная запись разблокирована
- Event ID 4771 — предварительная аутентификация Kerberos не удалась (неверный пароль)
# PowerShell: поиск блокировок за последние 24 часа
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4740
StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, @{
Name='Account'; Expression={$_.Properties[0].Value}
}, @{
Name='Source'; Expression={$_.Properties[1].Value}
} | Format-Table -AutoSize
Оставить комментарий