
Sicherheits-Enumerationstool für Active Directory mit geringer Beobachtbarkeit, das native ADSI/COM-Schnittstellen nutzt. Enumeriert ACLs, Delegation, Vertrauensstellungen, ADCS, Kerberoast-Ziele und Angriffspfade ohne .NET oder PowerShell und erzeugt BloodHound-kompatible Ausgabe.
BloodHound zeigt dir den Pfad. Kestrel zeigt dir, was bereits drinsteckt.
Alle kartieren dasselbe: den Angriffspfad – wer Domain Admin erreichen kann. Das ist die richtige Frage, und die Tools, die sie beantworten, sind hervorragend. Aber ein Graph von „wer wen erreichen kann" ist blind für eine ganze Problemklasse, denn einige der schlimmsten Dinge in einem Active Directory sind überhaupt kein Pfad.
Sie sind eine Hintertür, eingeschweißt in ein Attribut. Ein Zertifikat, das sich noch lange nach dem Zurücksetzen des Passworts weiter authentifiziert. Eine Berechtigung, die ins Schema selbst eingestanzt ist, sodass jedes von nun an erstellte Objekt sie stillschweigend erbt. Ein gelöschtes Konto, für das sich jemand heimlich das Recht vorbehalten hat, es zurückzubringen. Ein Objekt, das durch einen einzigen Deny-Read-ACE vor der Enumeration verborgen wird.
Nichts davon ist eine Kante in einem Graphen. Alles davon liegt gerade jetzt in deinem Verzeichnis. Kestrel liest es aus – mit nativen Windows-Aufrufen, gewöhnlichen Domänenbenutzerrechten, ohne Server, ohne Python, ohne Agent, und mit einem so zurückhaltenden Fußabdruck auf dem Domänencontroller, dass er Ereignis für Ereignis dokumentiert ist.
Eine .exe. Ein Befehl. Alles Folgende.
Das offensive AD-Ökosystem – SharpHound, impacket, Certipy und der Graph dahinter – ist hervorragend, und es betrachtet alles dieselbe Oberfläche: Erreichbarkeit. Kestrel betrachtet die drei Dimensionen, die diese Oberfläche nicht ausdrücken kann.
defaultSecurityDescriptor-Hintertüren, versteckte Objekte, OWNER RIGHTS-Deny-ACEs, AD FS DKM-Schlüssel. Die Graph-Tools erfassen diese nicht, weil es keine Kante gibt, die man zeichnen könnte.Es geht nicht darum, dass Kestrel schneller ist als ein Graph. Es beantwortet Fragen, die der Graph nicht stellen kann.
| Nr. | Was Kestrel findet | Flag(s) |
|---|---|---|
| Replikation & Delegierung | DCSync-Rechte (wer replizieren kann – ohne jemals zu replizieren), unconstrained / constrained / RBCD / S4U-Delegierung | --acl · --delegation |
| Zertifikatsmissbrauch | AD CS ESC1–5/9, rogue CA im NTAuth-Store, langlebige Zertifikatspersistenz, AD FS DKM-Key-ACL – die Voraussetzung für Golden SAML | --adcs · --adfs |
| Persistenz in Attributen | Shadow Credentials, SID-History-Injection, Tombstone-Reanimation-Rechte, versteckte Objekte, Schema-defaultSecurityDescriptor-Backdoors, verwaister adminCount | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| Klartext- & knackbare Credentials | GPP cpassword, unattend/sysprep-Secrets und Skript-Passwörter in SYSVOL, Kerberoastbare und AS-REP-roastbare Konten, LAPS-Abdeckungslücken | --gpp · --roast · --laps |
| Domänenübergreifend & hybrid | Fremde Principals in privilegierten Gruppen, Entra Connect-Sync-Konten als Tier-0 markiert, Trust-Posture, über MachineAccountQuota erstellte Maschinenkonten (mS-DS-CreatorSID) | --groups · --trust · --machines |
| Posture & Recon | Passwort- / PSO-Richtlinie, krbtgt-Alter, LLMNR / NBT-NS / WDigest / NTLMv1-GPO-Einstellungen, gMSA-Reader, veraltete Computer, Delegierungstopologie | --pwdpolicy · --policy · --gmsa · --stale |
| Archäologie | Verwaiste gefährliche ACEs (ein Recht, das ein gelöschtes Principal hält – die SID löst zu niemandem auf), veraltete privilegierte Konten (vergessen, überprivilegiert, uraltes Passwort) | --archaeology |
| Domänen-Härtung | dSHeuristics-Flags für anonymes LDAP / AdminSDHolder-Ausschluss, breite Mitgliedschaft in Pre-Windows 2000 Compatible Access | --hardening |
| Service-Posture (aus AD gelesen, kein Paket an den Dienst) | Exchange-zu-DA-Eskalation & EOL, SCCM-Container-Übernahme & Site Map, ADIDNS-Zone-Poisoning (Authenticated Users können Datensätze erstellen) | --exchange · --sccm · --dns |
Über zwei Dutzend Prüfungen, die üblicherweise über ein Dutzend Skripte und zwei Sprachen verteilt sind. Hier sind sie eine einzige Binary – und sie enden in einem einzigen, nach Schweregrad sortierten Urteil.
Kestrel.exe --all --report audit.html
Führen Sie alles aus. Erhalten Sie den vollständigen HTML-Bericht. Und ganz am Ende der Konsole der Teil, auf den es ankommt:
═══ Kestrel - Prioritized Findings ═══
CRITICAL DCSync CORP\svc_sql - non-default principal can replicate directory changes (DCSync)
→ fix: remove GetChanges/GetChangesAll from the principal on the domain head (dsacls) unless it is a DC
CRITICAL AD FS CN=... - read access to the DKM key (Golden SAML precondition)
→ fix: remove non-default read ACEs on the DKM object (dsacls) and rotate the token-signing certificate
HIGH Persistence CN=... - object hidden from enumeration via a broad deny-read ACE
→ fix: inspect the hidden object and remove the broad deny-read ACE (dsacls)
[=] 2 critical · 1 high · 0 medium · 0 low
Keine Ausgabeflut. Die relevanten Findings, priorisiert, jeweils mit dem Befehl, um sie zu schließen.
--opengraph), um sie mit deiner bestehenden Sammlung zu fusionieren, oder von einem beliebigen Principal aus pivotieren (--from).--diff gegen den Snapshot der letzten Woche, um zu erkennen, was sich geändert hat; und ein Tool, dessen exakte Erkennungssignatur veröffentlicht ist, damit du es auf die Whitelist setzen und deine eigene Alarmierung darauf abstimmen kannst.Kestrel ist read-only. Es schreibt nie ins Verzeichnis, repliziert nie, benötigt nie SeSecurityPrivilege, berührt nie die Cloud. Zu lesen, wer DCSync kann, sieht auf der Leitung völlig anders aus als DCSync auszuführen – kein DRSUAPI, keine Replikationssignatur 4662. Jede Abfrage, die es ausführt, und jedes Ereignis, das es erzeugen kann (und nicht kann), ist in FOOTPRINT.md katalogisiert. Ein Auditor, der dem Verteidiger genau sagt, wie er ihn fangen kann, ist kein Widerspruch – das ist der ganze Sinn.