Перейти к содержимому

Active Directory

Домен Windows через LDAP, только для чтения: контроллеры домена и кто держит каждую роль FSMO, члены привилегированных групп, политика паролей, подсчет учетных записей и необработанные факты безопасности, которые аудит ищет в первую очередь — учетные записи, открытые для Kerberoasting или AS-REP roasting, неограниченное делегирование, старый пароль krbtgt, компьютеры без LAPS, выпуски Windows вне поддержки.

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

Один монитор охватывает весь домен: наведите его на один контроллер домена и DumbMonit найдет остальные в разделе конфигурации.

LDAP показывает директорию такой, какая она есть, а не журналы того, что в ней произошло. В частности:

  • Репликация. Запрашиваемый контроллер домена публикует состояние его партнеров входящей репликации (последний успех, последовательные сбои, последняя ошибка) только учетной записи, которая держит право Monitor active directory replication. Без него панель говорит replication status not readable вместо предположения. Показывается только вид запрашиваемого контроллера домена: чтобы увидеть другой, добавьте его как второй монитор.
  • Не видимо над LDAP: журналы событий (входы, блокировки по мере того, как они происходят, изменения групп как события), содержание группьовой политики, SYSVOL, зоны DNS и сами хэши паролей.
  • Последние даты входа поступают из lastLogonTimestamp, которые контроллеры домена реплицируют только каждые 9–14 дней: учетная запись, подсчитанная как неактивная, неактивна в течение двух недель.
  • Членство в группе читается с вложением (правило LDAP_MATCHING_RULE_IN_CHAIN), через member/memberOf. Первичная группа, установленная primaryGroupID, не является ссылкой member и не видна.

Две скорости:

  • При каждой проверке (каждую минуту по умолчанию): соединение и привязка, RootDSE (функциональные уровни, часы, синхронизация), объект домена (политика паролей, квота учетной записи машины), пять ролей FSMO, контроллеры домена из раздела конфигурации, привилегированные группы и их эффективные члены, функция Recycle Bin и TCP соединение к порту LDAP каждого другого контроллера домена.
  • В фоне каждые inventory_minutes (15 по умолчанию): каждая пользовательская и компьютерная учетная запись, только с атрибутами, необходимыми для выводов, на страницах по 500. Перечисление всей директории каждую минуту будет нагружать контроллеры домена впустую.

Первая проверка ждет несколько секунд для инвентаря; на большом домене выводы учета появляются при следующей проверке.

Все метрики имеют префикс dumbmonit_ad_.

МетрикаЧтоМетки
bind_ok1 когда учетная запись обслуживания принята, 0 когда контроллер домена отказывает
connect_seconds, bind_secondsвремя открытия соединения (включая TLS) и привязки
tls_verified1 когда сертификат проверяется
domain_infoзначение 1domain, forest, dc
domain_functional_level, forest_functional_level0 (2000) до 7 (2016), 10 (2025)
dc_synchronized, dc_global_catalog_readyзапрашиваемый контроллер домена завершил свою первоначальную репликацию, его глобальный каталог готов
clock_skew_secondsчасы контроллера домена минус часы хоста DumbMonit
recycle_bin_enabled1 когда включена корзина AD
dc_countконтроллеры домена домена
dc_infoзначение 1dc, site, gc, rodc, os
dc_reachable1 или 0 для каждого контроллера домена; нет рядов когда его имя не разрешается из DumbMonitdc
fsmo_roleзначение 1role (schema, domain_naming, pdc, rid, infrastructure), holder
replication_readable1 когда статус входящей репликации может быть прочитан
replication_consecutive_failures, replication_last_success_age_secondsдля каждого входящего партнера и разделаsource, naming_context
privileged_group_members, privileged_group_enabled_membersэффективные члены, вложение включено, группы исключеныgroup
privileged_group_fingerprintхэш членов: изменяется когда кто-то присоединяется или уходитgroup
users_total, users_enabled, users_disabled, users_locked_out, users_password_never_expires, users_staleпользовательские учетные записи
computers_total, computers_enabled, computers_stale, groups_totalкомпьютеры и группы
admincount_accountsпользователи, защищенные AdminSDHolder (adminCount=1)
krbtgt_password_age_secondsвозраст пароля krbtgt
laps_schema, laps_computers, laps_eligible_computersLAPS в схеме; включенные компьютеры без DC с истечением LAPS, вне всех них
password_min_length, password_history_length, password_max_age_seconds (0 = никогда), password_complexity, lockout_threshold, machine_account_quotaполитика домена по умолчанию
finding_countобъекты, затронутые находкой, 0 когда проверены и чистыеfinding, severity, title
inventory_age_seconds, scrape_errorsвозраст последнего полного инвентаря; части директории, которые не могли быть прочитаны

Привилегированные группы находятся по их хорошо известному идентификатору, а не по имени, поэтому домен, установленный на другом языке, работает одинаково: Domain Admins (RID 512), Enterprise Admins (519) и Schema Admins (518) — последние два только в корневом домене леса — и встроенные Administrators, Account Operators, Server Operators, Print Operators и Backup Operators.

