
GhostHound ist eine BloodHound-OpenGraph-Erweiterung, die die Reanimation von Active-Directory-Tombstones als erstklassigen Angriffspfad sichtbar macht, gelöschte Objekte über SHOW_DELETED aufzählt, abbildet, wer sie wiederherstellen kann, und offenlegt, wann eine reanimierte Identität wieder privilegierte Gruppenmitgliedschaft erlangt.
GhostHound ist eine BloodHound OpenGraph-Erweiterung für Active Directory. SharpHound und alle anderen AD-Collectoren überspringen CN=Deleted Objects: gelöschte Objekte (Tombstones) sind für die standardmäßige BloodHound-Angriffspfadanalyse unsichtbar, obwohl der AD-Papierkorb und die Tombstone-Reanimationsmechanismen es einem ausreichend privilegierten Principal ermöglichen können, eines wiederherzustellen — und die Identität zu übernehmen, die es repräsentiert. GhostHound ermittelt Tombstones über LDAP mit der SHOW_DELETED-Steuerung, bestimmt, wer jeden einzelnen reanimieren kann, und erzeugt eine OpenGraph-JSON-Nutzlast sowie eine model.json-Erweiterungsdefinition, damit BloodHound CE v8+ dies als erstklassigen Teil des Graphen darstellen kann.
Nur für autorisierte Nutzung. Dies ist ein Offensive-Security-/Red-Team-Tool, das für autorisierte Penetrationstests und Forschung in Detektions-Laboren vorgesehen ist. Führen Sie es nur gegen Active-Directory-Umgebungen aus, für die Sie ausdrücklich zur Testdurchführung autorisiert sind.
Administrators-äquivalente Rechte (oder eine explizite Delegierung von Lesezugriff auf CN=Deleted Objects) in der Zieldomäne. Nicht privilegierte Konten können den Container überhaupt nicht sehen, unabhängig davon, welche Authentifizierungsmethode verwendet wird — dies ist eine von AD erzwungene Einschränkung, die GhostHound nicht umgehen kann.ghosthound -d ghost.local --dc-ip 10.0.0.10 -u alice -o tombstones.json
Reihenfolge der Passwortauflösung: --password (vermeiden — über ps//proc/<pid>/cmdline und Shell-Verlauf sichtbar), dann die Umgebungsvariable LDAP_PASSWORD, dann eine interaktive Eingabeaufforderung, wenn keines gesetzt ist.
Standardmäßig verbindet sich GhostHound über LDAPS (636) mit aktivierter Zertifikatsprüfung. Für Umgebungen, in denen das nicht passt, gibt es zwei Flags:
--disable-ldaps — auf Klartext-LDAP (389) zurückfallen. Das Bind-Passwort wird im Klartext gesendet; vermeiden Sie dies außer in einem isolierten Labor.--insecure-tls — LDAPS beibehalten (verschlüsselter Transport), aber die Zertifikatsprüfung überspringen, für selbstsignierte/Labor-Zertifikate, die nicht in Ihrem Vertrauensspeicher sind. Bevorzugen Sie dies gegenüber --disable-ldaps, wann immer das Zertifikat des Domänencontrollers das einzige Problem ist.--timeout-secs (Standard 30) begrenzt sowohl die anfängliche Verbindung als auch jede nachfolgende LDAP-Operation, sodass ein nicht erreichbarer DC oder eine falsche --dc-ip innerhalb dieses Zeitfensters fehlschlägt, anstatt zu hängen.
Führen Sie ghosthound --help aus, um die vollständige Liste der Flags zu erhalten.
GhostHound ist als Library-First-Workspace aufgebaut — siehe docs/adr/0001-language-rust-library-first.md für die Begründung:
bloodhound-opengraph: BloodHound-OpenGraph-JSON-Builder (das Rust-Pendant zu Pythons bhopengraph).ad-secdesc: permissiv lizenzierter, von Grund auf neu geschriebener Parser für ntSecurityDescriptor/DACL/ACEs (siehe docs/adr/0003-security-descriptor-parsing-strategy.md für die Begründung, warum dies keine Abhängigkeit von der einzigen bestehenden Rust-Entsprechung darstellt, die GPL-3.0 ist).ad-secdesc-oracle: interne, unveröffentlichte Differential-Testumgebung, die ad-secdesc mit der GPL-3.0-Crate als Black-Box-Oracle vergleicht — aus dem Standard-Build und dem Abhängigkeitsgraphen jeder veröffentlichten Crate herausgehalten.ad-tombstone: LDAP-SHOW_DELETED-Enumeration, Modellierung des AD-Papierkorb-Zustands und Analyse der Reanimationsrechte.ghosthound: die CLI, die das oben Beschriebene orchestriert.crates/ad-tombstone/model.json hoch, um die Knotenarten GhostHound_TombstoneUser/GhostHound_TombstoneComputer/GhostHound_TombstoneGroup und die Beziehungsarten GhostHound_CanReanimate/GhostHound_WasMemberOf/GhostHound_SameAs zu registrieren (alle werden als traversierbar registriert, sodass sie an Kürzeste-Pfad-Abfragen teilnehmen).crates/ad-tombstone/bridge_shadow_nodes.cypher direkt gegen Neo4j aus (die eigene Cypher-Suchleiste von BloodHound CE ist schreibgeschützt und wird es ablehnen):
docker exec -i <graph-db-container> cypher-shell -u neo4j -p <password> < crates/ad-tombstone/bridge_shadow_nodes.cypher
Die Kanten von GhostHound zu bestehenden AD-Principals (Domain Admins usw.) landen auf Platzhalterknoten statt auf den echten Knoten, die BloodHound bereits hat — eine Einschränkung des OpenGraph-Imports, kein Fehler in diesen Daten; siehe docs/adr/0006-opengraph-cross-source-node-identity.md. Dieses Skript überbrückt sie, sodass Pfade tatsächlich traversierbar sind. Es kann nach jedem Import bedenkenlos erneut ausgeführt werden.crates/ad-tombstone/queries.json und führen Sie optional crates/ad-tombstone/privilege_zones.cypher einmal aus, um Tombstones unter Tier-0-OUs als besonders wertvoll zu markieren — auch dies erfordert cypher-shell statt der Suchleiste, aus demselben Grund wie Schritt 3 (auch dessen SET ist eine aktualisierende Klausel).Nach der Überbrückung erscheint der Reanimationspfad als normaler traversierbarer Pfad — ein Tombstone, der vor dem Löschen Mitglied der Domain-Admins war, erreichbar für jeden Principal mit dem Reanimate-Tombstones-Recht, überbrückt in den echten Domain-Admins-Knoten:

Dieses Projekt stellt von Anfang an belastbare Sicherheit in den Vordergrund (docs/adr/0005-supply-chain-openssf-posture.md):
cargo deny für strikte Copyleft-/GPL-Verbote und Schwachstellen-Audits.cargo fuzz für Paniksicherheit beim Parsen roher binärer Deskriptoren.unsafe in grundlegenden Bibliotheken.Das Verzeichnis docs/adr/ dokumentiert die Entscheidungen hinter diesem Design (Sprachwahl, Authentifizierungsumfang, die Lizenzbeschränkung von ad-secdesc, das Datenmodell des AD-Papierkorbs, die Sicherheitslage der Lieferkette), und docs/research/tombstone-viability-findings.md enthält die zugrunde liegenden Forschungsergebnisse.