
GhostHound는 BloodHound OpenGraph 확장 프로그램으로, Active Directory tombstone 재활성화를 일급 공격 경로로 표면화합니다. SHOW_DELETED를 통해 삭제된 개체를 열거하고, 이를 복원할 수 있는 대상을 매핑하며, 재활성화된 ID가 권한 있는 그룹의 구성원 자격을 다시 획득하는 시점을 밝혀냅니다.
GhostHound는 Active Directory용 BloodHound OpenGraph 확장입니다. SharpHound와 그 외 모든 AD 수집기는 CN=Deleted Objects를 건너뜁니다. 삭제된 개체(툼스톤)는 표준 BloodHound 공격 경로 분석에서 보이지 않지만, AD 휴지통(Recycle Bin)과 툼스톤 재활성화 메커니즘을 통해 충분한 권한을 가진 주체가 툼스톤을 복원하고 그 개체가 나타내는 정체성을 장악할 수 있습니다. GhostHound는 SHOW_DELETED 컨트롤로 LDAP를 통해 툼스톤을 열거하고, 각각을 재활성화할 수 있는 주체를 판별한 다음, OpenGraph JSON 페이로드와 model.json 확장 정의를 출력하여 BloodHound CE v8+가 이를 그래프의 일급(first-class) 구성 요소로 렌더링할 수 있게 합니다.
승인된 용도로만 사용하세요. 이 도구는 공격 보안/레드팀 도구로, 승인된 침투 테스트와 탐지 랩 연구를 위해 제작되었습니다. 명시적으로 테스트 승인을 받은 Active Directory 환경에서만 실행하세요.
Administrators에 준하는 권한(또는 CN=Deleted Objects에 대한 읽기 권한의 명시적 위임). 권한이 없는 계정은 어떤 인증 방식을 사용하든 해당 컨테이너를 전혀 볼 수 없습니다 — 이는 GhostHound가 우회할 수 없는 AD가 강제하는 제한입니다.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)로 폴백합니다. 바인드 비밀번호가 평문으로 전송되므로 격리된 랩 외의 환경에서는 사용하지 마세요.--insecure-tls — LDAPS(암호화 전송)를 유지하되, 신뢰 저장소에 없는 자체 서명/랩 인증서를 위해 인증서 검증을 건너뜁니다. DC 인증서가 유일한 문제라면 --disable-ldaps보다 이 옵션을 사용하세요.--timeout-secs(기본값 30)는 초기 연결과 이후의 모든 LDAP 작업에 시간 상한을 두므로, 연결할 수 없는 DC나 잘못된 --dc-ip가 멈추지 않고 해당 시간 안에 실패합니다.
전체 플래그 목록은 ghosthound --help를 실행하세요.
GhostHound는 라이브러리 우선(library-first) 워크스페이스로 구축되었습니다 — 근거는 docs/adr/0001-language-rust-library-first.md를 참조하세요:
bloodhound-opengraph: BloodHound OpenGraph JSON 빌더(Python의 bhopengraph에 해당하는 Rust 구현).ad-secdesc: 허용적(permissive) 라이선스의 ntSecurityDescriptor/DACL/ACE 파서를 처음부터 구현한 것입니다(유일한 기존 Rust 대안이 GPL-3.0이므로 이를 의존성으로 사용하지 않는 이유는 docs/adr/0003-security-descriptor-parsing-strategy.md를 참조하세요).ad-secdesc-oracle: ad-secdesc를 블랙박스 오라클로 사용하여 해당 GPL-3.0 크레이트와 비교하는 내부용(미공개) 차등 테스트 하네스 — 기본 빌드와 모든 게시 크레이트의 의존성 그래프에서 격리되어 있습니다.ad-tombstone: LDAP SHOW_DELETED 열거, AD 휴지통(Recycle Bin) 상태 모델링, 재활성화 권한 분석.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에 직접 실행합니다(BloodHound CE의 자체
Cypher 검색 창은 읽기 전용이라 이를 거부합니다):
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를 참조하세요. 이 스크립트는 해당 노드들을 브리지(bridge)하여 경로가 실제로 순회 가능하게 만듭니다. 모든 가져오기 후 다시 실행해도 안전합니다.브리지가 완료되면 재활성화 경로는 일반적인 순회 가능 경로로 렌더링됩니다 — 삭제 전에 Domain Admins 구성원이었던 툼스톤이 Reanimate-Tombstones 권한을 가진 모든 주체로부터 도달 가능해지고, 실제 Domain Admins 노드로 브리지됩니다:

이 프로젝트는 첫날부터 신뢰도 높은 보안을 최우선으로 합니다(docs/adr/0005-supply-chain-openssf-posture.md):
cargo deny.cargo fuzz.unsafe 없음.docs/adr/ 디렉터리는 이 설계의 배경이 된 결정 사항(언어 선택, 인증 범위, ad-secdesc 라이선스 제약, AD 휴지통 데이터 모델, 공급망 보안 태세)을 기록하고 있으며, docs/research/tombstone-viability-findings.md에는 기반 연구가 담겨 있습니다.
crates/ad-tombstone/queries.json의 스타터 쿼리를 가져오고, 선택적으로 crates/ad-tombstone/privilege_zones.cypher를 한 번 실행하여 Tier Zero OU 아래의 툼스톤을 고가치로 태그할 수 있습니다 — 이 역시 3단계와 같은 이유로 검색 창이 아닌 cypher-shell이 필요합니다(SET도 업데이트 절이기 때문입니다).