Windows скрипт кто когда входил

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

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

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

Политика аудита входа пользователя в домен

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

  1. Запустите редактор доменных GPO – GPMC.msc;
  2. Откройте настройки 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»/>
  3. Включите две политики аудита (Audit Logon и Audit Other Logon/Logoff Events). Чтобы в журналах Security на DC и компьютерах регистрировались как успешные, так и неуспешные политики входа, выберите в настройках политика аудита опции Success и Failure
  4. Сохраните изменения в 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 4768A 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 в этой статье. В других версиях экраны могут выглядеть немного иначе, но этот процесс почти такой же.

Читайте также:  Как восстановить the bat после переустановки windows

Как включить аудит входа в систему

Чтобы включить аудит входа в систему, мы будем использовать редактор локальных групповых политик. Это довольно мощный инструмент, поэтому, если вы никогда не использовали его раньше, стоит потратить некоторое время на его изучение. Кроме того, если ваш компьютер подключен к сети компаний, сначала Вам придётся обратиться за разрешением к администратору. Если ваш рабочий компьютер является частью домена, также вероятно, что это часть политики группы доменов, которая в любом случае заменит политику локальной группы.

Чтобы открыть редактор локальной групповой политики, нажмите 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: проводим аудит безопасности сети

АНДРЕЙ БИРЮКОВ

Windows Script Host: проводим аудит безопасности сети

Вам наверняка приходится тратить массу времени, чтобы найти в логах информацию о попытках несанкционированного доступа к ресурсам сети. Для автоматизации осуществления поиска информации о событиях аудита и построения отчетов предлагаем вам использовать сценарии Windows Script Host.

Думаю, любому из вас будет интересно узнать, кто, когда и с каких машин пытался зайти в сеть вашей компании, особенно это интересно в случаях, когда для доступа в сеть использовалась учетная запись с администраторскими правами. UNIX-системы для решения подобных задач обладают массой свободно распространяемых программ. Они позволяют администраторам, подкорректировав соответствующим образом исходный код сценария, производить аудит событий доступа к сети и получать отчет, содержащий все необходимые сведения об удачных и/или неудачных попутках проникновения в систему и получения доступа к различным ресурсам сети. С Windows все несколько сложнее, существующие решения, как правило, являются коммерческими и требуют от системных администраторов серьезной подготовки. Также в силу недоступности исходного кода их достаточно трудно, а зачастую и просто невозможно, изменять и дорабатывать для аудита своей сети.

Готовим сеть к аудиту

В Windows 2000/2003 по умолчанию аудит всех категорий безопасности отключен. Администратор создает политику аудита, определяя, для каких типов событий безопасности нужно выполнять аудит. Исходя из требований корпоративной политики безопасности своей организации, администратор может также задать аудит доступа к отдельным объектам.

Первым шагом в создании политики является определение событий, для которых должен выполняться аудит.

При этом доступны следующие категории событий:

  • Account logon events (аутентификация пользователей на контроллерах домена) – если аудит успешных попыток входа в систему включен на контроллере домена, в журнал будет заноситься запись о каждом пользователе, прошедшем проверку на этом контроллере домена, несмотря на то что пользователь на самом деле входит в систему на рабочей станции домена.
  • Account management (управление учетными записями) – аудит всех событий, связанных с управлением учетными записями на компьютере. К таким событиям относятся, в частности, следующие: создание, изменение или удаление учетной записи пользователя или группы; переименование, отключение или включение учетной записи пользователя; задание или изменение пароля.
  • Directory service access (доступ к службе каталогов) – контроль событий доступа пользователя к объекту каталога Active Directory, для которого задана собственная системная таблица управления доступом.
  • Logon events (события входа) – подлежит ли аудиту каждая попытка пользователя войти в систему или выйти из нее на данном компьютере, или подключиться к нему через сеть.
  • Object access (доступ к объектам) – контроль событий доступа пользователя к объекту – например, к файлу, папке, разделу реестра, принтеру и т. п.
  • Policy change (изменение политик) – осуществляется ли аудит изменений политик назначения прав пользователей, политик аудита или политик доверительных отношений.
  • Privilege use (использование привилегий) – подлежит ли аудиту каждая попытка пользователя воспользоваться предоставленными ему правами.
  • Process tracking (отслеживание процесса) – аудит таких событий, как активизация программы, завершение процесса, повторение дескрипторов и косвенный доступ к объекту.
  • System events (системные события) – производится ли аудит событий перезагрузки или отключения компьютера, а также события, влияющие на системную безопасность или на журнал безопасности.