Выводы — это необработанные факты — количество объектов и какие — не оценка; оценка безопасности монитора взвешивает их. У каждого есть стабильный id, серьезность по шкале оценки (низкая, средняя, высокая, критическая, показано на странице как Info, Advisory и Warning), категория, подсчет и до двадцати примеров имен учетных записей. Вывод, который был проверен и не обнаружил ничего, сохраняется с подсчетом 0, поэтому исправленная проблема становится зеленой вместо исчезновения; выводы об учетных записях появляются после завершения первого фонового инвентаря. Они обслуживаются как есть через GET /api/targets/{id}/ad/findings и опубликованы как dumbmonit_ad_finding_count{finding, severity, title}.

idСерьезностьЧто
unconstrained_delegationcriticalвключенные учетные записи, доверенные для неограниченного делегирования, контроллеры домена в стороне
kerberoastable_privilegedcriticalвключенные члены привилегированных групп с именем принципала обслуживания
asrep_roastable_usershighвключенные учетные записи с отключенной предварительной аутентификацией Kerberos (DONT_REQ_PREAUTH)
kerberoastable_usershighвключенные пользователи с именем принципала обслуживания
krbtgt_password_agehighпароль krbtgt старше 180 дней
laps_coveragehigh когда LAPS отсутствует, medium когда частичноевключенные компьютеры (контроллеры домена в стороне) без пароля LAPS
reversible_encryptionhighпользователи, чей пароль хранится с обратимым шифрованием
guest_enabledhighвстроенная учетная запись Guest (RID 501) включена
obsolete_oshighвключенные компьютеры на Windows XP, Vista, 7, 8, 2000, Server 2003, 2008 или 2012
dc_unreachablehighконтроллеры домена, чей порт LDAP не отвечает
replication_failinghighпартнеры входящей репликации с последовательными сбоями
dc_not_synchronizedhighзапрашиваемый контроллер домена не завершил свою первоначальную репликацию
fsmo_role_orphanedhighроль FSMO, удерживаемая удаленным контроллером домена
password_policyhigh ниже 8 символов или без блокировки, medium иначепропуски в политике домена по умолчанию против базовой линии: 14 символов, порог блокировки, сложность
privileged_group_sizemediumболее 5 включенных учетных записей в Domain Admins, Enterprise Admins и Administrators вместе
stale_accountsmediumвключенные пользователи и компьютеры неактивны в течение большего количества пороговых значений
protocol_transition_delegationmediumограниченное делегирование с переходом протокола
des_onlymediumучетные записи, ограниченные только ключами Kerberos DES
password_not_requiredmediumпользователи, разрешившие пустой пароль (PASSWD_NOTREQD)
privileged_password_never_expiresmediumпривилегированные пользователи, чей пароль никогда не истекает
privileged_stalemediumпривилегированные пользователи неактивны в течение stale_days_users
schema_admins_not_emptymediumSchema Admins имеет членов
functional_level_oldmediumуровень функциональности домена ниже 2012 R2
clock_skewmediumболее пяти минут между контроллером домена и DumbMonit
windows10_end_of_supportmediumвключенные компьютеры на Windows 10
admincount_orphanslowпользователи adminCount=1 больше не в привилегированной группе
password_never_expireslowвключенные пользователи, чей пароль никогда не истекает
machine_account_quotalowлюбой пользователь может присоединять компьютеры к домену
recycle_bin_disabledlowкорзина AD не включена

Встроенные правила, которые применяются:

  • Domain controller unreachable: еще один контроллер домена домена перестает отвечать на своем порту LDAP на пять минут (Warning). Запрашиваемый охватывается Monitor unreachable.
  • Active Directory bind failed: контроллер домена отказывает учетной записи обслуживания — истекший пароль, отключенная или заблокированная (Advisory).
  • Privileged group membership changed: кто-то присоединился или покинул привилегированную группу, вложение включено (Advisory, разрешается через час).
  • Active Directory replication failing: входящий партнер не работает в течение получаса (Advisory), когда статус репликации читаемый.
  • krbtgt password older than 180 days (Info).

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

Создание учетной записи обслуживания только для чтения для DumbMonit

