Torna agli aggiornamenti
New releaseAug 23, 2026

Kestrel v.1.1.0

Strumento di enumerazione della sicurezza di Active Directory a bassa osservabilità che utilizza le interfacce native ADSI/COM. Enumera ACL, deleghe, trust, ADCS, target Kerberoast e percorsi di attacco senza .NET o PowerShell, producendo output compatibile con BloodHound.

Condividi

Kestrel

build license language dependencies

BloodHound ti mostra il percorso. Kestrel ti mostra ciò che è già dentro.

Tutti mappano la stessa cosa: il percorso di attacco - chi può raggiungere Domain Admin. È la domanda giusta, e gli strumenti che le rispondono sono eccellenti. Ma un grafo di "chi può raggiungere chi" è cieco a un'intera classe di problemi, perché alcune delle peggiori cose in Active Directory non sono affatto un percorso.

Sono una backdoor saldata dentro un attributo. Un certificato che continua ad autenticare molto dopo il reset della password. Un permesso impresso nello schema stesso, così che ogni oggetto creato d'ora in poi lo erediti silenziosamente. Un account eliminato di cui qualcuno ha silenziosamente conservato il diritto di riportare in vita. Un oggetto nascosto all'enumerazione da un singolo deny-read ACE.

Niente di tutto questo è un arco in un grafo. Tutto questo è nella tua directory adesso. Kestrel lo legge - con chiamate Windows native, diritti di un normale utente di dominio, nessun server, nessun Python, nessun agente, e un'impronta sul domain controller così contenuta che è documentata evento per evento.

Un .exe. Un comando. Tutto qui sotto.


Stai guardando nella direzione sbagliata

L'ecosistema AD offensivo - SharpHound, impacket, Certipy e il grafo che sta dietro di loro - è eccellente, e tutto guarda alla stessa superficie: la raggiungibilità. Kestrel osserva le tre dimensioni che quella superficie non può esprimere.

  • Tempo. Un grafo è un'istantanea. Kestrel legge i metadati di replica - quando un attributo Tier-0 è cambiato e quale DC ne è l'origine. Un diritto DCSync concesso la scorsa notte non è lo stesso risultato di uno presente da anni, e solo uno dei due significa che sei sotto attacco in questo momento.
  • Persistenza in un attributo, non in un arco. Shadow credentials, SID history, riattivazione dei tombstone, backdoor defaultSecurityDescriptor nello schema, oggetti nascosti, deny-ACE OWNER RIGHTS, chiavi DKM di AD FS. Gli strumenti a grafo non raccolgono queste cose perché non c'è alcun arco da disegnare.
  • Postura difensiva, invertita. Non «chi può attaccare», ma «cosa non è protetto» - l'account Tier-0 fuori dal suo silo, l'account di sincronizzazione con un RID casuale che nessuno ha etichettato, la policy di blocco che non limita mai uno spray.

Non è che Kestrel sia più veloce di un grafo. Risponde a domande che il grafo non può porsi.


Ogni peccato di AD, in un unico exe nativo

PeccatoCosa trova KestrelFlag
Replica e delegaDiritti DCSync (chi può replicare - senza replicare mai), delega non vincolata / vincolata / RBCD / S4U--acl · --delegation
Abuso di certificatiAD CS ESC1–5/9, CA rogue nell'archivio NTAuth, persistenza tramite certificati longevi, ACL della chiave DKM di AD FS - la precondizione per Golden SAML--adcs · --adfs
Persistenza negli attributiShadow credentials, iniezione della SID history, diritti di riattivazione dei tombstone, oggetti nascosti, backdoor defaultSecurityDescriptor nello schema, adminCount orfani--shadowcreds · --sidhistory · --acl · --schema · --adminsdholder
Credenziali in chiaro e crackabiliSegreti GPP cpassword, unattend/sysprep e password negli script su SYSVOL, account Kerberoastable e AS-REP-roastable, lacune di copertura LAPS--gpp · --roast · --laps
Cross-domain e ibridoPrincipal esterni in gruppi privilegiati, account di sincronizzazione Entra Connect etichettati Tier-0, postura del trust, account macchina creati tramite MachineAccountQuota (mS-DS-CreatorSID)--groups · --trust · --machines
Postura e ricognizioneCriteri password / PSO, età di krbtgt, impostazioni GPO LLMNR / NBT-NS / WDigest / NTLMv1, lettori gMSA, computer obsoleti, topologia della delega--pwdpolicy · --policy · --gmsa · --stale