Чтобы выбрать категории событий для аудита, необходимо сначала определить, является ли данный сервер контроллером домена.

Если это рядовой сервер, то нужно выбрать «Administrative tools Local security policy Audit policy». Если аудит производится на контроллере домена, то нужно выбрать «Active Directory Users And Computers», затем открыть запись для данного домена, выбрать меню «Action Properties Group policy Edit», далее надо открыть «Computer Configuration Windows Settings Security Settings Local Policies», после чего выбрать «Audit Policy».

При любом методе в результате выбора Audit policy в правой панели появятся доступные для аудита категории событий. Для того чтобы модифицировать политику для какой-либо категории аудита, щелкните правой кнопкой на этом событии и выберите пункт «Security». Далее необходимо установить флажок для аудита успешных попыток входа в сеть и/или аудита безуспешных. В нашем случае необходимо выбрать «Audit Account Logon Events» и отметить «Success» и «Failure». В результате получаем окно, аналогичное изображенному на рис. 1.

Рисунок 1. Список политик аудита. Обведена «Account LogonEvents»

Таким образом, теперь в журнале событий «Event Log», в разделе «Security» при каждой попытке входа пользователя в систему будет появляться соответствующее сообщение (см. рис. 2).

Рисунок 2. Журнал событий. Выделены два сообщения: нижнее – неудачная попытка войти в систему и верхняя – удачный вход

Однако для решения нашей задачи использование журнала событий в качестве хранилища информации о попытках входа в сеть – не самый лучший выход. Причин тому несколько, прежде всего это ограниченность размера журнала событий, из-за которой часть сообщений рано или поздно будут удалены. С настройками по умолчанию журнал событий при достижении заданного ограничения на размер затирает старые сообщения новыми по принципу очереди (FIFO, First In First Out). При этом размер файла журнала Security по умолчанию равен 131072 Кб. Если за сутки в журнал заносится несколько тысяч сообщений, то 128 Мб это не слишком много. Можно также настроить, чтобы журнал затирал сообщения по прошествии определенного количествf дней или не затирал сообщения вообще [1]. Правда, в последнем случае, когда файл журнала достигнет ограничения по размеру, наш сервер может вообще прекратить функционировать, пока не будет произведена ручная очистка. Согласитесь, особенно неприятно, если это произойдет, скажем, в субботу ночью. Вторым недостатком использования журнала событий для задач аудита сети является то, что построение отчетов затруднено. Можно, конечно, делать выборку каждый день вручную с помощью стандартного фильтра Event Viewer, однако автоматизировать этот процесс с помощью VBScript будет крайне сложно и неудобно.

Таким образом, возникает необходимость в использовании базы данных для хранения сообщений о событиях.

Настраиваем хранилище сообщений аудита

Microsoft SQL Server 2000, или его бесплатная урезанная реализация MSDE, активно используются различными приложениями от 1С до систем резервного копирования и корпоративных антивирусов. Так что вполне логичным будет использование данной СУБД в качестве хранилища наших сообщений аудита. Сразу оговорюсь, что основы построения баз данных и SQL-запросов не являются темой статьи, эти аспекты будут снабжены лишь краткими комментариями. За более подробной информацией можете обратиться к источникам справочной информации [2, 3].

Наша база-хранилище сообщений будет иметь следующие поля:

  • Событие (Event ID).
  • Дата и время.
  • Имя пользователя (доменпользователь, под которым осуществлялась попытка входа).
  • Workstation (имя машины, с которой осуществлялась попытка входа, может быть пустым).
  • IP-адрес (машина в локальной сети, с которой осуществлялась попытка входа).

Создадим в MS SQL Server базу Audit, а в ней таблицу Logons, эти действия можно осуществить, например, с помощью Query Analyzer [3], выполнив следующий SQL-скрипт.

