
LDAP Watchdog: リアルタイムでLinux互換のLDAP監視ツール。ディレクトリの変更を検出し、管理者やセキュリティ研究者に対して追加、変更、削除を可視化します。
LDAP Watchdogは、LDAPディレクトリ内のレコード変更をリアルタイムで監視するために設計されたツールです。ユーザーやグループエントリに対する変更、追加、削除を追跡し可視化する仕組みを提供し、期待される変更と実際の変更を関連付けて潜在的なセキュリティインシデントを特定できるようにします。このツールはOpenLDAPとLinuxを念頭に置いて作成されましたが、他のLDAP実装でも動作する可能性があります。Pythonで記述されており、ldap3ライブラリのみを必要とします。
このソフトウェアはJoshua Rogersによって作成されました。
以下のいずれかに興味があるなら、LDAP Watchdogは最適です:
LDAPディレクトリ内の変更、追加、削除を監視することに加えて、特定の属性を無視するように設定したり、古い値/新しい値に応じて細かい属性を無視するように微調整することもできます。
監視された変更は、Slack webhookに転送するか、ターミナルに出力するか(あるいはその両方)することができます。オプションで色付き出力もサポートしています。
以前はLDAP-Stalkerという名前でした(LDAPディレクトリの変更を監視することは、会社内の変更をストーキングする優れた方法だからです。発表前の昇進、新入社員、退職者などを知ることができます)。このプロジェクトの詳細と歴史に関するブログ記事はこちらでご覧いただけます。
注:以下の例では、LDAP_WATCHDOG_IGNORED_ATTRIBUTES=entryCSN,modifyTimestampを設定することで、entryCSNとmodifyTimestampを完全に無視できます。


リアルタイム監視: LDAP Watchdogは、ユーザーおよびグループエントリの変更についてLDAPディレクトリを継続的に監視します。
変更の比較: このツールは、連続するLDAP検索間の変更を比較し、追加、変更、削除を強調表示します。
コントロールユーザー検証: LDAP Watchdogはコントロールユーザー機構をサポートし、コントロールユーザーの変更が見つからない場合にエラーをトリガーします。
柔軟なLDAPフィルタリング: ユーザーはLDAP_WATCHDOG_SEARCH_FILTER環境変数を使用してLDAPフィルタリングをカスタマイズし、特定のオブジェクトクラスや属性に焦点を当てることができます。
Slack統合: 追加、変更、削除されたLDAPエントリについて、Slackでリアルタイム通知を受け取ります。
カスタマイズ可能な出力: コンソール出力は、追加、変更、削除を明確かつ色分けして表示し、視認性を高めます。
無視するエントリと属性: ユーザーは比較プロセス中に無視する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系のインストールスクリプトinstall.shが提供されています。これをrootで実行すると、以下の処理が行われます:
/opt/ldap-watchdogにPython仮想環境を作成します。/etc/ldap-watchdog.envに作成します。/etc/systemd/system/ldap-watchdog.service)をインストールし、有効化します。/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 | コントロールユーザーのUUID。このユーザーの変更が見つからない場合にエラーをトリガーします。設定した場合、LDAPディレクトリが取得されるたびにこのユーザーに何らかの変更が常にあるべきです。 | "" |
LDAP_WATCHDOG_CONTROL_USER_ATTRIBUTE | コントロールユーザーの変更を確認する特定の属性。設定した場合、コントロールUUIDユーザーに対してこの属性が_必ず_変更されている必要があります。 | "" |
| 環境変数 | 説明 | デフォルト |
|---|---|---|
SLACK_WEBHOOK_URL | 通知用Slack Webhook URL。slack拡張が必要です()。 |
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 | LDAPサーバーのURL(例:ldaps://ldaps.intra.lan) | "" |
LDAP_WATCHDOG_BASE_DN | LDAP検索のベース識別名 | "" |
LDAP_WATCHDOG_USERNAME | 認証用LDAPユーザー名。匿名バインドの場合は空のままにします。 | "" |
LDAP_WATCHDOG_PASSWORD | 認証用LDAPパスワード。匿名バインドの場合は空のままにします。 | "" |
LDAP_WATCHDOG_USE_SSL | SSLを使用するにはtrue、それ以外は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 |
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文字列(下記参照) | {} |