Обеспечение надежности паролей пользователей в Active Directory (AD) — ключевой аспект защиты данных и инфраструктуры домена. Несмотря на рекомендации избегать простых комбинаций, словарных слов или личной информации, многие пользователи продолжают использовать слабые пароли, такие как P@ssw0rd или Pa$$w0rd. Это создает уязвимости, которые могут быть использованы злоумышленниками. В этой статье мы подробно разберем, как провести аудит паролей в Active Directory с использованием PowerShell и модуля DSInternals, чтобы выявить слабые, повторяющиеся или пустые пароли и повысить безопасность домена.
Зачем проводить аудит паролей в Active Directory?
Даже при настроенной доменной политике паролей пользователи могут обходить требования, устанавливая слабые или предсказуемые комбинации. Такие пароли уязвимы для атак перебора (brute-force) или словарных атак. Аудит позволяет:
— Выявить аккаунты с слабыми паролями.
— Найти учетные записи с одинаковыми паролями.
— Обнаружить аккаунты без пароля или с настройкой «пароль никогда не истекает».
— Проверить соответствие политикам безопасности.
Для этого мы будем использовать PowerShell и модуль DSInternals, который предоставляет инструменты для анализа хэшей паролей в базе Active Directory (файл ntds.dit) в онлайн- или офлайн-режиме.
Установка модуля DSInternals для анализа паролей
Модуль DSInternals содержит командлеты для работы с базой данных Active Directory, включая Test-PasswordQuality, который позволяет выявить слабые, одинаковые, пустые пароли или аккаунты с настройкой «пароль не требуется». Модуль работает с хэшами паролей, так как сами пароли в открытом виде в AD не хранятся.
Установка модуля в PowerShell
Для PowerShell версии 5.0 и выше установите модуль из официальной галереи PowerShell:
Install-Module -Name DSInternals
В изолированных системах или для более старых версий PowerShell:
1. Скачайте последнюю версию модуля (например, DSInternals v4.8) с GitHub.
2. Распакуйте архив в одну из папок модулей PowerShell:
— C:\Windows\System32\WindowsPowerShell\v1.0\Modules\DSInternals
— C:\Users\%username%\Documents\WindowsPowerShell\Modules\DSInternals
3. Импортируйте модуль вручную:
Import-Module C:\Path\To\DSInternals\DSInternals.psd1
Если появляется ошибка «cannot be loaded because running scripts is disabled», разрешите выполнение скриптов в текущей сессии:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
Для просмотра доступных командлетов выполните:
Get-Command -Module DSInternals
Создание словаря паролей для аудита
Для проверки паролей потребуется словарь паролей — текстовый файл (например, PasswordDict.txt), содержащий список распространенных или слабых паролей. Вы можете:
— Скачать готовый словарь из интернета (например, списки RockYou или других известных словарей).
— Создать собственный файл, добавив туда популярные пароли, такие как 123456, password, qwerty и т.д.
Сохраните словарь в удобной директории, например, C:\PS\PasswordDict.txt. Модуль DSInternals сравнит хэши паролей пользователей AD с хэшами слов из этого файла.
Поиск слабых паролей с помощью Test-PasswordQuality
Для проведения аудита создайте PowerShell-скрипт, который использует командлет Test-PasswordQuality. Укажите следующие переменные:
— Путь к файлу словаря.
— Имя контроллера домена.
— Доменное имя в формате DN (Distinguished Name).
Пример скрипта:
$DictFile = "C:\PS\PasswordDict.txt"
$DC = "msk-dc01"
$Domain = "DC=softcomputers,DC=ru"
Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile $DictFile -IncludeDisabledAccounts
Этот скрипт:
1. Получает данные об учетных записях с помощью Get-ADReplAccount, включая NT- и LM-хэши паролей, а также их историю.
2. Сравнивает хэши паролей пользователей (включая отключенные аккаунты) с хэшами из словаря.
3. Выводит отчет о качестве паролей.
Пример результата аудита
После выполнения скрипта вы получите отчет, подобный этому:
Офлайн-аудит базы Active Directory
Если требуется проверить пароли без прямого доступа к контроллеру домена, можно выполнить офлайн-анализ файла ntds.dit из резервной копии или теневой копии. Для этого:
1. Получите файл ntds.dit и файл SYSTEM из папки C:\Windows\System32\config контроллера домена.
2. Извлеките загрузочный ключ (BootKey) из файла SYSTEM:
$keyb = Get-BootKey -SystemHiveFilePath 'C:\ADBackup\registry\SYSTEM'
3. Проведите аудит паролей:
Get-ADDBAccount -All -DatabasePath 'C:\ADBackup\ntds.dit' -BootKey $keyb | Test-PasswordQuality -WeakPasswordsFile $DictFile
4. Для экспорта хэшей в файл (например, для анализа в Hashcat):
Get-ADDBAccount -All -DBPath 'C:\ADBackup\ntds.dit' -BootKey $keyb | Format-Custom -View HashcatNT | Out-File C:\PS\adhashes.txt -Encoding ASCII
Дополнительные возможности и рекомендации
Использование старой версии DSInternals
В текущей версии Test-PasswordQuality отсутствует параметр ShowPlainText, который позволял отображать пароли в открытом виде при совпадении с хэшами словаря. Если это необходимо, установите версию 2.23 модуля:
Install-Module -Name DSInternals -RequiredVersion 2.23
Управление слабыми паролями
После выявления учетных записей с слабыми паролями вы можете:
— Сгенерировать новые случайные пароли через PowerShell и принудительно их сменить:
Set-ADAccountPassword -Identity "SOFTCOMPUTERS\aivanov" -NewPassword (ConvertTo-SecureString "NewComplexP@ssw0rd!" -AsPlainText -Force)
— Настроить Azure AD Password Protection для блокировки слабых паролей в локальном Active Directory, создав черный список запрещенных комбинаций.
Регулярный аудит и политики безопасности
Для повышения безопасности домена:
— Проводите аудит паролей регулярно, особенно для учетных записей с Fine-Grained Password Policies.
— Убедитесь, что политики сложности паролей требуют минимум 12–14 символов, сочетание букв, цифр и спецсимволов.
— Отключите настройку «пароль никогда не истекает» для некритичных учетных записей.
— Используйте инструменты мониторинга, такие как Azure AD Password Protection, для предотвращения использования слабых паролей.
Аудит паролей в Active Directory с помощью PowerShell и модуля DSInternals позволяет выявить уязвимости, связанные со слабыми или повторяющимися паролями. Регулярное выполнение таких проверок, использование словарей паролей и внедрение строгих политик безопасности помогут защитить домен от атак и повысить общий уровень безопасности инфраструктуры. Настройте автоматизированные скрипты для периодического анализа и оперативно устраняйте выявленные проблемы, чтобы минимизировать риски.