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

11 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ê puder 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 NT 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 direitos delegados para escrever no atributo msDS-KeyCredentialLink do objeto alvo.

Abuso

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

  1. Forjar um ticket silver 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. Esta 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 o benefício adicional de que não delega acesso a outra conta que poderia 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 um wrapper C# para realizar esse ataque em engajamentos. O Whisker atualiza o objeto alvo usando LDAP, enquanto o DSInternals permite atualizar objetos usando tanto LDAP quanto RPC com o Serviço de Replicação de Diretório (DRS) Remote Protocol.

Whisker possui quatro funções:

  • Add — Esta função gera um par de chaves pública-privada e adiciona uma nova credencial de chave ao objeto alvo 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 alvo.
  • Remove — Esta função remove uma credencial de chave do objeto alvo especificada por um GUID de DeviceID.
  • Clear — Esta função remove todos os valores do atributo msDS-KeyCredentialLink do objeto alvo. Se o objeto alvo estiver usando legitimamente o WHfB, ele será quebrado.

Whisker

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

Whisker possui quatro funções:

  • Add — Esta função gera um par de chaves pública-privada e adiciona uma nova credencial de chave ao objeto alvo 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 alvo.
  • Remove — Esta função remove uma credencial de chave do objeto alvo especificada por um GUID de DeviceID.
  • Clear — Esta função remove todos os valores do atributo msDS-KeyCredentialLink do objeto alvo. Se o objeto alvo estiver usando legitimamente o WHfB, ele será quebrado.

Add

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

  • /target:<samAccountName>: Obrigatório. Define o nome do alvo. Objetos de computador devem terminar com um sinal '$'.
  • /domain:<FQDN>: Opcional. Define o Nome de Domínio Completo (FQDN) do alvo. Se não fornecido, tentará resolver o FQDN do usuário atual.
  • /dc:<IP/HOSTNAME>: Opcional. Define o Controlador de Domínio (DC) de destino. Se não fornecido, tentará direcionar o Controlador de Domínio Primário (PDC).
  • /path:<PATH>: Opcional. Define o caminho para armazenar o certificado autoassinado gerado para autenticação. Se não fornecido, o certificado será exibido como um blob Base64.
  • /password:<PASWORD>: Opcional. Define a senha para o certificado autoassinado armazenado. Se não 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, permitem uma exploração primitiva completa apenas em sistemas baseados em UNIX.

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

  • list: lista todos os IDs e horários de criação atuais das KeyCredentials
  • info: imprime todas as informações contidas em uma estrutura KeyCredential
  • add: adiciona uma nova KeyCredential ao msDs-KeyCredentialLink
  • remove: remove uma KeyCredential do msDs-KeyCredentialLink
  • clear: remove todas as KeyCredentials do msDs-KeyCredentialLink
  • export: exporta todas as 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 puro
  • (NTLM) Pass-the-hash
  • (Kerberos) Senha em texto puro
  • (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 das Credenciais Shadow sobre todos eles

Funciona da seguinte maneira:

  1. Faça login no domínio com as credenciais fornecidas (ou use a sessão atual).
  2. Verifique se o nível funcional do domínio é 2016 (Caso contrário, pare, pois o ataque de Credenciais Shadow não funcionará)
  3. Reúna 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 (limpeza após o uso...)
  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 🎥