Windows sistemlerde servis hesapları; servisleri veya uygulamaları çalıştırmak amacıyla tanımlanır. Bu hesaplar, genel olarak bir kullanıcı tarafından oturum açmak üzere kullanılamaz. Genel olarak servis hesaplarının; bilgisayarlara, uygulamalara, servislere ve kritik verilere ayrıcalıklı erişimi vardır. Bu durum servis hesaplarını, saldırganlar için değerli hale getirir.
Active Directory ortamında kimlik doğrulama işlemi için Kerberos protokolü kullanılır. Kerberos, kullanıcıların ağ üzerinde bulunan kaynaklar üzerinde, bilet mantığını kullanarak kimlik doğrulamalarını sağlar. Servis hesapları, Kerberos kimlik doğrulamasını desteklemek için SPN’den (Service Principal Name) yararlanır. SPN, bir servis örneğini, servis üzerinde oturum açabilen bir hesapla ilişkilendirmek amacıyla Kerberos tarafından kullanılır. Böylece bir istemci, SPN aracılığıyla servis bileti talep ederek, servislerden yararlanabilir.
SPN gelişmiş güvenlik sağlamaktadır. Ancak tanımlanan her bir SPN, bu servis hesaplarının tam olarak nerede kullanıldığı ve ne için kullanıldığına dair iz bırakır. Bu bilgileri ele geçiren bir saldırgan, elde ettiği bilgileri kötü amaçları için kullanabilir.
KERBEROASTING Nedir?
Kerberoasting, servis hesaplarının parolalarını kırmak amacıyla kullanılan bir saldırı tekniğidir. Kerberoasting, servislere erişim sağlama, hedef sistem üzerinde hak ve yetki yükseltme ve hedef sistemde kalıcılık sağlama amacıyla kullanılabilir. Bu tekniği uygulamak için gerekli adımlar aşağıda yer almaktadır:
- Kullanıcı nesnelerinin SPN değerleri taranarak servis hesapları keşfedilir.
- Elde edilen SPN’ler aracılığıyla servis hesapları için TGS (Ticket Granted Service) bileti talep edilir.
- Active Directory, SPN ile ilişkili servis hesabının parolasına ait NTLM hash değerini kullanarak bileti şifreler ve talebe cevap olarak bir TGS bileti döndürür.
- SPN ile elde edilen TGS biletine ait veriler dışarı çıkarılır ve bu TGS hash’ine (Kerberos 5 TGS-REP etype 23) yönelik parola kırma saldırısı gerçekleştirilerek, servis hesabının parolası elde edilmeye çalışılır.
Kerberoasting tekniğini uygulamak için, senaryo gereği iki adet makine bulunmaktadır. 192.168.35.201 IP adresli makine MSSQL servisini içeren ve Active Directory ortamına dahil edilmiş bir sunucudur. Bu makine piyadist adlı düşük yetkili domain hesabı ile ele geçirilmiştir. 192.168.35.200 IP adresli makine ise Domain Controller sunucusudur. İki sunucuda da Windows Server Core 2019 işletim sistemi kuruludur. Senaryoya göre, ele geçirilen hesabın SPN’leri sorgulanacak ve elde edilen SPN’lerden yararlanılarak TGS bileti talep edilecektir. Elde edilen TGS biletine yönelik parola kırma saldırısı gerçekleştirilerek servis hesabı ele geçirilecektir.
Resim 1’de ele geçirilen domain hesabının bilgileri yer almaktadır.
Kerberoasting saldırısı gerçekleştirmek için, bu hesaba tanımlı SPN’ler listelenmelidir. Listeleme işlemi için Powershell’den yararlanılabilir. Github üzerinde, Kerberoasting saldırı adımlarını uygulamak için modüller içeren kerberoast adlı bir depo bulunmaktadır. Bu depoda, GetUserSPNs.ps1 adlı bir Powershell script bulunmaktadır. Resim 2’de GetUserSPNs.ps1 adlı script hedef sistemde çalıştırıldı ve ele geçirilen hesaba ait SPN’ler listelendi.
2. sırada yer alan sqladmin adlı hesap dikkat çekmektedir. sqladmin adlı hesap, WIN-FOR6NIEOH5J.priviasecurity.local adlı sunucu üzerinde çalışan MSSQL servisi üzerinde oturum açabilen bir servis hesabıdır. Resim 3’te sqladmin adlı kullanıcıya ait bilgiler listelendi. Bu bilgilere göre sqladmin hesabı ayrıca, “Domain Admins” grubunda yer alan bir yönetici hesabıdır.
sqladmin adlı hesap için bir TGS bileti talep edilerek, bu bilete yönelik parola kırma saldırısı gerçekleştirilebilir. Python programlama dili ile geliştirilen Impacket modülleri içerisinde yer alan GetUsersSPNs adlı modül kullanılarak, piyadist adlı kullanıcı için tanımlanmış olan SPN’ler listelenebilir ve bu SPN’ler için TGS biletleri elde edilebilir. Resim 4’te GetUsersSPNs modülü kullanılarak talep edilen TGS biletine ait veriler yer almaktadır.
Bir kelime listesi kullanılarak, sqladmin adlı hesabın parolasını kırmaya yönelik saldırı gerçekleştirilebilir ve sqladmin hesabının parolası elde edilebilir. Parola kırma işlemi için hashcat aracı kullanılabilir. Hashcat, birçok hash algoritması için cracking işlemi yapabilen bir araçtır. Hashcat ile TGS hash modu seçilerek, TGS biletinin hash değerine yönelik cracking işlemi gerçekleştirilebilir.
Hashcat aracının -m parametresi kullanılarak hash modu belirlenir. Bu parametreye 13100 değeri atanması durumunda, bu araç belirtilen hash değerini TGS hash’i olarak tanır. -a parametresine 0 değeri atanarak, atak modu straight (düz) olarak belirtilir. Hash değerini içeren dosya yolu, atak modu, hash tipi ve parola kırma işlemi için gereken kelime listesinin dosya yolu belirtildikten sonra hashcat aracı çalıştırıldı.
Kelime listesinde yer alan kelimeler denendi ve sqladmin adlı hesabın parolasının “Password1” olduğu tespit edildi.
Elde edilen parola kullanılarak Domain Controller sunucusu ele geçirildi.
KERBEROASTING KORUNMA YOLLARI
Kerberoasting saldırılarından korunmak için;
SPN değerleriyle kullanılan servis hesaplarına, uzun ve karmaşık parolalar atanmalıdır. Servis hesaplarının ele geçirilmesi durumunda, devam eden saldırıların tespit edilmesi için, servis hesabı kullanılarak yapılan kimlik doğrulama işlemlerindeki anormallikler tespit edilmelidir ve saldırılara müdahele edilmelidir.
Yazar: Ramin Karimkhani