Bu blog serimizde Kerberos protokolünü, delegation yöntemlerini, bu yöntemleri sömürmek için kullanılabilecek saldırı yöntemlerini, bu saldırıları gidermek için alınabilecek önlemleri ve saldırıları tespit için kullanılabilecek bazı kuralları paylaşacağız. Serinin ilk yazısında da öncelikle Kerberos protokol adımlarını detaylı olarak inceleyeceğiz.
Kerberos Protokolü
Kerberos kimlik doğrulama protokolü ilk olarak MIT tarafından geliştirilmiş ve birçok organizasyon tarafından desteklenmiştir. Protokol kimlik doğrulamasının, güvensiz bir ağda, açık metin halinde parola paylaşmadan, şifreli ve güvenli bir şekilde sağlanması amacıyla geliştirilmiştir. Protokol ağ üzerindeki verileri şifrelerken de ön paylaşımlı gizli anahtar (Shared Secret Key) metodunu kullanmaktadır.
Microsoft, Kerberos protokolünde çeşitli özelleştirmeler yaparak Windows Server 2000 ve sonrasında varsayılan olarak bu özelleştirilmiş protokolü kullanmaktadır. Bu protokol Microsoft Active Directory ortamında objelerin (Kullanıcı, Bilgisayar) kaynaklara (Dosya Paylaşımı, Uzaktan Masaüstü Erişimi vb.) erişimi sırasında kimlik doğrulamasının sağlanması amacıyla kullanılmaktadır.
Kerberos protokolünde temel 3 öge bulunmaktadır.
1. Key Distribution Center: Kerberos protokolünün yönetimi sağlayan servistir. Bu servis Domain Controller sunucuları üzerinde çalışmaktadır. Active Directory ortamındaki tüm istemci ve servis hesaplarının bilgilerini ve parola özetlerini bünyesinde barındırmaktadır. Bu parola özetleri Kerberos protokolü sırasında şifreleme anahtarı (Shared Secret Key) olarak kullanılmaktadır.
-
- Authentication Service (AS): Key Distribution Center içerisinde bulunan ve kimlik doğrulama adımından sorumlu olan modüldür. Bu modül istemcinin Active Directory etki alanında (Domain) bulunup bulunmadığını, sağladığı parolanın doğru olup olmadığı gibi bilgileri kontrol ederek kimlik doğrulama işlemini sağlamaktadır.
- Ticket Granting Service (TGS): Kimliği doğrulanan istemciler için gerekli biletlerin oluşturulmasını, doğrulanmasını ve yönetimi sağlayan modüldür.
- KRBTGT: Key Distribution Center servisinin yönetimini sağlayan kullanıcı hesabıdır. Bu kullanıcının parola özeti bazı biletlerin şifrelenmesi için kullanılmaktadır.
2. İstemci (Client): Servise erişmek için kimlik doğrulama sürecini başlatan objedir. Bir kullanıcı hesabı veya makine hesabı olabilir. Active Directory ortamındaki her kullanıcının ve bilgisayarın bir hesabı bulunmaktadır. Kullanıcı hesapları kullanıcı adı ile oluşurken, bilgisayar hesapları ise makine adı ve $ işareti ile belirtilmektedir. Bilgisayar hesaplarının da kullanıcı hesapları gibi parolası bulunmaktadır. Bu parolalar otomatize bir şekilde oluşturulan ve 30 günde bir değiştirilen karmaşık parolalardır. Bu parolaların NT parola özeti (hash), Kerberos protokolünde kullanıcı parola özetlerine benzer bir şekilde işlev görmektedirler.
3. Hizmet alınacak olan servis (Server): İstemcinin süreç sonunda erişmek istediği servistir. Bu servisleri yöneten kullanıcı, bilgisayar, MSA (Managed Service Account), GMSA (Group Managed Service Account) objeleri de servis hesabı (Service Account) olarak adlandırılmaktadır. Servis hesaplarının parola özetleri Kerberos kimlik doğrulama protokolündeki bazı biletlerin oluşturulması ve doğrulanması için kullanılmaktadır.
Active Directory ortamındaki bir objenin servis hesabı olup olmadığı Service Principal Name (SPN) değerleri ile belirlenmektedir. Bu isimler aynı etki alanı içerisinde benzersiz şekilde yapılandırılmaktadır. Her servise ait SPN değeri o servisi yöneten hesapla ilişkilendirilerek Kerberos protokolü sırasında kullanılmaktadır. Bu SPN değerleri atandıkları hesapların ServicePrincipalName değerinde (attribute) tutulmaktadır. Bu değerler Active Directory Users and Computers, ADExplorer veya Powershell ile görülebilmektedir. SPN değerleri aşağıdaki gibi farklı formatlarda olabilmektedir.
{Service Name} / {Host FQDN or NETBIOS Name} / {Port} / {Instance Name}
- MSSQLSVC/SQLSRV01.fslab.local:1433:instance
- MSSQLSVC/SQLSRV01.fslab.local:1433
- MSSQLSVC/SQLSRV01.fslab.local
- MSSQLSVC/SQLSRV01
Active Directory ortamındaki SPN değerleri ve bu değerleri yöneten hesaplar aşağıdaki komutlar ile tespit edilebilmektedir.
Kerberos Protokol Adımları
1. AS-REQ (Authentication Service Request)
Kerberos AS-REQ Paket İçeriği
Kerberos kimlik doğrulamasının ilk adımı kullanıcının KDC üzerinde kimliğinin doğrulanması ve Ticket Granting Ticket (TGT) adı verilen biletin alınmasıdır. Bu amaçla istemci öncelikle Authentication Service (AS) modülüne, bulunduğu domain adını, kullanıcı adını, KRBTGT’ye ait SPN değerini ve hesabının NT parola özeti ile şifrelenmiş kimlik doğrulama verisini (Pre Authentication Data, PA-DATA) göndermektedir. Yani bu pakette kullanıcı, domain adı ve SPN açık metin olarak, kimlik doğrulama verisi ise şifrelenmiş olarak iletilmektedir.
AS öncelikle istemciden gelen bu paketteki domain adını ve kullanıcı adını okuyarak NTDS.dit veri tabanından bu kullanıcıya ait parola özetini elde eder ve bu parola özeti ile Pre Authentication verisinin şifresini çözmeye çalışır. Eğer bu aşamada başarısız olunursa parola hatalıdır ve istemciye gerekli hata mesajı gönderilir. Eğer KDC Pre Authentication verisini başarıyla deşifre (decrypt) ederse bu veri içerisindeki zaman damgasını kontrol eder. Zaman damgası de belirli bir aralık içerisindeyse kimlik doğrulama başarılı olmuş olur. Eğer zaman damgası belirlenen aralıktan eskiyse istemciye hata mesajı gönderilir. Bu zaman damgası kontrolü ağ üzerinden yakalanan paketlerin tekrar kullanılmasıyla gerçekleştirilen saldırıları (Packet Replay) önlemektedir. Bu zaman aralığı varsayılan olarak 5 dakikadır ve Group Policy içerisindeki Kerberos Policy ile yönetilebilmektedir.
Kerberos AS-REQ Paket İçeriği
Başarılı bir AS-REP isteği, paket analiz programlarıyla, incelendiğinde 1 numaralı kısımda Pre-Authentication Data verisinin hangi algoritma kullanılarak şifrelendiği ve şifrelenmiş veri görülebilmektedir. 2 numaralı kısımda isteği yapan kullanıcı adı ve bulunduğu domain bilgisi, 3 numaralı kısımda da krbtgt kullanıcı adı ve domain bilgisi bulunmaktadır.
Aşağıdaki Powershell betiği ile pre-authentication aşaması devre dışı bırakılan hesaplar tespit edilebilmektedir.
Kullanıcının Pre-Authentication Aşamasının Devre Dışı Bırakılması
Pre-Authentication Aşaması Devre Dışı Bırakılan Kullanıcının AS-REQ Paket İçeriği
Pre-authentication aşaması devre dışı bırakılan bir kullanıcı için AS-REQ isteği incelendiğinde 1 numaralı kısımda Pre-Authentication Data verisinin bulunmadığı görülebilmektedir.
İstemci için Kullanılabilecek Şifreleme Algoritmalarının İletilmesi
Hata mesajı incelendiğinde 1 numaralı kısımda kullanıcının Kerberos protokolü sırasında kullanabileceği şifreleme algoritmaları ve bu algoritmalar için kullanılabilecek bazı veriler (Salt) görülebilmektedir. Kerberos protokolünde kullanılacak algoritmalar da Group Policy ve kullanıcı objesi üzerinde yapılacak ayarlar ile yönetilebilmektedir.
Saldırı Yöntemleri
1. Başarılı bir şekilde araya girme saldırısı (Man in the Middle) gerçekleştiren saldırgan, kurbanın AS-REQ isteğini ele geçirebilir ve bu paket içerisindeki kullanıcı parola özeti ile şifrelenen kısma offline olarak brute-force saldırısı gerçekleştirebilir. Eğer kullanıcıların parolaları basit ve şifreleme algoritması da görece zayıf ise saldırganlar plain-text parolaya ulaşabilirler. Bu saldırı yöntemi çok popüler olmasa da ASREQ-Roasting olarak adlandırılmaktadır.
2. AS-REP (Authentication Service Response)
Kerberos AS-REP Paket İçeriği
KDC üzerindeki AS modülü, AS-REQ isteği ile kimliği doğrulanan istemciye, protokolün ileriki aşamalarında kanıt olarak kullanılacak olan Ticket Granting Ticket (TGT) biletini ve Session Key adı verilen anahtar bilgisini gönderir. Fakat TGT ve Session Key verisinden oluşan bir parçayı krbtgt’nin NT parola özeti ile şifreler. Session Key verisini içeren diğer bir parçayı da istemcinin parola özeti ile şifreler. Bu sayede istemci krbtgt parola özeti ile şifrelenen parçayı deşifre edemeyecek, kendi parola özeti ile şifrelenen parçayı ise deşifre ederek Session Key değerini elde ederek ileriki aşamalarda kullanabilecektir.
Bu aşama sonucunda kullanıcı varsayılan olarak 10 saat için geçerli bir TGT bileti elde etmiş olur. İleriki 10 saat içerisinde de bir daha AS-REQ ve AS-REP aşamalarına ihtiyaç olmadan halihazırdaki TGT ile Kerberos protokolü işletilebilmektedir. Bu 10 saatlik süre de Group Policy ile yönetilebilmektedir.
Kerberos AS-REP Paket İçeriği
AS-REP mesajı incelendiğinde 1 numaralı kısımda TGT biletinin şifrelenmiş hali, şifreleme için kullanılan algoritma, 2 numaralı kısımda da kullanıcının deşifre edebileceği Session Key’i de içeren şifreli kısım ve şifreleme algoritması görülebilmektedir.
Saldırı Yöntemleri
1. Saldırganlar pre-authenication aşaması devre dışı bırakılmış hesapların AS-REP paketini sadece hesapların ismini kullanarak elde edebilir ve bu paketteki kullanıcının NT parola özeti ile şifrelenmiş kısma offline olarak brute-force saldırısı gerçekleştirebilirler. Eğer kullanıcıların parolaları basit ve şifreleme algoritması görece zayıf ise saldırganlar plain-text parolaya ulaşabilirler. Bu saldırı yöntemi ASREP-Roasting olarak adlandırılmaktadır.
2. ASREP-Roasting saldırısına benzer bir şekilde AS-REP mesajı içerisinde KRBTGT parola özeti ile şifrelenmiş kısım üzerinde de offline olarak brute-force saldırısı gerçekleştirilebilir. Krbtgt parolasının varsayılan olarak karmaşık bir şekilde tanımlanmasına ve bu hesap için istense bile basit parola tanımlanamamasına karşın nadir senaryolarda kırılabilmektedir.
3. Bir saldırgan araya girme saldırısı yaparak kurbanın AS-REP mesajını ele geçirse bile kullanıcının parola özetini bilmediği için Session Key değerini elde edemeyecek ve TGT’yi kullanamayacaktır. Fakat eğer saldırgan TGT biletini, ele geçirdiği bir sunucunun belleği (memory) üzerinden elde ederse yine bellek üzerinden Session Key’i de elde edebileceği için kullanıcının parola özetini bilmese dahi TGT biletini kullanabilmektedir. Bu yöntemle saldırgan bilet süresi dolana kadar (expire) bu biletle kullanıcının erişebildiği tüm servislere erişebilmektedir. Bu saldırı yöntemine de Pass the Ticket adı verilmektedir.
4. Bir saldırgan krbtgt kullanıcısının NT parola özetini ele geçirebilirse AS-REP mesajı içerisinde iletilen TGT biletini domainde var olan veya olmayan herhangi bir kullanıcı için çok uzun expire süreleri ile oluşturabilmektedir. Bu sayede de yetkili kullanıcılar için TGT oluşturabilmekte ve domain ortamındaki istediği servise erişebilmektedir. Bu saldırı yöntemine de Golden Ticket adı verilmektedir.
3. TGS-REQ (Ticket Granting Service Request)
Kerberos TGS-REQ Paket İçeriği
İstemcinin, TGT biletini aldıktan sonra bu bileti kullanarak erişmek istediği servis için gerekli servis biletini alması gerekmektedir. Bu amaçla istemci KDC’ye bir önceki adımda elde ettiği TGT biletini ve yine bir önceki adımda elde ettiği Session Key ile şifrelenmiş zaman damgası bilgisini göndermektedir. KDC TGS-REQ paketi içerisindeki TGT’yi krbtgt hesabının NT parola özetini kullanarak deşifre eder ve Session Key değerini elde eder. Ardından TGT’nin son kullanma tarihinin geçip geçmediğini kontrol eder. Elde ettiği Session Key ile de şifrelenmiş olan diğer kısmı deşifre eder ve zaman damgasını doğrular.
Kerberos TGS-REQ Paket İçeriği
DC sunucusu üzerindeki dosya paylaşımı (CIFS) servisine erişmek için oluşturulan TGS-REQ isteği Wireshark ile incelendiğinde 1 numaralı kısımda bir önceki adımda elde edilen TGT biletinin KDC’ye gönderildiği görülebilmektedir. Bu biletin enc-part içerisindeki cipher verisi bir önceki biletteki verinin tıpa tıp aynısıdır. 2 numaralı kısımdaki veri ise zaman damgasının ve birtakım farklı verilerin Session Key ile şifrelenmesinden oluşmaktadır. Bu authenticator verisi içerisinde ayrıca paketin doğrulanmasını sağlamak için checksum bilgisi de bulunmaktadır. 3 numaralı kısımda ise erişilmek istenen servise ait bilgiler bulunmaktadır. Servis ismi CIFS, servisin çalıştığı sunucu adı ise DC’dir.
4. TGS-REP (Ticket Granting Service Response)
Kerberos TGS-REP Paket İçeriği
İstemciden gelen TGS-REQ isteğini doğrulayan KDC, istemciye servise erişmek için gerekli servis biletini ve ikinci Session Key değerini göndermektedir. Fakat servis biletini ve Session Key değerini o servisi yöneten (o servisin SPN değerine sahip olan) kullanıcının NT parola özeti ile, ayrıca yine aynı Session Key değerini bir önceki istekte elde ettiği birinci Session Key değeri ile şifreler. Bu sayede istemci servis biletini deşifre edemeyecek ve okuyamayacaktır. Fakat ikinci Session Key değerini daha önce kendisine iletilen Session Key değeri ile deşifre ederek elde edebilecektir.
Bu aşama sonucunda kullanıcı AS-REP aşamasına benzer şekilde varsayılan olarak 10 saat için geçerli bir ST (Service Ticket) bileti elde etmiş olur. İleriki 10 saat içerisinde de aynı servise erişmek için bir daha AS-REQ, AS-REP, TGS-REQ ve TGS-REP aşamalarına ihtiyaç olmadan halihazırdaki ST ile Kerberos protokolü işletilebilmektedir. Bu 10 saatlik süre de Group Policy ile yönetilebilmektedir.
Kerberos TGS-REP Paket İçeriği
TGS-REP mesajı Wireshark ile incelendiğinde 1 numaralı kısımda ST (Service Ticket) biletinin şifrelenmiş hali, şifreleme için kullanılan algoritma, 2 numaralı kısımda da kullanıcının deşifre edebileceği ikinci Session Key’i içeren kısım ve şifreleme algoritması görülebilmektedir.
Saldırı Yöntemleri
1. Kerberos protokolü yetkilendirme (Authorization) kontrolü gerçekleştirmediğinden ortamdaki tüm kullanıcılar, tüm servisler için TGS-REQ isteği yapabilmekte ve servis için gerekli ST biletini elde edebilmektedirler. Saldırganlar da bu şekilde ortamdaki servisler için gerekli ST biletlerini alarak biletlerdeki servis kullanıcısının parola özeti ile şifrelenmiş kısma offline brute-force saldırısı gerçekleştirebilmektedirler. Eğer servis hesaplarının parolaları basit ve şifreleme algoritması da görece zayıf ise saldırganlar plain-text parolaya ulaşabilirler. Bu saldırı yöntemi Kerberoasting olarak adlandırılmaktadır.
2. Başarılı bir şekilde araya girme saldırısı (Man in the Middle) gerçekleştiren saldırgan kurbanın TGS-REP mesajını ele geçirebilir ve bu paket içerisindeki servis kullanıcısının parola özeti ile şifrelenmiş kısma offline olarak brute-force saldırısı gerçekleştirebilir. Eğer servis kullanıcıların parolaları basit ve şifreleme algoritması görece zayıf ise saldırganlar plain-text parolaya ulaşabilirler. Bu saldırı ele geçirme yöntemi farklı olsa da sonuç olarak Kerberoasting saldırısıyla aynıdır.
3. Bir saldırgan araya girme saldırısı yaparak kurbanın TGS_REP mesajını ele geçirse bile Session Key değerini bilmediği için ikinci Session Key değerini elde edemeyecek ve ST’yi kullanamayacaktır. Fakat eğer saldırgan TGS biletini, ele geçirdiği bir sunucunun belleği (memory) üzerinden elde ederse, yine bellek üzerinden Session Key’i de elde edebileceği için kullanıcının parola özetini bilmese dahi ST biletini kullanabilmektedir. Saldırgan bu bilet expire olana kadar bilet içerisindeki servise erişebilir. Ayrıca bilet içerisindeki servis ismini değiştirerek hedef sunucu üzerindeki diğer servislere de erişim sağlayabilir. Bu saldırı yöntemine de Pass the Ticket adı verilmektedir.
4. Bir saldırgan servis hesabının NT parola özetini ele geçirebilirse TGS-REP mesajı içerisinde iletilen ST biletini domainde var olan veya olmayan herhangi bir kullanıcı için oluşturabilmektedir. Bu sayede de yetkili kullanıcılar için ST oluşturabilmekte ve bu servis hesabının yönettiği servislere erişebilmektedir. Bu saldırı yöntemine de Silver Ticket adı verilmektedir.
5. AP-REQ (Application Request)
Kerberos AP-REQ Paket İçeriği
İstemci, erişmek istediği servis için gerekli ST’yi de aldıktan sonra artık bu bileti kullanarak servise erişebilecektir. İstemci bu amaçla, servisin çalıştığı sunucuya servis hesabının parola özeti ile şifrelenmiş ST’yi ve ikinci Session key değeri ile şifrelenmiş zaman damgasını göndermektedir. Servis ilk parçayı kendi parola özeti ile şifrelendiğinden deşifre eder ve içerisindeki bilgileri kontrol eder. Ayrıca bu parça içerisindeki Session Key değerini kullanarak ikinci kısmı deşifre eder ve gerekli doğrulamaları yapar. Bu aşamadan sonra servis, kullanıcının servise erişim yetkisinin olup olmadığını kontrol ederek istemciye gerekli cevabı dönecektir.
Kerberos AP-REQ Paket İçeriği
AP-REQ isteği Wireshark ile incelendiğinde 1 numaralı kısımda TGS-REP aşamasında elde edilen ST biletinin bulunduğu görülmektedir. Enc-part içerisindeki tüm veri bir önceki pakette alınan verinin birebir aynısıdır. 2 numaralı kısımda ise ikinci Session Key ile şifrelenmiş zaman damgası içeren doğrulama verisi bulunmaktadır.
Saldırı Yöntemleri
1. Başarılı bir şekilde araya girme saldırısı (Man in the Middle) gerçekleştiren saldırgan kurbanın AP-REQ mesajını ele geçirebilir ve bu paket içerisindeki servis kullanıcısının parola özeti ile şifrelenmiş kısma offline olarak brute-force saldırısı gerçekleştirebilir. Eğer servis kullanıcıların parolaları basit ve şifreleme algoritması görece zayıf ise saldırganlar plain-text parolaya ulaşabilirler. Bu saldırı da ele geçirme yöntemi farklı olsa da sonuç olarak Kerberoasting saldırısıyla aynıdır.
6. AP-REP (Application Response)
Bu aşamada sunucu istemciye kimlik doğrulama ve yetkilendirme sonucu hakkında geri bildirimde bulunur. Bu paket içerisinde ikinci Session Key ile şifrelenmiş zaman damgası, sekans numarası ve benzeri birtakım veriler bulunmaktadır. Bu adım Kerberos kimlik doğrulamasının tamamlanması için zorunlu değildir.
Kerberos AP-REP Paket İçeriği
AP-REP paketi incelendiğinde şifrelenmiş kısım ve kullanılan şifreleme algoritması görülebilmektedir.
Sonuç
Bu blog yazımızda Kerberos protokol adımlarını ve her adımda gerçekleştirilebilecek saldırı yöntemlerinden bahsettik. Bir sonraki yazımızda ise Kerberos Protokolünü biraz daha detaylı inceleyerek bilet türlerini, PAC doğrulamasını, domainler ve forestlar arası Kerberos adımlarına değineceğiz. İleriki aşamalarda da delegation yöntemlerini, delegation kullanımı sırasındaki Kerberos adımlarını ve Kerberos ile ilgili tüm saldırı yöntemlerini saldırı, önleme ve tespit perspektifiyle analiz edeceğiz.
Kerberos protokol adımlarını içeren örnek pcap dosyalarını buradan indirebilir ve inceleyebilirsiniz.