Задача:
Необходимо найти все заблокированные учетные записи в Microsoft Windows.
Проблема актуальна для доменов с большим количеством пользователей, где нереально просмотреть все учетные записи вручную.
Решение 1:
Можно воспользоваться готовым скриптом PowerShell, запустив его на контроллере домена:
Спойлер
Код: Выделить всё
add-pssnapin "Quest.ActiveRoles.ADManagement"
$WshShell = New-Object -ComObject wscript.shell
$Body1 = Get-QADUser -locked
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”`n”
$Body1 = $Body1 | Select name,DN, canonicalName,userPrincipalName, title, displayName,sAMAccountName,givenName,sn, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"****************************`n" -replace “;”,”`n”
$PopUp = $WshShell.popup("$Body1",0,"Заблокированные учетные записи",1)
$Body1 = Get-QADUser -disabled
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body1 = $Body1 | Select name,userPrincipalName, sAMAccountName, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$PopUp = $WshShell.popup("$Body1",0,"Отключенные учетные записи",1)
$Body1 = Get-QADUser -inactivefor 30 -disabled:$false
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body1 = $Body1 | Select name,userPrincipalName, sAMAccountName, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$PopUp = $WshShell.popup("$Body1",0,"Неактивные в течение 30 дней учетные записи",1)
$Body1 = Get-QADUser -inactive -disabled:$false
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body1 = $Body1 | Select name,userPrincipalName, sAMAccountName, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$PopUp = $WshShell.popup("$Body1",0,"Неактивные учетные записи",1)
$Body1 = Get-QADUser -deleted
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body1 = $Body1 | Select name,userPrincipalName, sAMAccountName, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$PopUp = $WshShell.popup("$Body1",0,"Удаленные учетные записи",1)
Этот скрипт отобразит последовательно пять окон, в которых будут отображены:
-
Заблокированные учетные записи
-
Отключенные учетные записи
-
Неактивные в течение 30 дней, но НЕ отключенные учетные записи
-
Учетные записи, которые никогда не были активными и при этом НЕ отключены
-
Удаленные учетные записи
Вариант скрипта, который посылает те же данные на электронную почту:
Спойлер
Код: Выделить всё
$Subject = “Информация об аккаунтах:"
$Server = “smtp.domain.ua”
$From = “noreplay@domain.ua”
$To = “it@domain.ua”
$encoding = [System.Text.Encoding]::UTF8
add-pssnapin "Quest.ActiveRoles.ADManagement"
$Body1 = Get-QADUser -locked
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”`n”
$Body1 = $Body1 | Select name,DN, canonicalName,userPrincipalName, title, displayName,sAMAccountName,givenName,sn, ";"
$Body1 = $Body1 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"****************************`n" -replace “;”,”`n”
$Theme1 = "Заблокированные учетные записи:`n"
$Body2 = Get-QADUser -disabled
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body2 = $Body2 | Select name,userPrincipalName, sAMAccountName, ";"
$Body2 = $Body2 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$Theme2 = "Отключенные учетные записи:`n"
$Body3 = Get-QADUser -inactivefor 30 -disabled:$false
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body3 = $Body3 | Select name,userPrincipalName, sAMAccountName, ";"
$Body3 = $Body3 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$Theme3 = "Неактивные в течение 30 дней учетные записи:`n"
$Body4 = Get-QADUser -inactive -disabled:$false
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body4 = $Body4 | Select name,userPrincipalName, sAMAccountName, ";"
$Body4 = $Body4 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$Theme4 = "Неактивные учетные записи:`n"
$Body5 = Get-QADUser -deleted
#$Body1 = $Body1 -replace “;”,”`n” -replace “^”,”,”
$Body5 = $Body5 | Select name,userPrincipalName, sAMAccountName, ";"
$Body5 = $Body5 -replace “@{” -replace “}” -replace “=”, “: ” -replace “;:”,"`n"
$Theme5 = "Удаленные учетные записи:`n"
Send-MailMessage -From $From -To $To -SmtpServer $server -Body “$Theme1 $Body1 `n $Theme2 $Body2 `n $Theme3 $Body3 `n $Theme4 $Body4 `n $Theme5 $Body5” -Subject $Subject -Encoding $encoding
Скрипты можно скачать отсюда:
Для выполнения этих скриптов дополнительно необходимо установить на контроллере домена ActiveRoles Management Shell for Active Directory
Это дополнение для 32-х битных систем так же можно скачать здесь.
Решение 2:
Можно просмотреть в журналах MS Windows записи о блокировке учетной записи.
В журнале безопасности, для отслеживания подобных событий, существует запись с кодом 680, от источника Security, категории Account Logon.
В этой записи показана информация о том в какое время и с какого компьютера была предпринята попытка ввода неверного пароля. Конечно есть способ реагировать на событие немедленно. Если вы отслеживаете появления подобных записей и своевременно реагируете на них, то определить источник проблемы будет просто.
Но, может так случиться, что таких записей ОГРОМНОЕ множество. И никто не реагирует на них немедленно, а расследует инциденты потом. Пользователи часто ошибаются с вводом пароля. И не существует простого способа определить точное время того, когда аккаунт был заблокирован. Как правило мы узнаем об этом через некоторое время, от самого пользователя.
А иногда просто необходимо получить информацию о заблокированных учетных записях, не роясь долго в журналах безопасности все контроллеров доменов.
В решении проблемы нам может помочь утилита Microsoft Account Lockout Status
которая входит в пакет утилит Account Lockout and Management Tools. Утилита была выпущена еще в 2003 году. Удивительно, что спустя много лет она все еще востребована.
Подробное описание пакета есть здесь.
Принцип работы утилиты заключается в том, что она анализирует журналы событий на всех контроллерах домена в сети и определяет на каком контроллере произошла блокировка, в какое время, а так же предоставляет дополнительную информацию, которая может помочь нам в расследовании. Так же утилита может помочь снять блокировку с учетной записи и многое другое.
Пример работы с утилитой Account Lockout and Management Tools:
Чтобы получить список заблокированных пользователей, необходимо:
-
Получить список всех контроллеров домена (Gets All DCs)
-
Выделить все КД для поиска(Selects all DCs for searching)
-
Отметить "Журнал безопасности" (Selects the Security Log)
-
Отметить "Аудит успехов" и "Аудит отказов" (Selects Success and Failure Audits)
-
Указать специфические коды событий "529", "539" и "644" (Sets the Specific IDs to 529 539 644)
В результате выполнения откроется папка с обработанными журналами. Каждому серверу соответствует свой журнал: SRV02-Security_LOG.txt - для сервера "SRV02".
Открываем обработанный журнал, и видим:
В этой выборке просматривать информацию о необходимом нам событии блокировки учетной записи.