My fork of BloodHound Legacy keeps Legacy 4.3.1's readable graph and adds support for the data BloodHound Community Edition (CE) collects. Version 1.1.2 caught it up with the latest collectors' edges. Versions 1.2.0 and 1.3.0 are about the nodes: proper Node Info panels for AD Sites and AD CS, control sections for more object types, and a tidier properties view.

Sites get the most attention below, because they're also one of the most overlooked paths to a domain controller.

All screenshots use a small fictional domain (CORP.LOCAL) built for this write-up. No customer or production data is shown.

At a Glance

AreaWhat changedVersion
AD SitesSite, SiteServer and SiteSubnet panels; GPO and Computer panels know about sites; AD Sites counts in Database Info1.2.0
AD CSPanels for EnterpriseCA, RootCA, AIACA, NTAuthStore, CertTemplate and IssuancePolicy, with the PKI hierarchy and inbound control rights1.3.0
Local accountsADLocalGroup and ADLocalUser panels1.3.0
Control sectionsBase, Container, OU, Azure device and Azure role panels gain control sections1.3.0
PanelsObject type next to the name; one Node Properties section using CE's display names1.3.0
Look and feelCE icons in search results; update badge on the About button; graph images default to 0% padding1.2.0

AD Sites Panels (1.2.0)

Sites, site servers and site subnets now use CE's icons and colours, replacing the old glyphs.

Two AD sites with their site servers, subnets and the domain controllers behind them
Two sites with their site servers, subnets and the domain controllers behind them.

A Site panel lists its site servers, subnets and server computers, the GPOs linked to it (and which are enforced), who controls those GPOs, and who has control rights over the site itself.

Site Node Info panel with the Linked GPO Controllers section expanded
Site panel: Linked GPO Controllers shows who can edit a GPO that applies to the site.
Site Node Info panel showing explicit inbound control rights including WriteGPLink
Site panel: explicit inbound control rights, including WriteGPLink.

SiteServer and SiteSubnet have their own panels too, each with inbound control rights.

SiteServer Node Info panel showing its site, the computer it maps to and its controllers
SiteServer panel: its site, the computer it maps to (ServerIs) and who controls it.
SiteSubnet Node Info panel showing its site and the other subnets in that site
SiteSubnet panel: its site and the other subnets in that site.

The GPO panel now separates sites from OUs, with new Linked Sites and Site Server Computers rows. The Computer panel shows an AD Site row for domain controllers and site servers.

GPO Node Info panel for a GPO linked to both the domain and a site
GPO panel: a GPO linked to both the domain and a site.
Computer Node Info panel for DC01 with the AD Site row
Computer panel: the AD Site row leads from DC01 back to its site.

Database Info gains AD SITES and PKI / AD CS OBJECTS sections.

Database Info panel with AD Sites and PKI / AD CS object counts
Database Info: AD Sites and PKI / AD CS counts.

Why Site ACLs Are a Tier 0 Problem

An AD site maps a physical network location - a set of IP subnets - to the domain controllers that serve it. Windows uses sites for three things:

Sites live in the Configuration partition, which replicates to every DC in the forest, so a single site can hold DCs from more than one domain.

That third point is the problem. Whoever can change a site's GPO links can influence its domain controllers. Rights that allow this include WriteGPLink and broader rights over the site object such as GenericAll, GenericWrite, WriteDacl, WriteOwner and Owns. A principal that can edit any GPO already linked to the site can affect those DCs the same way.

Sites are often delegated to network or infrastructure teams so they can manage subnets, and those delegations are easy to leave broader than intended. If a site contains a DC, treat control of that site as control of Tier 0.

What It Looks Like in the Graph

In the demo domain, CAROL.DIAZ - a network engineer, not an administrator - has WriteGPLink on the BRANCH-OFFICE site and owns a GPO created for testing. BRANCH-OFFICE contains the site server for BRANCH-DC02, a domain controller. The graph shows the path from a non-admin account to a DC and the domain:

Graph: CAROL.DIAZ has WriteGPLink on the BRANCH-OFFICE site, which contains the site server for domain controller BRANCH-DC02
CAROL.DIAZ can change the GPO links on a site that contains a domain controller.

There's a second path to the same site: DAN.KIM has GenericAll on BRANCH SECURITY BASELINE, a GPO already linked to BRANCH-OFFICE - it's the one in the Linked GPO Controllers screenshot above. Neither account should have this reach.

