21 Ocak 2013 Pazartesi

Kerberos Yazı Dizisi - II


Kerberos Yazı Dizisi - II

Kerberos Yazı Dizimizin ikinci yazısıyla yine beraberiz. Bu yazımızda Kerberos'un Alt Yapısından ve çalışma prensiplerinden bahsedeceğiz.

Öncelikle Kerberos ile ilgili küçük bir kaç hatırlatma! Kerberos bir ağ kimlik denetim protokolüdür. Gizli anahtar şifrelemesi kullanarak sunucu/istemci uygulamaları için güçlü bir kimlik denetim mekanizması sağlamaktadır. Kerberos ağ güvenlik problemlerine çözüm olması için Massachusetts Institute of Technology tarafından önerilmiştir. İnternet gibi her türlü tehdite açık bir ortamda saldırılardan korunmak için  çoğunlukla geliştirilmiş firewall programları kullanılmaktadır. Fakat bilindiği üzere, firewall yazılımları saldırganların dışarıdan geldiğini kabul etmektedirler. Üstelik, dış ortamlarla bağlantı kurabilmek için firewall'da belirli portları açmak zorunda kalıyoruz. Ama saldırıların sadece dışarıdan gelmediğini düşündüğünüzde ve bu açık portlarla ağınızın her türlü tehlike ile karşı karşıya olduğu düşünülürse, ağınızın içinde de güçlü bir güvenlik mekanizmasının gerekliliği ortaya çıkmaktadır. Şu an itibariyle en son Kerberos sürümü; MIT Kerberos for Windows 2.5, 11 Ağustos 2003 tarihinde yayınlanmıştır.
Kerberos, standart şifrelemeye dayalı kimlik denetim tekniği kullanmaktadır. Sistem ağ üzerinden gönderilecek kriptografik olarak mühürlenmiş biletler ve kimlik doğrulayıcılar (Authenticator) üzerine temellendirilmiştir. Bu biletler ve kimlik doğrulayıcılar sadece geçerli şifreleme ve deşifreleme anahtarlarını bilen kişiler ve ya makineler ile açılabilirler.

Biletler, kişilerin kendilerini belirli bir servisi kullanmak için geçerli bilgiyi içeren veri bloğudur. Sadece kullanıcıya özel bilgiler içerirler. Zaman damgası (Time Stamp) içerdiklerinden dolayı sadece belirlen süre aralığında(varsayılan  ayarı 8 saattir) aktif olabilmektedirler. Bir bilet sadece bir servis için geçerlidir. Başka bir servisten yararlanabilmek için yeni bir bilet gereklidir. Biletler kimlik doğrulayıcıları (authenticator) oluşturmakta kullanılırlar.

Kimlik Doğrulayıcılar(authenticator), belirli bir servis kullanımı için ağ üzerinden kullanıcının iş istasyonundan servis sağlayıcı sunucuya gönderilen veri bloğudur; o iş istasyonun gerçekten de o kullanıcı tarafından kullanıldığının doğrulamasında kullanılır. Bir kimlik doğrulayıcı bilete göre çok daha kısa ömürlüdür; varsayılan ayarı 5 dakikadır. Bir servisin kullanımı için her oturum için farklı olarak oluşturulur. Servis sağlayıcı sunucu kimlij doğrulayıcıyı bir kere deşifreledikten sonra, o kullanıcıya o oturum içerisinde istediği kadar işlem görmesine izin verir.

Kerberos'un temel bileşenleri;
  • İstemci,
  • Servisi Sağlayan Sunucu,
  • Kimlik Denetim Sunucusu (Authentication Server - AS),
  • Bilet Veren Sunucu (Ticket Granting Server - TGS)
Kerberos'un çalışmasını uzun uzun anlatmak yerine şekil üzerinde incelemenin daha anlaşılır olacağı kanaatindeyim. 


