
GhostHound は、Active Directory の tombstone reanimation(トゥームストーンの再活性化)を第一級の攻撃経路として表面化する BloodHound OpenGraph 拡張機能です。SHOW_DELETED を使用して削除済みオブジェクトを列挙し、それらを復元できるユーザーをマッピングし、再活性化されたアイデンティティが特権グループのメンバーシップを再取得したタイミングを明らかにします。
GhostHound は、Active Directory 向けの BloodHound OpenGraph 拡張機能です。SharpHound やその他の AD コレクタはすべて CN=Deleted Objects をスキップします。削除済みオブジェクト(トゥームストーン)は、標準の BloodHound 攻撃経路分析では見えません。しかし、AD リサイクル ボックスとトゥームストーン再活性化の仕組みにより、十分な権限を持つプリンシパルが 1 つを復元し、それが表す任意の ID を乗っ取ることが可能です。GhostHound は、SHOW_DELETED コントロールを使用して LDAP 経由でトゥームストーンを列挙し、それぞれを再活性化できるユーザーを特定し、OpenGraph JSON ペイロードと model.json 拡張定義を出力するため、BloodHound CE v8+ はこれをグラフのファーストクラス部分としてレンダリングできます。
許可された使用に限ります。 これは、許可された侵入テストおよび検知ラボ研究を目的とした、オフェンシブセキュリティ / レッドチームツールです。明示的にテストを許可された 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) で接続します。それが当てはまらない環境向けに 2 つのフラグがあります:
--disable-ldaps — 平文 LDAP (389) にフォールバックします。バインドパスワードが平文で送信されます。分離されたラボ以外では使用を避けてください。--insecure-tls — LDAPS(暗号化された転送)を維持しつつ、証明書の検証をスキップします。トラストストアにない自己署名/ラボ証明書向けです。DC の証明書だけが問題である場合は、--disable-ldaps よりもこちらを優先してください。--timeout-secs(デフォルト 30)は、初期接続と後続のすべての LDAP 操作の両方に制限を設けます。到達不能な DC や誤った --dc-ip が、ハングせずにその時間内で失敗するようになります。
完全なフラグ一覧は ghosthound --help を実行してください。
GhostHound はライブラリファーストのワークスペースとして構築されています。根拠については docs/adr/0001-language-rust-library-first.md を参照してください:
bloodhound-opengraph: BloodHound OpenGraph JSON ビルダー(Python の bhopengraph に相当する Rust 版)。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 クレートとブラックボックスオラクルとして比較する、内部用・非公開の差分テストハーネス — デフォルトビルドおよび公開されたすべてのクレートの依存関係グラフから隔離されています。ad-tombstone: LDAP SHOW_DELETED 列挙、AD リサイクル ボックスの状態モデリング、および再活性化権限の分析。ghosthound: 上記を統括する CLI。crates/ad-tombstone/model.json を一度アップロードして、GhostHound_TombstoneUser/GhostHound_TombstoneComputer/GhostHound_TombstoneGroup ノード種別と、GhostHound_CanReanimate/GhostHound_WasMemberOf/GhostHound_SameAs リレーションシップ種別を登録します(すべてトラバース可能として登録されるため、最短経路クエリに参加できます)。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 を参照してください。このスクリプトはそれらをブリッジし、パスが実際にトラバース可能にします。インポートのたびに再実行しても安全です。ブリッジされると、再活性化パスは通常のトラバース可能なパスとしてレンダリングされます — 削除前に 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 も更新句であるため)。