Herkese merhabalar, konumda NTLM ve Kerberos'a değineceğim. NTLM için birkaç kaynak okumak yeterli olabilir fakat Kerberos tanımı ve kavramı anlaşılması zor ve karmaşık bir biçimdedir. Kerberos tarafını birkaç defa okumanızı veya farklı kaynaklara da bakmanızı öneririm.

Öncelikle NTLM nedir bundan başlayalım
NTLM, Microsoft tarafından oluşturulan bir kimlik doğrulama protokolüdür. Başlangıçta tescilli bir protokol olan NTLM, daha sonra Windows kullanmayan sistemlerde kullanılmaya başlandı. NTLM (NT LAN Manager), çeşitli bilgisayarların ve sunucuların karşılıklı kimlik doğrulaması yapmasına izin verir.
Çoğu ağ, bir kimlik doğrulama işleminin uygulanmasını gerektiren yetkisiz kullanıcıların erişimini reddetmeye çalışır.
Protokol, bir istemcinin bir kullanıcı adı ve karşılık gelen bir parola sağlayarak kimliğinin doğrulanmasını gerektirir. Bu, kullanıcının cihazı ile bir sunucu arasında bir değişim kurulmasına izin verir. Kullanıcının oturum açma kimlik bilgileri tanındıktan sonra, sunucu erişim haklarını kontrol edebilir ve kullanıcı girişine izin verebilir.
Bunu aynı yetkilendirme çerçevesi etrafında düşündüğümüzde NTLM, authentication kavramı ile ilgili çalışır ve Windows sistemlerdeki (2000 yılına kadar windows için tek yetkilendirme protokolü, sonrasında Windows son kullanıcılarının yaygın olarak kullandığı bir protokol) bir oturum açma, kimlik doğrulama protokülü olduğunu varsayabiliriz.
Peki NTLM kimlik doğrulaması nasıl çalışır?
Bunu aynı yetkilendirme çerçevesi etrafında düşündüğümüzde NTLM, authentication kavramı ile ilgili çalışır ve Windows sistemlerdeki (2000 yılına kadar windows için tek yetkilendirme protokolü, sonrasında Windows son kullanıcılarının yaygın olarak kullandığı bir protokol) bir oturum açma, kimlik doğrulama protokülü olduğunu varsayabiliriz.
Peki NTLM kimlik doğrulaması nasıl çalışır?
NTLM, bir ağ kullanıcısının gerçekliğini(doğruluğunu) kontrol etmek için bir sorgulama-yanıt protokolü kullanır. Bunu yapmak için, istemci ve ana bilgisayar birkaç adımdan geçer:

