Поиск по сайту:

Проверка истории входов пользователей в домен Active Directory с помощью PowerShell


Существует несколько различных инструментов для получения информации о времени входа пользователя в домен Active Directory. Время последней успешной аутентификации пользователя в домене AD можно получить из атрибута пользователя lastLogon (он обновляется только на контроллере домена, на котором проходит аутентификация пользователя) или lastLogonTimpestamp. > атрибут (он реплицируется между контроллерами домена в домене, но по умолчанию только через 14 дней). Вы можете проверить значение атрибута пользователя с помощью редактора атрибутов AD или с помощью командлета PowerShell Get-ADUser. Однако иногда вам может потребоваться просмотреть историю активности пользователей (входов в систему) в домене за длительный период времени.

Информацию об успешных событиях входа (аутентификации) пользователя можно получить из журналов контроллера домена. В этой статье мы покажем, как отслеживать историю входов пользователей в домен с помощью PowerShell. Таким образом можно получить полную историю активности пользователей в домене, время начала работы пользователя и входа в систему на компьютерах.

Политика аудита входа пользователей Active Directory

Чтобы информация об успешном/неудачном входе в систему собиралась в журналах контроллера домена, включите политику аудита событий входа пользователей.

  1. Откройте консоль управления объектами групповой политики домена (

    GPMC.msc

    );

  2. Откройте настройки объекта групповой политики Политика домена по умолчанию и перейдите в раздел «Конфигурация компьютера» -> «Политики» -> «Настройки Windows» -> «Настройки безопасности» -> «Расширенная настройка политики аудита» -> «Политики аудита» -> «Вход/выход из системы»;

  3. Включите две политики аудита (Аудит входа и Аудит других событий входа/выхода). Выберите параметры Успех и Неудача в настройках политики аудита, чтобы регистрировать как успешные, так и неудачные входы в систему в журнале безопасности на контроллерах домена и компьютерах;

  4. Сохраните изменения в GPO и обновите параметры политики на ваших контроллерах домена с помощью следующей команды: gpupdate /force (или подождите 90 минут, время репликации DC не учитывается).

Когда пользователь входит в систему на любом компьютере в домене Active Directory, в журнале контроллера домена появляется событие с идентификатором события 4624 (Учетная запись успешно зарегистрирована). аутентифицировал пользователя (сервер входа в систему). Успешно проверенная учетная запись (имя учетной записи), имя компьютера (имя рабочей станции) или IP-адрес (адрес исходной сети) компьютера, используемого для входа в систему, отображаются в описании события.

Также вам необходимо проверить значение поля Тип входа. Нас интересуют следующие коды:

  • Тип входа 10 - удаленный интерактивный вход - вход с использованием RDP, теневого подключения или удаленного помощника (это событие может появиться на контроллере домена, если в систему входит администратор или пользователь без прав администратора, имеющий разрешение на доступ по протоколу RDP на контроллере домена). ). Это событие используется для мониторинга и анализа активности пользователей служб удаленных рабочих столов.

  • Тип входа 3 - сетевой вход (используется, когда пользователь проходит проверку подлинности на контроллере домена и подключается к общей папке, принтеру или службе IIS).

Также вы можете отслеживать событие выдачи билета Kerberos при аутентификации пользователя. Идентификатор события 4768: Запрошен билет проверки подлинности Kerberos (TGT). Для этого включите аудит событий в политике «Вход в учетную запись» -> «Аудит службы аутентификации Kerberos» -> «Успех и неудача».

Событие 4768 также содержит имя (IP-адрес) компьютера и учетную запись пользователя (имя учетной записи или идентификатор пользователя), получившую билет Kerberos (прошедшую проверку подлинности).

Получение истории последнего входа пользователя в систему с помощью PowerShell

Вы можете использовать командлет PowerShell Get-Eventlog, чтобы получить все события из журналов событий контроллера домена, отфильтровать их по нужному EventID и отобразить информацию о времени аутентификации пользователя в домене и компьютер, используемый для входа в систему. Поскольку в вашем домене может быть несколько контроллеров домена и вам может потребоваться получить историю входов пользователей с каждого из них, используйте командлет Get-ADDomainController (из модуля AD для Windows PowerShell). Командлет позволяет получить список всех контроллеров домена вашего домена.

Следующий сценарий PowerShell позволяет получать все события входа пользователя в домен AD со всех контроллеров домена. В результате вы получите таблицу с историей входа пользователей и компьютерами, с которых пользователь прошел аутентификацию.

# a username, whose logon history you want to view
$checkuser='*jbrown*'
# getting information about the user logon history for the last 2 days (you can change this value)
$startDate = (get-date).AddDays(-2)
$DCs = Get-ADDomainController -Filter *
foreach ($DC in $DCs){
$logonevents = Get-Eventlog -LogName Security -InstanceID 4624 -after $startDate -ComputerName $dc.HostName
foreach ($event in $logonevents){
if (($event.ReplacementStrings[5] -notlike '*$') -and ($event.ReplacementStrings[5] -like $checkuser)) {
# Remote (Logon Type 10)
if ($event.ReplacementStrings[8] -eq 10){
write-host "Type 10: Remote Logon`tDate: "$event.TimeGenerated "`tStatus: Success`tUser: "$event.ReplacementStrings[5] "`tWorkstation: "$event.ReplacementStrings[11] "`tIP Address: "$event.ReplacementStrings[18] "`tDC Name: " $dc.Name
}
# Network(Logon Type 3)
if ($event.ReplacementStrings[8] -eq 3){
write-host "Type 3: Network Logon`tDate: "$event.TimeGenerated "`tStatus: Success`tUser: "$event.ReplacementStrings[5] "`tWorkstation: "$event.ReplacementStrings[11] "`tIP Address: "$event.ReplacementStrings[18] "`tDC Name: " $dc.Name
}
}
}
}

Получение истории входов пользователей в домен на основе событий Kerberos

Вы также можете получить историю аутентификации пользователей в домене на основе события выдачи билета Kerberos (запрос TGT — EventID 4768). В этом случае в выводе будет отображаться меньше событий (исключаются входы в сеть, а также события доступа к папкам DC во время получения файлов GPO или выполнения сценариев входа). Следующий скрипт PowerShell отобразит информацию обо всех входах пользователей за последние 24 часа:


$alluserhistory = @()
$startDate = (get-date).AddDays(-1)
$DCs = Get-ADDomainController -Filter *
foreach ($DC in $DCs){
$logonevents = Get-Eventlog -LogName Security -InstanceID 4768 -after $startDate -ComputerName $dc.HostName
foreach ($event in $logonevents){
if ($event.ReplacementStrings[0] -notlike '*$') {
$userhistory = New-Object PSObject -Property @{
UserName = $event.ReplacementStrings[0]
IPAddress = $event.ReplacementStrings[9]
Date = $event.TimeGenerated
DC = $dc.Name
}
$alluserhistory += $userhistory
}
}
}
$alluserhistory

Обратите внимание, что в этом случае вы не увидите никаких событий входа в систему пользователей, прошедших аутентификацию из клиентов или приложений, использующих NTLM вместо Kerberos.

Статьи по данной тематике