
GhostHound é uma extensão OpenGraph do BloodHound que apresenta a reanimação de tombstone do Active Directory como um caminho de ataque de primeira classe, enumerando objetos excluídos via SHOW_DELETED, mapeando quem pode restaurá-los e revelando quando uma identidade reanimada recupera a associação a grupos privilegiados.
O GhostHound é uma extensão OpenGraph do BloodHound para
o Active Directory. O SharpHound e todos os outros coletores de AD ignoram CN=Deleted Objects: objetos
excluídos (tombstones) são invisíveis para a análise padrão de caminhos de ataque do BloodHound, mesmo que a
Lixeira do AD e os mecanismos de reanimação de tombstones possam permitir que um principal com privilégios suficientes
restaure um deles — e assuma qualquer identidade que ele represente. O GhostHound enumera tombstones via
LDAP com o controle SHOW_DELETED, determina quem pode reanimar cada um e emite um payload
JSON OpenGraph além de uma definição de extensão model.json para que o BloodHound CE v8+ possa renderizar isso como uma
parte de primeira classe do grafo.
Somente uso autorizado. Esta é uma ferramenta de segurança ofensiva / red team destinada a testes de penetração autorizados e pesquisa em laboratórios de detecção. Execute-a apenas contra ambientes de Active Directory que você tenha autorização explícita para testar.
Administrators (ou uma delegação explícita de acesso de leitura a
CN=Deleted Objects) no domínio de destino. Contas sem privilégios não conseguem ver o contêiner de
forma alguma, independentemente do método de autenticação utilizado — esta é uma restrição imposta pelo AD, não algo
que o GhostHound possa contornar.ghosthound -d ghost.local --dc-ip 10.0.0.10 -u alice -o tombstones.json
Ordem de resolução de senha: --password (evite — visível via ps//proc/<pid>/cmdline e histórico do
shell), depois a variável de ambiente LDAP_PASSWORD e, em seguida, um prompt interativo se nenhuma das duas
estiver definida.
Por padrão, o GhostHound conecta-se via LDAPS (636) com verificação de certificado ativada. Existem duas flags para ambientes onde isso não se aplica:
--disable-ldaps — volta para LDAP em texto claro (389). A senha do bind é enviada em texto puro;
evite isso em qualquer coisa que não seja um laboratório isolado.--insecure-tls — mantém LDAPS (transporte criptografado), mas ignora a verificação de certificado, para
certificados autoassinados/de laboratório que não estejam no seu armazenamento de confiança. Prefira esta opção em vez de
--disable-ldaps sempre que o único problema for o certificado do DC.--timeout-secs (padrão 30) limita tanto a conexão inicial quanto cada operação LDAP subsequente,
de modo que um DC inacessível ou um --dc-ip incorreto falhe dentro dessa janela em vez de travar.
Execute ghosthound --help para a lista completa de flags.
O GhostHound é construído como um workspace que prioriza bibliotecas — veja docs/adr/0001-language-rust-library-first.md
para a justificativa:
bloodhound-opengraph: construtor JSON OpenGraph do BloodHound (o equivalente em Rust do
bhopengraph do Python).ad-secdesc: parser desenvolvido do zero, com licença permissiva, para ntSecurityDescriptor/DACL/ACEs
(veja docs/adr/0003-security-descriptor-parsing-strategy.md para entender por que isso não é uma dependência da
única alternativa Rust existente, que é GPL-3.0).ad-secdesc-oracle: harness de teste diferencial interno e não publicado que compara ad-secdesc
com essa crate GPL-3.0 como um oráculo de caixa-preta — isolado da build padrão e de
todos os grafos de dependência das crates publicadas.ad-tombstone: enumeração LDAP SHOW_DELETED, modelagem do estado da Lixeira do AD e
análise de direitos de reanimação.ghosthound: a CLI que orquestra tudo isso.crates/ad-tombstone/model.json uma vez para
registrar os tipos de nó GhostHound_TombstoneUser/GhostHound_TombstoneComputer/GhostHound_TombstoneGroup
e os tipos de relacionamento GhostHound_CanReanimate/GhostHound_WasMemberOf/GhostHound_SameAs
(todos registrados como percorríveis, para que participem de consultas de caminho mais curto).crates/ad-tombstone/bridge_shadow_nodes.cypher diretamente no Neo4j (a barra de pesquisa Cypher do próprio
BloodHound CE é somente leitura e o rejeitará):
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. Este script faz a ponte entre eles
para que os caminhos sejam realmente percorríveis. Seguro reexecutar após cada importação.crates/ad-tombstone/queries.json e, opcionalmente, execute
crates/ad-tombstone/privilege_zones.cypher uma vez para marcar tombstones sob UOs do Tier Zero como
de alto valor — isso também requer cypher-shell em vez da barra de pesquisa, pela mesma razão
do passo 3 (o SET dele também é uma cláusula de atualização).Depois de conectados, o caminho de reanimação é renderizado como um caminho percorrível normal — um tombstone que era membro de Domain Admins antes da exclusão, alcançável por todo principal com o direito Reanimate-Tombstones, conectado ao nó real de Domain Admins:

Este projeto prioriza segurança de alta confiança desde o dia 1 (docs/adr/0005-supply-chain-openssf-posture.md):
cargo deny para bloqueios rigorosos de copyleft/GPL e auditoria de vulnerabilidades.cargo fuzz para segurança contra panics no parsing de descritores binários brutos.unsafe nas bibliotecas fundamentais.O diretório docs/adr/ registra as decisões por trás deste design (escolha da linguagem, escopo de autenticação,
a restrição de licenciamento do ad-secdesc, o modelo de dados da Lixeira do AD, a postura da cadeia de suprimentos), e
docs/research/tombstone-viability-findings.md contém a pesquisa subjacente.