
LDAP Watchdog: Инструмент мониторинга LDAP в реальном времени, совместимый с Linux, для обнаружения изменений в каталоге, предоставляющий видимость добавлений, изменений и удалений для администраторов и исследователей безопасности.
LDAP Watchdog — это инструмент, предназначенный для мониторинга изменений записей в каталоге LDAP в реальном времени. Он предоставляет механизм отслеживания и визуализации модификаций, добавлений и удалений записей пользователей и групп, позволяя пользователям сопоставлять ожидаемые изменения с реальными и выявлять потенциальные инциденты безопасности. Инструмент создавался с учётом OpenLDAP и Linux, однако может работать и в других реализациях LDAP. Он написан на Python и требует только библиотеки ldap3.
Это программное обеспечение написано Джошуа Роджерсом.
Если вас интересует что-либо из перечисленного ниже, то LDAP Watchdog для вас:
Помимо мониторинга модификаций, добавлений и удалений в каталоге LDAP, можно настроить игнорирование определённых атрибутов или даже точно настроить игнорирование атрибутов в зависимости от их старых/новых значений.
Отслеживаемые изменения могут пересылаться в Slack Webhook или выводиться в терминал (или и то, и другое). Поддерживается необязательная цветная раскраска вывода.
Ранее инструмент назывался LDAP-Stalker (поскольку мониторинг изменений каталога LDAP — отличный способ следить за изменениями в компании: узнавать о повышениях до их официального объявления, о новых сотрудниках, уволенных и т.д.). Подробности и история проекта описаны в статье в блоге.
Примечание: в приведённых ниже примерах entryCSN и modifyTimestamp можно полностью игнорировать, установив LDAP_WATCHDOG_IGNORED_ATTRIBUTES=entryCSN,modifyTimestamp.