Листинг 1. SQL-скрипт для создания таблицы Logons

CREATE TABLE [dbo].[Logons] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[Event_vch] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,

[Date_dat] [datetime] NULL ,

[User_vch] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,

[WID_vch] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,

[Address_vch] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL

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

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

Кто пришел, когда пришел, откуда пришел…

Прежде всего подробно опишу структуру WSH-сценария, для того чтобы при необходимости вы легко могли приспособить его для решения своих задач, например, аудита доступа к объектам или аудита изменения политик.

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

SELECT Max(Date_dat) AS Last FROM Logons

Данный запрос возвратит дату последней записи. Таким образом, мы определили, после какого времени нужно сохранять в базе поступившие сообщения. Очевидно при первом запуске сценария данный запрос возвратит пустую строку и нам придется копировать все сообщения.

Скорее всего в журнале событий «Security», кроме событий аудита «Account Logon Events», могут оказаться еще какие-то сообщения о других событиях в системе. В связи с этим нам необходимо отфильтровывать нужные сообщения (см. рис. 3).

Рисунок 3. Сообщение об удачном входе в систему

События, которые нас интересуют, имеют следующие Event ID:

  • 673 – Удачная попытка входа в систему.
  • 675 – Неудачная попытка входа в систему.
  • 538 – Выход из системы (Logoff).

Листинг 2. Функция substring для поиска вхождений искомой строки

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

Еще одним важным моментом является формат даты и времени, используемые при сохранении сообщений в базе. Я не случайно использовал одно поле для хранения в базе даты и времени, несмотря на то что в журнале событий задействованы два поля. Если у нас поле типа datetime содержит дату и время, то к значениям этого поля можно применять математические функции, в частности мы уже использовали Max, а также которые нам еще потребуются в дальнейшем. Если бы мы использовали отдельные поля для даты и времени, то математические функции применять было бы гораздо сложнее. Однако тут возникает еще одна сложность: для полей типа datetime необходимо передавать данные строго в определенном формате «мм.дд.гггг чч:мм:сс». При этом надо использовать функцию SQL CONVERT. В результате работы этой функции с определенными параметрами (110 – для даты и 114 – для времени) мы получаем корректно сохраненную дату в базе. Подробнее о команде CONVERT и кодах, используемых для форматирования дат, читайте в [2].

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

Листинг 3. Сценарий для поиска и сохранения искомых сообщений в базе данных

Dim Cnxn, strCnxn

Dim rsCustomers, strSQLCustomers

Dim EventDate, EventTime, EventTmp

Dim objWMI, objItem ‘ Objects

Dim intEvent,intRec, colLoggedEvents

Dim Str, strtemp

strtemp=Left(Right(Str, strpos1+2), Len(str1))

