hacktricks/windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md

12 KiB

Credenciais Shadow

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Introdução

Verifique a postagem original para todas as informações sobre essa técnica.

Em resumo: se você pode escrever na propriedade msDS-KeyCredentialLink de um usuário/computador, você pode recuperar o hash NT desse objeto.

Isso ocorre porque você poderá definir credenciais de autenticação de chave pública-privada para o objeto e usá-las para obter um Ticket de Serviço especial que contém seu hash NTLM dentro do Certificado de Atributo de Privilégio (PAC) em uma entidade NTLM_SUPPLEMENTAL_CREDENTIAL criptografada que você pode descriptografar.

Requisitos

Essa técnica requer o seguinte:

  • Pelo menos um Controlador de Domínio do Windows Server 2016.
  • Um certificado digital para Autenticação de Servidor instalado no Controlador de Domínio.
  • Nível Funcional do Windows Server 2016 no Active Directory.
  • Comprometer uma conta com os direitos delegados para escrever no atributo msDS-KeyCredentialLink do objeto de destino.

Abuso

Abusar do Key Trust para objetos de computador requer etapas adicionais após obter um TGT e o hash NTLM da conta. Geralmente, existem duas opções:

  1. Forjar um ticket de prata RC4 para se passar por usuários privilegiados no host correspondente.
  2. Usar o TGT para chamar S4U2Self para se passar por usuários privilegiados no host correspondente. Essa opção requer modificar o Ticket de Serviço obtido para incluir uma classe de serviço no nome do serviço.

O abuso do Key Trust tem a vantagem adicional de não delegar acesso a outra conta que possa ser comprometida - ele é restrito à chave privada gerada pelo atacante. Além disso, não requer a criação de uma conta de computador que pode ser difícil de limpar até que a escalada de privilégios seja alcançada.

Whisker

Junto com esta postagem, estou lançando uma ferramenta chamada " Whisker ". Com base no código do DSInternals de Michael, o Whisker fornece uma camada C# para realizar esse ataque em compromissos. O Whisker atualiza o objeto de destino usando o LDAP, enquanto o DSInternals permite atualizar objetos usando tanto o LDAP quanto o RPC com o Serviço de Replicação de Diretório (DRS) Protocolo Remoto.

Whisker tem quatro funções:

  • Add — Esta função gera um par de chaves pública-privada e adiciona uma nova credencial de chave ao objeto de destino como se o usuário tivesse se inscrito no WHfB a partir de um novo dispositivo.
  • List — Esta função lista todas as entradas do atributo msDS-KeyCredentialLink do objeto de destino.
  • Remove — Esta função remove uma credencial de chave do objeto de destino especificado por um GUID de DeviceID.
  • Clear — Esta função remove todos os valores do atributo msDS-KeyCredentialLink do objeto de destino. Se o objeto de destino estiver usando legítimamente o WHfB, isso irá quebrar.

Whisker

Whisker é uma ferramenta em C# para assumir contas de usuário e computador do Active Directory manipulando seu atributo msDS-KeyCredentialLink, adicionando efetivamente "Credenciais Shadow" à conta de destino.

Whisker tem quatro funções:

  • Add — Esta função gera um par de chaves pública-privada e adiciona uma nova credencial de chave ao objeto de destino como se o usuário tivesse se inscrito no WHfB a partir de um novo dispositivo.
  • List — Esta função lista todas as entradas do atributo msDS-KeyCredentialLink do objeto de destino.
  • Remove — Esta função remove uma credencial de chave do objeto de destino especificado por um GUID de DeviceID.
  • Clear — Esta função remove todos os valores do atributo msDS-KeyCredentialLink do objeto de destino. Se o objeto de destino estiver usando legítimamente o WHfB, isso irá quebrar.

Add

