Создайте отчеты о входе в систему Active Directory с помощью PowerShell. Как мы знаем, аудит в среде Active Directory (AD) критичен для безопасности. Важно узнать, что пользователь сделал и в какую систему он вошел. Поэтому одной из основных задач, с которыми сегодня сталкиваются большинство администраторов, является поиск места входа пользователя. В этой статье будет представлена пошаговая инструкция по использованию встроенного в Просмотр событий на контроллерах домена (DC), поиску места входа пользователя и созданию полного отчета о входе с использованием PowerShell.
Итак, продолжаем с статьей Создайте отчеты о входе в систему Active Directory с помощью PowerShell.
Создание отчетов о входе в систему Active Directory
Предварительные требования
С учетом того, что мы будем использовать Просмотр событий и мониторить события в течение нескольких дней, нам необходимо обеспечить достаточный размер журналов событий. Хотя мы уже могли включить эти настройки, мы еще раз их проверим, если другим людям нужно увеличить размер журнала событий.
Если мы не изменяли никакую конфигурацию ранее, размер по умолчанию нашего журнала событий должен быть около 64 МБ. Однако увеличение размера может потребоваться, в первую очередь, если мы имеем дело с несколькими контроллерами домена в нашей среде. Например, если мы хотим отслеживать аудит входов на несколько дней, нам понадобится гораздо больше места в просмотрщике событий.
Создание GPO
1. В качестве первого шага по подготовке среды мы создадим объект Групповой политики (GPO), содержащий настройки размера журнала событий. Откроем консоль Управления групповой политикой (GPMC), создадим GPO. Для открытия консоли выполните поиск по Групповая политика или введите gpmc.msc в окне Выполнить (Ctrl+R).
2. В навигационной панели разверните Лес: ИмяЛеса, разверните Домены, разверните ИмяДомена, затем нажмите Объекты групповой политики. Далее нажмите Действие, а затем нажмите Создать.
3. Найдите путь ниже во вновь созданной GPO:
4. Измените размер события Безопасность в соответствии с нашими средами и требованиями. Кроме того, если нет проблем с дисковым пространством и производительностью, можно настроить параметры на максимальном уровне 4 ГБ.
5. Следующий шаг является необязательным, если на контроллерах домена нет настроек брандмауэра. Однако мы должны иметь возможность запросить журналы событий с нескольких контроллеров домена и, возможно, с нескольких сайтов. В связи с этим целесообразно убедиться, что Удаленный мониторинг журнала событий включен через брандмауэр.
К сожалению, возможно только кратко рассмотреть настройки брандмауэра. Тем не менее, на изображении ниже показаны все необходимые параметры для включения Удаленного мониторинга журнала событий на наших контроллерах домена.
6. Теперь подключите только что созданный GPO к OU Контроллеров домена и дождитесь заполнения некоторых событий. Событие зависит от среды, и мы можем начать запросы аудитов сразу же или подождать несколько дней. Теперь, когда мы правильно настроили наш журнал, мы можем перейти к выполнению сценария PowerShell, который будет обсуждаться в следующем разделе статьи.
Следующий шаг – создание отчетов о входе в Active Directory с помощью PowerShell, это основная часть заголовка статьи. Пожалуйста, продолжайте чтение.
Также читайте Попробуйте инструменты мониторинга Azure AD
Создание отчетов о входе в AD с помощью PowerShell
git clone https://github.com/InfraSOS/Get-UserLastLogon.git
Сценарий использует модуль ActiveDirectory , но нам не нужно будет устанавливать его вручную, так как сценарий проверяет наличие модуля в нашей системе. После загрузки запустите PowerShell и перейдите в папку или диск, на котором находится загруженный сценарий.
Если мы отредактируем загруженный файл, мы увидим четыре основные функции. Эти четыре основные функции – это Param, Begin, Process и End.
Объяснение сценария PowerShell
Секция Param содержит параметры, необходимые для запуска сценария. Как показано в блоке кода ниже, для работы сценария нам нужны три параметра. Эти параметры мы объясним позже.
param (
[Parameter(Mandatory = $true)]
[String]$User,
[Parameter(Mandatory = $false)]
[Array]$Server = @((Get-ADDomainController -Filter *).Name) ,
[Parameter(Mandatory = $false)]
[Array]$Days = 90
)
Как лучшая практика, переменные и общая информация должны размещаться в разделе Begin, чтобы избежать перегруженности основной части сценария.
[Array]$Table = $null
$DomainControllers = $Server
$AllDomainControllers = @((Get-ADDomainController -Filter *).Name)
[Array]$ExclusionList = @($User,'krbtgt')
$DCCount = $DomainControllers.Count
$UPN = ((get-addomain).DNSRoot).toUpper()
$DateFilter = "-"+$days
$DateThen = (((Get-Date).AddDays($DateFilter)).ToString("yyyy-MM-dd"))+"T20:30:00.000Z"
$DateNow = (Get-Date -Format yyyy-MM-dd)+"T20:30:00.999Z"
$ForestRoot = ((Get-ADForest).rootDomain).toUpper()
$Counter = 0
Сценарий Begin также формулирует первичный фильтр для запроса журнала событий. Затем сценарий отправит этот фильтр на каждый контроллер домена для сбора информации. Как мы видим в этих строках, есть некоторые ранее обсужденные переменные, такие как $UPN и $User.
[xml]$FilterXML = @"
*[System[(EventID=4769)
and TimeCreated[@SystemTime>='$DateThen'
and @SystemTime<='$DateNow']]]
and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]
"@
Раздел Процесс является основной функцией, в которой сценарий запрашивает данные для создания отчета. Блок кода ниже – это команда foreach, которая выполняется каждый раз при входе в другой центр обработки данных для запроса данных.
Foreach($DCName in $DomainControllers){...}
Сначала мы собираем события на нашем первом ЦОДе. Затем следующим шагом является извлечение ценной информации из каждого события и сохранение ее в объекте перед переходом к следующему событию. После завершения работы с первым ЦОДом сценарий переходит к другому ЦОДу и повторяет процесс.
Наконец, раздел Конец покажет окончательно сгенерированный отчет.
end{
$Table = $Table | Where-Object {($_.Location -notin $AllDomainControllers) -and ($_.Location -ne $ForestRoot) -and ($_.Location -notin $ExclusionList)}
$Table | Sort Time | FT Time,User,Location,Domain,DC -AutoSize
}
Также прочтите Проверьте управление службой каталогов Active Directory
Запуск сценария PowerShell
Чтобы начать, откройте PowerShell и введите следующую команду ниже, чтобы загрузить кмдлет в память.
. .\Get-UserLastLogon.ps1
Когда мы нажимаем клавишу Enter, может возникнуть ошибка, указывающая на то, что выполнение скрипта отключено из-за политики выполнения PowerShell, или ошибки не будет. В случае ошибки откройте консоль PowerShell с административными привилегиями, введите следующие команды ниже, чтобы разрешить выполнение скриптов, а затем повторите предыдущую команду.
Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1
Теперь, когда скрипт полностью загружен, давайте рассмотрим его в качестве примера для выяснения, на каких рабочих станциях пользователь выполнил вход в течение последних 15 дней. Во-первых, введите имя пользователя с –User параметром и временной рамкой с –Days параметром и нажмите Enter.
Get-UserLastLogon -User marion -Days 15
Как вы помните, у нас есть еще один параметр, называемый -Сервер параметр. Если мы не укажем значение для -Сервер параметра, мы будем рассматривать все домен контроллеры для заполнения этого параметра. Теперь, если у нас есть конкретный DC, на который мы хотим ориентироваться для поискового запроса, мы можем указать его в качестве значения -Сервер параметра.
После запуска скрипт отобразит полосу прогресса, информирующую нас о его статусе и о том, сколько времени потребуется для завершения. Теперь мы можем увидеть отчет, сгенерированный после запуска скрипта. Отчет сообщает нам, на какие рабочие станции пользователь вошел за последние 15 дней.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Понимание PowerShell скрипта
Когда мы запускаем скрипт, вначале он проверяет, существует ли учетная запись пользователя или нет. Следовательно, очевидно, что если введенное имя пользователя или идентификатор не существует, нам не нужно запускать оставшиеся скрипты.
В следующем шаге мы вычисляем необходимые переменные и отправляем их в DC вместе с фильтром, необходимым для запроса событий для нашего выбранного пользователя. Наконец, скрипт отправляет запрос к первому доменному контроллеру в списке, и запрошенные события, связанные с выбранным пользователем, сохраняются в переменной.
Список сохраненных событий, с которых скрипт начнет работу, и последующие шаги будут заключаться в сборе ценной информации из событий. Наконец, скрипт присваивает извлеченные данные в переменную, такую как домен, имя DC, время входа и рабочая станция входа.
В конце скрипт проходит через следующий DC и повторяет процесс.
Скрипт отобразит нам список компьютеров, как только он свяжется с последним DC и соберет его информацию.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Спасибо за чтение “Создание отчетов о входах в Active Directory с помощью PowerShell”. Мы заключаем.
Заключение о создании отчетов о входах в Active Directory
В этом руководстве мы узнали, как использовать важный журнал событий и объединить его с сценариями PowerShell, чтобы найти список рабочих станций, на которых пользователь входил в систему. Сценарий запрашивает все контроллеры домена, находит результаты и разбирает их в удобочитаемом формате, который мы можем экспортировать в виде отчета. Помните, что нужно выполнить проверку выполнения предварительных требований перед запуском предоставленного сценария.
Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/