Set objWMI = GetObject(«winmgmts:» _

Set colLoggedEvents = objWMI.ExecQuery _

(«Select * from Win32_NTLogEvent Where Logfile = ‘Security'» )

Set Cnxn = wscript.CreateObject(«ADODB.Connection»)

strCnxn = «Provider=’sqloledb’;Data Source=» & _

// устанавливаем соединение с SQL-сервером

Line=» SELECT Max(Date_dat) AS Last FROM Logons»

If not(rs.eof) Then LastRec=Left(rs(«Last»),19)

// находим дату последней записи

For Each objItem in colLoggedEvents

EventTmp=Mid(objItem.TimeWritten, 7,2)+».»+Mid(objItem.TimeWritten, 5, 2)+».»+Mid(objItem.TimeWritten, 1,4)+» «+Mid(objItem.TimeWritten, 9,2)+»:»+Mid(objItem.TimeWritten, 11, 2)+»:»+Mid(objItem.TimeWritten, 13,2)

// время каждого события

If (EventTmp=LastRec) Then Last=1

// пока даты не равны, ищем соответствующие события

If objItem.eventCode=675 Then

EventDate=Mid(objItem.TimeWritten,5,2)+».»+Mid(objItem.TimeWritten, 7, 2)+».»+Mid(objItem.TimeWritten, 1,4)

Line=” INSERT INTO dbo.Logons ( Event_vch, Date_dat, User_vch, WID_vch, Address_vch)VALUES ( ‘675’, CONVERT(DATETIME, ‘»+EventDate+»‘, 110)+ CONVERT(DATETIME, ‘»+EventTime+»‘, 114), ‘»+UserName+»‘,'»+UserID+»‘,'»+IpAddr+»‘)»

If objItem.eventCode=673 Then

EventDate=Mid(objItem.TimeWritten, 5,2)+».»+Mid(objItem.TimeWritten, 7, 2)+».»+Mid(objItem.TimeWritten, 1,4)

EventTime=Mid(objItem.TimeWritten, 9,2)+»:»+Mid(objItem.TimeWritten, 11, 2)+»:»+Mid(objItem.TimeWritten, 13,2)

Line=» INSERT INTO dbo.Logons ( Event_vch, Date_dat, User_vch, WID_vch, Address_vch) VALUES ( ‘673’, CONVERT(DATETIME, ‘»+EventDate+»‘, 110)+CONVERT(DATETIME, ‘»+EventTime+»‘, 114), ‘»+UserName+»‘, ‘»+UserID+»‘,'»+IpAddr+»‘)»

If objItem.eventCode=538 Then

EventDate=Mid(objItem.TimeWritten, 5,2)+».»+Mid(objItem.TimeWritten, 7, 2)+».»+Mid(objItem.TimeWritten, 1,4)

EventTime=Mid(objItem.TimeWritten, 9,2)+»:»+Mid(objItem.TimeWritten, 11, 2)+»:»+Mid(objItem.TimeWritten, 13,2)

Line=» INSERT INTO dbo.Logons ( Event_vch, Date_dat, User_vch, WID_vch, Address_vch) VALUES ( ‘538’, CONVERT(DATETIME, ‘»+EventDate+»‘, 110)+CONVERT(DATETIME, ‘»+EventTime+»‘, 114), ‘»+UserName+»‘,»,»)»

Этот сценарий нужно запускать с частотой как минимум один раз в сутки, чтобы журнал событий не переполнился и соответственно записи не начали затирать друг друга.

Отчетность прежде всего

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

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

Листинг 4. Сценарий для построения отчетов

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(» Отчет от «& Date &»

Рубрика: Безопасность / Сетевая безопасность | Дополнительные материалы

«)

Line=» SELECT DISTINCT(User_vch) FROM Logons»

Do While not(rs1.eof)

Line=» SELECT * FROM Logons WHERE (Date_dat > CONVERT(DATETIME, ‘» & Date &» 00:00:00’, 102)) AND (Date_dat

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

Имя пользователя Время события Событие UserID IP адрес
«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

«)

If (rs2(“Event_vch”)=»673″) Then strFile.WriteLine(» Неудачная попытка входа «)

If (rs2(«Event_vch”)=»675″) Then strFile.WriteLine(» Удачный вход «)

If (rs2(«Event_vch»)=»538″) Then strFile.WriteLine(» Выход из системы «)

strFile.WriteLine(«

«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

«)

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(» Отчет

«)

Line=» SELECT DISTINCT(User_vch) FROM Logons»

// извлекаем имена пользователей

Do While not(rs1.eof)

For i=1 to 30 // Цикл по количеству дней в месяце

Line=» SELECT MAX(Date_dat) AS Last, MIN(Date_dat) AS First, User_vch FROM Logons WHERE (Date_dat > CONVERT(DATETIME, ‘2005-11-«& i &» 00:00:00’, 102)) AND (Date_dat

If not(rs2.eof) Then

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(»

«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

Имя пользователя Время прихода Время ухода
«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

«)

strFile.WriteLine(«

«)

Set WshShell = CreateObject(«WScript.Shell»)

Return = WshShell.Run(«iexplore.exe c:\report.htm», 1)

В результате работы данного WSH-сценария будет получаться HTML-документ, в котором для каждого пользователя будут по дням расписаны дата и время входа в сеть и выхода из нее, то есть фактически время прихода и ухода на работу.

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

  1. Windows Server 2003. Справочник администратора.
  2. Microsoft SQL Server Books Online.
  3. Администрирование Microsoft SQL Server 2000. Сертификационный экзамен 70-228.
Читайте также:  Как работает samba linux
Оцените статью