Voltar às atualizações
New releaseAug 23, 2026

Kestrel v.1.1.0

Ferramenta de enumeração de segurança do Active Directory de baixa observabilidade que utiliza interfaces nativas ADSI/COM. Enumera ACLs, delegação, trusts, ADCS, alvos de Kerberoast e caminhos de ataque sem .NET ou PowerShell, produzindo saída compatível com BloodHound.

Compartilhar

Kestrel

build license language dependencies

O BloodHound mostra o caminho. O Kestrel mostra o que já está lá dentro.

Todos mapeiam a mesma coisa: o caminho de ataque - quem consegue chegar ao Domain Admin. É a pergunta certa, e as ferramentas que a respondem são excelentes. Mas um grafo de "quem alcança quem" é cego para uma classe inteira de problemas, porque algumas das piores coisas num Active Directory não são, de todo, um caminho.

São um backdoor soldado num atributo. Um certificado que continua a autenticar muito depois de a palavra-passe ser reposta. Uma permissão cunhada no próprio schema, para que todos os objetos criados daqui em diante a herdem silenciosamente. Uma conta eliminada cujo direito de a repor alguém guardou discretamente. Um objeto escondido da enumeração por um único deny-read ACE.

Nada disso é uma aresta num grafo. Tudo isso está agora mesmo no seu diretório. O Kestrel lê tudo isso - com chamadas nativas do Windows, direitos normais de utilizador de domínio, sem servidor, sem Python, sem agente, e com uma pegada no domain controller tão contida que está documentada evento a evento.

Um .exe. Um comando. Tudo abaixo.


Tem andado a olhar para o lado errado

O ecossistema ofensivo de AD - SharpHound, impacket, Certipy e o grafo por detrás deles - é soberbo, e tudo olha para a mesma superfície: a alcançabilidade. O Kestrel olha para as três dimensões que essa superfície não consegue expressar.

  • Tempo. Um grafo é um instantâneo. O Kestrel lê os metadados de replicação - quando um atributo Tier-0 mudou e qual DC o originou. Um direito DCSync concedido ontem à noite não é o mesmo achado que um que já lá está há anos, e só um deles significa que está a ser atacado agora mesmo.
  • Persistência num atributo, não numa aresta. Shadow credentials, SID history, reanimate-tombstones, backdoors de defaultSecurityDescriptor no schema, objetos ocultos, deny-ACEs de OWNER RIGHTS, chaves DKM do AD FS. As ferramentas de grafos não recolhem isto porque não há aresta para desenhar.
  • Postura defensiva, invertida. Não "quem pode atacar", mas "o que não está protegido" - a conta Tier-0 fora do seu silo, a conta de sincronização com um RID aleatório que ninguém etiquetou, a política de bloqueio que nunca limita um password spray.

Não é que o Kestrel seja mais rápido do que um grafo. Ele responde a perguntas que o grafo não consegue colocar.


Cada pecado de AD, num único exe nativo

PecadoO que o Kestrel encontraFlag(s)
Replicação e delegaçãoDireitos DCSync (quem pode replicar - sem nunca replicar), delegação não condicionada / condicionada / RBCD / S4U--acl · --delegation
Abuso de certificadosAD CS ESC1–5/9, CA rogue no store NTAuth, persistência de certificados de longa duração, ACL da chave DKM do AD FS - a pré-condição do Golden SAML--adcs · --adfs
Persistência em atributosShadow credentials, injeção de SID history, direitos de reanimação de tombstones, objetos ocultos, backdoors de defaultSecurityDescriptor no schema, adminCount órfãos--shadowcreds · --sidhistory · --acl · --schema · --adminsdholder
Credenciais em claro e crackáveiscpassword do GPP, segredos de unattend/sysprep e palavras-passe de scripts em SYSVOL, contas Kerberoastable e AS-REP-roastable, lacunas de cobertura do LAPS--gpp · --roast · --laps
Entre domínios e híbridoPrincipais de segurança estrangeiros em grupos privilegiados, contas de sincronização do Entra Connect etiquetadas como Tier-0, postura de trusts, contas de máquina criadas via MachineAccountQuota (mS-DS-CreatorSID)--groups · --trust · --machines
Postura e reconhecimentoPolítica de palavras-passe / PSO, idade do krbtgt, definições de GPO de LLMNR / NBT-NS / WDigest / NTLMv1, leitores de gMSA, computadores obsoletos, topologia de delegação--pwdpolicy · --policy · --gmsa · --stale

Mais de vinte verificações que normalmente estão espalhadas por uma dúzia de scripts e duas linguagens. Aqui são um único binário - e terminam num único veredito ordenado por gravidade.


Uma linha

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

Execute tudo. Obtenha o relatório HTML completo. E, bem no fim da consola, a 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

Não é uma enxurrada de saída. Os achados que importam, ordenados, cada um com o comando para o fechar.


Um exe. Vermelho, azul, roxo.

  • Vermelho / cinzento - enumere a persistência e a delegação que o grafo não vê, exporte diretamente para BloodHound CE OpenGraph (--opengraph) para fundir com a sua coleção existente, ou faça pivot a partir de qualquer principal (--from).
  • Azul - uma lista de achados priorizada e com remediação; um --diff contra o instantâneo da semana passada para apanhar o que mudou; e uma ferramenta cuja pegada exata de deteção é publicada para que a possa colocar na whitelist e afinar os seus próprios alertas em torno dela.
  • Roxo - um único artefacto que ambos os lados leem da mesma forma. O vermelho encontra-o, o azul corrige-o, e todos apontam para o mesmo número de linha.