1.     Kullanıcı iş istasyonunda oturum açtıktan sonra sunucudaki servis için istek de bulunur.
2.     Kimlik Denetim Sunucusu veri tabanındaki kullanıcı erişim haklarını denetler. Bilet İsteme Bileti ve oturum anahtarını oluşturur. Oluşan veriler kullanıcı şifresinden türetilmiş bir anahtar ile şifrelenerek tekrar kullanıcıya gönderilir.
3.     İş istasyonu kullanıcıdan şifre ister, ve bu şifre ile karşıdan gelen mesajı açmaya çalışır. Kullanıcının adını, ağ adresini ve TGS için zamanı içeren bileti ve kimlik doğrulayıcıyı Bilet Veren Sunucu(TGS)' ya gönderir.
4.     Bilet Veren Sunucu(TGS), gelen bileti ve kimlik doğrulayıcısını açarak isteği doğrular ve istenen sunucudaki istenen servis için bileti oluşturur. 
5.     İş istasyonu bileti ve kimlik doğrulayıcıyı sunucuya gönderir.
6.     Sunucu biletin ve kimlik doğrulayıcısının doğruluğunu denetler, ve servise erişim izni verir. Eğer karşılıklı kimlik denetimi gerekliyse, sunucu kimlik doğrulayıcısını geri gönderir.
Şimdi bu adımlarda yapılan işlemleri daha detaylı olarak oluşturalım;
Kimlik Denetim Sunucusu ve İstemci Arasındaki Mesajlaşmalar
Mesaj(1):
İstemci servisi kullanabilmek için bilet-isteme-bileti isteminde bulunur.
IDc:
Kimlik Denetim Sunucusuna istemcideki kullanıcıyı tanımlanmasını sağlar.
IDtgs:
Kimlik Denetim Sunucusuna kullanıcının Bilet Veren Sunucu (TGS)' ya erişme isteğini belirtir.
TSt:
Kimlik Denetim Sunucusuna, istemciyle kendisinin zamanlarının uyuşup uyuşmadığını doğrulamasına izin verir.
Mesaj(2):
Kimlik Denetim Sunucusu bilet-isteme-biletini geri döndürür.
EKc:
Kullanıcının şifresi kullanılarak şifreleme yapılarak, Kimlik Denetim Sunucusunun ve istemcinin şifreyi doğrulamasını ve mesajın içeriğinin korunmasını sağlar.
Kc,tgs:
Kimlik Denetim Sunucusu tarafından oluşturulan istemcinin erişilebileceği oturum anahtarının bir kopyasını içerir. Bu oturum anahtarı sayesinde Bilet Veren Sunucu(TGS) ile istemci arasında ortak bir anahtarı kullanmak için aralarında anlaşmak zorunda kalmadan güvenli bir iletişim kanalı oluşturulmuş olur.
IDtgs:
Bu biletin Bilet Veren Sunucu(TGS) için olduğunun teyidi içindir.
TS2:
İstemciye bu biletin ne zaman oluşturulduğu hakkında bilgi verir.
Yaşam Süresi2:
İstemciye bu biletin ne kadar geçerli olacağı hakkında bilgi verir.
Bilettgs:
İstemcinin Bilet Veren Sunucu(TGS)' ya erişiminde kullanılacak bilettir.


Bilet Veren Sunucu(TGS) ile İstemci Arasındaki Mesajlaşmalar
Mesaj(3):
İstemci servisten yararlanabilmek için bilet ister.
IDv:
Bilet Veren Sunucu(TGS)'ya kullanıcının V sunucuna erişmek istediği bilgisini taşır.
Bilettgs:
Bilet Veren Sunucu(TGS)'ya kullanıcının Kimlik Denetim Sunucusu tarafından yetkilendirildiğinin teminatıdır.
KimlikDoğrulayıcıc:
İstemci tarafından biletin doğrulanması için oluşturulmuştur.
Mesaj(4):
Bilet Veren Sunucu(TGS)'nin istemciye istemde bulunduğu servis için bileti gönderir.
Ekc,tgs:
Sadece istemci ve Bilet Veren Sunucu arasında paylaştırılmış ortak anahtardır; mesajın içeriğini korur.
Kc,tgs:
Bilet Veren Sunucu tarafından oluşturulan istemcinin erişilebileceği oturum anahtarının bir kopyasını içerir. Bu oturum anahtarı sayesinde servisi sağlayan sunucu ile istemci arasında ortak bir anahtarı kalıcı olarak paylaşmadan güvenli bir iletişim kanalı oluşturulmuş olur.
IDv:
Bu biletin sunucu V için olduğunu teyididir.
TS4:
Bu biletin oluşturulduğu zaman hakkında istemciyi bilgilendirir.
Biletv:
Sunucu V'ye erişim için kullanılacak bilettir.
Bilettgs:
Kullanıcının tekrar şifresini girmeden tekrar kullanılabilir, bilet veren sunucu için bilettir.
Ektgs:
Sadece Kimlik Denetim Sunucusu ve Bilet Veren Sunucunun bilebileceği bir anahtarla şifrelenmiş bilettir.
Kc,tgs:
Kimlik doğrulayıcıyı ve dolayısıyle kimlik denetleme biletinin deşifre edilmesinde kullanılabilecek olan Bilet Veren Sunucu ile istemci arasındaki oturum anahtarıdır.
IDc:
Bu biletin meşru sahibini belirtir.
ADc:
Biletin, bileti isteyen istemcinin dışındaki her hangi bir makineden kullanılmasını engeller.
IDtgs:
Sunucunun bileti doğru olarak deşifrelediğinin teyidi içindir.
TS2:
Bu biletin oluşturulduğu zaman hakkında Bilet Veren Sunucuyu Bilgilendirir.
Yaşam Süresi2:
Bilet zaman aşımına uğradıktan sonra replay saldırılarının önlenmesi içindir.
KimlikDoğrulayıcıc:
Bileti gösteren istemciyle biletin oluşturulduğu istemcinin aynı olduğunun teyidi içindir. Çok kısa bir yaşam süresi olduğu için replay saldırılarına kapalıdır.
Ektgs:
İstemci ve TGS tarafından bilinen bir anahtar ile şifrelenmiş kimlik doğrulayıcıdır.
IDc:
Biletin doğrulanabilmesi için biletteki ID ile uyuşmalıdır. 
ADc:
Biletin doğrulanabilmesi için biletteki adres ile uyuşmalıdır.
TS2:
Bu kimlik doğrulayıcının oluşturulduğu zaman hakkında Bilet Veren Sunucuya bilgi verir.