Finding and Fixing It

In the fork, open a Site panel and check Inbound Control Rights and Linked GPO Controllers. To list every principal with control over a site that contains a DC, run this in Raw Query:

MATCH p=(n)-[:WriteGPLink|GenericAll|GenericWrite|WriteDacl|WriteOwner|Owns]->(s:Site)-[:Contains]->(:SiteServer)-[:ServerIs]->(c:Computer) WHERE c.isdc = true RETURN p

Then:

AD CS Panels (1.3.0)

Enterprise, root and AIA CAs, NTAuth stores, certificate templates and issuance policies now open their own panels instead of the generic CE Properties panel. CA panels start with a PKI HIERARCHY section.

EnterpriseCA Node Info panel with the Issuing Chain to the root CA, NTAuth store and domain
EnterpriseCA panel: Issuing Chain shows the CA's path to the root CA, the NTAuth store and the domain.
RootCA Node Info panel with the Full PKI Hierarchy of issued CAs and their host computers
RootCA panel: Full PKI Hierarchy shows every CA it issued and the computers hosting them.

Every AD CS panel has Inbound Control Rights - explicit, unrolled and transitive - over the edges CE counts as control, including ManageCA, ManageCertificates, Enroll and the PKI flag writes.

EnterpriseCA explicit object controllers including ManageCA and ManageCertificates
EnterpriseCA: explicit object controllers, including ManageCA and ManageCertificates.
CertTemplate Node Info panel showing the CAs it is published to, its issuance policy and enrollment rights
CertTemplate panel: the CAs it's published to, its issuance policy and enrollment rights.
NTAuthStore Node Info panel showing trusted CAs and the domain it serves
NTAuthStore panel: trusted CAs and the domain it serves.
IssuancePolicy Node Info panel showing its linked template and linked group
IssuancePolicy panel: linked template and linked group (OIDGroupLink).

Local Groups and Users (1.3.0)

ADLocalGroup and ADLocalUser nodes from CE's local group collection show their computer, members or memberships, and logon rights.

ADLocalGroup Node Info panel for the local Administrators group on WS01
ADLocalGroup panel: the local Administrators group on WS01.
ADLocalUser Node Info panel for the built-in local Administrator account on WS01
ADLocalUser panel: the built-in local Administrator account on WS01.

More Control Sections (1.3.0)

Base nodes show inbound and outbound object control. Containers and OUs show inbound control rights. Azure devices show inbound object control, and Azure roles show their approvers.

Base node panel with inbound and outbound object control
Base node: inbound and outbound object control on an object with no specific panel.
OU Node Info panel with Inbound Control Rights
OU panel: Inbound Control Rights.
Azure device Node Info panel with Inbound Object Control
Azure device: Inbound Object Control.
Azure role Node Info panel showing Approvers under Assignments
Azure role: Approvers under Assignments.

Panel Clean-Up (1.3.0)

User Node Info panel with a single Node Properties section using CE display names
User panel: one Node Properties section with CE's display names.

Smaller Improvements (1.2.0)

Search results and the spotlight use the same icon table as the graph, so AD CS, Sites and newer Azure kinds show the right icon instead of a question mark.

Search results showing icons for AD CS objects, sites and an issuance policy
Search results for AD CS objects, Sites and an issuance policy.

When a newer release exists, the About button shows a red dot and an "Update Available" label. The app never downloads or installs anything itself.

About button with a red dot and Update Available label
Update badge on the About button.

New installs save graph images with 0% padding. If you'd already changed an image setting, your saved padding is kept.

Settings panel with Image Padding set to 0%
Settings: Image Padding defaults to 0%.

Getting It

Download the zip for your platform from the latest release on GitHub - there are builds for Windows, macOS and Linux. Unzip and run it; it connects to Neo4j 4.4, the database BloodHound CE uses.

First launch: the builds aren't code-signed, so your OS will warn you the first time. On Windows, SmartScreen shows "Windows protected your PC" - click More info, then Run anyway. On macOS, right-click the app and choose Open, then Open again.

Your settings and custom queries live in the app's user data folder, so replacing an existing install keeps them.

As before, this fork is maintained separately and isn't affiliated with or supported by SpecterOps - if something renders wrong against your data, open an issue.

View on GitHub โ†’