The forest doesn't change. Your audit of it should.
ForestEcho is a CLI that takes a signed snapshot of your forest, and a Studio app that reads it. Between them, the work that used to live in operators' heads — the path math, the closure scripts, the rollback you wrote on a sticky note — becomes a file you can sign, share, and diff.
One run. One file. No agent.
The collector is a single signed Windows binary. Run it from a domain-joined host with a read-only account. It enumerates the forest the way a careful operator would — LDAP, ADCS RPCs, certificate stores, GPO files, EVTX slices — and writes one self-contained .fes snapshot.
The snapshot is hashed and signed at collection. From that moment on, every finding ForestEcho ever produces about your forest can be traced back to bytes on disk that haven't changed since.
- Single signed binary · Windows Server 2016 and up
- Read-only against domain controllers · no schema changes
- Configurable scope — full forest, single domain, or one OU
- Output: signed .fes file (typical 1–4 GB)
- Air-gap friendly · no telemetry, no phone-home, ever
Every rule. Every principal. Every path.
Studio loads the snapshot into memory and runs the entire rule catalog against it — ADCS escalations, Kerberos abuse patterns, replication-right misuse, GPO permissions, schema hygiene. The slow part isn't the checks. The slow part is the path math.
ForestEcho projects the Tier 0 reachability graph for every principal in your forest. ACLs, group nesting, GPO links, certificate templates, schema rights, RBCD — all walked. When a finding has a path to Tier 0, you see the path. When it doesn't, you know why not.
- Numerous rules across ADCS, GPO, EVTX, with Kerberos, ACL, and Schema in active development
- Tier 0 reachability — ACLs, group nesting, GPO links, certificate templates, schema rights, RBCD — the edges that matter for AD security tiering
- Cross-module correlation — an ESC finding paired with a DCSync event
- Findings carry severity, evidence, mapper context, and confidence
The fix, the rollback, and a record of both.
Every finding ships with a paired pair: a closure script, and the rollback that undoes it. Both are real PowerShell. Both are reviewable. Neither runs until you sign them.
Before you commit, simulate. ForestEcho applies the change against the snapshot in memory, runs the rule catalog again, and tells you what closes, what regresses, and what side effects show up. The simulation runs in seconds and never touches production.
When you do run it, the action is recorded in a signed audit log: who ran what, when, against which snapshot, with what outcome. That log is what your auditors are actually asking for.
- Generated PowerShell — not opaque, not magic, fully reviewable
- Paired rollback for every action, valid against the originating snapshot
- Simulation against the snapshot before any production change
- Signed, append-only audit log of every action and its outcome
- Compliance-grade evidence: hash chain from snapshot → fix → next snapshot
script.ps1
# Remove enrollee-supplied subject
# and restrict enrollment trustees
Set-ADTemplate -Identity "VPNUser" `
-CertNameFlag (Get-CertNameFlag `
-Clear ENROLLEE_SUPPLIES_SUBJECT)
Remove-ADTemplateEnrollee `
-Identity "VPNUser" `
-Trustee "Authenticated Users",
"Domain Users"
rollback.ps1
# Paired rollback · valid 30d
# against acmegrove-baseline-18d.fes
Set-ADTemplate -Identity "VPNUser" `
-CertNameFlag (Get-CertNameFlag `
-Set ENROLLEE_SUPPLIES_SUBJECT)
Restore-ADTemplateACL `
-Identity "VPNUser" `
-FromSnapshot baseline.fes
The fix held. Or it didn't. Either way, the answer is in writing.
Take another snapshot any time after you've remediated. Studio diffs the two and produces a list: what closed, what regressed, what's new. The diff carries the same signed evidence chain as the originals.
This is what you give the audit committee. This is what proves the change worked. This is also how you catch the new finding that showed up two weeks after a service migration, before someone weaponizes it.
- Snapshot diff between any two .fes files
- Closed / regressed / new — with the action that closed each one
- Trend reports across snapshot history
- Signed evidence chain suitable for SOC 2, ISO 27001, internal audit
Where the rules come from, and how they update.
ADCS
17 rules · shippingCertificate template misissuance, CA hygiene, enrollment surface. The published ESC patterns plus the schema and CRL rules that don't get codified elsewhere.
ADCS.ESC1Enrollee-supplied subjectADCS.ESC4Misconfigured template ACLsADCS.ESC8HTTP enrollment without EPAADCS.ESC11ICPR without packet privacyADCS.ESC15V1 schema with enrollee subjectADCS.CRLCRL hygiene and freshness
EVTX
10 rules · shippingEvent-log analytics over the snapshot's EVTX slice. DCSync exercise, AS-REP brute-force fingerprints, key-credential writes, suspicious UAC flips, Kerberos pre-auth anomalies.
EVTX.DCSYNCReplication right exercisedEVTX.ASREPAS-REP roasting fingerprintEVTX.KEYCREDShadow-credentials writeEVTX.UACUAC flip on tier-0 account
GPO
2 rules · shippingLinked GPO permissions and SYSVOL hygiene. Foundation for the broader policy-abuse surface coming next.
GPO.PERMEdit granted to non-tier-0GPO.SYSVOLSYSVOL ACL drift
Kerberos
In developmentAS-REP roasting, Kerberoasting surface, RBCD primitives, S4U2Self, delegation hygiene, golden/silver ticket fingerprints in event logs.
KRB.ASREPAS-REP without preauthKRB.ROASTService accounts with weak SPNKRB.RBCDResource-based delegation abuseKRB.UNCSTRUnconstrained delegation on non-tier-0
AD ACL & objects
In developmentPermissions on critical objects, dangerous ACL primitives (WriteDACL, GenericAll, ForceChangePassword), shadow-credential writes, SID history.
ACL.WRITEWriteDACL/Owner on tier-0 pathsACL.KEYCREDKeyCredentialLink writeACL.SIDHISTSID history on user objectsACL.GMSAgMSA password read by non-tier-0
Schema & forest
In developmentSchema attribute permissions, replication metadata anomalies, FSMO role placement, trust hygiene, configuration container ACLs.
SCH.ATTRSchema attribute writeable by non-schema adminSCH.REPLReplication right on partitionSCH.TRUSTForest trust without SID filtering
Primary research
Rules written from first principles by our research team — patterns observed in incident response, plus original work on ADCS, schema, and replication abuse.
Public catalogues
Faithful implementations of published patterns: SpecterOps' ESC series, Sean Metcalf's AD security work, Microsoft Tier 0 guidance, MITRE ATT&CK identity techniques.
Customer incidents
Findings derived from anonymized incident debriefs, with rule definitions, reasoning, and changelog published with every release. The catalog is signed; you can verify it.
See it on your own forest.
We're onboarding a small number of identity and detection-engineering teams each month.