
GhostHound — это расширение BloodHound OpenGraph, которое выводит реанимацию tombstone-объектов Active Directory на первый план как полноценный путь атаки: оно перечисляет удаленные объекты через SHOW_DELETED, определяет, кто может их восстановить, и показывает, когда реанимированная учетная запись вновь получает членство в привилегированных группах.
GhostHound — это расширение OpenGraph для Active Directory поверх BloodHound. SharpHound и все остальные сборщики AD пропускают CN=Deleted Objects: удалённые объекты (tombstones) невидимы для стандартного анализа путей атак BloodHound, хотя механизмы AD Recycle Bin и восстановления удалённых объектов могут позволить достаточно привилегированному субъекту восстановить такой объект — и перехватить контроль над любой идентичностью, которую он представляет. GhostHound перечисляет удалённые объекты по LDAP с управляющим элементом SHOW_DELETED, определяет, кто может восстановить каждый из них, и формирует полезную нагрузку JSON OpenGraph плюс определение расширения model.json, чтобы BloodHound CE v8+ мог отображать это как полноценную часть графа.
Только авторизованное использование. Это инструмент для оценки защищённости / red-team, предназначенный для авторизованных пентестов и исследований в detection-лабораториях. Запускайте его только против тех сред Active Directory, которые вам явно разрешено тестировать.
Administrators (или явный делегированный доступ на чтение CN=Deleted Objects) в целевом домене. Непривилегированные учётные записи вообще не видят этот контейнер, независимо от используемого метода аутентификации — это ограничение, накладываемое AD, и GhostHound не может его обойти.ghosthound -d ghost.local --dc-ip 10.0.0.10 -u alice -o tombstones.json
Порядок определения пароля: --password (избегайте — виден через ps//proc/<pid>/cmdline и историю командной оболочки), затем переменная окружения LDAP_PASSWORD, и, если ничего не задано, интерактивный запрос.
По умолчанию GhostHound подключается по LDAPS (636) с проверкой сертификата. Для сред, где это не подходит, есть два флага:
--disable-ldaps — откат к незашифрованному LDAP (389). Пароль для bind передаётся открытым текстом; избегайте этого вне изолированной лаборатории.--insecure-tls — оставить LDAPS (шифрованный транспорт), но отключить проверку сертификата для самоподписанных/лабораторных сертификатов, которых нет в вашем хранилище доверия. Предпочитайте этот вариант --disable-ldaps, когда проблема только в сертификате контроллера домена.--timeout-secs (по умолчанию 30) ограничивает как первоначальное подключение, так и каждую последующую операцию LDAP, поэтому недоступный контроллер домена или неверный --dc-ip завершится ошибкой в этом окне, а не зависнет.
Полный список флагов — ghosthound --help.
GhostHound построен как workspace с приоритетом библиотек (library-first) — обоснование см. в docs/adr/0001-language-rust-library-first.md:
bloodhound-opengraph: сборщик JSON OpenGraph для BloodHound (Rust-аналог Python-библиотеки bhopengraph).ad-secdesc: парсер ntSecurityDescriptor/DACL/ACE, написанный с нуля под разрешительной лицензией (почему это не зависимость от единственного существующего Rust-аналога, распространяемого под GPL-3.0, — см. docs/adr/0003-security-descriptor-parsing-strategy.md).ad-secdesc-oracle: внутренний, непубликуемый дифференциальный тестовый стенд, сравнивающий ad-secdesc с той GPL-3.0 crate как black-box-оракулом; изолирован от сборки по умолчанию и графа зависимостей всех публикуемых crate.ad-tombstone: перечисление через LDAP SHOW_DELETED, моделирование состояния AD Recycle Bin и анализ прав на восстановление (reanimation).ghosthound: CLI, оркестрирующий всё перечисленное.crates/ad-tombstone/model.json, чтобы зарегистрировать типы узлов GhostHound_TombstoneUser/GhostHound_TombstoneComputer/GhostHound_TombstoneGroup и типы связей GhostHound_CanReanimate/GhostHound_WasMemberOf/GhostHound_SameAs (все регистрируются как traversable, поэтому участвуют в запросах кратчайших путей).crates/ad-tombstone/bridge_shadow_nodes.cypher напрямую в Neo4j (собственная строка поиска Cypher в BloodHound CE доступна только для чтения и отклонит его):
docker exec -i <graph-db-container> cypher-shell -u neo4j -p <password> < crates/ad-tombstone/bridge_shadow_nodes.cypher
docs/adr/0006-opengraph-cross-source-node-identity.md. Этот скрипт связывает их, чтобы пути стали реально обходимыми. Безопасно повторно запускать после каждого импорта.После связывания путь восстановления отображается как обычный обходимый путь: удалённый объект, который до удаления был членом Domain Admins, достижимый для любого субъекта с правом Reanimate-Tombstones, соединяется с реальным узлом Domain Admins:

Этот проект с первого дня уделяет приоритетное внимание безопасности с высокой уверенностью (docs/adr/0005-supply-chain-openssf-posture.md):
cargo deny для строгих запретов copyleft/GPL и аудита уязвимостей.cargo fuzz для защиты от паник при разборе сырых бинарных дескрипторов.unsafe в базовых библиотеках.Каталог docs/adr/ фиксирует решения, стоящие за этим дизайном (выбор языка, область аутентификации, лицензионное ограничение ad-secdesc, модель данных AD Recycle Bin, позиция по цепочке поставок), а docs/research/tombstone-viability-findings.md содержит лежащее в основе исследование.
crates/ad-tombstone/queries.json и, при желании, один раз выполните crates/ad-tombstone/privilege_zones.cypher, чтобы пометить удалённые объекты в подразделениях Tier Zero как высокоценные; для этого также нужен cypher-shell, а не строка поиска, по той же причине, что и в шаге 3 (его SET — тоже обновляющее выражение).