21 Ocak 2013 Pazartesi

Kerberos Yazı Dizisi – IV


Kerberos Yazı Dizisi – IV


Kerberos Yazı Dizimizin son makalesinde, Kerberos'un ne kadar güvenli olduğunu, diğer sistemlere göre artılarının ve eksilerinin neler olduğunu, bu güvenliğin bize yetip yetmeyeceğini tartışacağız.

Öncelikle Kerberos'un bize getirdiğine bakalım. Her şeyden önce kullanıcı şifreleri, şifrelenmiş ya da deşifrelenmiş, hiç bir şekilde ağ üzerinden gönderilmemektedir. Sunucunun ve istemcinin birbirilerinin kimliklerini denetlenmesi için gizli anahtarlar şifreli olarak ağ üzerinden gönderilmektedir. Sunucular ve istemci arasındaki tüm mesajlaşmalarda biletler kullanılmaktadır. Ağ trafiğini izleyebilen biri bu biletleri ele geçirebilir belki, ama bu biletlerin geçerlilik süresi, oluşturulma zamanı bilet üzerinde tanımlı olduğundan kırılma ihtimali daha azdır. Kullanılan timestamp sayesinde kullanıcılarının kimlik denetiminin ne kadar geçerli olacağı Kerberos sunucuları üzerinde sınırlandırılabilir. Kimlik denetimleri tekrar kullanılabilir ve kalıcı olduğundan her mesajda yeniden kimlik denetiminin yapılması gerekmez. Kerberos halen daha bir çok programcı, kriptografi bilimcisi ve güvenlik uzmanları tarafından incelenmektedir. Ayrıca Kerberos güvenliğinin diğer sistemlere de uygulanabilirliği, Kerberos'un bir çok işletim sisteminin güvenliğinin temelini oluşturmasının nedenidir. Geçen yazımızda XML Web Servisleri kullanarak geliştirmiş olduğumuz örnek Kerberos uygulaması sayesinde, programlama dili ve platform bağımlılığını da ortadan kaldırılabilir. Geliştirilen bu sistemi SOAP header'larına entegre ederek XML Web Servislerinin güvenliğini arttırmamız da mümkün olmuştur. Hatırlatmakta yarar görüyorum ki, Microsoft Windows sunucu ailesinin yeni üyesi Microsoft Windows 2003 Server'in güvenlik sisteminin temelinde Kerberos vardır.

Şimdi bu kadar övdüğümüz Kerberos'a bir kaç eleştiri getirelim. Şu an için kullanılmamasına karşın Kerberos v4 'te tüm şifrelemeler DES ile yapılmaktaydı. Kerberos v5'te ise tüm şifrelemeler daha güvenli olan IDEA ve Triple-DES ile gerçeklenmektedir. Kerberos 4'te bir çok arabellek aşımı(buffer overrun) saldırısına açıktır. 4. Versiyondaki bu hataları eksiklik olarak saymayabiliriz de.. Ancak Kerberos'un mimarisinden ve çalışma prensiplerinden kaynaklanan bazı sorunlar vardır:
  • Kerberos tek kullanıcılı istemciler için tasarlanmıştır. Çok kullanıcılı bir istemci de Kerberos güvenliği çalışmayacaktır. Bunu önemli bir eksiklik olarak sayabiliriz. Bunun için Kerberos mimarisinin değişmesi gerekmektedir.
  • Kerberos güvenliğini kullanmak isteyen sistemlerde sunucunun ve istemcinin güvenlik sistemi olarak Kerberos kullanıldığından haberdar olması gerekmektedir. Yani istemci tarafından da Kerberos'un desteklenmesi gerekir.
  • Kerberos mimarisi Brute Force saldırılarına bir çözüm getirememiştir.
  • Kerberos kullanıcıların kötü şifre seçmelerine karşı bir çözüm getirmemiştir. Kötü seçilmiş şifreler ile Kerberos güvenliğini aşmanız mümkündür. Brute Force ile en çok kullanılan şifreleri içeren bir sözlük yardımıyla tüm Kerberos sunucularını aşabilirsiniz.
  • Kerberos'un en zayıf yeri kullanılan timestamplerdir. Birazdan daha detaylı olarak inceleyeceğimiz bu hatanın burada sadece tanımını vereceğim. Kimlik denetiminden önce gönderilen timestamp bilgisi ASCII olarak yıl-ay-gün-saat-dakika-saniye YYYYMMDDHHMMSSZ(örn: "20031015092843Z") şeklinde kodlanmıştır. Bu da denenecek şifre için belirli kurala uyacak bir yapı sağlar. Eğer ağ üzerinden ele geçirilmiş paketin deşifrelenmiş hali bu formatta bir bilgiye sahipse kullandığımız anahtar çok büyük olasılıkla doğrudur. Kullanılan şifreleme algoritmalarında aynı türden ikinci bir bilgi olma olasılığı çok az olduğu göz önüne alınırsa böyle bir bilgiyi ilk yakaladığımız anda, anahtarı bulmuşuz demektir.