- İstemci ana bilgisayara bir kullanıcı adı gönderir.
- Host(buradaki hosttan kasıt doğrulama mekanizmasını teyit edecek makinemiz) rastgele bir sayı ile yanıt verir.
- İstemci daha sonra bu numaradan ve kullanıcının parolasından karma (hash) bir parola değeri oluşturur ve ardından bunu bir yanıt olarak geri gönderir.
- Host(ana bilgisayar), kullanıcının parolasını bilir ve daha sonra client in yanıtıyla karşılaştırabileceği karma bir parola değeri oluşturur.
- Her iki değer de eşleşirse, istemcinin orijinalliği onaylanır ve ağ erişimine izin verilir. Değerler arasında eşleşme yoksa istemcinin erişimi reddedilir.
NOT: Ağ üzerinden gönderilen bir parolanın yetkisiz üçüncü şahıslar tarafından okunmasını engellemek için, parolanın matematiksel bir işlev yardımıyla anlaşılmaz bir sayı dizisine dönüştürüldüğü bir hash işlevi kullanılır. Bu dönüşüm çok kolay geri alınamayacağı için(hatta hash fonksiyonları geri çevirilemez formattadırlar) hash fonksiyonları kriptolojide çok önemli bir rol oynar.
NTLM uygulamaları
NTLM uygulamaları
NTLM protokolü, birkaç Windows makinesini birbirine veya bir sunucuya bağlamak için tasarlanmıştır. Protokol, clientlerin erişim haklarının izlenmesi yoluyla güvenlik sağlar. Windows, çoklu oturum açma işlemi olarak NTLM'yi kullanır; kullanıcıların etki alanı içindeki çeşitli uygulamalara erişebilmesi için yalnızca bir kez oturum(SSO single sign-on) açması gerekir. Çoklu oturum açma, birkaç farklı uygulama oturum açma ekranını tek bir ekranda birleştiren bir teknolojidir. SSO ile, bir kullanıcının tüm SaaS (Software as a Service - Yazılım Olarak Servis) uygulamalarına erişmek için oturum açma kimlik bilgilerini (kullanıcı adı, şifre vb.) tek bir sayfada yalnızca bir kez girmesi yeterlidir. Önceki cümlede SaaS kavramı üzerinden örnek verilmiş fakat biz bunu Windows için, cloud olmayan yerel Windows makineler içinde geçerli sayarız.
NTLM artık modası geçmiş kabul ediliyor ve Microsoft bunun yerine Kerberos kullanıyor. Bu yeni kimlik doğrulama protokolü daha güvenlidir. Ancak NTLM, özellikle eski hizmetleri desteklemek için hala kullanılmaktadır(aynı zamanda kullandığımız Windows makinelerde, sandboxlarımız, sanal Windowslar vesaire hala NTLM kullanır). Daha büyük bir ağın yöneticisiyseniz, gerekli olmadığında NTLM protokolünü kullanmayı bırakmanız önerilebilir(Üst düzey kurumlarda Active Directory kullanılıyor, burada oraya değinilmiş).
NTLM Dezavantjlarından birisi,, NTLM'nin çok faktörlü kimlik doğrulamayı (MFA) içermemesidir ki bu durum NTLM yerine Kerberos kullanımını tetikleyen ana etkenlerden birisidir. Özellikle hassas veriler paylaşılırken birkaç güvenlik mekanizmasının uygulanması tavsiye edilir (Burada Kerberosa atıfta bulunulmuştur). NTLM'deki sorgulama-yanıt protokolü yalnızca tek bir kimlik doğrulama yöntemine izin verir, oda bir kullanıcı adı ve bir parola.
NOT2: Günümüzde NTLM yerine Kerberos kullanan sistemler Active Directory yapısı altında görülür. Fakat bu demek değildir ki NTLM güvensiz veya çok kolay kırılabilir. Windowsun iç yapılanmasına girilmedikçe (dns, llmnr poisoning vb) NTLM protokolü kolay kolay kırılamaz. Burada anlatılmak istenen bireysel kullanımdan ziyade siber ataklara karşı alınmaya çalışılan önlemde kusur olmaması, herhangi bir güvenlik zafiyeti bulunmaması. En basit yöntemle bu brute force yöntemidir. Windows için kaba kuvvete yol açacak bir protokol kullanılamayacağı gibi alternatif üretilmesi gerekir ki 2000 sonrasında bunun farkına varılarak Kerberos ortaya çıkmıştır.
Windows Yeni Teknoloji LAN Yöneticisi (NTLM), kullanıcıların kimliğini doğrulamak ve etkinliklerinin bütünlüğünü ve gizliliğini (burada kriptolojideki CIA bileşenlerinden integrity-bütünlük ve confidentiality-gizlilik anlatılıyor) korumak için Microsoft tarafından sunulan bir güvenlik protokolleri paketidir. Bilinen güvenlik açıklarına rağmen NTLM, eski istemciler ve sunucularla uyumluluğu sürdürmek için yeni sistemlerde bile yaygın olarak kullanılmaya devam ediyor. NTLM, Microsoft tarafından hâlâ desteklenmekle birlikte, Windows 2000 ve sonraki Active Directory (AD) etki alanlarında varsayılan kimlik doğrulama protokolü olarak Kerberos ile değiştirilmiştir.
(Windows 2000, Microsoft tarafından geliştirilen ve işletmelere yönelik Windows NT işletim sisteminin önemli bir sürümüdür. Windows NT 4.0'ın doğrudan halefiydi ve 15 Aralık 1999'da üretime açıldı ve Windows 2000 Datacenter Server için 17 Şubat 2000 ve 26 Eylül 2000'de resmi olarak perakende satışa sunuldu.) Yani Windows 2000 den kasıt yol olarak da 2000 dir.
NTLM Kullanan Uygulamalar
(Windows 2000, Microsoft tarafından geliştirilen ve işletmelere yönelik Windows NT işletim sisteminin önemli bir sürümüdür. Windows NT 4.0'ın doğrudan halefiydi ve 15 Aralık 1999'da üretime açıldı ve Windows 2000 Datacenter Server için 17 Şubat 2000 ve 26 Eylül 2000'de resmi olarak perakende satışa sunuldu.) Yani Windows 2000 den kasıt yol olarak da 2000 dir.
NTLM Kullanan Uygulamalar
NTLM, Windows 2000'de Kerberos tarafından varsayılan kimlik doğrulama protokolü olarak değiştirildi. Ancak NTLM, eski istemciler ve sunucular arasındaki uyumluluk amacıyla tüm Windows sistemlerinde korunmaya devam eder. Örneğin, hala Windows 95, Windows 98 veya Windows NT 4.0 çalıştıran bilgisayarlar, bir Windows 2000 etki alanıyla ağ kimlik doğrulaması için NTLM protokolünü kullanır. Bu arada, Windows 2000 çalıştıran bilgisayarlar, Windows NT 4.0 veya önceki sürümlere sahip sunucuların kimliğini doğrularken ve ayrıca Windows 2000 veya önceki etki alanlarındaki kaynaklara erişirken NTLM kullanacaklardır. NTLM, etki alanı olmayan denetleyicilerle yerel oturum açma işlemlerini doğrulamak için de kullanılır. (Burası bizim halihazırda kullandığımız sistemleri içeren bir cümledir)

KERBEROS Protokolü
Kerberos, 1980'lerde Massachusetts Teknoloji Enstitüsü'ndeki (MIT) araştırmacılar tarafından geliştirildi. Adı, yeraltı dünyasını koruyan üç başlı köpek olan Yunan mitolojik karakteri Kerberos'tan türetilmiştir. Uygulamada, Kerberos protokolündeki üç güvenlik bileşeni şu şekilde temsil edilir:
Kimlik doğrulaması isteyen bir müşteri İstemcinin erişmek istediği bir sunucu
Biletleme(ticketing) hizmeti veya anahtar dağıtım merkezi (KDC – key distribution center)
Tipik Kerberos iş akışında yer alan başlıca varlıklar şunlardır:
İstemci: İstemci, kullanıcı adına hareket eder ve bir hizmet talebi için iletişimi başlatır. Sunucu: Sunucu, kullanıcının erişmek istediği hizmeti barındırır. Kimlik Doğrulama Sunucusu (AS): AS, istenen istemci kimlik doğrulamasını gerçekleştirir. Kimlik doğrulama başarılı bir şekilde gerçekleşirse, AS müşteriye TGT (Ticket Granting Ticket) adı verilen bir bilet verir. Bu bilet, diğer sunuculara istemcinin kimliğinin doğrulandığını garanti eder.
Anahtar Dağıtım Merkezi (KDC): Bir Kerberos ortamında, kimlik doğrulama sunucusu mantıksal olarak üç bölüme ayrılır: Bir veritabanı (db), Kimlik Doğrulama Sunucusu (AS) ve Bilet Verme Sunucusu (TGS). Bu üç kısım, sırayla, Anahtar Dağıtım Merkezi adı verilen tek bir sunucuda bulunur.
Bilet Verme Sunucusu (TGS): TGS, servis biletlerini bir servis olarak düzenleyen bir uygulama sunucusudur.
Kerberos Kimlik Doğrulama İşlemi Kerberos kimlik doğrulamasının her adımında, paketlerin değiştirilmesini veya okunmasını önlemek ve karşılıklı kimlik doğrulama sağlamak için kriptografi kullanılır. Bir istemci, isteği şifrelemek için kullanıcının parolasını kullanarak KDC'den bir kullanıcı için bilet ister. KDC, sakladığı kullanıcı parolasıyla isteğin şifresini çözebilirse, istemcinin kullanıcı için doğru parolayı sağladığını bilir. KDC, kullanıcı için bir bilet verme bileti (TGT) oluşturur, bunu kullanıcının parolasıyla şifreler ve istemciye geri gönderir. İstemci, kullanıcının parolasıyla bu biletin şifresini çözebilirse, KDC'nin meşru olduğunu bilir.
Bir client, TGT'sini ve erişmek istediği hizmet için hizmet asıl adını içeren bir bilet verme hizmeti (TGS) isteğini sunarak KDC'den bir hizmet için bilet talep eder. KDC, hizmetin parola karması (TGS gizli anahtarı) ile şifrelenmiş bir hizmet bileti (TGS) oluşturur, bileti ve kimlik doğrulayıcı mesajını paylaşılan bilet veren hizmet oturum anahtarıyla şifreler ve son olarak TGS'yi istemciye geri gönderir.
Bir istemci, KDC'den aldığı hizmet biletini kendi parola karmasını kullanarak mesajın şifresini çözen uygulama sunucusuna sunarak bir uygulama sunucusuna (hizmete) erişim talep eder. TGS'nin şifresini başarıyla çözerse, uygulama sunucusu istemciye erişim izni verir.
Bir client, TGT'sini ve erişmek istediği hizmet için hizmet asıl adını içeren bir bilet verme hizmeti (TGS) isteğini sunarak KDC'den bir hizmet için bilet talep eder. KDC, hizmetin parola karması (TGS gizli anahtarı) ile şifrelenmiş bir hizmet bileti (TGS) oluşturur, bileti ve kimlik doğrulayıcı mesajını paylaşılan bilet veren hizmet oturum anahtarıyla şifreler ve son olarak TGS'yi istemciye geri gönderir.
Bir istemci, KDC'den aldığı hizmet biletini kendi parola karmasını kullanarak mesajın şifresini çözen uygulama sunucusuna sunarak bir uygulama sunucusuna (hizmete) erişim talep eder. TGS'nin şifresini başarıyla çözerse, uygulama sunucusu istemciye erişim izni verir.
1-) KRB_AS_REQ: Kimlik Doğrulama Hizmeti'nden (AS) TGT isteyin
İstemcinin isteği, kullanıcının Kullanıcı Asıl Adını (UPN) ve bir zaman damgasını içerir. Kullanıcının parola karması kullanılarak şifrelenir.
2-) KRB_AS_REP: Kimlik Doğrulama Hizmetinden Alınan TGT
KDC, veritabanında istemciyi aramak için UPN'yi kullanır ve mesajın şifresini çözmeye çalışmak için kullanıcının parola karmasını kullanır.
AS, müşteri kimliğini, müşteri ağ adresini, zaman damgasını, yaşam süresini ve bir oturum anahtarını (SK1) içeren bir TGT oluşturur.
KDC, TGT isteğinin şifresini başarıyla çözerse ve zaman damgası, KDC'nin yapılandırılmış zaman kayması dahilindeyse, kimlik doğrulama başarılı olur.
Bir TGT ve bir TGS oturum anahtarı istemciye geri gönderilir. TGS oturum anahtarı, sonraki istekleri şifrelemek için kullanılır.
3-) KRB_TGS_REQ: Mevcut TGT ve TGS isteği
İstemci, erişmek istediği hizmet için SPN'yi içeren bir istekle birlikte TGT'sini sunar. TGS isteği, TGS oturum anahtarıyla şifrelenir.
4-) KRB_TGS_REP: KDC'den TGS alın
KDC, TGT'yi doğrulama girişiminde bulunur; başarılı olursa, istek sahibi hakkında SID ve grup üyelikleri gibi bilgileri içeren ve hizmetin parola karması ile şifrelenmiş bir TGS oluşturur.
TGS ve hizmet oturum anahtarları, TGS oturum anahtarıyla şifrelenir ve istemciye geri gönderilir.
5-) KRB_AP_REQ: TGS'yi Yetkilendirme için Uygulama Sunucusuna Sunun
İstemci, KDC'den aldığı TGS'yi hizmet oturum anahtarıyla şifrelenmiş bir kimlik doğrulama iletisiyle birlikte uygulama sunucusuna gönderir.
6-) KRB_AP_REP: Hizmete İstemci Erişimi Verme
İstemci mesajı alır ve hizmet oturum anahtarıyla şifresini çözer.
Uygulama Sunucusu, içeriğini bir etki alanı denetleyicisiyle doğrulamak için hizmet biletinden Ayrıcalık Öznitelik Sertifikasını (PAC) çıkarır.
Biletin ve PAC'nin doğrulanması, yalnızca TGT 20 dakikadan eski olduğunda gerçekleşir.