Servis Sağlayıcı Sunucu ile İstemci Arasındaki Mesajlaşmalar
Mesaj(5):
İstemci servis isteminde bulunur.
Biletv:
Kullanıcı kimliğinin Kimlik Denetim Sunucusu tarafından denetlendiğinin teyidir.
KimlikDoğrulayıcıc:
İstemci tarafından biletin geçerliliğinin testi için oluşturulur.
Mesaj(6):
Seçime bağlı sunucunun istemciye kimliğinin belirtmesidir.
Ek:
İstemcinin gelen mesajın sunucudan geldiğine emin olmasını sağlar.
TSs+1:
İstemciye daha önceki bir cevabın tekrardan gönderilmesi olmadığından emin olmasını sağlar.
Biletv:
Yeniden kullanılabilir. İstemcinin sunucuya her erişmek istediğinde tekrardan Bilet Veren Sunucudan(TGS) bilet istemesini önlemek içindir.
Ekv:
Biletin, sadece Bilet Veren Sunucu ve servisi sağlayan sunucu tarafından bilinen bir anahtarla şifrelenmiş halidir.
Kc,v:
İstemci tarafından erişilebilir oturum anahtarının bir kopyasıdır. Kimlik doğrulayıcıyı dolayısıyle biletin denetlenebilmesi içindir.
IDc:
Biletin meşru sahibinin teyidi içindir.
ADc:
Biletin, bileti isteyen istemcinin dışındaki her hangi bir makineden kullanılmasını engeller.
IDv:
Sunucunun bileti doğru olarak deşifreleyebildiğinin teyididir.
TS4:
Biletin oluşturulduğu zaman hakkında sunucuyu bilgilendirir.
YaşamSüresi4:
Bilet zaman aşımına uğradıktan replay saldırısının önlenmesi içindir.
KimlikDoğrulayıcıc:
Bileti gösteren istemciyle biletin oluşturulduğu istemcinin aynı olduğunun teyidi içindir. Çok kısa bir yaşam süresi olduğu için replay saldırılarına kapalıdır.
Ekc,v:
Kimlik doğrulayıcının sadece istemci ve sunucu tarafından bilinen bir anahtarla şifrelenmesi içindir.
IDc:
Biletin doğrulanabilmesi için biletteki ID ile uyuşmalıdır. 
ADc:
Biletin doğrulanabilmesi için biletteki adres ile uyuşmalıdır.
TS5:
Bu kimlik doğrulayıcının oluşturulduğu zaman hakkında servis sağlayan sunucuya bilgi verir.

Bu yazımızda Kerberos'un nasıl çalıştığında arka planda nelerin gerçeklendiğini inceledik. Umarım konu hakkında sizlere fikir verebilmişimdir. Yazı Dizimizin bundan sonraki yazısında sizlerle .NET ile örnek bir kerberos alt yapısının nasıl oluşturulacağını inceleyeceğiz. Kodları birebir oluşturmasak da, algoritmik olarak yapılması gerekenleri ve alt yapıyı beraberce oluşturacağız. Kodun detaylarını sizlerin tamamlamasını bekleyeceğim. Kerberos hakkında daha detaylı bilgi edinmek ve ücretsiz kaynak kodları için referanslarda verilen bağlantıları kullanabilirsiniz. Bir sonraki yazımızda buluşuncaya kadar güvende kalın !!!

Referanslar
[1] The Kerberos Network Authentication Service (V5) Request For Comments (RFC 1510)
[2] Ücretsiz kaynak kodları için Massachusetts Institute of Technology
Yazar : Yunus Emre ALPÖZEN
e-Posta : yemre@msakademik.net

Hiç yorum yok:

Yorum Gönder

isterseniz anonim seçeneginden kayıtsız gönderebilirsiniz iyi günler