Є кілька різних інструментів отримання інформації про час логіна користувача в домен. Час останньої успішної аутентифікації користувача в домені можна отримати з атрибуту lastLogon (Оновлюється тільки на контролері домену, на якому була виконана величезна облікових даних користувача) або lastLogonTimpestamp (Реплицируется між DC в домені, але за замовчуванням тільки через 14 днів). Ви можете отримати значення цього атрибута користувача в редакторі атрибутів AD або Командлети Get-ADUser. Однак іноді потрібно отримати історію активності (входів) користувача в домені за великий період часу.

Ви можете отримати інформацію про успішні входах (аутентфікаціі) користувача в домені з журналів контролерів домену. У цій статті ми покажемо, як відстежувати історію входів користувача в домен за допомогою PowerShell .. Тобто можна отримати повну історію активності користувача в домені, час початку роботи і комп’ютери, з яких працює користувач.

Політика аудиту входу користувача в домен

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

  1. Запустіть редактор доменних GPO – GPMC.msc;
  2. Відкрийте настройки Доменна політика за замовчуванням и перейдите в раздел Конфігурація комп’ютера -> Політика -> Налаштування Windows -> Налаштування безпеки -> Розширена конфігурація політики аудиту -> Політика аудиту -> Вхід / вихід з системи;
  3. Збережіть зміни в GPO і обновіть настройки політик на контролерах домену командою: gpupdate /force (Або почекайте 90 хвилин, без урахування реплікації між DC).

Тепер при вході користувача на будь-який комп’ютер домену Active Directory в журналі контролера домену, який виконує аутентифікацію користувача, з’являється подія з Event ID 4624 (Обліковий запис успішно ввійшов). В описі цієї події вказана обліковий запис, який успішно аутентифицироваться (Account name), ім’я (Workstation name) або IP адреса (Source Network Address) комп’ютера, з якого виконаний вхід.

Також в поле Logon Type зазначений тип входу в систему. Нас цікавлять наступні коди

Ідентифікатор події 4624 Обліковий запис успішно ввійшов

Також можна відстежувати подія видачі квитка Kerberos при аутентифікації користувача. Event ID 4768Запитано квиток автентифікації Kerberos (TGT). Для цього потрібно включити аудит подій в політики Account Logon -> Audit Kerberos Authentication Service -> Success і Failure.

включити політику аудиту Audit Kerberos Authentication Service

У події 4768 також вказана обліковий запис користувача (Account Name або User ID), який отримав квиток Kerberos (аутентифицироваться) і ім’я (IP адреса) комп’ютера.

4768 - Запрошено квиток автентифікації Kerberos (TGT)

PowerShell: історії мережевих входів користувача в домен

За допомогою командлета PowerShell Get-Eventlog можна отримати всі події з журналу контролера домену, відфільтрувати їх за потрібною коду (EventID) і вивести дані про час, коли користувач розпізнаватися вашими домені, і комп’ютері, з якого виконаний вхід. Оскільки в домені може бути кілька контролерів домену і потрібно отримати історія входів користувача з кожного з них, потрібно скористатися Командлети Get-ADDomainController (з модуля AD для Windows PowerShell). Даний командлет дозволяє отримати список всіх DC в домені.

Наступний PowerShell скрипт дозволяє отримати всі події входу користувача в домен AD зі всіх контролерів домену. На виході ви отримуєте таблицю з історією входу користувача і комп’ютерів, з яких аутентифицироваться користувач.

# имя пользователя, историю входов которого нужно получить
$checkuser="*ivanov*"
# получаем информацию об истории входов пользователя за последних 2 дня, можете изменить
$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
}
}
}
}

poweshell - історія входів користувача в домен

Отримуємо інформацію про активність користувача в домені щодо подій Kerberos

Також ви можете отримати історію аутентифікації користувача в домені по за подією видачі квитка Kerberos (TGT Request – EventID 4768). В цьому випадку в підсумкових даних міститиметься меншу кількість подій (виключені мережеві входи, звернення до папок на DC під час отримання політик і виконання логон-скриптів). Наступний PowerShell скрипт виведе інформацію про всіх входах користувачів за останні 24 години:

$alluserhistory = @()
$startDate = (get-date).AddDays(-2)
$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

powershell скрипт 4768 - історія аутентфікаціі користувачів з видачі квитком kerberos

Зверніть, що в цьому випадку ви не побачите події входів користувачів, які аутентифицироваться з клієнтів або додатків, які використовують NTLM замість Kerberos.

Leave a Reply

Your email address will not be published. Required fields are marked *