KERBEROS, GOLDEN TICKET & SILVER TICKET

Merhabalar ,

Bu yazımda Kerberos‘ un nasıl çalıştığından, Golden Ticket ve Silver Ticket nasıl oluşturulduğundan bahsedeceğim.

Kerberos, Active Directory ortamında kullanıcıların ağ üzerinde kimlik doğrulaması yapmasına ve kimlik doğrulaması yapıldıktan sonra hizmetlere erişmesine izin veren bir protokoldür.

Kerberos sayesinde kullanıcının her seferinde şifresini girmesine gerek kalmayacak ve sunucunun da her kullanıcının şifresini bilmesi gerekmeyecek. Merkezi kimlik doğrulamadır.

Kullanılacak Terimler

KDC (Key Distribution Center): Anahtar Dağıtım merkezidir. Active Directory de krbtgt kullanıcısı tarafından yönetilir. Bu kullanıcı pasif bir hesaptır. Bu hesap logon , logoff için kullanılamaz.

AS (Authentication Service): Kimlik Doğrulama servisi.

TGT (Ticket Granting Ticket) : Bilet veren bilet.

TGS (Ticket Granting Service): Hizmet veren bilet

Kerberos protokolünün çalışma mantığını anlamak Golden Ticket ve Silver Ticket‘ ı anlayabilmek için önemlidir.

Kerberos nasıl çalışır ?

Active Directory ortamında bulunan bir bilgisayarda kullanıcının oturum açacağı senaryo üzerinden ilerleyelim.

Test Kullanıcısı ,  kullanıcı adı ve parolasını girerek bilgisayarda oturum açar.

1. Parola NTLM hash‘e lsass aracılığıyla dönüştürülür . TGT isteği yapılacaktır. TGT isteği yapılırken istekte kullanıcı adını ve tam isteğin yapıldığı zamanı (Timestamp)  gönderir. Timestamp kullanıcının parolasının hashlenmiş türüyle şifrelenecektir. KRB_AS_REQ isteği aşağıdaki gibi iletilecektir. Test kullanıcısı ve Timestamp (kullanıcı parolasının hashlenmiş türü ile şifrelenecektir)  KDC‘ ye istek iletilecektir.

KDC test kullanıcısını gördükten sonra DC database’inden  test kullanıcısının parola hash bilgisini alarak  Timestamp‘in şifresini  çözmek ister.

Çözemezse kullanıcı şifrelemek için doğru parolayı kullanmamış demektir.

Çözebilirse onunla konuşanın test kullanıcısı olduğundan emin olur. Test kullanıcısına özel süresi sınırlı benzersiz bir anahtar üretecektir.

2. Timestamp‘in şifresi çözüldükten sonra KDC test kullanıcısına özel, süreli benzersiz anahtar ve TGT‘ yi KRB_AS_REP paketi ile cevap dönecektir. Anahtarı kullanıcının parola hash’ i ile şifreleyerek yollayacaktır. TGT krbtgt kullanıcısının parola hash’ i ile şifrelenecektir. Sadece krbtgt kullanıcısı şifresini çözebilmektedir.

TGT içerisinde kullanıcı adı , IP adresi , geçerlilik süresi , kullanıcıya verilen anahtar , PAC (Privilige Attiribute Certificate)  bilgisi yer almaktadır. PAC kullanıcının ayrıcalıkları hakkında bilgiler verir. Kullanıcı hangi gruplara dahil vs. gibi bilgiler yer alır.

KRB_AS_REP paketi aşağıdaki gibidir.

Artık kullanıcının kimliği doğrulandığına göre kullanıcının kendi anahtarının yanı sıra bu anahtarı içeren krbtgt kullanıcısı tarafından şifrelenen TGT‘ si var. Kullanıcı bir sunucuya erişmek istediğinde aşağıdaki adımlar gerçekleşir.

3. Test kullanıcısı bir servise sunucuya erişmek isterse , KDC‘ ye TGS isteğinde bulunacaktır. KRB_TGS_REQ isteğini gönderecektir.

İsteğin içerisinde TGT ,  Servis/Server , Oturum anahtarı ile şifrelenmiş kullanıcı adını ve Timestamp içeren bir Authenticator (kimlik doğrulayıcı) bulunur. İstek aşağıdaki gibidir.

