Active Directory Hacking 2 - Kerberos Authentication

Merhabalar, Önceki yazımda AD hakkında temel terimlerden ve bileşenlerden basitçe bahsetmiştim. Active Directory Hacking serimin ikinci yazısında size Kerberos Authentication’dan bahsedeceğim. Kerberos’un ne olduğunu ve nasıl çalıştığını özetçe anlatmaya çalışacağım

Kerberos nedir?

Kerberos AD’de bir Authentication yani kimlik doğrulama protokolüdür. Kullanıcı bir şifre ile geldiğinde doğru mu değil mi diye kontrol eder. Nerelere erişeceğini doğrulamaz. Kerberos her kullanıcının ayrıcalıkları hakkında bilgi sahibidir ama kullanıcının bir yere erişimi olup olmadığı o yerin/hizmetin sorumluluğundadır. Yani yetkilendirme konusunda her hizmet kendinden sorumludur.

Kerberos Bileşenleri

Kerberos tarafından dinlenen portlar UDP’de 88, TCP’de 88’dir.

Kerberos’ta kimlik doğrulama sağlamak için birkaç bileşen ile beraber çalışır. Bunlar:

  • Client: servise ulaşmak isteyenler
  • Application server (AP): Kullanıcının ihtiyaç duyduğu hizmeti sunan sunucular.
  • Key Distribution Center (KDC): 
    • Kerberos’un Ticketların düzenlenmesinden sorumlu merkez.
    • Domain Controller’a kurulur.
    • KDC iki temel servisi sağlar:
      • Authentication Service(AS): Clientların kimliğini doğrular ve onlara Ticket verir.
      • TGS(Ticket Granting Service): Kimliği doğrulanmış clientları kabul eder ve diğer kaynaklara erişmeleri için onlara ticket verir.

Key’ler: Kerberos tarafından ticket olarak ele alınan birkaç yapı vardır. Bunların çoğu kurcalamayı önlemek için şifrelenir veya imzalanır.

  • KDC ya da krbtgt Key: krbtgt hesabı NTLM hash’inden üretilir.

  • User Key: Kullanıcı NTLM Hash’inden üretilir.

  • Service Key: Servis sahibinin NTML hash’inden üretilir.

  • Session Key: Kullanıcı ile KDC arasında anlaşılan oturum anahtarıdır.

  • Service Session Key: kullanıcı ve servis arasında kullanılan anahtardır.

Ticket’lar: Kerberos tarafından işlenen ana yapılardır. Bu Ticketlar kerberos’ta çeşitli eylemler gerçekleştirmek ve kullanılmak için kullanıcılara verilir. Ticketlar simetrik şifreleme kullanır. Yani şifreleme ve çözme anahtarı aynıdır.

  • Ticket Granting Service (TGS): Kullanıcının bir servise/hizmete karşı kimlik doğrulaması yapması için kullanacağı bilet ahanda bu. Service key ile şifrelenir.

  • Ticket Granting Ticket (TGT): KDC’ye TGS talebinde bulunmak için sunulan tickettir. KDC key ile şifrelenir.

Privilege Attribute Certificate (PAC): Bu yapı kullanıcının yetkilerini içerir ve hemen hemen her Ticketa dahil edilir. KDC key ile imzalanır. Servis/hizmetler KDC ile iletişim kurarak PAC’yi doğrular ama bu sık sık olmaz. PAC doğrulaması, PAC içindeki ayrıcalıkların doğru olup olmadığı kontrol etmeden yalnızca imzasını kontrol eder.

! Client ticket requestinde KERB-PA-PAC-REQUEST alanını belirterek PAC’nin Ticket’a dahil edilmesini önler.!