Kerberosa dair birçok kaynak bulunduğu için, yukarıdaki resim bir diğer anlatım biçimine örnektir.
KERBEROS ve NTLM
NTLM gibi, Kerberos da bir kimlik doğrulama protokolüdür. Windows 2000 ve sonraki sürümlerde varsayılan/standart kimlik doğrulama aracı olarak NTLM'nin yerini almıştır. NTLM ve Kerberos arasındaki temel fark, iki protokolün kimlik doğrulamasını nasıl yönettiğidir. NTLM, bir kullanıcının kimliğini doğrulamak için istemci ile sunucu arasında üç yollu bir anlaşmaya dayanır. Kerberos, bilet verme hizmetinden veya anahtar dağıtım merkezinden yararlanan iki parçalı bir süreç kullanır. Diğer bir temel fark, parolaların karma mı yoksa şifrelenmiş mi olduğudur. NTLM, bir girdi dosyasına dayalı olarak bir metin dizisi üreten tek yönlü bir işlev olan parola karmasına dayanır; Kerberos, sırasıyla bir şifreleme anahtarı ve şifre çözme anahtarı kullanarak bilgileri karıştıran ve kilidini açan iki yönlü bir işlev olan şifrelemeden yararlanır. Kerberos protokolü bugün Microsoft'un varsayılan kimlik doğrulama yöntemi olsa da, NTLM bir yedek olarak hizmet vermektedir. Kerberos kullanıcının kimliğini doğrulayamazsa, sistem bunun yerine NTLM kullanmayı dener.
NTLM'nin Yerini Neden Kerberos Aldı?
NTLM, parola karma ve tuzlama ile ilgili bilinen birkaç güvenlik açığına maruz kaldı. NTLM'de, sunucuda ve etki alanı denetleyicisinde depolanan parolalar "tuzlu" değildir; bu, karma parolayı kırma tekniklerinden daha fazla korumak için rastgele bir karakter dizisinin eklenmediği anlamına gelir(yani hash formatına birde salt ekleyerek nispeten daha güvenli yapabiliyoruz, NTLM depolanma biçiminde salt kullanılmadığını ve bu güvenlik zafiyetine neden olduğunu belirtiyor). Bu, bir parola karmasına sahip olan rakiplerin bir oturumun kimliğini doğrulamak için temel parolaya ihtiyaç duymadığı anlamına gelir. Sonuç olarak sistemler, bir saldırganın birden fazla oturum açma girişimi yoluyla bir parolayı kırmaya çalıştığı kaba kuvvet saldırılarına karşı savunmasızdı. Kullanıcı zayıf veya yaygın bir parola seçerse, bu tür taktiklere karşı özellikle hassastır. NTLM'nin kriptografisi, güvenlik yeteneklerini önemli ölçüde artıran algoritmalar ve şifrelemedeki yeni gelişmelerden de yararlanamıyor.