Authenticator istekte bulunanın test kullanıcısı olduğundan emin olmak için gönderilir. Bunu yapmak için KDC, TGT ve Authenticator içeriklerini karşılaştırır. TGT içeriğini sadece KDC okuyabildiği için kurcalanmış olamaz. KDC TGT‘ yi krbtgt kullanıcısının parola hash’ i ile şifreyi çözer. TGT içerisindeki oturum anahtarı ile Authenticator‘un şifresini çözer.

Çözebilirse TGT deki verilerle Authenticatorda ki veriler eşleşirse test kullanıcısından emin olur. KRB_TGS_REP paketini KDC cevap olarak geri döner.

4. KDC test kullanıcısını doğrulayabildiğine göre kullanıcının servise erişebilmesi için bilgileri geri gönderecektir. KRB_TGS_REP paketini gönderecektir. Paketin içeriğinde İstenen servis ve sunucu adı (SERVIS/SERVER), kullanıcı adı, PAC‘ yi ve yalnızca belirli bir süre için test kullanıcısı ile SERVER arasındaki iletişimler için geçerli olan yeni bir oturum anahtarını içeren bir bilet ve yeni oturum anahtarı. Bu bilet, Servisin yani SERVER altında çalıştığı için SERVER anahtarıyla şifrelenir. KRB_TGS_REP Cevap paketi aşağıdaki gibidir.

Test kullanıcısı bu paketi alacak ve kendi oturum anahtarı ile şifreyi çözecektir. Şifreyi çözdükten sonra aşağıda gösterildiği gibi TGS ve erişmek istediğimiz sunucunun verdiği anahtar bulunmaktadır.

Kullanıcı sunucuya erişmek istediğinde sunucuya aşağıdaki gibi bir KRB_AP_REQ paketi gönderir.

Paket içerisinde TGS ve Authenticator bulunmaktadır. Server TGS‘nin şifresini kendi parolasının hash’ i ile çözecektir. TGS içinde bulunan anahtarla Authenticator‘ un şifresini çözecektir. Bilgileri kıyaslayıp kullanıcıdan emin olduktan sonra erişim sağlanmış olacaktır.

Kerberos‘ un Çalışma mantığını öğrendikten sonra Golden Ticket ve Silver Ticket neden oluşturulur ? Nasıl oluşturulur ? bunlara bakalım.

Golden Ticket bir domaine sızma işlemi gerçekleştiğinde, Domain Admin kullanıcısı ele geçirildikten sonra  kalıcılığın sağlanması için oluşturulur. Domain Admin kullanıcısının şifresinin değiştirilme ihtimaline karşılık bu yöntem geliştirilmiştir. Domain’ in Administrator hesabının Sahte TGT ‘sine Golden Ticket denir.

Silver Ticket oluşturulmasının amacı ise  hizmet veren servis hesabına ait NTLM hash‘ i ile TGS oluşturarak o domain üzerindeki yetkilerini yükseltmektir. Parolasız bir şekilde ticket ile erişim sağlamak amaçlanmaktadır.

GOLDEN TICKET

Golden ticket oluşturmak için bir domain ortamına sızdığımızı ve domain admin kullanıcısını ele geçirdiğimiz senaryoyu düşünelim.

Golden Ticket‘ı oluşturabilmek için aşağıdaki bilgileri bilmemiz gerekmektedir.

  • Domain Name
  • Domain SID
  • Taklit edilecek kullanıcı adı
  • Krbtgt hesabının NTLM hash bilgisi

Krbtgt hesabının ntlm hash‘ ini DCSync yöntemiyle veya NTDS.dit dosyasından elde edebiliriz. Bizim senaryomuzda DCSync yöntemini kullanacağız. NTDS.dit dosyası Active Directory kullanıcı veritabanıdır.  NTDS.dit dosyasını dışarı çıkarıp krbtgt hesabının ntlm hash bilgisi elde edilebilir. Bu dosya domainin büyüklüğüne göre dosya boyutu da büyüyecektir. Bu dosyayı dışarı çıkarıp krbtgt hesabının ntlm hash’ ini elde etmek çok daha fazla gürültü çıkaracaktır.

wmic useraccount where name=’Administrator’ get sid

Yukarıdaki komutu cmd de çalıştırdıktan sonra SID bilgisini domaindeki cihazlardan elde edebiliriz. DCSync yöntemiyle de elde edebiliriz. DCSync saldırısı ortama yeni katılan bir DC gibi DC sunucularından bilgileri kopyalamak için yapılır.

