
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.
O BloodHound mostra o caminho. O Kestrel mostra o que já está lá dentro.
Todo mundo mapeia 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 consegue chegar a quem" é cego para uma classe inteira de problemas, porque algumas das piores coisas em um Active Directory não são um caminho de forma alguma.
São uma backdoor soldada em um atributo. Um certificado que continua autenticando muito depois de a senha ser redefinida. Uma permissão gravada no próprio schema, de modo que todo objeto criado a partir de agora a herda silenciosamente. Uma conta excluída cujo direito de ressuscitar alguém manteve discretamente. Um objeto oculto da enumeração por uma única ACE de deny-read.
Nada disso é uma aresta em um grafo. Tudo isso está no seu diretório agora mesmo. O Kestrel lê isso - com chamadas nativas do Windows, direitos comuns de usuário de domínio, sem servidor, sem Python, sem agente, e com uma pegada no controlador de domínio tão contida que está documentada evento por evento.
Um .exe. Um comando. Tudo o que segue abaixo.
O ecossistema ofensivo de AD - SharpHound, impacket, Certipy e o grafo por trás deles - é soberbo, e todos olham para a mesma superfície: alcançabilidade. O Kestrel olha para as três dimensões que essa superfície não consegue expressar.
defaultSecurityDescriptor no schema, objetos ocultos, ACEs de deny com OWNER RIGHTS, chaves DKM do AD FS. As ferramentas de grafo não coletam isso porque não há aresta para desenhar.Não é que o Kestrel seja mais rápido que um grafo. Ele responde perguntas que o grafo não consegue fazer.
| Sin | O que o Kestrel encontra | Flag(s) |
|---|---|---|
| Replicação e delegação | Direitos DCSync (quem pode replicar - sem nunca replicar), delegação irrestrita / restrita / RBCD / S4U | --acl · --delegation |
| Abuso de certificados | AD CS ESC1–5/9, CA rogue no armazenamento 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 atributos | Credenciais shadow, injeção de histórico de SID, direitos de reanimação de tombstone, objetos ocultos, backdoors no defaultSecurityDescriptor do schema, adminCount órfão | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| Credenciais em texto claro e quebráveis | cpassword de GPP, segredos de unattend/sysprep e senhas de scripts no SYSVOL, contas Kerberoastable e AS-REP-roastable, lacunas de cobertura do LAPS | --gpp · --roast · --laps |
| Entre domínios e híbrido | Principais externos em grupos privilegiados, contas de sincronização do Entra Connect marcadas como Tier-0, postura de confiança, contas de máquina criadas via MachineAccountQuota (mS-DS-CreatorSID) | --groups · --trust · --machines |
| Postura e reconhecimento | Política de senhas / PSO, idade do krbtgt, configurações de GPO de LLMNR / NBT-NS / WDigest / NTLMv1, leitores de gMSA, computadores obsoletos, topologia de delegação | --pwdpolicy · --policy · --gmsa · --stale |
| Arqueologia | ACEs perigosas órfãs (um direito detido por um principal excluído - o SID não resolve para ninguém), contas privilegiadas obsoletas (esquecidas, com privilégios excessivos, senha antiga) | --archaeology |
| Endurecimento do domínio | Flags de dSHeuristics de LDAP anônimo / exclusão do AdminSDHolder, associação ampla ao Pre-Windows 2000 Compatible Access | --hardening |
| Postura de serviços (lida do AD, sem pacote para o serviço) | Escalação Exchange-para-DA e EOL, tomada de controle do contêiner SCCM e mapa do site, envenenamento de zona ADIDNS (Authenticated Users podem criar registros) | --exchange · --sccm · --dns |
Mais de duas dúzias de verificações que normalmente estão espalhadas por uma dúzia de scripts e duas linguagens. Aqui elas são um único binário - e terminam em um único veredito, ordenado por severidade.
Kestrel.exe --all --report audit.html
Execute tudo. Obtenha o relatório HTML completo. E, bem no final do console, 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 parede de saída. Os achados que importam, classificados, cada um com o comando para fechá-lo.
--opengraph) para fundir com sua coleta existente, ou faça pivô a partir de qualquer principal (--from).--diff contra o snapshot da semana passada para capturar o que mudou; e uma ferramenta cuja pegada de detecção exata é publicada para que você possa colocá-la na lista de permissões e ajustar seus próprios alertas em torno dela.O Kestrel é somente leitura. Ele nunca escreve no diretório, nunca replica, nunca precisa de SeSecurityPrivilege, nunca toca a nuvem. Ler quem pode fazer DCSync não se parece, na rede, em nada com fazer DCSync - sem DRSUAPI, sem assinatura de replicação 4662. Toda consulta que ele executa e todo evento que ele pode (e não pode) gerar está catalogado em FOOTPRINT.md. Um auditor que diz ao defensor exatamente como capturá-lo não é uma contradição - é exatamente o ponto.
Pegue um build. Toda execução verde da CI publica um artefato Kestrel.exe - baixe-o na aba Actions, sem necessidade de toolchain.