
Uma ferramenta para pulverizar Shadow Credentials por todo um domínio na esperança de abusar de DACLs GenericWrite/GenericAll há muito esquecidas sobre outros objetos no domínio.
Uma ferramenta para pulverizar Shadow Credentials por todo um domínio na esperança de abusar de DACLs GenericWrite/GenericAll há muito esquecidas sobre outros objetos no domínio.
Em muitos engajamentos, vejo (no BloodHound) que o grupo "Everyone" / "Authenticated Users" / "Domain Users" ou algum outro grupo amplo, que contém quase todos os usuários do domínio, possui algumas DACLs GenericWrite/GenericAll sobre outros objetos no domínio.

Esses direitos podem ser abusados para adicionar Shadow Credentials no objeto alvo e obter seu TGT e NT Hash.
Ocorreu-me que podemos simplesmente tentar pulverizar shadow credentials por todo o domínio e ver o que cola (obviamente, essa abordagem é mais adequada para engajamentos não furtivos, não use isso em uma red team onde a furtividade é necessária). Quando uma Shadow Credential é adicionada com sucesso, simplesmente fazemos toda a dança PKINIT + UnPACTheHash e voilà - obtemos NT Hashes.
Como o processo é extremamente rápido, isso pode ser usado no início do engajamento, e esperamos que você tenha alguns usuários e computadores comprometidos antes mesmo de começar.
Nota: Reciclei muito código da minha ferramenta anterior, então AVs/EDRs podem sinalizar isso como KrbRelayUp...
Funciona mais ou menos assim:
ShadowSpray suporta CTRL+C, então se a qualquer momento você desejar parar a execução, basta pressionar CTRL+C e o ShadowSpray exibirá os NT Hashes recuperados até o momento antes de sair (como mostrado na demonstração abaixo).
__ __ __ __ __ __
/__` |__| /\ | \ / \ | | /__` |__) |__) /\ \ /
.__/ | | /~~\ |__/ \__/ |/\| .__/ | | \ /~~\ |
Usage: ShadowSpray.exe [-d FQDN] [-dc FQDN] [-u USERNAME] [-p PASSWORD] [-r] [-re] [-cp CERT_PASSWORD] [-ssl]
-r (--RestoreShadowCred) Restaura o atributo "msDS-KeyCredentialLink" após o ataque ser concluído. (Opcional)
-re (--Recursive) Realiza o ataque ShadowSpray recursivamente. (Opcional)
-cp (--CertificatePassword) Senha do certificado. (padrão = senha aleatória)
General Options:
-u (--Username) Nome de usuário para autenticação LDAP inicial. (Opcional)
-p (--Password) Senha para autenticação LDAP inicial. (Opcional)
-d (--Domain) FQDN do domínio. (Opcional)
-dc (--DomainController) FQDN do controlador de domínio. (Opcional)
-ssl Usar LDAP sobre SSL. (Opcional)
-y (--AutoY) Não perguntar confirmação para iniciar o ataque ShadowSpray. (Opcional)
Retirado do post do blog de Elad Shamir sobre Shadow Credentials:
Se a autenticação PKINIT não for comum no ambiente ou não for comum para a conta alvo, o evento “Foi solicitado um tíquete de autenticação Kerberos (TGT)” (4768) pode indicar comportamento anômalo quando os atributos de Informações do Certificado não estiverem em branco.
Se uma SACL estiver configurada para auditar modificações de objetos do Active Directory para a conta alvo, o evento “O objeto do serviço de diretório foi modificado” (5136) pode indicar comportamento anômalo se o sujeito que altera o msDS-KeyCredentialLink não for a conta de sincronização do Azure AD Connect ou a conta de serviço do ADFS, que normalmente atuam como Servidor de Provisionamento de Chaves e modificam legitimamente este atributo para os usuários.
Um controle preventivo mais específico é adicionar uma Entrada de Controle de Acesso (ACE) para NEGAR ao principal EVERYONE (TODOS) a modificação do atributo msDS-KeyCredentialLink para qualquer conta que não deva ser inscrita na autenticação sem senha Key Trust, e particularmente contas privilegiadas.
Detectando UnPACing e shadowed credentials por Henri Hambartsumyan da FalconForce
Detecções específicas do ShadowSpray: