BloodHound is one of the most powerful tools in an attacker's arsenal — and one of the most underused tools in a defender's. Most security teams know it exists. They've seen it in reports. A few have run it once in a lab. Almost none are running it regularly as part of their defensive posture.
That's a mistake I see the consequences of in almost every IR engagement I work. The attacker ran BloodHound. The defender hadn't.
This post is about changing that — how to run BloodHound as a defender, what queries actually matter, and how to translate the graph data into things your team can prioritize and fix.
What BloodHound Is Actually Doing
BloodHound collects information about Active Directory objects (users, computers, groups, GPOs, OUs, domains) and the relationships between them, then models those relationships as a graph. The edges between nodes represent real AD permissions and trust relationships: group membership, local admin rights, session data, ACL permissions, delegation settings.
The attack path analysis runs shortest-path algorithms across that graph to find the shortest route from a starting node to a target (typically Domain Admin or a Domain Controller). What makes BloodHound powerful is that it surfaces non-obvious paths — the five-hop chain of permissions that no human would manually trace but that an attacker scripted in five minutes.
BloodHound CE (Community Edition) is the current open-source version. For most defensive use cases, it's free and fully capable of everything in this post.
Collecting Data: SharpHound and AzureHound
BloodHound needs data to analyze. Two primary collectors:
- SharpHound — collects from on-premises AD. Runs as a .NET executable or PowerShell module. Requires domain credentials; doesn't need to run on a DC.
- AzureHound — collects from Entra ID. Requires appropriate Azure/Entra read permissions.
Before you run: SharpHound generates network traffic and AD queries that can look like enumeration to your SIEM or EDR. Run it during business hours, from an account that's logged in a change record, and make sure your SOC knows it's happening.
Frequency matters. Permissions change, new accounts get created, group memberships shift. Run SharpHound at least monthly in most environments, weekly in high-risk ones. Automate the collection and import — stale data gives you false confidence.
The Queries That Actually Matter
BloodHound's built-in queries are a reasonable starting point, but the real power is Cypher — the graph query language that lets you ask precise questions about your environment. Here are the queries I run first in every environment.
1. Shortest Paths to Domain Admin
The count query gives you a number that's easy to track over time. Track it monthly — watch it go down as you remediate.
2. Kerberoastable Accounts
The second query is your priority list — Kerberoastable accounts that also have a path to DA. Sort by hop count; fix the shortest paths first.
3. AS-REP Roastable Accounts
There are very few legitimate reasons for this setting. Every account that shows up here is almost certainly a misconfiguration. Fix is simple — enable pre-authentication. Prioritize any account with AdminCount=1.
4. Unconstrained Delegation (Non-DCs)
Unconstrained delegation on a non-DC means if an attacker can coerce any privileged account into authenticating to that machine, they can capture a usable TGT and impersonate that account. Should be near-zero on non-DCs. Enumerate everything, confirm what's intentional (usually nothing), and remove the flag.
5. DCSync Rights
DCSync rights let an account replicate the AD database including all password hashes. Should be held only by DCs and highest-privilege Tier 0 accounts. Anyone else on this list needs immediate investigation and remediation.
6. Stale AdminCount=1 Accounts
What AdminCount=1 means: When an account is added to a protected group (Domain Admins, Backup Operators, etc.), SDProp sets AdminCount=1 and locks down the ACL. If the account is later removed, AdminCount stays at 1 and the ACL remains locked — but the account no longer shows in group membership queries. These orphaned accounts are common and worth reviewing.
Turning Graph Data Into a Remediation Backlog
The data is only useful if it drives action. Here's how I structure BloodHound findings:
- P1 — Fix within 1 week: Kerberoastable or AS-REP-roastable accounts with a direct path (≤2 hops) to Domain Admin. Unexpected DCSync rights. Unconstrained delegation on non-DCs reachable from the internet or Tier 2.
- P2 — Fix within 1 month: Kerberoastable accounts with paths to DA in 3–5 hops. Users with local admin rights on more machines than their role warrants. Orphaned AdminCount=1 accounts.
- P3 — Ongoing hygiene: Reducing the total count of accounts with any path to DA. Enforcing separation of admin accounts per tier. Deploying LAPS to eliminate shared local admin passwords.
Track the P1/P2 counts as KPIs. "Accounts with path to DA in ≤5 hops" is a single number that captures your AD security posture in a way that resonates without needing to explain graph theory.
BloodHound CE vs. Enterprise
BloodHound CE is free and fully capable of everything in this post. The limitation is operational: manual collection, manual import, manual query execution. No scheduling, no alerting, no automated change detection.
BloodHound Enterprise adds automated collection, continuous monitoring, exposure score tracking over time, and attack path prioritization at scale. Worth evaluating for larger organizations trying to make this part of a continuous security program.
Bottom line: The goal is to be running BloodHound before an attacker does — not reacting to it in a post-incident review. Start with CE, run the collection, learn Cypher, and close the highest-priority paths. That single shift changes the conversation from "how did they get to DA" to "we already knew about that path and closed it."