Главная

Friday, 16 August 2019

Блокировка пользователя в домене и Powershell.

Всем привет.

В работе администратора домена Active Directory довольно часто возникает необходимость найти причину блокировки пользователя. Иногда причиной блокировки пользователя является заражённый вирусом хост - в таких случаях особо важна скорость обнаружения источника проблемы. В PowerShell есть прекрасный командлет Get-WinEvent который позволяет решать данную задачу за пару минут даже в большом домене.

Но для поиска причины блокировки пользователей потребуется некоторая настройка аудита безопасности на контроллерах домена. Должны быть включены следующие категории аудита на контроллерах домена:
  • Audit Account Logon Events (Вход учётной записи), отказ, для события 4771 Kerberos pre-authentication failed;
  • Audit Logon Events (Вход/Выход) Logon (Аудит входа в систему), отказ, для события  4625 An account failed to log on;
  • Audit Logon Events (Вход/Выход) Account Lockout (Аудит блокировки учётных записей), успех, для события  4740 Account locked.


В PowerShell я могу проверить кто сейчас заблокирован просто:
Search-ADAccount -UsersOnly –LockedOut

Также просто разблокировать пользователя:
Unlock-ADAccount -Identity test


Теперь посмотрим когда же пользователь заблокировался и с какой станции.

$Username = "test"

$Pdce = (Get-AdDomain).PDCEmulator
$GweParams = @{
"Computername" = $Pdce
"LogName" = "Security"
"FilterXPath" = "*[System[EventID=4740] and EventData[Data[@Name='TargetUserName']='$Username']]"
}

$Events = Get-WinEvent @GweParams
$Events | foreach {$_.Properties[1].value + ' ' + $_.TimeCreated}


Более подробный запрос для нескольких аккаунтов можно выполнить так:

param (
    $User,
    $PDC = "FORZA01",
    $Count = 5
 )

$Username = "test"

    $FilterHash = @{}
    $FilterHash.LogName = "Security"
    $FilterHash.ID = "4740"
    if ($User) {
        $FilterHash.data =$User
        $Count = 1
    }
   
    $FilterHash2 = @{}
    $FilterHash2.LogName = "Security"
    $FilterHash2.ID = @("4625", "4771")

    Get-WinEvent -Computername $PDC -FilterHashtable $FilterHash -MaxEvents $Count | ForEach-Object {
        $ResultHash = @{}
        $ResultHash.Username = ([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "TargetUserName"} | %{$_."#text"}
        $ResultHash.CallerFrom = ([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "TargetDomainName"} | %{$_."#text"}
        $ResultHash.LockTime = $_.TimeCreated

        $FilterHash2.data = $Username
        Get-WinEvent -Computername $PDC -FilterHashtable $FilterHash2 -MaxEvents $Count | ForEach-Object {
            $ResultHash.SrcAdrHost = ([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "IpAddress"} | %{$_."#text"}
            $ResultHash.LogonType = ([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "LogonType"} | %{$_."#text"}
            $ResultHash.FalureTime = $_.TimeCreated
            $ResultHash
        }
    }



Полная версия запроса и алгоритм построения смотрим тут: https://habr.com/ru/post/171701/

Что еще нам может помочь?

Для мониторинга блокировок пользователей в домене можно бесплатно использовать утилиту Netwrix Account Examiner. Netwrix Account Examiner инсталлирует свой сервис который работает независимо от главного модуля. Собственно Netwrix Account Examiner получает информацию от работы своего сервиса (службы). Главное окно показывает кто заблокирован, кто был заблокирован и с какого хоста был заблокирован. Тут же можно проверить причину блокировки и собственно выполнить само разблокирование аккаунта.


Что полезного в Netwrix Account Examiner есть еще? В установках, вкладка Notifications, можно указать список адресов исполнителей которым будут приходить сообщения о блокировке аккаунта.


Еще более интересная возможность во вкладке Remote Control, где можно указать пароль для автоматической разблокировки аккаунта. В этом случае вам приходит письмо следующего содержания.


В поле письма Тема будет указано: "Account Locked Out: FORZA\test"

В самом тексте письма увидим следующее:

Account Name: FORZA\test
Workstation: WKS-DENZA
Time: 13.08.2019 16:12:52

To unlock the account, reply to this message with UNLOCK:passcode in the message body (where ‘passcode’ is  the passcode assigned by the administrator).
WARNING: Do not modify this message’s contents or subject.

Пишем ответное письмо для удаленной разблокировки аккаунта FORZA\test.

В теме ответе будет - RE: Account Locked Out: FORZA\test 
В тексте письма - UNLOCK:pls-unlockme

Следует заметить что адресат от которого включена доставка сообщений о блокировке аккаунта и адресат на которого шлем письмо о разблокировке аккаунта должны быть разными.

Кстати, если в поле источника блокировки указано типа "FORZA-EXCHMBX01" это значит что блокирование аккаунта происходит на уровне обмена почтового клиента и сервера
MS Exchange, что бывает даже чаще чем "ой, я забыла пароль".


Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?