Evett... Şimdi iletişime geldik...

  • KRB_AS_REQ: TGT ticketı KDC’den istemek için kullanılır.
  • KRB_AS_REP: KDC, TGT’yi vermek için kullanır.
  • KRB_TGS_REQ: TGT ticket’ı kullanarak TGS, KDC’den istemek için kullanılır.
  • KRB_TGS_REP: KDC, TGS’yi vermek için kullanır.
  • KRB_AP_REQ: TGS ile bir servise/hizmete karşı bir kullanıcının kimliğini doğrulamak için kullanılır.
  • KRB_AP_REP: Hizmet/servis kendisini kullanıcıya tanımlamak için kullanır. İsteğe bağlıdır.
  • KRB_ERROR: Hata koşullarını bildirmek için kullanılır.

Yukarıda bahsettiğim servislerin KDC ile iletişim kurarak PAC doğrulamasını KERB_VERIFY_PAC_REQUEST ile yapar.

Kimlik doğrulama gerçekleştirmenin özeti olarak:

Kerberos Kimlik Doğrulama Süreci:

1.Adım: Öncelikle kullanıcının KDC’den TGT alması gerekir. Bunun için KRB_AS_REQ göndermesi gerekir. Bu aşamada isteği atmadan önce client isteği şifrelemek için kullanıcının parolasını kullanır.

KRB_AS_REQ içerisinde:

  • Timestamp(zaman damgası)
  • Username (diğer adıyla User Principal Name -UPN-)
  • User Nonce

 

2.Adım: KDC, isteği aldıktan sonra elinde olan doğru şifre ile isteği çözmeye çalışır eğer istek çözülürse şifre doğrudur. Böylece kullanıcı kimliğini doğrulanır. Mesaj Doğruysa KRB_AS_REP kullanıcı parolasıyla şifrelenip yanıt verilir. Client bu isteği kullanıcı parolası ile çözerse KDC’nin doğru olduğunu bilir. Bu yanıttan sonra kullanıcı artık TGS talep etmek için TGT’ye sahip olur.

KRB_AS_REP içerisinde:

  • Username
  • TGT:
    • Username
    • Session key
    • TGT’nin bitiş tarihi
    • KDC imzalı PAC
  • User key ile şifrelenmiş bazı veriler:
    • Session Key
    • TGT’nin bitiş tarihi
    • User nonce (replay saldırılarını önlemek için)

 

3.Adım: Client erişmek istediği servis/hizmet asıl adını(SPN) içeren KRB_TGS_REQ isteğini bir TGS talep etmek için KDC’ye gönderilir.

KRB_TGS_REQ içerisinde:

  • Session Key ile şifrelenmiş:
    • Username
    • Timestamp
  • TGT
  • İstenilen servisin SPN’si (Service Principal Name/servisin asıl ismi)
  • User nonce

 

4.Adım: KDC, KRB_TGS_REP ile kullanıcıya TGS döndürür.

KRB_TGS_REP içerisinde:

  • Username
  • TGS
    • Service Session Key
    • Username
    • TGS’nin bitiş tarihi
    • KDC imzalı PAC
  • Session Key ile şifrelenmiş:
    • Service session key
    • TGS’nin bitiş tarihi
    • User nonce

 

5.Adım: TGS’yi kullanmak için AP’ye KRB_AP_REQ gönderilir.

KRB_AP_REQ içerisinde:

  • TGS
  • Service Session Key ile şifrelenmiş:
    • Username
    • Timestamp (replay attakları önlemek için)

 

Belki 6.adım: AP, PAC’yi Domain Controller ile doğrulayacaktır. Eğer bir doğrulama gerekiyorsa servis kullanıcıya KRB_AP_REP ile yanıt verecek.


Bir sorunuz varsa yazabilirsiniz. Sonraki blog yazımda görüşmek üzere.

-KA-

Kaynaklar:

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-kile/b4af186e-b2ff-43f9-b18e-eedb366abf13

https://www.roguelynn.com/words/explain-like-im-5-kerberos/

https://blog.netwrix.com/2022/08/18/what_is_kerberos/

https://forestall.io/blog/en/kerberos-protocol-security-1/

https://www.tarlogic.com/blog/how-kerberos-works/

No comments:

Post a Comment