
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.
BloodHound ti mostra il percorso. Kestrel ti mostra cosa c'è già dentro.
Tutti mappano la stessa cosa: il percorso di attacco - chi può raggiungere il Domain Admin. È la domanda giusta, e gli strumenti che vi rispondono sono eccellenti. Ma un grafo di "chi può raggiungere chi" è cieco di fronte a un'intera classe di problemi, perché alcune delle cose peggiori in un Active Directory non sono affatto un percorso.
Sono una backdoor saldata dentro un attributo. Un certificato che continua ad autenticare molto tempo dopo che la password è stata reimpostata. Un permesso impresso nello schema stesso, così che ogni oggetto creato da ora in poi lo erediti silenziosamente. Un account eliminato di cui qualcuno ha silenziosamente conservato il diritto di ripristinare. Un oggetto nascosto all'enumerazione da un singolo ACE di deny-read.
Niente di tutto ciò è un arco in un grafo. Tutto ciò è presente nella tua directory in questo momento. Kestrel lo legge - con chiamate Windows native, normali diritti di utente di dominio, nessun server, nessun Python, nessun agent, e un'impronta sul domain controller così contenuta che è documentata evento per evento.
Un solo .exe. Un solo comando. Tutto quanto segue.
L'ecosistema offensivo per AD - SharpHound, impacket, Certipy e il grafo che li sottende - è superbo, e guarda tutto alla stessa superficie: la raggiungibilità. Kestrel guarda alle tre dimensioni che quella superficie non può esprimere.
defaultSecurityDescriptor dello schema, oggetti nascosti, ACE di deny OWNER RIGHTS, chiavi DKM di AD FS. Gli strumenti basati su grafo non raccolgono queste cose perché non c'è alcun arco da disegnare.Non è che Kestrel sia più veloce di un grafo. Risponde a domande che il grafo non può porre.
| Peccato | Cosa trova Kestrel | Flag |
|---|---|---|
| Replicazione e delega | Diritti DCSync (chi può replicare - senza mai replicare), delega non vincolata / vincolata / RBCD / S4U | --acl · --delegation |
| Abuso di certificati | AD CS ESC1–5/9, CA canaglia nell'archivio NTAuth, persistenza tramite certificati a lunga durata, ACL della chiave DKM di AD FS - il prerequisito del Golden SAML | --adcs · --adfs |
| Persistenza negli attributi | Credenziali shadow, iniezione della cronologia SID, diritti di rianimazione delle tombstone, oggetti nascosti, backdoor nello defaultSecurityDescriptor dello schema, adminCount orfano | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| Credenziali in chiaro e decifrabili | cpassword di GPP, segreti unattend/sysprep e password negli script su SYSVOL, account Kerberoastable e AS-REP-roastable, lacune nella copertura LAPS | --gpp · --roast · --laps |
| Cross-domain e ibrido | Principal esterni in gruppi privilegiati, account di sincronizzazione Entra Connect etichettati Tier-0, postura delle trust, account macchina creati tramite MachineAccountQuota (mS-DS-CreatorSID) | --groups · --trust · --machines |
| Postura e ricognizione | Policy password / PSO, età di krbtgt, impostazioni GPO LLMNR / NBT-NS / WDigest / NTLMv1, lettori gMSA, computer obsoleti, topologia delle deleghe | --pwdpolicy · --policy · --gmsa · --stale |
| Archeologia | ACE pericolose orfane (un diritto detenuto da un principal eliminato - il SID non risolve a nessuno), account privilegiati obsoleti (dimenticati, con privilegi eccessivi, password antica) | --archaeology |
| Hardening del dominio | Flag dSHeuristics per LDAP anonimo / esclusione da AdminSDHolder, appartenenza ampia a Pre-Windows 2000 Compatible Access | --hardening |
| Postura dei servizi (letti da AD, nessun pacchetto inviato al servizio) | Escalation Exchange-to-DA ed EOL, takeover del container SCCM e site map, avvelenamento delle zone ADIDNS (Authenticated Users può creare record) | --exchange · --sccm · --dns |
Oltre due dozzine di controlli che di solito sono sparsi tra una dozzina di script e due linguaggi. Qui sono un unico binario - e terminano in un unico verdetto ordinato per gravità.
Kestrel.exe --all --report audit.html
Esegui tutto. Ottieni il report HTML completo. E, alla fine della 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. Solo i risultati che contano, classificati, ciascuno con il comando per chiuderlo.
--opengraph) per fondere con la tua raccolta esistente, oppure parti da qualsiasi principal (--from).--diff rispetto allo snapshot della settimana scorsa per individuare ciò che è cambiato; e uno strumento la cui esatta impronta di rilevamento è pubblicata, così puoi inserirlo nella whitelist e tarare il tuo alerting attorno ad esso.Kestrel è in sola lettura. Non scrive mai nella directory, non replica mai, non richiede mai SeSecurityPrivilege, non tocca mai il cloud. Leggere chi può eseguire DCSync non assomiglia affatto, sul traffico di rete, a eseguire DCSync - nessun DRSUAPI, nessun 4662 di firma di replica. Ogni query che esegue e ogni evento che può (e non può) generare è catalogato in FOOTPRINT.md. Un auditor che spiega al difensore esattamente come individuarlo non è una contraddizione - è proprio il punto.