Più di venti controlli che di solito sono sparsi in una dozzina di script e due linguaggi. Qui sono un unico binario - e terminano in un unico verdetto ordinato per gravità.


Una riga

Kestrel.exe --all --report audit.html

Esegui tutto. Ottieni il report HTML completo. E, in fondo alla console, la parte che conta:

═══ 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

Non un muro di output. I risultati che contano, ordinati, ognuno con il comando per chiuderlo.


Un unico exe. Red, blue, purple.

  • Red / grey - enumera la persistenza e la delega che il grafo non vede, esporta direttamente in BloodHound CE OpenGraph (--opengraph) per fonderlo con la tua raccolta esistente, oppure effettua il pivot da qualsiasi principal (--from).
  • Blue - un elenco di risultati prioritizzati e con remediation; un --diff rispetto allo snapshot della scorsa settimana per cogliere cosa è cambiato; e uno strumento la cui esatta impronta di rilevamento è pubblicata, così puoi inserirlo in whitelist e ottimizzare il tuo alerting.
  • Purple - un unico artefatto che entrambe le parti leggono allo stesso modo. Red lo trova, blue lo corregge, tutti puntano allo stesso numero di riga.

Rilevabile per progettazione

Kestrel è read-only. Non scrive mai nella directory, non replica mai, non necessita mai di SeSecurityPrivilege, non tocca mai il cloud. Leggere chi può fare DCSync non assomiglia per nulla, sul wire, a fare DCSync - niente DRSUAPI, nessuna firma di replica 4662. Ogni query che esegue e ogni evento che può (e non può) generare è catalogato in FOOTPRINT.md. Un auditor che dice al difensore esattamente come individuarlo non è una contraddizione - è il punto centrale.


Avvio rapido

Scarica una build. Ogni esecuzione CI verde pubblica un artefatto Kestrel.exe - scaricalo dalla scheda Actions, nessun toolchain richiesto.

Oppure compilalo da solo. Visual Studio (v143+) o MSBuild:

git clone https://github.com/ssteelfactor-oss/Kestrel.git
cd Kestrel
msbuild Kestrel.vcxproj /p:Configuration=Release /p:Platform=x64

C puro, zero dipendenze di terze parti. Compila con /MT e ottieni un singolo eseguibile autonomo - copialo su un host aggiunto al dominio, eseguilo come un qualsiasi utente ordinario.

Eseguilo.

Kestrel.exe --all --report audit.html      # everything, HTML report + ranked findings
Kestrel.exe --acl --adcs --adfs            # pick specific checks
Kestrel.exe --paths --from CORP\jdoe       # attack paths from one principal
Kestrel.exe --all --diff last-week.json    # what changed since the last snapshot
Kestrel.exe --all --opengraph graph.json   # export to BloodHound CE OpenGraph

Moduli

Esegui --all oppure seleziona un qualsiasi sottoinsieme. Aiuto completo: Kestrel.exe --help.

