
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.
Kestrel
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
defaultSecurityDescriptorno schema, objetos ocultos, deny-ACEs deOWNER 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
| Pecado | O que o Kestrel encontra | Flag(s) |
|---|---|---|
| Replicação e delegação | Direitos DCSync (quem pode replicar - sem nunca replicar), delegação não condicionada / condicionada / RBCD / S4U | --acl · --delegation |
| Abuso de certificados | AD 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 atributos | Shadow 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áveis | cpassword 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íbrido | Principais 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 reconhecimento | Polí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
--diffcontra 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.