Мониторинг в реальном времени: LDAP Watchdog непрерывно отслеживает изменения в каталоге LDAP в записях пользователей и групп.
Сравнение изменений: Инструмент сравнивает изменения между последовательными поисками в LDAP, выделяя добавления, модификации и удаления.
Проверка контрольного пользователя: LDAP Watchdog поддерживает механизм контрольного пользователя, генерируя ошибку, если изменения контрольного пользователя не найдены.
Гибкая фильтрация LDAP: Пользователи могут настраивать фильтр LDAP с помощью переменной окружения LDAP_WATCHDOG_SEARCH_FILTER, чтобы сосредоточиться на определённых классах объектов или атрибутах.
Интеграция со Slack: Получайте уведомления в реальном времени в Slack о добавленных, изменённых или удалённых записях LDAP.
Настраиваемый вывод: Консольный вывод обеспечивает чёткие и цветные индикаторы добавлений, модификаций и удалений для удобства восприятия.
Игнорируемые записи и атрибуты: Пользователи могут указать UUID и атрибуты, которые следует игнорировать в процессе сравнения.
Условно игнорируемые атрибуты: Условная фильтрация позволяет игнорировать определённые атрибуты в зависимости от типа изменения (добавления, модификации, удаления).
ldap3. Если используется Slack Webhook, также требуется пакет requests.pip install LDAP-Monitor
Для добавления поддержки Slack Webhook:
pip install LDAP-Monitor[slack]
docker pull megamansec/ldap-monitor
Или из GitHub Container Registry:
docker pull ghcr.io/megamansec/ldap-monitoring-watchdog
git clone https://github.com/MegaManSec/LDAP-Monitoring-Watchdog.git
cd LDAP-Monitoring-Watchdog
pip install ".[slack]"
export LDAP_WATCHDOG_SERVER='ldaps://ldaps.intra.lan'
export LDAP_WATCHDOG_BASE_DN='dc=mouse,dc=com'
export LDAP_WATCHDOG_USERNAME='Emily'
export LDAP_WATCHDOG_PASSWORD='qwerty123'
ldap-watchdog
Или с помощью python -m:
python -m ldap_watchdog
docker run -d \
-e LDAP_WATCHDOG_SERVER='ldaps://ldaps.intra.lan' \
-e LDAP_WATCHDOG_BASE_DN='dc=mouse,dc=com' \
-e LDAP_WATCHDOG_USERNAME='Emily' \
-e LDAP_WATCHDOG_PASSWORD='qwerty123' \
-e SLACK_WEBHOOK_URL='https://hooks.slack.com/services/[...]' \
-e LDAP_WATCHDOG_IGNORED_ATTRIBUTES='modifyTimestamp,phoneNumber,officeLocation,gecos' \
megamansec/ldap-monitor
Предоставляется скрипт установки для Debian-based систем — install.sh. При запуске с правами root этот скрипт:
/opt/ldap-watchdog./etc/ldap-watchdog.env для конфигурации./etc/systemd/system/ldap-watchdog.service), который запускает ldap-watchdog в фоне./var/log/ldap-watchdog.log и /var/log/ldap-watchdog-error.log./etc/logrotate.d/ldap-watchdog.Вы можете передать один аргумент в install.sh, чтобы задать SLACK_WEBHOOK_URL:
sudo ./install.sh "https://hooks.slack.com/services/[...]"
После установки отредактируйте /etc/ldap-watchdog.env, чтобы настроить параметры подключения к LDAP, затем перезапустите сервис:
sudo systemctl restart ldap-watchdog
Вся настройка выполняется через переменные окружения. Поддерживаются следующие переменные:
| Переменная окружения | Описание | По умолчанию |
|---|---|---|
LDAP_WATCHDOG_CONTROL_UUID |
| Переменная окружения | Описание | По умолчанию |
|---|---|---|
Переменная LDAP_WATCHDOG_CONDITIONAL_IGNORED_ATTRIBUTES принимает JSON-строку, где ключи — имена атрибутов, а значения — списки значений, которые следует игнорировать:
export LDAP_WATCHDOG_CONDITIONAL_IGNORED_ATTRIBUTES='{
"objectClass": ["posixAccount"],
"memberOf": ["cn=mailing-list-user,ou=Accessgroups,dc=mouse,dc=com", "cn=interns,ou=Accessgroups,dc=mouse,dc=com"],
"organizationalStatus": ["researcher"]
}'
export LDAP_WATCHDOG_CONTROL_UUID='a71c6e4c-8881-4a03-95bf-4fc25d5e6359'
export LDAP_WATCHDOG_SERVER='ldaps://ldaps.intra.lan'
export LDAP_WATCHDOG_BASE_DN='dc=mouse,dc=com'
export LDAP_WATCHDOG_USERNAME='Emily'
export LDAP_WATCHDOG_PASSWORD='qwerty123'
export LDAP_WATCHDOG_USE_SSL='true'
export LDAP_WATCHDOG_REFRESH_RATE='60'
export LDAP_WATCHDOG_DISABLE_COLOR_OUTPUT='false'
export LDAP_WATCHDOG_IGNORED_UUIDS='e191c564-6e6d-42c1-ae51-bda0509fe846,8655e0d9-ecdc-46ce-ba42-1fa3dfbf5faa'
export LDAP_WATCHDOG_IGNORED_ATTRIBUTES='modifyTimestamp,phoneNumber,officeLocation,gecos'
export LDAP_WATCHDOG_CONDITIONAL_IGNORED_ATTRIBUTES='{"objectClass":["posixAccount"],"memberOf":["cn=mailing-list-user,ou=Accessgroups,dc=mouse,dc=com","cn=interns,ou=Accessgroups,dc=mouse,dc=com"],"organizationalStatus":["researcher"]}'
export SLACK_WEBHOOK_URL='https://hooks.slack.com/services/[...]'
ldap-watchdog
Этот проект лицензирован под GPL3.0.
| Переменная окружения | Описание | По умолчанию |
|---|
LDAP_WATCHDOG_SERVER | URL сервера LDAP (например, ldaps://ldaps.intra.lan) | "" |
LDAP_WATCHDOG_BASE_DN | Базовое отличительное имя (Base DN) для поиска в LDAP | "" |
LDAP_WATCHDOG_USERNAME | Имя пользователя LDAP для аутентификации. Оставьте пустым для анонимного подключения. | "" |
LDAP_WATCHDOG_PASSWORD | Пароль LDAP для аутентификации. Оставьте пустым для анонимного подключения. | "" |
LDAP_WATCHDOG_USE_SSL | Установите true для использования SSL, иначе false | true |
LDAP_WATCHDOG_SEARCH_FILTER | LDAP-фильтр для записей пользователей и групп | (&(|(objectClass=inetOrgPerson)(objectClass=groupOfNames))) |
LDAP_WATCHDOG_SEARCH_ATTRIBUTE | Список атрибутов для получения через запятую. По умолчанию используется *,+ для включения операционных атрибутов. | *,+ |
LDAP_WATCHDOG_REFRESH_RATE | Интервал времени в секундах между последовательными поисками в LDAP | 60 |
LDAP_WATCHDOG_DISABLE_COLOR_OUTPUT | Установите true для отключения цветного вывода в терминале | false |
| UUID контрольного пользователя, изменения которого генерируют ошибку, если не найдены. Если задано, у этого пользователя всегда должно быть какое-то изменение при получении каталога LDAP. |
"" |
LDAP_WATCHDOG_CONTROL_USER_ATTRIBUTE | Конкретный атрибут для проверки изменений у контрольного пользователя. Если задано, этот атрибут обязательно должен измениться у пользователя с контрольным UUID. | "" |
SLACK_WEBHOOK_URLURL Slack Webhook для уведомлений. Требует дополнительного пакета slack (pip install LDAP-Monitor[slack]). |
None |
LDAP_WATCHDOG_SLACK_BULLETPOINT | Символ маркера списка, используемый в Slack и консольном выводе | \u2022 |
| Переменная окружения | Описание | По умолчанию |
|---|
LDAP_WATCHDOG_IGNORED_UUIDS | Список UUID через запятую для игнорирования при сравнении | "" |
LDAP_WATCHDOG_IGNORED_ATTRIBUTES | Список атрибутов через запятую для игнорирования при сравнении | "" |
LDAP_WATCHDOG_CONDITIONAL_IGNORED_ATTRIBUTES | JSON-строка атрибутов для условного игнорирования (см. ниже) | {} |