Active Directory
Домен Windows через LDAP, только для чтения: контроллеры домена и кто держит каждую роль FSMO, члены привилегированных групп, политика паролей, подсчет учетных записей и необработанные факты безопасности, которые аудит ищет в первую очередь — учетные записи, открытые для Kerberoasting или AS-REP roasting, неограниченное делегирование, старый пароль krbtgt, компьютеры без LAPS, выпуски Windows вне поддержки.
DumbMonit привязывается с выделенной учетной записью обслуживания, которая является простым пользователем домена, членом ни одной группы. В Active Directory каждый аутентифицированный пользователь может прочитать то, что читает DumbMonit; никаких прав администратора не требуется и не должно быть дано. DumbMonit никогда не пишет в директорию, никогда не читает атрибут пароля (из LAPS он читает дату истечения, никогда не пароль) и никогда не просит права репликации, которые раскрыли бы секреты.
Один монитор охватывает весь домен: наведите его на один контроллер домена и DumbMonit найдет остальные в разделе конфигурации.
Что LDAP может и не может сказать
Заголовок раздела «Что LDAP может и не может сказать»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_ok | 1 когда учетная запись обслуживания принята, 0 когда контроллер домена отказывает | |
connect_seconds, bind_seconds | время открытия соединения (включая TLS) и привязки | |
tls_verified | 1 когда сертификат проверяется | |
domain_info | значение 1 | domain, forest, dc |
domain_functional_level, forest_functional_level | 0 (2000) до 7 (2016), 10 (2025) | |
dc_synchronized, dc_global_catalog_ready | запрашиваемый контроллер домена завершил свою первоначальную репликацию, его глобальный каталог готов | |
clock_skew_seconds | часы контроллера домена минус часы хоста DumbMonit | |
recycle_bin_enabled | 1 когда включена корзина AD | |
dc_count | контроллеры домена домена | |
dc_info | значение 1 | dc, site, gc, rodc, os |
dc_reachable | 1 или 0 для каждого контроллера домена; нет рядов когда его имя не разрешается из DumbMonit | dc |
fsmo_role | значение 1 | role (schema, domain_naming, pdc, rid, infrastructure), holder |
replication_readable | 1 когда статус входящей репликации может быть прочитан | |
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_computers | LAPS в схеме; включенные компьютеры без 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_delegation | critical | включенные учетные записи, доверенные для неограниченного делегирования, контроллеры домена в стороне |
kerberoastable_privileged | critical | включенные члены привилегированных групп с именем принципала обслуживания |
asrep_roastable_users | high | включенные учетные записи с отключенной предварительной аутентификацией Kerberos (DONT_REQ_PREAUTH) |
kerberoastable_users | high | включенные пользователи с именем принципала обслуживания |
krbtgt_password_age | high | пароль krbtgt старше 180 дней |
laps_coverage | high когда LAPS отсутствует, medium когда частичное | включенные компьютеры (контроллеры домена в стороне) без пароля LAPS |
reversible_encryption | high | пользователи, чей пароль хранится с обратимым шифрованием |
guest_enabled | high | встроенная учетная запись Guest (RID 501) включена |
obsolete_os | high | включенные компьютеры на Windows XP, Vista, 7, 8, 2000, Server 2003, 2008 или 2012 |
dc_unreachable | high | контроллеры домена, чей порт LDAP не отвечает |
replication_failing | high | партнеры входящей репликации с последовательными сбоями |
dc_not_synchronized | high | запрашиваемый контроллер домена не завершил свою первоначальную репликацию |
fsmo_role_orphaned | high | роль FSMO, удерживаемая удаленным контроллером домена |
password_policy | high ниже 8 символов или без блокировки, medium иначе | пропуски в политике домена по умолчанию против базовой линии: 14 символов, порог блокировки, сложность |
privileged_group_size | medium | более 5 включенных учетных записей в Domain Admins, Enterprise Admins и Administrators вместе |
stale_accounts | medium | включенные пользователи и компьютеры неактивны в течение большего количества пороговых значений |
protocol_transition_delegation | medium | ограниченное делегирование с переходом протокола |
des_only | medium | учетные записи, ограниченные только ключами Kerberos DES |
password_not_required | medium | пользователи, разрешившие пустой пароль (PASSWD_NOTREQD) |
privileged_password_never_expires | medium | привилегированные пользователи, чей пароль никогда не истекает |
privileged_stale | medium | привилегированные пользователи неактивны в течение stale_days_users |
schema_admins_not_empty | medium | Schema Admins имеет членов |
functional_level_old | medium | уровень функциональности домена ниже 2012 R2 |
clock_skew | medium | более пяти минут между контроллером домена и DumbMonit |
windows10_end_of_support | medium | включенные компьютеры на Windows 10 |
admincount_orphans | low | пользователи adminCount=1 больше не в привилегированной группе |
password_never_expires | low | включенные пользователи, чей пароль никогда не истекает |
machine_account_quota | low | любой пользователь может присоединять компьютеры к домену |
recycle_bin_disabled | low | корзина 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»-
Создайте выделенного пользователя для 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 -
Дайте ему длинный случайный пароль. Если в вашем домене пароли истекают, DumbMonit вызывает Active Directory bind failed в день, когда это происходит.
-
Опционально: чтобы увидеть статус входящей репликации, предоставьте учетной записи право Monitor active directory replication на самом объекте домена. Это не раскрывает никакой пароль и никакой секрет.
dsacls "DC=corp,DC=example,DC=com" /G "CORP\svc-dumbmonit:CA;Monitor active directory replication" -
LDAPS требует сертификат на каждом контроллере домена; корпоративный центр сертификации (AD CS) выдает его автоматически. Экспортируйте сертификат этого органа в кодировке Base-64 X.509 и вставьте его как сертификат CA ниже.
-
В DumbMonit введите имя одного контроллера домена так, как его называет его сертификат, например “dc1.corp.example.com”, и войдите как svc-dumbmonit@corp.example.com. DumbMonit находит других контроллеров домена сам и проверяет, что каждый отвечает.
-
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 и сертификаты
Заголовок раздела «LDAPS и сертификаты»- 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) | ldaps | ldaps, 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 или примите, что репликация не показана.