Son saydığımız Kerberos'un en önemli sorunudur. Şimdi bunu biraz daha detaylı inceleyelim. Kerberos'daki bu hata yeni, ya da gizli değildir, ya da gerçeklendiği platforma göre değişmemektedir. Bu eksikliği kullanarak saldırı gerçekleyebilecek kod İnternetten bulunabilir veya bir günden kısa bir zamandan sıfırdan oluşturabilirsiniz. Bu açık Kerberos'un ilk versiyonlarından beri bilinmektedir. Fakat, hata Kerberos mimarisinden kaynaklandığından çözülememiştir. Bu yüzden ilerki versiyonlarda düzeltilmesi beklenmemektedir.

Kerberos güvenliğine sahip bir sisteminde şifre nasıl ele geçirelebilir ?
Test etmek için bir Window 2000 etki alanında 'frank' kullanıcı adı ve 'frank' şifresine sahip bir kullanıcı ekleyelim. Bu kullanıcının her hangi bir istemciden sisteme girişini ücretsiz olarak bulabileceğiniz sniffing araçları ile gönderilen ve alınan paketleri inceleyelim.
İkinci sekiz bitlik veri çevrim dışı yapılacak saldırı için şifrelenmiş timestamp bilgisi bulunmaktadır. Örnek bir paket bilgisi aşağıda verilmiştir:
   2 30   72:   SEQUENCE {
   4 A1    3:     [1] {
   6 02    1:       INTEGER 2
            :       }
   9 A2   65:     [2] {
  11 04   63:       OCTET STRING, encapsulates {
  13 30   61:           SEQUENCE {
  15 A0    3:             [0] {
  17 02    1:               INTEGER 23
            :               }
  20 A2   54:             [2] {
  22 04   52:               OCTET STRING
            :                 F4 08 5B A4 58 B7 33 D8 09 2E 6B 34 8E 3E 39 90
            :                 03 4A CF C7 0A FB A5 42 69 0B 8B C9 12 FC D7 FE
            :                 D6 A8 48 49 3A 3F F0 D7 AF 64 1A 26 3B 71 DC C7
            :                 29 02 99 5D
            :               }
            :             }
            :           }
            :       }
            :     }
Sırayla olası tüm şifreler denenir. Eğer ki denenen şifre doğruysa deşifre edilmiş hali timestamp yapısına benzemelidir. Aksi halde denen şifre hatalıdır, bir sonraki ile denenir. Çok basit bir algoritması olmasına karşın olası tüm şifre sayısının ne kadar fazla olduğu da unutulmamalıdır. Şimdi de yapılan testler sonucunda hesaplanan kırılma sürelerine bir göz atalım:
Saldırı Tipi
Tek Pentium 300 Mhz İşlemci
Tek Pentium 1.5 Ghz İşlemci
100 Pentium 1.5Ghz İşlemci
Doğrudan sözlük saldırısı
(3 milyon kelime)
2.5 dakika
1 dakikadan da az
1 dakikadan da az
Brute Force Saldırı
[a-z], 6 karakterli şifreler
4.2 Gün
50 dakika
1 dakikadan da az
Brute Force Saldırı
[a-z], 7 karakterli şifreler
4.6 Gün
22 saat
13 dakika
Brute Force Saldırı
[a-z], 8 karakterli şifreler
118.4 Gün
23.7 gün
5.7 saat
Brute Force Saldırı
[a-z], 9 karakterli şifreler
8 yıl
1.6 yıl
5.84 gün
Brute Force Saldırı
[a-z,0-9], 9 karakterli şifreler
157 yıl
31.4 yıl
114.6 gün
Brute Force Saldırı
[a-z,A-Z,0-9], 9 karakterli şifreler
4319 yıl
863.8 yıl
8.6 yıl
Brute Force Saldırı
[a-z,A-Z,0-9], 9 karakterli şifreler
21034 yıl
4206 yıl
4.2 yıl

