
LDAP Watchdog: 실시간 리눅스 호환 LDAP 모니터링 도구로, 디렉터리 변경 사항을 감지하여 관리자 및 보안 연구자에게 추가, 수정, 삭제에 대한 가시성을 제공합니다.
LDAP Watchdog는 LDAP 디렉토리의 레코드 변경을 실시간으로 모니터링하기 위해 설계된 도구입니다. 사용자 및 그룹 항목의 수정, 추가, 제거를 추적하고 시각화하는 메커니즘을 제공하여 사용자가 예상 변경 사항과 실제 변경 사항을 상호 연관시키고 잠재적인 보안 사고를 식별할 수 있도록 합니다. OpenLDAP 및 Linux를 염두에 두고 만들어졌지만, 다른 LDAP 구현에서도 작동할 수 있습니다. Python으로 작성되었으며 ldap3 라이브러리만 필요합니다.
이 소프트웨어는 Joshua Rogers가 작성했습니다.
다음 중 하나라도 관심이 있다면 LDAP Watchdog가 적합합니다:
LDAP 디렉토리의 수정, 추가, 제거를 모니터링하는 것 외에도 특정 속성을 무시하도록 구성하거나 이전/새 값에 따라 세부 속성을 무시하도록 미세 조정할 수 있습니다.
모니터링되는 변경 사항은 Slack 웹훅으로 전달하거나 터미널에 출력할 수 있습니다(또는 둘 다). 선택적으로 색상 출력도 지원됩니다.
이전에는 LDAP-Stalker로 명명되었습니다(LDAP 디렉토리 변경 사항을 모니터링하는 것은 회사 내 변화를 스토킹하는 훌륭한 방법이기 때문입니다: 발표 전 승진, 신규 채용, 퇴사 등에 대해 알 수 있습니다). 이 프로젝트의 세부 사항과 역사에 대한 블로그 게시물은 여기에서 확인할 수 있습니다.
참고: 아래 예시에서 entryCSN과 modifyTimestamp는 LDAP_WATCHDOG_IGNORED_ATTRIBUTES=entryCSN,modifyTimestamp로 설정하여 완전히 무시할 수 있습니다.


실시간 모니터링: LDAP Watchdog는 LDAP 디렉토리의 사용자 및 그룹 항목 변경을 지속적으로 모니터링합니다.
변경 비교: 도구가 연속적인 LDAP 검색 간의 변경 사항을 비교하여 추가, 수정, 삭제를 강조합니다.
제어 사용자 확인: LDAP Watchdog는 제어 사용자 메커니즘을 지원하며, 제어 사용자의 변경 사항이 발견되지 않으면 오류를 발생시킵니다.
유연한 LDAP 필터링: 사용자는 LDAP_WATCHDOG_SEARCH_FILTER 환경 변수를 사용하여 LDAP 필터링을 사용자 정의하고 특정 객체 클래스나 속성에 집중할 수 있습니다.
Slack 통합: 추가, 수정 또는 삭제된 LDAP 항목에 대해 Slack에서 실시간 알림을 받을 수 있습니다.
사용자 정의 가능 출력: 콘솔 출력은 추가, 수정, 삭제에 대한 명확하고 색상화된 표시를 제공하여 가시성을 높입니다.
무시 항목 및 속성: 사용자는 비교 과정에서 무시할 UUID와 속성을 지정할 수 있습니다.
조건부 무시 속성: 조건부 필터링을 통해 사용자는 변경 유형(추가, 수정, 삭제)에 따라 특정 속성을 무시할 수 있습니다.
ldap3 패키지. Slack 웹훅을 사용하는 경우 requests 패키지도 필요합니다.pip install LDAP-Monitor
Slack 웹훅 지원을 포함하려면:
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가 제공됩니다. 루트로 실행하면 이 스크립트는:
/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 디렉토리가 검색될 때 항상 어떤 종류의 변경이 있어야 합니다. | "" |
| 환경 변수 | 설명 | 기본값 |
|---|---|---|
SLACK_WEBHOOK_URL | 알림을 위한 Slack 웹훅 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 검색의 기본 고유 이름(DN) | "" |
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 |
LDAP_WATCHDOG_CONTROL_USER_ATTRIBUTE| 제어 사용자의 변경 사항을 확인할 특정 속성. 설정된 경우 이 속성은 제어 UUID 사용자에 대해 반드시 변경되어야 합니다. |
"" |
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 문자열 (아래 참조) | {} |