DCSync saldırısını yapmadan önce load kiwi denilerek kiwi tool ‘u yüklenmelidir. Mimikatz tool’uda kullanılabilir. Bu senaryoda kiwi tool’u kullanılacaktır.

dcsync_ntlm_krbtgt  komutu çalıştırılır.

DCSync yöntemiyle krbtgt hesabının NTLM Hash bilgisini ve SID bilgisini görmekteyiz.

SID ve krbtgt hesabının NTLM Hash bilgisini elde ettiğimize göre Golden Ticket‘ ı oluşturalım.

golden_ticket_create -d <domian_name> -u <username> -s <SID> -k <krbtgt_ntlm_hash> -t <output> şeklinde komut çalıştırılır.

Ticket oluşturuldu. İçeriğini görüntüleyelim. Aşağıdaki gibi Base64 ile Encode edilmiş bir metin görmekteyiz. Decode ederek içeriğine bakalım.

Decode ettiğimizde bazı yerlerini şifreli olarak görmekteyiz. Şifreli görmemizin sebebi krbtgt hesabının NTLM Hash bilgisi ile encode edilmesindendir. Key olarak krbtgt hesabının NTLM Hash bilgisini vererek bu şifrede çözülebilmektedir.

Kerberos_ticket_use ticket.txt komutunu kullanarak oluşturduğumuz ticket’ı kullanalım.

Kerberos_ticket_list komutu ile ticketları görüntüleyebilmekteyiz. Bizim oluşturduğumuz Golden Ticket 10 yıllık bir tickettır. Kullandığımız tool’ a göre bu süre uzayabilir kısalabilir. Tool’a göre değişkenlik göstermektedir. Süre uzatılabilir.

Gerçek bir TGT ticket’ ını incelediğimizde 10 saatlik bir ticket olduğu gözükmektedir. KDC 10 saatlik TGT ‘ler vermektedir. Bu süre bittiğinde KDC‘den yeni bir TGT talep edecektir.

Elde ettiğimiz Golden Ticket sayesinde istediğimiz sunucu ve servise Pushd ve PsExec kullanarak erişim sağlayabiliriz.

Pushd \\ FS\C$

Psexec \\ FS\C$ 

Şeklinde aşağıdaki gibi istediğimiz bilgisayarlara sunuculara şifresiz bir şekilde bağlanabiliriz.

SILVER TICKET

Silver Ticket için gerekli parametreler

/target : Hedef sunucunun FQDN’i .

/service : Hedef sunucuda çalışan kerberos servisi. Örneğin: CIFS,HTTP,MSSQL  vb.

/rc4: servis için NTLM Hash (Bilgisayar hesabı veya kullanıcı hesabı)

Sızma işlemini gerçekleştirdiğimiz sunucuya meterpreter aracılığı ile Mimikatz tool’ unu C:\ ‘nin altına upload ediyoruz. Silver Ticket elde etmek için Mimikatz tool’ unu kullanacağız.

Mimikatz, Windows sistemlerde lsass process’ ine erişip parolaları memory üzerinden dump etmeyi sağlayan zararlı bir araçtır. Bu şekilde NTLM hash bilgisini elde edeceğiz.

Mimikatz tool’u C:\ ‘nin altında upload edildiğini görmekteyiz.

Mimikatz aracını çalıştırıp sekurlsa::logonpasswords  komutunu çalıştırarak sistemde aktif olan veya lsass üzerinde tutulan kullanıcı bilgilerini görüyoruz.

Bilgileri elde ettikten sonra mimikatz aracıyla Silver Ticket‘ımızı oluşturuyoruz.

/target : FS.okan.com

/service : CIFS

/rc4 : 64f12cddaa88057e06a81b54e73b949b

Burada user herhangi bir kullanıcı girilebilir. Id girmek şart değil girilmezse mimikatz default olarak 500 almaktadır.

kerberos::golden /admin:okan.ozener /domain:okan.com /id:1105 /sid:S-1-5-21-4080691664-249020944-955449746 /target:FS.okan.com /rc4:64f12cddaa88057e06a81b54e73b949b /service:cifs /ptt

Görüldüğü üzere Silver Ticket‘ı elde ettik. CIFS servisine bağlanırken herhangi bir parola bilgisi kullanmadan erişim sağlayabileceğiz.

Umarım faydalı olmuştur 🙂

Herkese İyi Çalışmalar.