Çıkan sonuçları incelediğinizde kolay tahmin edilebilir bir şifrenin Pentium 1.5 Ghz işlemci ile bulunması 1 dakikadan da kısa bir süre almaktadır. Aynı şekilde 6 karakterli sadece küçük harflerden oluşan bir şifrenin Pentium 1.5 Ghz işlemci ile bulunması 50 dakika almaktadır. Şu an 3 Ghz lik işlemcilerin bile piyasada bulunabildiğini düşünürsek, yarım saatten daha az bir sürede 6 karakter uzunluğundaki sadece küçük harflerden oluşan bir şifreyi bulabilirsiniz.

Bildiğiniz gibi Windows sunucu ailesinin yeni üyesi Windows Server 2003'te güvenliğe ayrı bir önem verilmiş. Kerberostaki bu açığı bilmeyen sistem yöneticilerinin hata yapmasını engellemek amacıyla belirlenecek şifre de ;
  • büyük harf
  • küçük harf
  • sayı
  • işaret
dördünden üçünün seçilmesini zorunlu kılmaktadır. Üstelik bu ayar Windows Server 2003'te varsayılan bir özellik olarak gelmektedir.

Sistemimizi Bu Saldırılardan Korumak İçin Neler Yapmalıyız?
  • Kerberos mimarisinde değişiklik yapılabilir. Ya da kullanılan şifreleme metodolojileri değiştirerek daha güvenli bir hale getirebiliriz.
  • Kullanıcılar şifre seçimi konusunda eğitilmeli, şifrelerin en kısa uzunluğu belirlenmelidir. Genelde seçilen 6 karakterin yetersiz olduğunu tablomuzda çıkan sonuçlardan da görebiliyoruz.
  • Biletler ve şifreler için zaman aşımı sürelerinin en uygun şekilde ayarlamalıyız.
  • Sözlük saldırısında kullanılabilecek sözlük şifreleri ve bu şifrelerden türeyen, kullanıcı adı veya kullanıcı ID gibi şifrelerin seçimi engellenmelidir.
  • Veri tabanı, web servisleri, etki alanı vb sistemlerin yönetici kullanıcı adları ve şifreleri birbirinden ayrı olmalıdır.
  • Ağ üzerinden sniffing yapılmasının engellenmesi için belirli aralıklarla makinelerin fiziksel olarak kontrol edilmelidir.
  • "Sniffer Detector" adını verdiğimiz yazılım araçları kurarak sürekli sistemimizi kontrol etmeliyiz.
Son Söz
4 yazıdan oluşan Kerberos yazı dizimizin sonuna geldik. Bir çok işletim sisteminin güvenliğinin temelini oluşturan Kerberos'un kullanıcıdan kaynaklanan hatalara ve kötü şifre seçimlerine bir çözüm getiremediğine ancak elimizdeki en iyi güvenlik sistemi olduğuna kanaat getirdiğimize inanıyorum. Ayrıca Kerberos'un çalışma prensibinin belli olmasına karşın kodlamasının farklı programlama dilleri ve farklı platformlar için sürekli değiştiğinden bahsettik. Buna çözüm olarak Kerberos'u XML Web Servisleri kullanarak yeniden yazdık. Yeni Kerberos'umuzla XML Web Servislerine Kerberos Güvenliğinin nasıl ekleyebileceğimizi gördük. Sistem Yöneticilerine önerim, yasal olarak ya da yasa dışı yollarla İnternet üzerinden ücretsiz dağıtılan araçlar ile kendi sistemlerini test etmeleridir. Örneğin doğrudan sözlük saldırısı kullanarak kendi sistemlerindeki tüm kullanıcıların şifrelerini test edebilirler, ve buldukları anda bu kullanıcıların hesaplarını bloke etmelidirler. Ne yazıkki, güvenli bir sistemi oluşturmak o sistemi kırmaktan daha zor. Sistem yöneticilerine bu konuda çok iş düşmektedir. Bir başka yazı dizisinde görüşünceye kadar, güvende kalın !!!

Hiç yorum yok:

Yorum Gönder

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