
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 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.
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.
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.Non è che Kestrel sia più veloce di un grafo. Risponde a domande che il grafo non può porsi.
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à.
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.
--opengraph) per fonderlo con la tua raccolta esistente, oppure effettua il pivot da qualsiasi principal (--from).--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.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.
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
Esegui --all oppure seleziona un qualsiasi sottoinsieme. Aiuto completo: Kestrel.exe --help.
Output e interoperabilità: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.
Queste sono promesse, non preferenze - i motivi per cui è sicuro eseguirlo in produzione. Violarne una qualsiasi è un bug di sicurezza (vedi SECURITY.md).
SeSecurityPrivilege, solo maschere di sicurezza DACL..exe.Progetto padre: NetEnum - enumerazione AD tramite ADSI / COM / LDAP.
@ssteelfactor-oss - ricerca sulla sicurezza e internals COM / Windows.
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.
| Peccato | Cosa trova Kestrel | Flag |
|---|
| Replica e delega | Diritti DCSync (chi può replicare - senza replicare mai), delega non vincolata / vincolata / RBCD / S4U | --acl · --delegation |
| Abuso di certificati | AD 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 attributi | Shadow 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 crackabili | Segreti 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 ibrido | Principal 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 ricognizione | Criteri password / PSO, età di krbtgt, impostazioni GPO LLMNR / NBT-NS / WDigest / NTLMv1, lettori gMSA, computer obsoleti, topologia della delega | --pwdpolicy · --policy · --gmsa · --stale |
| Flag | Scansione |
|---|
--acl | Archi ACL, diritti DCSync, igiene owner/ereditarietà/canonical, oggetti nascosti, riattivazione tombstone |
--groups | Membership privilegiata transitiva + security principal esterni |
--delegation | Delega non vincolata / vincolata / RBCD / S4U2Self |
--paths / --from | Analisi dei percorsi di attacco verso Tier-0 (opzionalmente da un principal specifico) |
--adcs | Audit dei modelli di certificato / CA di AD CS (ESC1–5/9) + archivio NTAuth + validità |
--adfs | ACL della chiave DKM di AD FS (precondizione Golden SAML) |
--schema | Audit delle backdoor defaultSecurityDescriptor nello schema |
--trust | Postura dei trust di dominio / foresta |
--machines | Account macchina creati tramite MachineAccountQuota (mS-DS-CreatorSID) |
--roast | Account Kerberoastable + AS-REP-roastable |
--shadowcreds | Shadow credentials (msDS-KeyCredentialLink) |
--sidhistory | Iniezione di sIDHistory (privilegiata / esterna) |
--adminsdholder | Oggetti orfani con adminCount=1 |
--gpp | Scansione dei segreti SYSVOL - GPP cpassword, unattend, credenziali negli script |
--gpolateral | GPO gruppi locali → archi di movimento laterale (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM) |
--policy | Criteri di sicurezza GPO (LLMNR / NBT-NS / WDigest / NTLMv1) |
--pwdpolicy | Criteri password / PSO · età di krbtgt · MachineAccountQuota |
--hygiene | Igiene delle credenziali (PASSWD_NOTREQD / DONT_EXPIRE / reversibili / leak nella descrizione) |
--gmsa | Enumerazione dei lettori di password gMSA |
--laps | Copertura LAPS (legacy + Windows LAPS 2023+) |
--stale | Computer obsoleti tramite lastLogonTimestamp |
--topology | Topologia dei computer tramite decodifica SPN |
--adws | Rilevamento endpoint ADWS (9389/TCP per DC) |
| Versione | Stato | Traguardo |
|---|
| v0.13 | ✅ | Postura delle condizioni di ingresso |
| v0.14 | ✅ | Profondità ACL + archi laterali |
| v0.15 | ✅ | Audit della struttura ACL (classe ADeleg) |
| v0.16 | ✅ | Persistenza stealth + profondità SYSVOL / ADCS |
| v0.17 | ✅ | Impronta cross-domain + ibrida |
| v0.18 | ✅ | Igiene delle query + impronta onesta |
| v1.0 | ✅ | Funzionalità complete: risultati prioritizzati + remediation, CI, Apache 2.0 |
| v1.1 | 🔲 | Timeline temporale · rilevamento rogue-DC / DCShadow · ADIDNS · passaggio sulla postura difensiva |