Kerberos Double Hop Problem

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Introdução

O problema de "Duplo Salto" do Kerberos ocorre quando um atacante tenta usar a autenticação Kerberos em dois saltos, por exemplo, usando PowerShell/WinRM.

Quando uma autenticação ocorre através do Kerberos, as credenciais não são armazenadas em memória. Portanto, se você executar o mimikatz, não encontrará as credenciais do usuário na máquina, mesmo que ele esteja executando processos.

Isso ocorre porque, ao se conectar com o Kerberos, essas são as etapas:

  1. O Usuário1 fornece credenciais e o controlador de domínio retorna um TGT do Kerberos para o Usuário1.

  2. O Usuário1 usa o TGT para solicitar um ticket de serviço para conectar-se ao Servidor1.

  3. O Usuário1 conecta-se ao Servidor1 e fornece o ticket de serviço.

  4. O Servidor1 não tem as credenciais do Usuário1 em cache ou o TGT do Usuário1. Portanto, quando o Usuário1 do Servidor1 tenta fazer login em um segundo servidor, ele não consegue se autenticar.

Delegação Não Restrita

Se a delegação não restrita estiver habilitada no PC, isso não acontecerá, pois o Servidor receberá um TGT de cada usuário que o acessar. Além disso, se a delegação não restrita for usada, você provavelmente pode comprometer o Controlador de Domínio a partir dela. Mais informações na página de delegação não restrita.

CredSSP

Outra maneira de evitar esse problema, que é notavelmente insegura, é o Provedor de Suporte de Segurança de Credenciais. Da Microsoft:

A autenticação CredSSP delega as credenciais do usuário do computador local para um computador remoto. Essa prática aumenta o risco de segurança da operação remota. Se o computador remoto for comprometido, quando as credenciais forem passadas para ele, as credenciais podem ser usadas para controlar a sessão de rede.

É altamente recomendável que o CredSSP seja desativado em sistemas de produção, redes sensíveis e ambientes semelhantes devido a preocupações de segurança. Para determinar se o CredSSP está habilitado, o comando Get-WSManCredSSP pode ser executado. Esse comando permite a verificação do status do CredSSP e pode até ser executado remotamente, desde que o WinRM esteja habilitado.

Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}

Soluções alternativas

Invocar Comando

Para lidar com o problema de duplo salto, é apresentado um método envolvendo um Invoke-Command aninhado. Isso não resolve o problema diretamente, mas oferece uma solução alternativa sem a necessidade de configurações especiais. A abordagem permite executar um comando (hostname) em um servidor secundário por meio de um comando PowerShell executado a partir de uma máquina de ataque inicial ou por meio de uma sessão PS previamente estabelecida com o primeiro servidor. Veja como é feito:

$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}

Registrar Configuração de Sessão PS

Uma solução para contornar o problema de duplo salto envolve o uso de Register-PSSessionConfiguration com Enter-PSSession. Este método requer uma abordagem diferente do evil-winrm e permite uma sessão que não sofre com a limitação do duplo salto.

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
klist

Encaminhamento de Porta

Para administradores locais em um alvo intermediário, o encaminhamento de porta permite que solicitações sejam enviadas para um servidor final. Usando netsh, uma regra pode ser adicionada para o encaminhamento de porta, juntamente com uma regra de firewall do Windows para permitir a porta encaminhada.

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

winrs.exe

winrs.exe pode ser usado para encaminhar solicitações do WinRM, potencialmente como uma opção menos detectável se a monitorização do PowerShell for uma preocupação. O comando abaixo demonstra o seu uso:

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

OpenSSH

A instalação do OpenSSH no primeiro servidor permite uma solução alternativa para o problema de double-hop, particularmente útil para cenários de jump box. Este método requer a instalação e configuração da CLI do OpenSSH para Windows. Quando configurado para Autenticação por Senha, isso permite que o servidor intermediário obtenha um TGT em nome do usuário.

Etapas de Instalação do OpenSSH

  1. Baixe e mova o arquivo zip da última versão do OpenSSH para o servidor de destino.

  2. Descompacte e execute o script Install-sshd.ps1.

  3. Adicione uma regra de firewall para abrir a porta 22 e verifique se os serviços SSH estão em execução.

Para resolver erros de Conexão redefinida, as permissões podem precisar ser atualizadas para permitir que todos tenham acesso de leitura e execução no diretório do OpenSSH.

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

Referências

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Last updated