Оповещение при добавлении пользователя в группу администраторов Active Directory

Если инфраструктурой домена Active Directory управляет несколько администраторов, бывает трудно отследить кто конкретно внес изменения, добавил или удалил пользователя из группы безопасности. В этой статье мы покажем, как с помощью политика аудита и скрипта PowerShell настроить отправку автоматических оповещений (по email или в мессенджер), когда новые пользователь был добавлен в одну их привилегированных (административных) групп AD (таких как Domain Admins , Enterprise Admins , Schema Admins и т.д.).

Включить политику аудита добавления пользователей в группы AD

Включите для контроллеров доменов политику аудита изменения в группах безопасности AD.

  1. Откройте консоль управления доменными политиками Group Policy Management ( gpmc.msc );
  2. ОтредактируйтеDefault Domain Controller Policy;
  3. ПерейдитевразделComputer Configuration -> Policies -> Windows Settings -> Security Settings -> Advanced Audit Configuration -> Account Management. Включите параметр Audit Security Group Management с логированием успешных событий (Success);Включить политику аудита изменений состава групп в Active Directory
  4. После применения новых настроек GPO при любых изменения в группах AD (создаение, удаление, группы, добавлени/удаление пользователей в группы) в журнале Security контроллера домена будет появляться соотвествующее событие.

Так, при добавлении пользователя в группу появится событие с EventID 4732

A member was added to a security-enabled global group.

Или EventID 4728:

A member was added to a security-enabled local group.

В описании события видно:

  • Какая группа была изменена: Group Name: DnsAdmins
  • Какой пользователь был добавлен в группу: Member: Security ID:
  • Кто изменил состав группы: Subject: Account Name:

Событие 4732: состав привелигированной группы AD был изменен

Получить список измененных групп в AD с помощью PowerShell

Получить информацию о всех последних событиях 4732 и 4728 из Event Viewer на контроллере домена за последние 24 часа можно с помощью PowerShell командлета Get-WinEvent:

$time = (get-date) - (new-timespan -hour 24)
$result = Get-WinEvent -FilterHashtable @{logname='Security';id=4732,4728;StartTime=$Time} -ErrorAction SilentlyContinue| ForEach-Object {
    $eventXml = ([xml]$_.ToXml()).Event
    [PSCustomObject]@{
        TimeCreated   = $eventXml.System.TimeCreated.SystemTime -replace '\.\d+.*$'
        NewUser = $eventXml.EventData.Data[0]."#text"
        Group = $eventXml.EventData.Data[2]."#text"
        Admin = $eventXml.EventData.Data[6]."#text"
        Computer      = $eventXml.System.Computer
    }
}
$result | Format-Table -AutoSize

powershell скрипт для поиска событий изменения групп администраторов AD

В результатах скрипта будет отображаться имя группы AD, которая изменилась, какая учетная запись была добавлена и кто из администраторов добавил пользователя в группу (скрипт по примеру из статьи Получение списка пользователей AD, созданных за 24 часа).

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

$AdminGroups = @('Enterprise Admins', 'Domain Admins', 'DNSAdmins', 'Microsoft Exchange Servers')

Список привилегированных групп в AD можно найти здесь https://learn.microsoft.com/en-us/defender-for-identity/entity-tags?WT.mc_id=AZ-MVP-5004810#sensitive-entities.

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

$filteredevents=$result | Where-Object { $_.Group -in $AdminGroups }

Список изменений в группах active directory

Теперь нужно отправить администраторам уведомление об изменении привилегированных групп в AD. Можно отправить email с помощью командлета Send-MailMessage

If ($filteredevents)
{
  $mailbody= $filteredevents|ConvertTo-Html
  {Send-MailMessage -SmtpServer msg01 -From [email protected] -To [email protected] -Subject "Были внесены изменения в административные группы AD!" -Body $mailbody -Priority High}
}

Или вы можете отправить оповещение в ваш мессенджер:

Назначить скрипт аудита групп администратора на все контроллеры домена

Если в вашем домена несколько контроллеров домена, такой скрипт нужно запускать на каждом из них. Дело в том, что события изменение членства группы логгируется на контроллере домена, к которому подключена ваша оснастка ADUC или консоль PowerShell с командой Add-ADGroupMember (обычно это текущий Logon Server). Поэтому нужно проверить каждый DC на наличие указанных событий. Вы можете перебрать в цикле все контроллеры домена:

$DCs = Get-ADDomainController -Filter *
foreach ($DC in $DCs){
Get-WinEvent -ComputerName $DC -FilterHashtable …

}

Но удобнее создать на всех DC задание планировщика, которое будет запускать ваш PowerShell скрипт по расписанию.

  1. Скопируйте ваш PS1 файл с PowerShell скриптом в каталог NETLOGON ( \\winitpro.loc\NETLOGON );
  2. Назначьтена OU Domain Controllers новую GPO, которая создаст на них новое задание планировщика (Computer Configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks), которое запускает ваш PowerShell скрипт;
    On a schedule -> Daily ,
    Action: Start a program
    Program/Script: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
    Add Arguments (optional): -ExecutionPolicy Bypass -command "& \\winitpro.loc\NETLOGON\CheckADAdminsGroups.ps1"
  3. Таким образом состав групп администраторов будет проверяться один раз в день и в случае добавления в них новых пользователей администратор будет получать уведомление. В уведомлении будет указана группа, новые пользователь и информацию о том, кто добавил пользователя в группу AD.
Если вы хотите получать уведомление немедленно при добавлении пользователя в группу админов, нужно привязать задание планировщика к кодам событий 4732 и 4728 (Trigger -> New -> On an event -> Custom -> New Event Filter). Пример описан в статье Как запустить скрипт (действие) при запуске (завершении) определенной программы в Windows?

В доменных инфраструктурах с большим количеством контроллеров домена и администраторов можно развернуть централизованную система сбора логов со всех DC (ELK, GrayLog, splunk, и т.д)


Предыдущая статья Следующая статья


Комментариев: 16 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)