
Herramienta de enumeración de seguridad de Active Directory de baja observabilidad que utiliza interfaces ADSI/COM nativas. Enumera ACLs, delegación, trusts, ADCS, objetivos Kerberoast y rutas de ataque sin .NET ni PowerShell, produciendo resultados compatibles con BloodHound.
BloodHound te muestra el camino. Kestrel te muestra lo que ya está dentro.
Todo el mundo mapea lo mismo: la ruta de ataque - quién puede llegar a Domain Admin. Es la pregunta correcta, y las herramientas que la responden son excelentes. Pero un grafo de "quién puede llegar a quién" es ciego a toda una clase de problemas, porque algunas de las peores cosas en un Active Directory no son una ruta en absoluto.
Son una puerta trasera soldada a un atributo. Un certificado que sigue autenticando mucho después de que se restablezca la contraseña. Un permiso grabado en el propio esquema, de modo que todo objeto creado de ahora en adelante lo hereda silenciosamente. Una cuenta eliminada que alguien conservó silenciosamente el derecho de recuperar. Un objeto oculto de la enumeración por una única ACE de denegar lectura.
Nada de eso es un borde en un grafo. Todo ello está ahora mismo en tu directorio. Kestrel lo lee: con llamadas nativas de Windows, derechos ordinarios de usuario de dominio, sin servidor, sin Python, sin agente, y una huella en el controlador de dominio tan contenida que está documentada evento por evento.
Un .exe. Un comando. Todo lo demás, a continuación.
El ecosistema ofensivo de AD - SharpHound, impacket, Certipy y el grafo que hay detrás de ellos - es magnífico, y todo mira la misma superficie: la alcanzabilidad. Kestrel mira las tres dimensiones que esa superficie no puede expresar.
defaultSecurityDescriptor del esquema, objetos ocultos, ACE de denegación de OWNER RIGHTS, claves DKM de AD FS. Las herramientas de grafos no recopilan esto porque no hay ningún borde que dibujar.No es que Kestrel sea más rápido que un grafo. Responde preguntas que el grafo no puede formular.
Más de veinte comprobaciones que normalmente están repartidas entre una docena de scripts y dos lenguajes. Aquí son un único binario, y terminan en un veredicto único ordenado por severidad.
Kestrel.exe --all --report audit.html
Ejecuta todo. Obtén el informe HTML completo. Y, al final de la consola, la parte que importa:
═══ 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
No es un muro de resultados. Los hallazgos que importan, ordenados, cada uno con el comando para remediarlo.
--opengraph) para fusionarlo con tu colección existente, o pivota desde cualquier principal (--from).--diff contra la instantánea de la semana pasada para detectar qué cambió; y una herramienta cuya huella de detección exacta está publicada para que puedas incluirla en la lista blanca y ajustar tus propias alertas en torno a ella.Kestrel es de solo lectura. Nunca escribe en el directorio, nunca replica, nunca necesita SeSecurityPrivilege y nunca toca la nube. Leer quién puede hacer DCSync no se parece en nada, en el cable, a hacer DCSync: no hay DRSUAPI, no hay firma de replicación 4662. Cada consulta que ejecuta y cada evento que puede (y no puede) generar está catalogado en FOOTPRINT.md. Un auditor que le dice al defensor exactamente cómo detectarlo no es una contradicción: es el objetivo.
Descarga una compilación. Cada ejecución de CI en verde publica un artefacto Kestrel.exe: descárgalo desde la pestaña Actions, sin necesidad de toolchain.
O compílalo tú mismo. 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, cero dependencias de terceros. Compílalo con /MT y es un único ejecutable autocontenido: colócalo en un host unido a un dominio y ejecútalo como cualquier usuario ordinario.
Ejecútalo.
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
Ejecuta --all o selecciona cualquier subconjunto. Ayuda completa: Kestrel.exe --help.
Salida e interop: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.
Son promesas, no preferencias: las razones por las que es seguro ejecutarlo en producción. Romper cualquiera de ellas es un fallo de seguridad (consulta SECURITY.md).
SeSecurityPrivilege, máscaras de seguridad solo DACL..exe.Proyecto padre: NetEnum: enumeración de AD mediante ADSI / COM / LDAP.
@ssteelfactor-oss - investigación de seguridad e internals de COM / Windows.
Bajo la licencia Apache License 2.0 - consulta LICENSE. Se proporciona "tal cual", sin garantía; ejecútalo solo contra directorios que estés autorizado a auditar.
| Pecado | Qué encuentra Kestrel | Banderas |
|---|
| Replicación y delegación | Derechos DCSync (quién puede replicar - sin replicar nunca), delegación no restringida / restringida / RBCD / S4U2 | --acl · --delegation |
| Abuso de certificados | AD CS ESC1–5/9, CA no autorizada en el almacén NTAuth, persistencia de certificados de larga duración, ACL de la clave DKM de AD FS: la condición previa del Golden SAML | --adcs · --adfs |
| Persistencia en atributos | Shadow credentials, inyección de historial de SID, derechos de reanimación de tombstones, objetos ocultos, puertas traseras en defaultSecurityDescriptor del esquema, adminCount huérfano | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| Credenciales en texto claro y crackeables | GPP cpassword, secretos de unattend/sysprep y contraseñas de scripts en SYSVOL, cuentas Kerberoastables y AS-REP-roastables, brechas en la cobertura de LAPS | --gpp · --roast · --laps |
| Multi-dominio e híbrido | Principales externos en grupos privilegiados, cuentas de sincronización de Entra Connect etiquetadas como Tier-0, postura de confianza, cuentas de equipo creadas mediante MachineAccountQuota (mS-DS-CreatorSID) | --groups · --trust · --machines |
| Postura y reconocimiento | Política de contraseñas / PSO, antigüedad de krbtgt, configuración GPO de LLMNR / NBT-NS / WDigest / NTLMv1, lectores de gMSA, equipos obsoletos, topología de delegación | --pwdpolicy · --policy · --gmsa · --stale |
| Flag | Escaneo |
|---|
--acl | Bordes ACL, derechos DCSync, higiene de propietario/herencia/canonical, objetos ocultos, reanimación de tombstones |
--groups | Membresía privilegiada transitiva + principales de seguridad externos |
--delegation | Delegación no restringida / restringida / RBCD / S4U2Self |
--paths / --from | Análisis de rutas de ataque hasta Tier-0 (opcionalmente desde un principal dado) |
--adcs | Auditoría de plantillas de certificado / CA de AD CS (ESC1–5/9) + almacén NTAuth + validez |
--adfs | ACL de la clave DKM de AD FS (condición previa del Golden SAML) |
--schema | Auditoría de puerta trasera en defaultSecurityDescriptor del esquema |
--trust | Postura de confianza de dominio / bosque |
--machines | Cuentas de equipo creadas mediante MachineAccountQuota (mS-DS-CreatorSID) |
--roast | Cuentas Kerberoastables + AS-REP-roastables |
--shadowcreds | Shadow credentials (msDS-KeyCredentialLink) |
--sidhistory | Inyección de sIDHistory (privilegiado / externo) |
--adminsdholder | Objetos huérfanos con adminCount=1 |
--gpp | Barrido de secretos en SYSVOL: GPP cpassword, unattend, credenciales de scripts |
--gpolateral | Grupo local de GPO → bordes laterales (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM) |
--policy | Política de seguridad GPO (LLMNR / NBT-NS / WDigest / NTLMv1) |
--pwdpolicy | Política de contraseñas / PSO · antigüedad de krbtgt · MachineAccountQuota |
--hygiene | Higiene de credenciales (PASSWD_NOTREQD / DONT_EXPIRE / reversibles / fugas en descripciones) |
--gmsa | Enumeración de lectores de contraseñas gMSA |
--laps | Cobertura de LAPS (legado + Windows LAPS 2023+) |
--stale | Equipos obsoletos mediante lastLogonTimestamp |
--topology | Topología de equipos mediante decodificación de SPN |
--adws | Detección de endpoint ADWS (9389/TCP por DC) |
| Versión | Estado | Hito |
|---|
| v0.13 | ✅ | Postura de condición de entrada |
| v0.14 | ✅ | Profundidad ACL + bordes laterales |
| v0.15 | ✅ | Auditoría de estructura ACL (clase ADeleg) |
| v0.16 | ✅ | Persistencia sigilosa + profundidad en SYSVOL / ADCS |
| v0.17 | ✅ | Huella multi-dominio + híbrida |
| v0.18 | ✅ | Higiene de consultas + huella honesta |
| v1.0 | ✅ | Funciones completas: hallazgos priorizados + remediación, CI, Apache 2.0 |
| v1.1 | 🔲 | Línea temporal · detección de DC no autorizado / DCShadow · ADIDNS · pasada de postura defensiva |