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.
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
e-Posta : yemre@msakademik.net
Hiç yorum yok:
Yorum Gönder
isterseniz anonim seçeneginden kayıtsız gönderebilirsiniz iyi günler