Отслеживание входов пользователей в домен Active Directory позволяет администраторам контролировать активность, выявлять подозрительные действия и анализировать использование ресурсов. Встроенные атрибуты, такие как lastLogon и lastLogonTimestamp, предоставляют базовую информацию о последней аутентификации, но для получения полной истории входов требуется настройка аудита и использование PowerShell для анализа событий.
Зачем отслеживать входы пользователей
В Active Directory информация о последнем входе пользователя хранится в атрибутах:
– lastLogon: Обновляется только на контроллере домена (DC), который обработал аутентификацию.
– lastLogonTimestamp: Реплицируется между всеми DC, но обновляется с задержкой до 14 дней.
Эти атрибуты можно получить через редактор атрибутов Active Directory или командлет Get-ADUser. Однако для анализа истории входов за длительный период необходим аудит событий аутентификации и сбор данных из журналов безопасности контроллеров домена.
Настройка аудита входов в Active Directory
Для фиксации событий входа пользователей в домене настройте политику аудита на уровне домена. Это позволит регистрировать успешные и неуспешные попытки аутентификации в журналах безопасности.
Шаги настройки политики аудита
1. Откройте консоль Редактор управления групповыми политиками (gpmc.msc).
2. Создайте новый объект групповой политики (GPO) и свяжите его с корнем домена. Не редактируйте политику Default Domain Policy.
3. Перейдите в раздел:
Конфигурация компьютера → Политики → Параметры Windows → Параметры безопасности → Расширенная конфигурация политики аудита → Политики аудита → Вход/Выход
(Computer Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy Configuration → Audit Policies → Logon/Logoff).
4. Включите две политики:
– Аудит входа (Audit Logon): Установите Успех (Success) и, при необходимости, Неудача (Failure).
– Аудит других событий входа/выхода (Audit Other Logon/Logoff Events): Установите Успех (Success).
5. Включите аудит Kerberos:
Перейдите в Политики аудита → Вход в учетную запись → Служба аутентификации Kerberos
(Audit Policies → Account Logon → Audit Kerberos Authentication Service).
Установите Успех (Success).
6. Сохраните изменения в GPO.
7. Дождитесь репликации политики между DC (обычно 5–15 минут) или выполните команду:
gpupdate /force
Что регистрируется после включения аудита
После настройки в журнале Безопасность (Security) на контроллере домена, обработавшем аутентификацию (LogonServer), появляются события:
Event ID 4624: Успешный вход пользователя (An account was successfully logged on). Содержит:
– Имя учетной записи (Account Name).
– Имя или IP-адрес компьютера (Workstation Name или Source Network Address).
– Тип входа (Logon Type):
Logon Type 2: Интерактивный (локальный) вход.
Logon Type 3: Сетевой вход (например, доступ к папке, принтеру или службе IIS).
Logon Type 10: Удаленный вход через RDP, теневое подключение или Remote Assistance.
Logon Type 7: Разблокировка сессии после блокировки экрана.
Event ID 4768: Выдача билета Kerberos TGT (A Kerberos authentication ticket was requested). Содержит имя пользователя, IP-адрес клиента и имя DC.
Увеличение размера журналов событий
Для хранения длительной истории входов увеличьте максимальный размер журнала Безопасность на контроллерах домена:
1. Откройте Просмотр событий (Event Viewer) → Журналы Windows → Безопасность (Windows Logs → Security).
2. Щелкните правой кнопкой мыши → Свойства (Properties).
3. Установите максимальный размер журнала, например, 1 ГБ, и выберите Перезаписывать события при необходимости (Overwrite events as needed).
4. Примените изменения.
Альтернативно, настройте размер через PowerShell:
Limit-EventLog -LogName Security -MaximumSize 1GB
Сбор истории входов с помощью PowerShell
Для анализа истории входов используйте PowerShell для извлечения событий Event ID 4624 или 4768 из журналов безопасности всех контроллеров домена.
Скрипт с использованием Get-WinEvent
Командлет Get-WinEvent быстрее, чем Get-EventLog, и рекомендуется для работы с большими журналами. Пример скрипта для получения входов пользователя за последние 24 часа:
$TargetUsername = 'abelov'
$StartTime = (Get-Date).AddHours(-24)
$LogonTypeDescriptions = @{
'2' = 'Interactive'
'3' = 'Network'
'7' = 'Unlock'
'10' = 'RemoteInteractive'
'11' = 'CachedInteractive'
}
$DomainControllers = Get-ADDomainController -Filter *
$LogonEvents = @()
foreach ($DC in $DomainControllers) {
$FilterHashtable = @{
LogName = 'Security'
ID = 4624
StartTime = $StartTime
}
$Events = Get-WinEvent -ComputerName $DC.HostName -FilterHashtable $FilterHashtable -ErrorAction SilentlyContinue
foreach ($Event in $Events) {
$EventData = [xml]$Event.ToXml()
$EventUser = $EventData.Event.EventData.Data[5].'#text'
$LogonTypeCode = $EventData.Event.EventData.Data[8].'#text'
if ($EventUser -eq $TargetUsername) {
$LogonEvent = [PSCustomObject]@{
TimeCreated = $Event.TimeCreated
ComputerName = $EventData.Event.EventData.Data[11].'#text'
IPAddress = $EventData.Event.EventData.Data[18].'#text'
Username = $EventUser
LogonType = $LogonTypeDescriptions[$LogonTypeCode] DCName = $DC.HostName
}
$LogonEvents += $LogonEvent
}
}
}
$LogonEvents | Format-Table -AutoSize
Этот скрипт выводит таблицу с информацией:
– Время входа (TimeCreated).
– Имя компьютера (ComputerName).
– IP-адрес клиента (IPAddress).
– Имя пользователя (Username).
– Тип входа (LogonType).
– Имя контроллера домена (DCName).
Экспорт логов в CSV
Для сохранения результатов в файл используйте:
$FileName = "C:\Logs\LogonEvents_$(Get-Date -Format 'yy_MM_dd').csv"
$LogonEvents | Export-Csv -Path $FileName -NoTypeInformation -Encoding UTF8
Анализ событий Kerberos (Event ID 4768)
Для получения истории аутентификации по билетам Kerberos используйте следующий скрипт. Он исключает сетевые входы (например, доступ к общим папкам), что уменьшает объем данных:
$alluserhistory = @()
$startDate = (Get-Date).AddDays(-2)
$DCs = Get-ADDomainController -Filter *
foreach ($DC in $DCs) {
$logonevents = Get-WinEvent -LogName Security -FilterHashtable @{LogName='Security';ID=4768;StartTime=$startDate} -ComputerName $DC.HostName -ErrorAction SilentlyContinue
foreach ($event in $logonevents) {
if ($event.Properties[0].Value -notlike '*$') {
$userhistory = [PSCustomObject]@{
UserName = $event.Properties[0].Value
IPAddress = $event.Properties[9].Value
Date = $event.TimeCreated
DC = $DC.Name
}
$alluserhistory += $userhistory
}
}
}
$alluserhistory | Format-Table -AutoSize
Отслеживание выхода пользователей
Для анализа длительности сессий ищите события выхода (Logoff) с Event ID 4634:
$FilterHashtable = @{
LogName = 'Security'
ID = 4634
StartTime = (Get-Date).AddHours(-24)
}
Get-WinEvent -FilterHashtable $FilterHashtable -ComputerName $DC.HostName
Ограничения и рекомендации
– Аудит Kerberos (Event ID 4768) не включает входы через NTLM, что может пропустить некоторые события.
– Увеличение размера журналов увеличивает нагрузку на диск. Регулярно архивируйте старые логи.
– Используйте Get-WinEvent вместо Get-EventLog для повышения производительности.
– Для точечного анализа указывайте конкретного пользователя и временной диапазон в скриптах.
– Храните журналы в централизованной системе, например, SIEM, для долгосрочного анализа.
Эта настройка обеспечит полный контроль над активностью пользователей в Active Directory, упрощая аудит и устранение неполадок.