Заголовок раздела «Создание учетной записи обслуживания только для чтения для DumbMonit»
  1. Создайте выделенного пользователя для DumbMonit, например svc-dumbmonit, и не добавляйте его ни в какую группу. Простой пользователь домена достаточно: каждый аутентифицированный пользователь может прочитать то, что читает DumbMonit. В PowerShell с модулем Active Directory:

    New-ADUser -Name svc-dumbmonit -UserPrincipalName svc-dumbmonit@corp.example.com -AccountPassword (Read-Host -AsSecureString 'Password') -Enabled $true
  2. Дайте ему длинный случайный пароль. Если в вашем домене пароли истекают, DumbMonit вызывает Active Directory bind failed в день, когда это происходит.

  3. Опционально: чтобы увидеть статус входящей репликации, предоставьте учетной записи право Monitor active directory replication на самом объекте домена. Это не раскрывает никакой пароль и никакой секрет.

    dsacls "DC=corp,DC=example,DC=com" /G "CORP\svc-dumbmonit:CA;Monitor active directory replication"
  4. LDAPS требует сертификат на каждом контроллере домена; корпоративный центр сертификации (AD CS) выдает его автоматически. Экспортируйте сертификат этого органа в кодировке Base-64 X.509 и вставьте его как сертификат CA ниже.

  5. В DumbMonit введите имя одного контроллера домена так, как его называет его сертификат, например “dc1.corp.example.com”, и войдите как svc-dumbmonit@corp.example.com. DumbMonit находит других контроллеров домена сам и проверяет, что каждый отвечает.

  6. DumbMonit только читает: он никогда не пишет в директорию, и из LAPS он читает дату истечения, никогда не пароль.

Чтобы удержать учетную запись от открытия сеанса где-либо, отклоните ей Log on locally и Log on through Remote Desktop Services путем Group Policy: привязка LDAP не затрагивается. Не ограничивайте ее с помощью Log On To или Deny access to this computer from the network: контроллеры домена тогда отказали бы в привязке.

  • Учетной записи не нужна группа, кроме Domain Users, которую имеет каждая учетная запись.
  • Не используйте управляемую учетную запись обслуживания (gMSA): она не может выполнить простую привязку LDAP.
  • Не предоставляйте Replicating Directory Changes (или All): это право DCSync, которое раскрывает каждый хэш пароля. DumbMonit никогда не нуждается в этом.
  • Monitor active directory replication позволяет только читать метаданные репликации (партнеры, последний успех, коды ошибок). Это опционально.
  • LDAPS (порт 636) по умолчанию. Каждый контроллер домена домена с корпоративным центром сертификации получает сертификат автоматически; без одного контроллер домена не прослушивает 636. Сертификат должен нести имя, которое использует DumbMonit: введите контроллер домена по его DNS имени, а не по IP адресу, если сертификат не перечисляет адрес.
  • Сертификат CA: вставьте PEM корневого (или выдающего) органа. Тогда доверяется только этот орган. Без него DumbMonit доверяет общественным корням и хранилищу системы своего контейнера, которые не знают частный корпоративный орган.
  • StartTLS (порт 389) шифрует так же, после простого приветствия в открытом тексте. Используйте его, когда порт 636 отфильтрован.
  • Примите непроверяемый сертификат сохраняет соединение зашифрованным, но принимает любой сертификат: кто-то на пути мог выдать себя за контроллер домена и получить пароль учетной записи обслуживания.
  • LDAP channel binding (LdapEnforceChannelBinding) касается привязок NTLM и Kerberos над TLS; простая привязка, которую использует DumbMonit, не затрагивается.
ПолеЗначение
Имя пользователяsvc-dumbmonit@corp.example.com, CORP\svc-dumbmonit, или полный DN учетной записи
Парольпароль учетной записи, зашифрованный и больше никогда не показываемый

Пустой пароль отклоняется: Active Directory принял бы его как неаутентифицированную привязку без проверки чего-либо.

ПараметрПо умолчаниюЧто
Безопасность соединения (security)ldapsldaps, starttls или plain
Порт (port)636, или 389используется если адрес не дает один
Сертификат CA (ca_cert)PEM органа, выдавшего сертификаты контроллеров домена
Примите непроверяемый сертификат (insecure_tls)выкл
Разрешите простой LDAP (allow_plaintext)выклтребуется для plain
Проверьте каждый контроллер домена (check_all_dcs)вклTCP соединение к порту LDAP каждого контроллера домена
Неактивный пользователь после (stale_days_users)90дни
Неактивный компьютер после (stale_days_computers)90дни
Полный инвентарь каждый (inventory_minutes)15минуты, 1 до 1440
Timeout (request_timeout_seconds)8для каждой операции LDAP, 1 до 60
  • Сертификат TLS отклонен: вставьте сертификат органа как сертификат CA и введите контроллер домена по имени, которое его сертификат перечисляет.
  • Привязка отклонена: неправильное имя пользователя или пароль (результат LDAP 49): диагностический код контроллера домена переведен — пароль истек, учетная запись отключена, заблокирована или должна изменить пароль при следующем входе.
  • Контроллер домена требует защищенное соединение: подпись LDAP принуждается; переключитесь на LDAPS или StartTLS.
  • Контроллер домена показывается как не разрешенный: его имя не разрешается из хоста DumbMonit. Наведите DNS DumbMonit на DNS серверы домена или отметьте Check every domain controller. Не разрешенные имена никогда не вызывают оповещение.
  • Статус репликации не читаемый: предоставьте Monitor active directory replication как в шаге 3 или примите, что репликация не показана.