“Запуск от имени администратора” против AD LastLogonDate

Вопрос или проблема

В моей Active Directory есть 2 типа учетных записей пользователей:

  • Обычная учетная запись (назовем ее CONTOSO\Panki), которая используется для входа на клиент и запуска Office и т.д.
  • Отдельная учетная запись с правами локального администратора на моем клиенте (назовем ее CONTOSO\Panki.admin), чтобы я мог настраивать параметры и т.д.

Все локальные учетные записи администраторов (CONTOSO\$USER.admin) находятся в отдельном OU Active Directory. Чтобы ограничить риск, связанный с этими пользователями, я написал скрипт, который проверяет LastLogonDate на соответствие определенному времени и отключает учетную запись, если она не выполняла вход в течение этого времени.

Я только что заметил, что когда пользователи используют учетную запись .admin с функцией “Запуск от имени администратора”, события входа не регистрируются в Active Directory.

Я знаю, что LastLogonTimestamp ненадежен и может различаться между контроллерами домена, но я проверил все свои локальные контроллеры домена, и ни один из них не может подтвердить, что я использовал свою учетную запись panki.admin сегодня для запуска cmd.exe от имени администратора (даже наш аудиторский механизм не показывает этот вход).

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

Возможно ли зарегистрировать эти события “Запуск от имени” в Active Directory как обычный вход?

LastLogonTimestamp и LastLogonDate — это одно и то же свойство и точны только в течение 14 дней, но они реплицируются на каждый контроллер домена. Вам нужно LastLogon, который обновляется при выполнении действий с запуском от имени администратора или любого действия, которое проверяет с контроллерами домена.

Свойство LastLogon не реплицируется, поэтому вам нужно проверять каждый контроллер домена отдельно, если вы не уверены, с каким именно они работали. Попробуйте что-то вроде этого:

# перебор каждого контроллера домена
$report = Foreach ($DC in (Get-ADDomainController -Filter * )) {
  # получение времени последнего входа - измените имя пользователя здесь
  Get-ADUser 'MyUser' -Properties LastLogonDate,LastLogon -Server $DC.Name |
    # сделать последний вход читабельным
    Select @{n='ServerName';e={$DC.name}},Name,LastLogonDate,LastLogon,
      @{n='LastLogonAsDate';e={[datetime]::FromFileTime($_.LastLogon)}}
}
# вывод в виде таблицы
$report | Format-Table

Это выводит реальное время последнего входа с каждого контроллера домена, и вы можете видеть, как LastLogonDate отстает:

ServerName  Name   LastLogonDate                  LastLogon LastLogonAsDate       
----------  ----   -------------                  --------- ---------------       
Server-DC01 MyUser 10/21/2024 7:00:36 PM 133747730636036025 10/30/2024 10:44:23 AM
Server-DC02 MyUser 10/21/2024 7:00:36 PM 133748638663138461 10/31/2024 11:57:46 AM

Ответ или решение

Различия между "Запуск от имени администратора" и атрибутом LastLogonDate в Active Directory

В данной статье мы рассмотрим две ключевые концепции в управлении пользователями в Active Directory (AD): использование функции "Запуск от имени администратора" и соответствующие атрибуты, такие как LastLogonDate и LastLogon. Это критически важные аспекты для обеспечения безопасности и мониторинга аккаунтов, особенно когда дело доходит до учетных записей с повышенными правами.

Учитываемая среда

В вашем сценарии существуют две категории учетных записей:

  1. Обычная учетная запись (CONTOSO\Panki), используемая для входа на клиент и выполнения обычных задач, таких как работа с Office.
  2. Учетная запись с правами администратора (CONTOSO\Panki.admin), предоставляющая доступ к административным функциям на клиентском устройстве.

Также, учетные записи с правами администратора организованы в отдельный организационный блок (OU) в Active Directory, что позволяет лучше управлять и контролировать их безопасность. Вы создали скрипт для проверки атрибута LastLogonDate и отключения неактивных учетных записей, что является разумным шагом для минимизации рисков.

Проблема с функциональностью "Запуск от имени администратора"

Вы правильно заметили, что использование функции "Запуск от имени администратора" не фиксируется в Active Directory. Эта функция позволяет пользователям запускать приложения с повышенными привилегиями, однако при этом фактическая аутентификация может использовать кешированные учетные данные. Это значит, что Active Directory не регистрирует эту активность, так как запросы на аутентификацию обрабатываются локально на компьютере.

Атрибуты LastLogon и LastLogonTimestamp

Для отслеживания активности пользователей в Active Directory, важно понимать различия между атрибутами:

  • LastLogon: Этот атрибут не реплицируется и требует проверки на каждом контроллере домена (DC) для получения актуальных данных о последнем входе пользователя.
  • LastLogonDate и LastLogonTimestamp: Эти атрибуты реплицируются, однако LastLogonTimestamp может иметь значительные задержки (до 14 дней).

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

Как проверить LastLogon атрибут

Если вы хотите получить последнюю информацию о входе для учетной записи пользователя, используйте следующий пример PowerShell скрипта:

# Перебираем каждый контроллер домена
$report = Foreach ($DC in (Get-ADDomainController -Filter * )) {
  # Получаем время последнего входа пользователя
  Get-ADUser 'CONTOSO\Panki.admin' -Properties LastLogonDate, LastLogon -Server $DC.Name |
    Select @{n='ServerName';e={$DC.name}}, Name, LastLogonDate, LastLogon,
      @{n='LastLogonAsDate';e={[datetime]::FromFileTime($_.LastLogon)}}
}
# Выводим информацию в виде таблицы
$report | Format-Table

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

Рекомендации по безопасности

  1. Мониторинг учетных записей администратора: Регулярно проверяйте активность и состояние учетных записей с повышенными правами. Используйте ваш скрипт для отключения неактивных учетных записей.

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

  3. Обучение пользователей: Обучайте пользователей, как правильно использовать функциональность "Запуск от имени администратора" и объясняйте, какие риски это может нести.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...