FlagScansione
--aclArchi ACL, diritti DCSync, igiene owner/ereditarietà/canonical, oggetti nascosti, riattivazione tombstone
--groupsMembership privilegiata transitiva + security principal esterni
--delegationDelega non vincolata / vincolata / RBCD / S4U2Self
--paths / --fromAnalisi dei percorsi di attacco verso Tier-0 (opzionalmente da un principal specifico)
--adcsAudit dei modelli di certificato / CA di AD CS (ESC1–5/9) + archivio NTAuth + validità
--adfsACL della chiave DKM di AD FS (precondizione Golden SAML)
--schemaAudit delle backdoor defaultSecurityDescriptor nello schema
--trustPostura dei trust di dominio / foresta
--machinesAccount macchina creati tramite MachineAccountQuota (mS-DS-CreatorSID)
--roastAccount Kerberoastable + AS-REP-roastable
--shadowcredsShadow credentials (msDS-KeyCredentialLink)
--sidhistoryIniezione di sIDHistory (privilegiata / esterna)
--adminsdholderOggetti orfani con adminCount=1
--gppScansione dei segreti SYSVOL - GPP cpassword, unattend, credenziali negli script
--gpolateralGPO gruppi locali → archi di movimento laterale (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM)
--policyCriteri di sicurezza GPO (LLMNR / NBT-NS / WDigest / NTLMv1)
--pwdpolicyCriteri password / PSO · età di krbtgt · MachineAccountQuota
--hygieneIgiene delle credenziali (PASSWD_NOTREQD / DONT_EXPIRE / reversibili / leak nella descrizione)
--gmsaEnumerazione dei lettori di password gMSA
--lapsCopertura LAPS (legacy + Windows LAPS 2023+)
--staleComputer obsoleti tramite lastLogonTimestamp
--topologyTopologia dei computer tramite decodifica SPN
--adwsRilevamento endpoint ADWS (9389/TCP per DC)

Output e interoperabilità: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.


Invarianti di progettazione

Queste sono promesse, non preferenze - i motivi per cui è sicuro eseguirlo in produzione. Violarne una qualsiasi è un bug di sicurezza (vedi SECURITY.md).

  • Read-only - non crea, modifica o elimina mai un oggetto della directory. Solo eventi di lettura/accesso, mai eventi di modifica.
  • Utente di dominio ordinario - nessuna escalation di privilegi, nessun SeSecurityPrivilege, solo maschere di sicurezza DACL.
  • Nessuna replica - rileva chi può fare DCSync; non chiama mai DRSUAPI.
  • Solo directory e SYSVOL - nessun RPC/SMB verso gli host membri.
  • Nessuna evasione - nessuna frammentazione delle query, nessun gioco sui tempi, nessuna manomissione dei log. Vedi FOOTPRINT.md.
  • Solo on-prem - nessuna chiamata a Entra / Graph / cloud; audita l'impronta che l'ibrido lascia in AD.
  • Nativo e autonomo - C puro, zero dipendenze di terze parti, un singolo .exe.

Roadmap

VersioneStatoTraguardo
v0.13Postura delle condizioni di ingresso
v0.14Profondità ACL + archi laterali
v0.15Audit della struttura ACL (classe ADeleg)
v0.16Persistenza stealth + profondità SYSVOL / ADCS
v0.17Impronta cross-domain + ibrida
v0.18Igiene delle query + impronta onesta
v1.0Funzionalità complete: risultati prioritizzati + remediation, CI, Apache 2.0
v1.1🔲Timeline temporale · rilevamento rogue-DC / DCShadow · ADIDNS · passaggio sulla postura difensiva

Documentazione

  • FOOTPRINT.md - la traccia LDAP / SYSVOL esatta che ogni scansione lascia e gli eventi DC che genera (e non può generare).
  • SECURITY.md - reporting, ambito e invarianti di progettazione come garanzie verificabili.
  • LICENSE - Apache 2.0.

Correlati

Progetto padre: NetEnum - enumerazione AD tramite ADSI / COM / LDAP.

Autore

@ssteelfactor-oss - ricerca sulla sicurezza e internals COM / Windows.

Licenza

Concesso in licenza secondo la Apache License 2.0 - vedi LICENSE. Fornito "così com'è", senza garanzia; eseguilo solo contro directory che sei autorizzato ad auditare.

Categorie