Adicione um novo valor ao atributo msDS-KeyCredentialLink de um objeto de destino:

  • /target:<samAccountName>: Obrigatório. Defina o nome do alvo. Objetos de computador devem terminar com o sinal '$'.
  • /domain:<FQDN>: Opcional. Defina o nome de domínio totalmente qualificado (FQDN) do alvo. Se não for fornecido, tentará resolver o FQDN do usuário atual.
  • /dc:<IP/HOSTNAME>: Opcional. Defina o Controlador de Domínio (DC) de destino. Se não for fornecido, tentará direcionar o Controlador de Domínio Primário (PDC).
  • /path:<PATH>: Opcional. Defina o caminho para armazenar o certificado autoassinado gerado para autenticação. Se não for fornecido, o certificado será exibido como um blob Base64.
  • /password:<PASWORD>: Opcional. Defina a senha para o certificado autoassinado armazenado. Se não for fornecido, uma senha aleatória será gerada.

Exemplo: Whisker.exe add /target:computername$ /domain:constoso.local /dc:dc1.contoso.local /path:C:\path\to\file.pfx /password:P@ssword1

{% hint style="info" %} Mais opções no Readme. {% endhint %}

pywhisker

pyWhisker é um equivalente em Python do Whisker original feito por Elad Shamir e escrito em C#. Essa ferramenta permite aos usuários manipular o atributo msDS-KeyCredentialLink de um usuário/computador alvo para obter controle total sobre esse objeto.

É baseado no Impacket e em um equivalente em Python do DSInternals de Michael Grafnetter chamado PyDSInternals feito por podalirius. Essa ferramenta, juntamente com as PKINITtools de Dirk-jan, permite uma exploração primitiva completa apenas em sistemas baseados em UNIX.

pyWhisker pode ser usado para realizar várias ações no atributo msDs-KeyCredentialLink de um alvo

  • list: lista todos os IDs e horários de criação atuais do KeyCredentials
  • info: imprime todas as informações contidas em uma estrutura KeyCredential
  • add: adiciona um novo KeyCredential ao msDs-KeyCredentialLink
  • remove: remove um KeyCredential do msDs-KeyCredentialLink
  • clear: remove todos os KeyCredentials do msDs-KeyCredentialLink
  • export: exporta todos os KeyCredentials do msDs-KeyCredentialLink em JSON
  • import: sobrescreve o msDs-KeyCredentialLink com KeyCredentials de um arquivo JSON

pyWhisker suporta as seguintes autenticações:

  • (NTLM) Senha em texto claro
  • (NTLM) Pass-the-hash
  • (Kerberos) Senha em texto claro
  • (Kerberos) Pass-the-key / Overpass-the-hash
  • (Kerberos) Pass-the-cache (tipo de Pass-the-ticket)

{% hint style="info" %} Mais opções no Readme. {% endhint %}

ShadowSpray

Em vários casos, o grupo "Everyone" / "Authenticated Users" / "Domain Users" ou algum outro grupo amplo contém quase todos os usuários no domínio e possui algumas DACLs de GenericWrite/GenericAll sobre outros objetos no domínio. ShadowSpray tenta abusar portanto ShadowCredentials sobre todos eles

Funciona da seguinte maneira:

  1. Fazer login no domínio com as credenciais fornecidas (ou usar a sessão atual).
  2. Verificar se o nível funcional do domínio é 2016 (Caso contrário, pare, pois o ataque Shadow Credentials não funcionará)
  3. Coletar uma lista de todos os objetos no domínio (usuários e computadores) do LDAP.
  4. Para cada objeto na lista, faça o seguinte:
  5. Tente adicionar KeyCredential ao atributo msDS-KeyCredentialLink do objeto.
  6. Se o acima for bem-sucedido, use PKINIT para solicitar um TGT usando o KeyCredential adicionado.
  7. Se o acima for bem-sucedido, execute um ataque UnPACTheHash para revelar o hash NT do usuário/computador.
  8. Se --RestoreShadowCred foi especificado: Remova o KeyCredential adicionado (limpe após si mesmo...)
  9. Se --Recursive foi especificado: Faça o mesmo processo usando cada uma das contas de usuário/computador que possuímos com sucesso.

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