Volver a actualizaciones
Nuevo releaseAug 23, 2026

Kestrel v.1.1.0

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.

Compartir

Kestrel

build license language dependencies

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.


Has estado mirando en la dirección equivocada

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.

  • Tiempo. Un grafo es una instantánea. Kestrel lee los metadatos de replicación - cuándo cambió un atributo de Tier-0 y qué DC lo originó. Un derecho DCSync concedido anoche no es el mismo hallazgo que uno que lleva años ahí, y solo uno de ellos significa que te están atacando ahora mismo.
  • Persistencia en un atributo, no en un borde. Shadow credentials, historial de SID, reanimación de tombstones, puertas traseras en 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.
  • Postura defensiva, invertida. No "quién puede atacar", sino "qué no está protegido": la cuenta Tier-0 fuera de su silo, la cuenta de sincronización con un RID aleatorio que nadie etiquetó, la política de bloqueo que nunca frena un ataque de fuerza bruta.

No es que Kestrel sea más rápido que un grafo. Responde preguntas que el grafo no puede formular.


Cada pecado de AD, en un exe nativo

PecadoQué encuentra KestrelBanderas
Replicación y delegaciónDerechos DCSync (quién puede replicar - sin replicar nunca), delegación no restringida / restringida / RBCD / S4U2--acl · --delegation
Abuso de certificadosAD 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 atributosShadow 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 crackeablesGPP 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íbridoPrincipales 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 reconocimientoPolí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

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.


Una línea

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.


Un exe. Rojo, azul, púrpura.

  • Rojo / gris - enumera la persistencia y la delegación que el grafo no ve, exporta directamente a BloodHound CE OpenGraph (--opengraph) para fusionarlo con tu colección existente, o pivota desde cualquier principal (--from).
  • Azul - una lista priorizada y remediada de hallazgos; un --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.
  • Púrpura - un mismo artefacto que ambos bandos leen de la misma manera. Rojo lo encuentra, azul lo corrige, todos señalan la misma línea.

Detectable por diseño

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.


Inicio rápido

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

Módulos

Ejecuta --all o selecciona cualquier subconjunto. Ayuda completa: Kestrel.exe --help.

FlagEscaneo
--aclBordes ACL, derechos DCSync, higiene de propietario/herencia/canonical, objetos ocultos, reanimación de tombstones
--groupsMembresía privilegiada transitiva + principales de seguridad externos
--delegationDelegación no restringida / restringida / RBCD / S4U2Self
--paths / --fromAnálisis de rutas de ataque hasta Tier-0 (opcionalmente desde un principal dado)
--adcsAuditoría de plantillas de certificado / CA de AD CS (ESC1–5/9) + almacén NTAuth + validez
--adfsACL de la clave DKM de AD FS (condición previa del Golden SAML)
--schemaAuditoría de puerta trasera en defaultSecurityDescriptor del esquema
--trustPostura de confianza de dominio / bosque
--machinesCuentas de equipo creadas mediante MachineAccountQuota (mS-DS-CreatorSID)
--roastCuentas Kerberoastables + AS-REP-roastables
--shadowcredsShadow credentials (msDS-KeyCredentialLink)
--sidhistoryInyección de sIDHistory (privilegiado / externo)
--adminsdholderObjetos huérfanos con adminCount=1
--gppBarrido de secretos en SYSVOL: GPP cpassword, unattend, credenciales de scripts
--gpolateralGrupo local de GPO → bordes laterales (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM)
--policyPolítica de seguridad GPO (LLMNR / NBT-NS / WDigest / NTLMv1)
--pwdpolicyPolítica de contraseñas / PSO · antigüedad de krbtgt · MachineAccountQuota
--hygieneHigiene de credenciales (PASSWD_NOTREQD / DONT_EXPIRE / reversibles / fugas en descripciones)
--gmsaEnumeración de lectores de contraseñas gMSA
--lapsCobertura de LAPS (legado + Windows LAPS 2023+)
--staleEquipos obsoletos mediante lastLogonTimestamp
--topologyTopología de equipos mediante decodificación de SPN
--adwsDetección de endpoint ADWS (9389/TCP por DC)

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


Invariantes de diseño

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).

  • Solo lectura - nunca crea, modifica ni elimina un objeto del directorio. Solo eventos de lectura/acceso, nunca eventos de modificación.
  • Usuario de dominio ordinario - sin escalada de privilegios, sin SeSecurityPrivilege, máscaras de seguridad solo DACL.
  • Sin replicación - detecta quién puede hacer DCSync; nunca llama a DRSUAPI.
  • Solo directorio y SYSVOL - sin RPC/SMB contra hosts miembros.
  • Sin evasión - sin fragmentación de consultas, sin juegos de sincronización, sin manipulación de registros. Consulta FOOTPRINT.md.
  • Solo on-prem - sin llamadas a Entra / Graph / nube; audita la huella que lo híbrido deja en AD.
  • Nativo y autocontenido - C puro, cero dependencias de terceros, un único .exe.

Hoja de ruta

VersiónEstadoHito
v0.13Postura de condición de entrada
v0.14Profundidad ACL + bordes laterales
v0.15Auditoría de estructura ACL (clase ADeleg)
v0.16Persistencia sigilosa + profundidad en SYSVOL / ADCS
v0.17Huella multi-dominio + híbrida
v0.18Higiene de consultas + huella honesta
v1.0Funciones 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

Documentación

  • FOOTPRINT.md - el rastro exacto de LDAP / SYSVOL que deja cada escaneo y los eventos de DC que genera (y no puede generar).
  • SECURITY.md - reporte, alcance y los invariantes de diseño como garantías verificables.
  • LICENSE - Apache 2.0.

Relacionados

Proyecto padre: NetEnum: enumeración de AD mediante ADSI / COM / LDAP.

Autor

@ssteelfactor-oss - investigación de seguridad e internals de COM / Windows.

Licencia

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.

Categorías