- Получаем логи (историю) входа пользователя в домен AD
- Политика аудита входа пользователя в домен
- PowerShell: истории сетевых входов пользователя в домен
- Получаем информацию об активности пользователя в домене по событиям Kerberos
- Как в Windows проверить, кто использовал компьютер и когда
- Как включить аудит входа в систему
- Просмотр событий входа в систему
- Windows Script Host: проводим аудит безопасности сети
Получаем логи (историю) входа пользователя в домен AD
Есть несколько различных инструментов получения информации о времени логина пользователя в домен. Время последней успешной аутентификации пользователя в домене можно получить из атрибута lastLogon (обновляется только на контроллере домена, на котором выполнена проверка учетных данных пользователя) или lastLogonTimpestamp (реплицируется между DC в домене, но по умолчанию только через 14 дней). Вы можете получить значение этого атрибута пользователя в редакторе атрибутов AD или командлетом Get-ADUser. Однако иногда нужно получить историю активности (входов) пользователя в домене за большой период времени.
Вы можете получить информацию об успешных входах (аутентфикации) пользователя в домене из журналов контроллеров домена. В этой статье мы покажем, как отслеживать историю входов пользователя в домен с помощью PowerShell.. Т.е. можно получить полную историю активности пользователя в домене, время начала работы и компьютеры, с которых работает пользователь.
Политика аудита входа пользователя в домен
Чтобы в журналах контроллеров домена отображалась информация об успешном/неуспешном входе в систему, нужно включить политику аудита событий входа пользователей.
- Запустите редактор доменных GPO – GPMC.msc;
- Откройте настройки Default Domain Policy и перейдите в раздел Computer Configuration -> Policies -> Windows Settings -> Security Settings –> Advanced Audit Policy Configuration -> Audit Policies -> Logon/Logoff;
Audit Policies -> Logon/Logoff» width=»692″ height=»371″ srcset=»https://winitpro.ru/wp-content/uploads/2020/04/advanced-audit-policy-configuration-greater-audit-polic.png 943w, https://winitpro.ru/wp-content/uploads/2020/04/advanced-audit-policy-configuration-greater-audit-polic-300×161.png 300w, https://winitpro.ru/wp-content/uploads/2020/04/advanced-audit-policy-configuration-greater-audit-polic-768×411.png 768w» sizes=»(max-width: 692px) 100vw, 692px»/>
- Включите две политики аудита (Audit Logon и Audit Other Logon/Logoff Events). Чтобы в журналах Security на DC и компьютерах регистрировались как успешные, так и неуспешные политики входа, выберите в настройках политика аудита опции Success и Failure
- Сохраните изменения в GPO и обновите настройки политик на контроллерах домена командой: gpupdate /force (или подождите 90 минут, без учета репликации между DC).
Теперь при входе пользователя на любой компьютер домена Active Directory в журнале контроллера домена, который выполняет аутентификацию пользователя, появляется событие с Event ID 4624 (An account was successfully logged on). В описании этого события указана учетная запись, которая успешно аутентифицировалась (Account name), имя (Workstation name) или IP адрес (Source Network Address) компьютера, с которого выполнен вход.
Также в поле Logon Type указан тип входа в систему. Нас интересуют следующие коды
- Logon Type 10 – Remote Interactive logon – вход через службы RDP, теневое подключение или Remote Assistance (на DC такое событие может быть при входе администратора, или другого пользователя, которому предоставлены права входа на DC) Это событие используется при анализе событий входа пользователей по RDP.
- Logon Type 3 – Network logon сетевой вход (происходит при аутентфикации пользователя на DC, подключения к сетевой папке, принтеру или службе IIS)
Также можно отслеживать событие выдачи билета Kerberos при аутентификации пользователя. Event ID 4768 — A Kerberos authentication ticket (TGT) was requested. Для этого нужно включить аудит событий в политики Account Logon –> Audit Kerberos Authentication Service -> Success и Failure.
В событии 4768 также указана учетная запись пользователя (Account Name или User ID), который получил билет Kerberos (аутентифицировался) и имя (IP адрес) компьютера.
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
>
>
>
>
Получаем информацию об активности пользователя в домене по событиям 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
Обратите, что в этом случае вы не увидите события входов пользователей, которые аутентифицировались с клиентов или приложений, которые используют NTLM вместо Kerberos.
Как в Windows проверить, кто использовал компьютер и когда
Вы когда-нибудь хотели контролировать, кто входит в ваш компьютер и когда? В профессиональных выпусках Windows вы можете включить аудит входа в систему, чтобы запись всех входов в Windows.
Аудит входов в систему отслеживает как локальных пользователей, так и сетевые учетные записи. Каждое событие входа указывает учетную запись пользователя, с помощью которой происходила авторизация. Вы также можете увидеть, когда пользователи вышли из системы.
Примечание. Аудит входа в систему работает только в профессиональной версии Windows, поэтому вы не можете использовать это, если у вас домашняя версия. Это должно работать на Windows 7, 8 и Windows 10. Мы рассмотрим Windows 10 в этой статье. В других версиях экраны могут выглядеть немного иначе, но этот процесс почти такой же.
Как включить аудит входа в систему
Чтобы включить аудит входа в систему, мы будем использовать редактор локальных групповых политик. Это довольно мощный инструмент, поэтому, если вы никогда не использовали его раньше, стоит потратить некоторое время на его изучение. Кроме того, если ваш компьютер подключен к сети компаний, сначала Вам придётся обратиться за разрешением к администратору. Если ваш рабочий компьютер является частью домена, также вероятно, что это часть политики группы доменов, которая в любом случае заменит политику локальной группы.
Чтобы открыть редактор локальной групповой политики, нажмите Win + R , введите gpedit.msc и нажмите Enter .
В редакторе локальных групповых политик в левой панели перейдите к политике Локального компьютера → Конфигурация компьютера → Конфигурация Windows → Параметры безопасности → Локальные политики → Политика аудита. В правой панели дважды щелкните параметр «Аудит входа в систему».
В открывшемся окне свойств включите параметр «Успех» для успешной попытки входа в систему Windows. Включите параметр «Сбой», если вы также хотите, чтобы Windows регистрировала неудачные попытки входа в систему. Нажмите кнопку ОК , когда закончите.
Теперь вы можете закрыть окно редактора локальной групповой политики.
Просмотр событий входа в систему
После включения аудита входа Windows записывает события входа в систему вместе с именем пользователя и меткой времени в журнале безопасности. Вы можете просмотреть эти события, используя Event Viewer .
Нажмите значок поиска рядом с меню «Пуск», введите «Просмотр событий» и нажмите соответствующий результат в окне поиска.
В окне «Просмотр событий» в левой панели перейдите в раздел «Журналы Windows» → «Безопасность».
В центральной панели вы, вероятно, увидите ряд событий «Аудит успеха». Windows регистрирует отдельные сведения о таких вещах, как предоставление своих привилегий проверенным аккаунтом. Вам нужной найти события с идентификатором 4624 – они представляют собой успешные события входа в систему. Вы можете увидеть подробности о выбранном событии в нижней части этой средней панели, а также можете дважды щелкнуть событие, увидев его данные в отдельном окне.
Если Вы перейдёте к деталям, то сможете увидеть такую информацию, как имя учетной записи пользователя.
Поскольку это ещё одно событие в журнале событий Windows с определенным идентификатором события, вы также можете использовать планировщик заданий для принятия действий при входе в систему. Вы даже можете отправить сообщение на электронную почту, когда кто-то войдет в систему Windows.
Windows Script Host: проводим аудит безопасности сети
Архив номеров / 2005 / Выпуск №11 (36) / Windows Script Host: проводим аудит безопасности сети
«) Set WshShell = CreateObject(«WScript.Shell») Return = WshShell.Run(«iexplore.exe c:\report.htm», 1) Данный сценарий выводит информацию о попытках войти в сеть, которые были произведены в течение текущих суток. При этом сначала осуществляется выборка по всем пользователям, которые «засветились» в журнале событий, затем делается запрос для каждого пользователя. Вывод осуществляется в html-файл. По окончании созданный файл автоматически открывается в браузере. Если данный сценарий запускается автоматически по расписанию, то открывать браузер с отчетом не нужно, и две последние строки из исходного текста можно удалить. Сообщения о неудачных попытках входа в сеть выводятся красным цветом, удачные – зеленым, а выходы из системы – темно-синим. Сообщения будут выводиться в том порядке, в каком они попали в базу, однако SQL-запросы можно переписать, например, для вывода сообщений парами вход-выход. О том, как это сделать, речь пойдет далее. Итак, мы получили два сценария, один из которых осуществляет выборку нужных данных из журнала событий, а второй выполняет запрос, с помощью которого мы получаем информацию о попытках входа в сеть за определенный период. Оба сценария можно последовательно выполнять в конце каждых суток, а полученные результаты выкладывать на внутренний веб-сервер, в соответствующую папку. Тогда сисадмин сети каждое утро, приходя на работу, будет получать отчет о попытках доступа к ресурсам сети за предыдущие сутки. Задача аудита попыток доступа в сеть и построения удобочитаемых отчетов для системного администратора нами успешно решена. Однако будет нелишним рассмотреть еще одну возможность для применения сценариев WSH и политик аудита Account Logon Events – это построение системы учета рабочего времени. Решение данной задачи часто взваливают на плечи системных администраторов, особенно в небольших компаниях. Если в вашей организации используется домен Active Directory, то каждый день, приходя на свое рабочее место, пользователи должны аутентифицироваться в домене, введя свой логин и пароль (в нашей системе аудита это событие 675 Удачный вход в систему). А в конце рабочего дня пользователи должны корректно завершить работу системы (событие 538 Logoff). Таким образом, для получения информации о времени прихода сотрудника на работу нам необходимо получить самое раннее время события 675, а для получения времени ухода – самое позднее время события 538. Сделать это можно с помощью следующего громоздкого с виду запроса. Тут следует сразу оговориться: в данном случае мы предполагаем, что в нашей сети круглосуточно работают сервера и все задачи, требующие продолжительных расчетов, выполняются только на них, а рабочие станции включают сотрудники, приходя на работу. Листинг 5. Запрос, возвращающий самый ранний logon и самый поздний logoff SELECT MAX(Date_dat) AS Last, MIN(Date_dat) AS First, User_vch FROM Logons WHERE (Date_dat > CONVERT(DATETIME, ‘2005-11-01 00:00:00’, 102)) AND (Date_dat Данный запрос возвратит два значения first и last, соответствующие времени входа в систему и времени выхода из нее. Листинг 6.Сценарий построения отчета для контроля рабочего времени Set objWMI = GetObject(«winmgmts:» _ Set colLoggedEvents = objWMI.ExecQuery _ («Select * from Win32_NTLogEvent Where Logfile = ‘Security'») Set objFso = CreateObject(«Scripting.FileSystemObject») Set Cnxn = wscript.CreateObject(«ADODB.Connection») strCnxn = «Provider=’sqloledb’;Data Source=» & _ Set strFile = objFso.CreateTextFile(«c:\report.htm», True) strFile.WriteLine(» Учет времени «) strFile.WriteLine(» Отчет
«) Set WshShell = CreateObject(«WScript.Shell») Return = WshShell.Run(«iexplore.exe c:\report.htm», 1) В результате работы данного WSH-сценария будет получаться HTML-документ, в котором для каждого пользователя будут по дням расписаны дата и время входа в сеть и выхода из нее, то есть фактически время прихода и ухода на работу. Надеюсь, материал, изложенный в этой статье, пригодится системным администраторам и поможет им сэкономить рабочее время, затрачиваемое на поиск событий, угрожающих безопасности вверенной им сети.
|