Как определить причину блокировки учётной записи в домене Active Directory
В этой статье мы покажем вам, как отслеживать события блокировки учётной записи пользователя на контроллерах домена Active Directory, определять с какого компьютера и какой программой постоянно блокируется учётная запись. Чтобы найти источник блокировки учётной записи, вы можете использовать журнал безопасности Windows, скрипты PowerShell или средство блокировки и управления учётной записью MSFT (Lockoutstatus.exe).
Разница между отключённой, просроченной и заблокированной учётной записью
Данная статья посвящена заблокированным аккаунтом (в английской версии это locked out). Но кроме блокировки аккаунта, возможны следующие причины, почему пользователь не может войти в домен:
- аккаунт отключён
- аккаунт просрочен
- пользователь ограничен определённым временем или компьютером для входа
Отключённые аккаунты (disabled)
Администратор домена может вручную отключить (деактивировать) аккаунт пользователя. Если пользователь отключён, то будет выведено сообщение:
Ваша учётная запись отключена. Обратитесь к системному администратору.
Включение аккаунта выполняется администратором (вручную или через скрипт), но не может быть выполнено автоматически, например, по истечении определённого срока действия.
Заблокированные аккаунты (locked out)
Учётная запись может быть заблокирована автоматически в соответствии с политикой блокировки учётной записи организации. Если пользователь ввёл неправильный пароль более определённого количества раз (порог устанавливается политикой паролей), то его аккаунт автоматически блокируется на время, которое также устанавливается политикой паролей.
На период блокировки пользователь будет получать следующее сообщение при каждой попытке входа:
Учётная запись заблокирована и не может использоваться для входа в сеть.
Блокировка может быть снята автоматически после истечения сроки блокировки, установленной в политике паролей домена. Также администратор может ускорить этот процесс и снять блокировку вручную.
Если время разблокировки в групповой политике пароля установлено на 0, то такая учётная запись никогда не будет разблокирована автоматически, для её разблокировки требуется действие администратора домена.
Учётные записи с истекшим сроком действия (expired)
Учётная запись пользователя может быть бессрочной или действующий в течение определённого времени. Удобно установить срок действия учётной записи для временных пользователей, которые должны иметь доступ в домен, например, на период действия контракта с ними. При установки срока истечения действия, системный администратор не пропустит момент когда нужно отключить пользователя.
Запрет доступа по другим причинам
Пользователю может быть разрешено входить только на определённые компьютеры и/или только в определённые часы. Пример сообщения, когда пользователю не разрешено выполнить вход на этом компьютере:
Вы не можете пользоваться этим компьютером из-за ограничений вашей учётной записи. Попробуйте воспользоваться другим компьютером.
Пример сообщения, когда пользователь пытается войти в неурочное время или день:
Вы не можете сейчас войти в систему из-за ограничений вашей учётной записи. Попробуйте ещё раз позже.
Данные ограничения могут перестать действовать в определённые часы или на определённых компьютерах. Эти ограничения устанавливает и снимает администратор домена.
Учётная запись заблокирована и не может использоваться для входа в сеть
Политика безопасности аккаунтов домена в большинстве организаций требует обязательной блокировки учётной записи пользователя Active Directory, если неверный пароль вводился несколько раз подряд. Обычно учётная запись блокируется контроллером домена на несколько минут (5–30), в течение которых пользователь не может войти в домен AD. Через некоторое время (установленное политикой безопасности домена) учётная запись пользователя автоматически разблокируется. Временная блокировка учётной записи AD снижает риск атак методом переборы (брут-форс) на пароли учётных записей пользователей AD.
Если учётная запись пользователя в домене заблокирована, при попытке входа в Windows появляется предупреждение:
Учётная запись заблокирована и не может использоваться для входа в сеть
В Windows на английском языке сообщение выглядит так:
The referenced account is currently locked out and may not be logged on to ….
Как проверить, заблокирована ли учётная запись пользователя?
Проверить, заблокирована ли учётная запись, можно в графической консоли ADUC или с помощью командлета Get-ADUser из модуля Active Directory для PowerShell:
Get-ADUser -Identity Alex -Properties LockedOut,DisplayName | Select-Object samaccountName,displayName,Lockedout
Учётная запись в данный момент заблокирована и не может использоваться для аутентификации в домене (Lockedout = True).
Вы можете вывести список всех заблокированных на данный момент учётных записей в домене с помощью командлета Search-ADAccount:
Search-ADAccount -LockedOut
Вы можете разблокировать учётную запись вручную с помощью консоли ADUC, не дожидаясь автоматической разблокировки. Найдите учётную запись пользователя, щёлкните правой кнопкой мыши и выберите Properties («Свойства»). Перейдите на вкладку Account («Учётная запись») и установите флажок Unlock account. This account is currently locked out on this Active Directory Domain Controller (в русскоязычной версии «Разблокируйте учётную запись. Учётная запись на этом контроллере домена Active Directoryв на данный момент заблокирована»). Затем кликните «ОК».
Вы также можете сразу разблокировать нужную учётную запись, используя следующую команду PowerShell:
Get-ADUser -Identity Alex | Unlock-ADAccount
Вы можете проверить время блокировки учётной записи, количество неудачных попыток ввода пароля, время последнего успешного входа в систему в свойствах учётной записи в консоли ADUC (на вкладке Attribute Editor «Редактора атрибутов»)
или с помощью PowerShell:
Get-ADUser Alex -Properties Name,lastLogonTimestamp,lockoutTime,logonCount,pwdLastSet | Select-Object Name,@{n='LastLogon';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},@{n='lockoutTime';e={[DateTime]::FromFileTime($_.lockoutTime)}},@{n='pwdLastSet';e={[DateTime]::FromFileTime($_.pwdLastSet)}},logonCount
Политики блокировки учётных записей в домене Active Directory
Политики блокировки учётных записей обычно устанавливаются в Default Domain Policy для всего домена с помощью оснастки gpmc.msc. Необходимые политики можно найти в Computer configuration→ Policies→ Windows Settings → Security Settings → Account Policies → Account Lockout Password (в русскоязычной версии это соответственно Конфигурация компьютера → Политики → Конфигурация Windows → Параметры безопасности → Политики учетных записей → Политика блокировки учётной записи). Это следующие политики:
- Account Lockout Threshold (Пороговое значение блокировки) – количество неудачных попыток входа в систему (с неправильным паролем), которое может быть выполнено пользователем до блокировки его учётной записи;
- Account Lockout Duration (Продолжительность блокировки учётной записи) — как долго будет заблокирована учётная запись, если пользователь несколько раз ввёл неверный пароль;
- Reset account lockout counter after (Время до сброса счётчика блокировки) — количество минут, по истечении которых счётчик порога блокировки учётной записи будет сброшен.
Чтобы защитить учётные записи пользователей вашего домена от взлома пароля, рекомендуется использовать надёжные пароли пользователей в AD (длина пароля не менее 8 символов и включение требований к сложности пароля). Это настраивается в разделе Password Policy («Политика паролей»): Password must meet complexity requirements (Пароль должен отвечать требованиям сложности) и Minimum password length (Минимальная длина пароля). Периодически нужно проверять пароли пользователей.
Случаи, когда пользователь забывает пароль и сами вызывают блокировку учётной записи, происходят довольно часты. Если пользователь недавно сменил пароль и забыл его, вы можете сбросить его. Но в некоторых случаях блокировка учётной записи происходит без какой-либо очевидной причины. То есть пользователь заявляет, что никогда не ошибался при вводе пароля, но его учётная запись по каким-то причинам заблокирована. Администратор может разблокировать аккаунт вручную по запросу пользователя, но через некоторое время ситуация может повториться.
Чтобы решить проблему пользователя, администратору необходимо выяснить, с какого компьютера и программы учётная запись пользователя в Active Directory была заблокирована.
Политики аудита входа в систему для контроллеров домена
Чтобы включить фиксацию события блокировки учётной записи в журналах контроллера домена, необходимо активировать следующие политики аудита для контроллеров домена. Перейдите в раздел GPO Computer Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy → Logon/Logoff и включите следующие политики:
- Audit Account Lockout
- Audit Logon
- Audit Logoff
В русскоязычной версии это соответственно Конфигурация компьютера → Политики → Конфигурация Windows → Параметры безопасности → Конфигурация расширенной политики аудита → Политика аудита → Вход/Выход, политики:
- Аудит блокировки учетной записи
- Аудит входа в систему
- Аудит выхода из системы
Самый простой способ включить эту политику — через консоль gpmc.msc, отредактировав Default Domain Controller Policy или используя Default Domain Policy на уровне всего домена.
Обратите внимание, что для использования параметров «Конфигурация расширенной политики аудита» также необходимо в Локальной политике безопасности (secpol.msc) включить по пути Параметры безопасности → Локальные политики → Параметры безопасности параметр «Аудит: принудительно переопределяет параметры категории политики аудита параметрами подкатегории политики аудита (Windows Vista или следующие версии)». Это значение по умолчанию установлено на «Включён», поэтому если вы не отключали эту политику, то вам не нужно о ней беспокоиться.
Идентификатор события блокировки учётной записи 4740
Прежде всего, администратор должен выяснить, с какого компьютера или сервера происходят попытки ввода неверного пароля, и продолжить блокировку учётных записей компьютеров.
Если ближайший к пользователю контроллер домена определяет, что пользователь пытается войти в систему с недопустимыми учётными данными, он перенаправляет запрос проверки подлинности на контроллер домена с ролью FSMO эмулятора основного контроллера домена (этот конкретный контроллер домена отвечает за обработку блокировок учётных записей). Если аутентификация на PDC завершается неудачно, он отвечает на первый DC, что аутентификация невозможна. Если количество неудачных проверок подлинности превышает значение, установленное для домена в политике Account Lockout Threshold (Пороговое значение блокировки), учётная запись пользователя временно блокируется.
В этом случае событие с EventID 4740 записывается в журнал безопасности обоих контроллеров домена. Событие содержит DNS-имя (IP-адрес) компьютера, с которого пришел первоначальный запрос на авторизацию пользователя. Чтобы не анализировать журналы на всех контроллерах домена, проще всего искать события блокировки в журнале безопасности на PDC контроллера домена. Вы можете найти PDC в своём домене следующим образом:
(Get-AdDomain).PDCEmulator
События блокировки учётной записи домена можно найти в журнале безопасности на контроллере домена. Чтобы его увидеть, запустите Event Viewer («Просмотр событий»), его можно открыть в командной строке:
eventvwr.msc
В окне Event Viewer («Просмотр событий») перейдите по пути Event Viewer (Local) → Windows Logs → Security (в русскоязычной версии это Просмотр событий (локальный) → Журналы Windows → Безопасность).
В Event Viewer («Просмотр событий») отфильтруйте журнал безопасности по Event ID («Код события») указав значение 4740, для этого нажмите Filter Current Log («Фильтр текущего журнала») и введите в поле <All Event Ids> («Все коды событий») значение 4740.
Вы должны увидеть список последних событий блокировки учётной записи. Найдите событие с нужной вам учётной записью пользователя (имя пользователя указано в значении поля Account Name («Имя учётной записи»). В описании события вы увидите строку A user account was locked out («Учетная запись пользователя была заблокирована»).
Подсказка: в большой среде AD в журнал безопасности на контроллерах домена записывается большое количество событий, которые постепенно перезаписываются новыми. Поэтому рекомендуется увеличить максимальный размер журнала на контроллерах домена и как можно скорее приступить к поиску источника блокировки.
Откройте найденное событие. Имя компьютера (сервера), с которого была произведена блокировка, указывается в поле Caller Computer Name. В моём случае имя компьютера — HACKWARE-WIN.
Как с помощью PowerShell найти компьютер на котором была заблокирована учётная запись
Вы можете использовать следующий скрипт PowerShell, чтобы найти источник блокировки учётной записи конкретного пользователя в журналах событий PDC. Этот скрипт возвращает время блокировки и имя компьютера, с которого она произошла (замените Alex на имя интересующего вас пользователя):
$Usr = 'Alex' $Pdc = (Get-AdDomain).PDCEmulator $ParamsEvn = @{ 'Computername' = $Pdc 'LogName' = 'Security' 'FilterXPath' = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Usr']]" } $Evnts = Get-WinEvent @ParamsEvn $Evnts | ForEach-Object {$_.Properties[1].value + ' ' + $_.TimeCreated + ', UserName: ' + $Usr}
Пример полученных данных:
HACKWARE-WIN 09/29/2021 07:31:59 HACKWARE-WIN 09/29/2021 06:53:12 HACKWARE-WIN 09/29/2021 05:44:18
Если вы хотите ограничить вывод журнала, например, только последними двумя днями, то используйте следующий скрипт:
$Usr = 'Alex' $Date = (Get-Date).AddDays(-2) $Evnts = Get-WinEvent -FilterHashtable @{ LogName='Security'; StartTime=$Date; Id='4740'; Data="$Usr"; } $Evnts | ForEach-Object {$_.Properties[1].value + ' ' + $_.TimeCreated + ', UserName: ' + $_.Properties[0].value}
Точно так же вы можете опросить все контроллеры домена в Active Directory из PowerShell:
$Usr = 'MiAl' Get-ADDomainController -Filter * | Select-Object -exp hostname | % { $ParamsEvn = @{ 'Computername' = $Pdc 'LogName' = 'Security' 'FilterXPath' = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Usr']]" } $Evnts = Get-WinEvent @ParamsEvn $Evnts | ForEach-Object {$_.MachineName + " " + $_.Properties[1].value + ' ' + $_.TimeCreated + ', UserName: ' + $_.Properties[0].value} }
Microsoft Account Lockout and Management Tools (Инструменты блокировки и управления учётной записью от Microsoft)
Чтобы найти источник блокировки учётной записи пользователя, вы можете использовать набор инструментов Microsoft Account Lockout and Management Tools, а именно инструмент Lockoutstatus.exe (его можно скачать здесь). Этот графический инструмент проверяет состояние блокировки учётной записи и событий блокировки на всех контроллерах домена.
Запустите средство Lockoutstatus.exe, укажите имя заблокированной учётной записи (Target User Name) и имя домена (Target Domain Name).
Появившийся список будет содержать список контроллеров домена и статус учётной записи (Locked или Non Locked). Кроме того, отображается время блокировки и компьютер, на котором эта учётная запись заблокирована (Orig Lock), но в моём случае компьютер, который стал причиной блокировки, показан неверно.
Атрибуты badPwdCount и LastBadPasswordAttempt не реплицируются между контроллерами домена.
Вы можете разблокировать учётную запись пользователя или изменить пароль прямо из окна Lockoutstatus.
Основным недостатком инструмента LockoutStatus является то, что он опрашивает все контроллеры домена, некоторые из них могут быть недоступны, что вызывает задержку в выдачи результатов.
Как отследить, какой процесс блокирует учётную запись домена
Итак, мы выяснили, с какого компьютера или сервера была заблокирована учётная запись. Теперь было бы здорово узнать, какая программа или процесс являются источником блокировки учётной записи.
Часто пользователи начинают жаловаться на блокировку своих учётных записей домена после изменения паролей. Это говорит о том, что старый (неправильный) пароль сохраняется в определённой программе, скрипте или службе, которая периодически пытается аутентифицироваться на контроллере домена с неверным паролем. Рассмотрим наиболее распространённые места, в которых пользователь мог сохранить старый пароль:
- Подключённые сетевые диски (через net use);
- Работы Windows Task Scheduler (Планировщика заданий Windows);
- Службы Windows, настроенные для запуска из учётной записи домена;
- Сохранённые учётные данные в Credential Manager (Диспетчере учётных данных) (в Панели управления);
- Браузеры;
- Мобильные устройства (например, те, которые используются для доступа к корпоративному почтовому ящику);
- Программы с автоматическим входом или настроенная функция автоматического входа в Windows;
- Отключённые/незанятые сеансы RDP на других компьютерах или серверах RDS (поэтому рекомендуется установить ограничения для сеансов RDP);
Подсказка: существует ряд сторонних инструментов (в основном коммерческих), которые позволяют администратору проверять удалённый компьютер и определять источник блокировки учётной записи. В качестве достаточно популярного решения отметим Lockout Examiner от Netwrix.
Чтобы выполнить подробный аудит блокировки учётной записи на найденном компьютере, необходимо включить ряд локальных политик аудита Windows. Для этого откройте локальный редактор групповой политики (gpedit.msc) на компьютере (на котором вы хотите отслеживать источник блокировки) и включите следующие политики в разделе Computer Configurations → Windows Settings → Security Settings → Local Policies → Audit Policy:
- Audit process tracking: Success , Failure
- Audit logon events: Success , Failure
В русскоязычной версии это соответственно: Конфигурации компьютера → Конфигурация Windows → Параметры безопасности → Локальные политики → Политика аудита:
- Аудит отслеживания событий: Успех, Отказ
- Аудит событий входа в систему: Успех, Отказ
Дождитесь следующей блокировки учётной записи и найдите события с идентификатором события 4625 в журнале безопасности. В нашем случае это событие выглядит так:
An account failed to log on. Failure Reason: Account locked out.
На русском это:
Учетной записи не удалось выполнить вход в систему. Причина ошибки: Учетная запись блокирована.
Как видно из описания события, источником блокировки учётной записи является процесс mssdmn.exe (компонент Sharepoint). В этом случае пользователю необходимо обновить пароль на веб-портале Sharepoint.
После завершения анализа и выявления и устранения причины блокировки не забудьте отключить локальные политики аудита.
Если вам по-прежнему не удаётся найти источник блокировки учётной записи на определённом компьютере, просто попробуйте переименовать имя учётной записи пользователя в Active Directory. Обычно это наиболее эффективный метод защиты от внезапных блокировок конкретного пользователя, если вы не смогли установить источник блокировки.
Вы также можете вывести список событий с кодом 4625 в PowerShell:
Get-WinEvent -FilterHashtable @{ LogName='Security'; Id='4625'; }
Следующую команду вы можете использовать для вывода событий блокировки для конкретного пользователя (впишите его вместо MiAl):
Get-WinEvent -FilterHashtable @{ LogName='Security'; Id='4625'; Data="MiAl" }
Следующая команда выведет подробную информацию о каждом событии блокировки для указанного пользователя (в том числе процесс, вызвавший блокировку):
Get-WinEvent -FilterHashtable @{ LogName='Security'; Id='4625'; Data="MiAl" } | Format-List
Эта команда аналогична предыдущей, но покажет события только за последние 2 дня:
$Date = (Get-Date).AddDays(-2); Get-WinEvent -FilterHashtable @{ LogName='Security'; Id='4625'; Data="MiAl"; StartTime=$Date; } | Format-List
Связанные статьи:
- Как установить и использовать Модуль Active Directory для Windows PowerShell (75%)
- Get-ADUser: поиск сведений о пользователях и фильтр пользователей по их свойствам в Active Directory (62.5%)
- LAPS: управление паролями локальных администраторов на компьютерах домена (62.5%)
- Настройка политики паролей домена в Active Directory (62.5%)
- Fine-Grained Password Policy: Как создать детальную политику паролей в Active Directory (62.5%)
- Актуализация настроек групповой политики на компьютерах домена Windows (RANDOM - 50%)