Detetável por conceção

O Kestrel é só de leitura. Nunca escreve no diretório, nunca replica, nunca precisa de SeSecurityPrivilege, nunca toca na cloud. Ler quem pode fazer DCSync não se parece nada, ao nível do tráfego, com fazer DCSync - sem DRSUAPI, sem assinatura de replicação 4662. Cada consulta que executa e cada evento que pode (e não pode) gerar está catalogado em FOOTPRINT.md. Um auditor que diz ao defensor exatamente como o apanhar não é uma contradição - é exatamente o objetivo.


Início rápido

Obtenha um build. Cada execução de CI verde publica um artefacto Kestrel.exe - transfira-o do separador Actions, sem necessidade de toolchain.

Ou compile-o você mesmo. Visual Studio (v143+) ou MSBuild:

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

C puro, zero dependências de terceiros. Compile com /MT e é um único executável autocontido - coloque-o num host ligado ao domínio e execute-o como qualquer utilizador normal.

Execute-o.

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

Execute --all, ou selecione qualquer subconjunto. Ajuda completa: Kestrel.exe --help.

FlagVerificação
--aclArestas de ACL, direitos DCSync, higiene de owner/herança/canónica, objetos ocultos, reanimate-tombstones
--groupsAssociação transitiva a grupos privilegiados + principais de segurança estrangeiros
--delegationDelegação não condicionada / condicionada / RBCD / S4U2Self
--paths / --fromAnálise de caminhos de ataque até Tier-0 (opcionalmente a partir de um principal)
--adcsAuditoria de modelos de certificado / CA do AD CS (ESC1–5/9) + store NTAuth + validade
--adfsACL da chave DKM do AD FS (pré-condição do Golden SAML)
--schemaAuditoria de backdoor de defaultSecurityDescriptor no schema
--trustPostura de trusts de domínio / floresta
--machinesContas de máquina criadas via MachineAccountQuota (mS-DS-CreatorSID)
--roastContas Kerberoastable + AS-REP-roastable
--shadowcredsShadow credentials (msDS-KeyCredentialLink)
--sidhistoryInjeção de sIDHistory (privilegiado / estrangeiro)
--adminsdholderObjetos adminCount=1 órfãos
--gppVarredura de segredos em SYSVOL - cpassword do GPP, unattend, credenciais de scripts
--gpolateralGrupos locais de GPO → arestas laterais (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM)
--policyPolítica de segurança de GPO (LLMNR / NBT-NS / WDigest / NTLMv1)
--pwdpolicyPolítica de palavras-passe / PSO · idade do krbtgt · MachineAccountQuota
--hygieneHigiene de credenciais (PASSWD_NOTREQD / DONT_EXPIRE / reversível / fugas em descrições)
--gmsaEnumeração de leitores de palavras-passe de gMSA
--lapsCobertura do LAPS (legado + Windows LAPS 2023+)
--staleComputadores obsoletos via lastLogonTimestamp
--topologyTopologia de computadores via descodificação de SPN
--adwsDeteção de endpoint ADWS (9389/TCP por DC)

Saída e interoperabilidade: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.


Invariantes de conceção

Estas são promessas, não preferências - as razões pelas quais é seguro executá-lo em produção. Quebrar qualquer uma delas é um bug de segurança (ver SECURITY.md).

  • Só de leitura - nunca cria, modifica ou elimina um objeto do diretório. Apenas eventos de leitura/acesso, nunca eventos de modificação.
  • Utilizador de domínio normal - sem elevação de privilégios, sem SeSecurityPrivilege, máscaras de segurança apenas com DACL.
  • Sem replicação - deteta quem pode fazer DCSync; nunca chama a DRSUAPI.
  • Apenas diretório e SYSVOL - sem RPC/SMB contra hosts membros.
  • Sem evasão - sem fragmentação de consultas, sem jogos de timing, sem adulteração de logs. Ver FOOTPRINT.md.
  • Apenas on-prem - sem chamadas a Entra / Graph / cloud; audita a pegada que o híbrido deixa no AD.
  • Nativo e autocontido - C puro, zero dependências de terceiros, um único .exe.

Roadmap

VersãoEstadoMarco
v0.13Postura de condições de entrada
v0.14Profundidade de ACL + arestas laterais
v0.15Auditoria de estrutura de ACL (classe ADeleg)
v0.16Persistência furtiva + profundidade de SYSVOL / ADCS
v0.17Pegada entre domínios + híbrida
v0.18Higiene de consultas + pegada honesta
v1.0Funcionalidades completas: achados priorizados + remediação, CI, Apache 2.0
v1.1🔲Linha temporal · deteção de rogue-DC / DCShadow · ADIDNS · passada de postura defensiva

Documentação

  • FOOTPRINT.md - o rasto LDAP / SYSVOL exato que cada verificação deixa, e os eventos de DC que ela gera (e não consegue gerar).
  • SECURITY.md - reporte, âmbito e os invariantes de conceção como garantias verificáveis.
  • LICENSE - Apache 2.0.

Relacionado

Projeto pai: NetEnum - enumeração de AD via ADSI / COM / LDAP.

Autor

@ssteelfactor-oss - investigação de segurança e internals de COM / Windows.

Licença

Licenciado sob a Apache License 2.0 - ver LICENSE. Fornecido "as is", sem garantia; execute-o apenas contra diretórios que está autorizado a auditar.

Categorias