Web Uygulamalarında Şifre Güvenliği

Web Uygulamalarında Şifre Güvenliği

Web uygulamalarında kullanıcı şifrelerinin çalınması son zamanlarda oldukça yaygın şekilde karşılaştığımız bir güvenlik sorunudur. Kullanıcılarının kişisel bilgi gizliliğini koruma zorunluluğu olan sitelerin böylesi bir açığa izin vermesi hem site sahibi firmalar veya kurumlar açısından hem de bu sitelere üye olup kişisel bilgilerini emanet eden kullanıcılar açısından ciddi sıkıntılara sebebiyet vermektedir. Linkedin, eHarmony, Lastfm ve yahoo gibi sitelerde kullanıcı şifrelerinin çalınması bu konuya daha fazla dikkat edilmesi gerekliliğini ortaya koymaktadır.

Kullanıcı kişisel bilgilerinin istenmeyen kişilerin eline geçmesinin engellenmesi için kullanıcıların şifrelerini daha özenli seçmeleri ve korumaları, yazılım geliştiricilerin ise şifreleri depolarken ve kullanıcıyı yetkilendirirken günümüzdeki saldırı çeşitlerini ve korunma yollarını iyi bilerek uygulama geliştirmeleri gerekmektedir.

Yazılım geliştiricinin şifre güvenliğinde öncelikli olarak dikkat etmesi gereken şifreleri depolama şeklidir. Şifreleri olduğu gibi saklamak çok eskilerde kalan günümüzde asla kullanılmaması gereken bir yöntemdir.

Şifre güvenliğinin sağlanmasında ilk adımı şifreleri özetleyerek, kriptoğrafik özet (hash) saklamak oluşturur. Özet algoritmaları şifre güvenliği için tasarlanmış olmasalarda şifreleri açık metin (plain text) olarak saklamaktan daha güvenli görülmüştür.

Özet algoritmaları tek yönlü algoritmalardır. Ters fonsiyonu bulunmaz. Şifreler özetlenerek saklandığında gerçek şifreye veri tabanı yöneticisi, yazılım geliştirici dahil hiçkimse herhangi bir ters fonksiyon kullanarak tekrar ulaşamaz. Özet algoritması şifrenin uzunluğundan bağımsız olarak sabit uzunlukta şifrenin özetini oluşturur. MD5, SHA1, SHA256 gibi farklı algoritmaların oluşturdukları özet uzunlukları farklıdır. Şifre içindeki tek karakterin değişimi bile özetin tamamen değişmesine sebep olur. Özet algoritmasının şifre güvenliğinde kullanılmasında, oluşturulan özetin tekrar giriş değerine dönüştürülememesi ve aynı özeti veren 2 veya daha fazla giriş değerinin bulunmasının zor olması gibi özellikleri önemli etken olmuştur.

Kullanıcı herhangi bir sitede veya uygulamada hesap açmak istediğinde kendine kullanıcı adı ve şifre seçer. Bu şifre diske yazılmadan belirli özet algoritması ile özetlenir ve veri tabanına özetlenmiş biçimiyle yazılır. Daha sonra kullanıcı tekrar giriş yapmak istediğinde girmiş olduğu şifre tekrar özetlenerek veri tabanındaki özet ile karşılaştırılır. Özetlerin aynı olması halinde kullanıcının hesabına giriş yetkisi verilir.

Peki nasıl alıyorda ters fonksiyonu bulunmayan özetlenmiş şifreler kırılabiliyor?

Özetlenen Şifrelere Karşı Saldırılar

Dictionary ve Brute Force Saldırıları:

Algoritma içindeki açıklardan ziyade, şifrenin olabileceği ihtimallerin özetlenerek denenmesi, şifreleri kırmak için en etkili yoldur. Şifrenin olabileceği değerlerin kriptoğrafik özetleri (hash) ele geçirilmiş olan veri tabanında özetlenmiş olarak saklanan şifreler ile karşılaştırılır ve eşleşen özetlere karşılık gelen şifreler kırılmış olur. Bunu yapmanın en yaygın yöntemi dictionary ve brute force saldırılarıdır.

Brute Force saldırısı, şifre içerisinde mümkün olabilecek bütün harf, rakam ve karakterlerin kombinasyonlarının teker teker özetini alır ve ele geçirilmiş veri tabanındaki özetler ile karşılaştırır. Olabilecek bütün değerler denendiği için kesin sonuç elde edilir ancak uzun zaman alır ve maliyetlidir.

Dictionary saldırısında ise kullanıcı tarafından şifre olarak kullanılabilecek sözcük, rakam ve karakterlerin tahmini yapılmaya çalışılır ve bu tahmini şifrelerin yer aldığı bir liste oluşturulur. Listedeki herbir şifrenin özeti alınır ve ele geçirilmiş veri tabanındaki herbir özet ile karşılaştırılır. Eşleşen özetler ile şifre kırılmış olur. Liste içersindeki şifreler ya gerçek bir veri tabanın şifrelerinden, bir metinden veya bir kitap içersinde bulunan sözcüklerden alıntı olabilir. Örneğin saldırgan sporla alakalı bir sitedeki kullanıcıların şifrelerini ele geçirmiş ve kırmak istiyorsa sporla alakalı kelime listesini öncelikli kullanır. İnternette dictionary saldırısı için farklı dillerde, şivelerde, alanlarda oluşturulmuş binlerce kelime listesi bulunmaktadır.

Şifreler sadece özetlenerek tutuluyor ise dictionary saldırısını engellemek neredeyse imkansızdır. Özellikle günümüzdeki işlemci hızı yüksek bilgisiyarlarla şifreler kısa zamanda kırılabilir.

Lookup Tabloları:

Dictionary listesi içersindeki şifre olabilme ihtimali olan karakterlerin hash’lenerek plain text değerleri ile birlikte lookup tablo veri yapısında tutulmasıyla lookup saldırı tabloları oluşturulur. Ele geçirilen veri tabanında depolanan özetler, lookup tablosu içersinde hazırlanmış olan milyonlarca özetin içerisinden karşılaştırılarak kısa zamanda eşlenir. Eşleşen özetlerin lookup tablosunda karşılığı olan şifreler kırılmak istenen şifrelerdir.

Kırılmak istenen herbir şifre hazırlanan lookup tablodaki özetler ile karşılaştırılarak şifre değeri bulunmaya çalışılır.

Reverse Lookup Tabloları:

Bu saldırı yönteminde de lookup tablosu oluşturulur ancak lookup saldırısının tersine kullanıcı adının ve şifre özetlerinin bulunduğu veri tabanındaki özetler, hazırlamış olan lookup tablosundaki özetlerle karşılaştırılır. Özetleri eşleşen kullancıların şifreleri kırılmış olur.

Saldırgan reverse lookup tabloları ile kullanıcı listesinde aynı şifreye ve dolayısıyla aynı özete sahip kullanıcıların şifrelerini de aynı anda kırmış olur.

Hazırlanan lookup tablosundaki herbir değer kırılmak istenen şifrelerin özetleri ile karşılaştırılarak şifre değeri bulunmaya çalışılır.

Rainbow Tabloları:

Rainbow tablolarında hazırlanan hash’ler sadece ilk ve son elemanı belli olan zincirler halinde tutulur. Böylelikle özetlerin değerinin tahmin edilmesi esnasında zamandan ve depolama alanından kazanç sağlanır. Rainbow tablosu oluşturulurken şifre ihtimali olabilen karakterler dizininden biri seçilir ve özetlenir. Haslenen özetin karakterlerinin içerisinden belirli bir parçası alınır. ASCII karakterlere çevrilir ve şifre olma ihtimali olan yeni karakter dizini elde edilerek özetlenir. Bu defalarca devam ettirilir ve en son değer tablonun 2. Kolonunda ilk şifreye karşılık olarak yazılır. Aradaki özetlenmiş değerlerin hiçbiri depolanmaz. Böylelikle özet depolama alanı azaltılmış olur. Hazırlanan bu kolonlar veri tabanında tutulur ve rainbow zincirleri denir. Özetten şifreyi elde etmek için ise kırılmak istenen özet, rainbow tablosunda 2. Kolondaki değerler ile karşılaştırılır. Eğer eşleşen değer yoksa özet azaltılır ve tekrar özeti alınarak 2. Kolondaki değerlerle tekrar karşılaştırılır. Eşleşen değer bulunana kadar bu işlem devam ettirilir. Eşleşen değer bulunduğunda şifrenin o zincirde yeraldığı bilinir ve zincir içinden özetin değeri bulunur.

Salt

Görüldüğü gibi şifreleri sadece özetleyerek depolamak güvenlik için yeterli olmamaktadır. Dictionary saldırısının, lookup ve rainbow tablosu saldırılarının etkili çalışabilir olması; her şifrenin veri tabanına aynı özet algoritmasıyla şifrelenip saklanması sonucu rastgeleliğin sağlanamamasından kaynaklanmaktadır. Her şifre için farklı algoritma kullanılamayacağından bu saldırıların etkisinin azaltılması, şifreye özetlenmeden önce rastgele değerlerin eklenmesiyle sağlanabilir.

Özetin rastgeleliğini sağlamak amacıyla, şifreye özetlenmeden önce eklenen bu rastgele bitlere salt denir. Böylelikle şifre kendine eklenen salt değeri ile özetlenerek saklanmış olur. Kullanıcı tekrar giriş yaptığında şifrenin doğruluğunu kontrol etmek için girilen şifreye salt değeri eklenerek özetlenir ve veri tabanındaki özet ile eşleşme yapılır.

Şifreye salt değerinin eklenerek özetlenmesiyle, hazır şifre listelerini kullanan dictionary saldırısı etkisiz hale getirilmiş olur ve lookup, rainbow, reverse lookup tabloları saldırılarının sonuca ulaşabilmesi zorlaştırılmış olur. (Tamamen önlenebilir diyemiyoruz.) Saldırıyı yapan rastgele oluşturulmuş salt değerlerini bilse dahi önceden lookup table oluşturması çok uzun zaman alacak ve maliyetli olacaktır.

Salt’ın etkili olabilmesi için en az şifre uzunluğunda olması ve her şifre için farklı ve rastgele salt’ın kullanılması gerekir.

Her şifre için aynı salt’ın kullanılmasının saldırıların engellemesinde hiçbir etkisi olmayacaktır. Saldırgan salt değerini ele geçirdiğinde saldırı toblosunu salt+şifre olarak oluşturacak ve ona göre eşleşen şifreleri bulabilecektir.

Ayrıca saltın aynı olması şifresi aynı olan kullanıcıların şifrelerinin salt’lı özetlerininde aynı olması demek olacaktır. Saldırgan reverse lookup table kullanarak bu şifreleri rahatlıkla kırabilir. Bu sebeple her kullanıcı yeni bir şifre aldığında veya şifresini değiştirdiğinde farklı bir salt değeri ile özetlenmelidir.

Kısa salt kullanmakta özetli saltın güvenliğini zayıflatan diğer bir etkendir. Salt kısa olduğunda olabilecek her salt ihtimali için lookup table oluşturulması kolaylaşır. Örneğin 3 ASCII karakterli salt için toplam 95*95*95= 857375 salt ihtimali oluşturulabilir. Bu fazla gibi görünebilir ancak lookup tablosu içersindeki şifrelerin toplam 1 mb olduğu varsayılırsa 3 karakterli saltın ihtimalleri için oluşturulacak lookup tablosu yaklaşık 1000 gb yani 1 terabaytlık bir harddisk ile hazırlanabilir.

Kullanıcı adları da salt olarak kullanılmamalıdır. Kullanıcı adları kullanıldığı veri tabanında tek olabilir ancak saldırgan kullanıcı adlarının tahmin edilebilir olması ve başka veri tabanındaki kullanıcı adlarıyla aynı olabilme ihtimalinden faydalanarak tahmini kullanıcı adlarıyla oluşturulmuş özetler ile lookup tablosu oluşturabilir.

Anahtar Esnetme

Şİfre güvenliğinde kullanılan özet algoritmalarının saldırıya açık olmalarında özetlerin az yer kaplaması ve şifrelerin özetlere hızlı dönüştürülebilmesi 2 önemli zayıf yön olarak karşımıza çıkmaktadır. Gün geçtikçe fiyatları ucuzlayan hard diskler ve yüksek hızlı işlemciler salt kullanılmasına rağmen lookup ve brute force gibi saldırıların daha az maliyetle ve daha hızlı yapılmasına olanak sağlamaktadırlar.

Moore Kuralı’na göre bilgisayar işlemci hızları her 1.5 yılda 2 katına çıkar ki bu bilgisayarın hesaplayacağı özet oranınında 2 katına çıkması demektir. Bu da zamanla, salt kullanarak özetlemeninde güvenliği sağlamak için yeterli olamayacağının göstergesidir.

Özetlerin kapladığı alanın artırılarak güvenliğin sağlanmaya çalışılması uygulama geliştirici içinde maliyetli olacağından, şifrenin özetlenme süresini ve buna bağlı olarak kırılma süresini uzatmak şifre güvenliğini sağlamakta kullanılabilir.

Özetlenme süresini artırmak için anahtar esnetme denilen yöntem uygulanır.

Anahtar esnetme; saldırı esnasında, rainbow yada lookup tablosunda yeralan veya brute force ile üretilen olası herbir şifrenin, anahtar esnetme fonksiyonu içindeki iterasyonlarla, saldırgan tarafından denenme süresini artırarak saldırının gerçekleşmesine engel olmak için kullanılır. Anahtar esnetme fonksiyonu CPU ya duyarlı ve ayarlanabilir özel bir fonksiyondur.

Moore Kanununa göreşifrenin güvenliğinin sağlanabilmesi için, her 1.5 yılda kod içerisinde şifreleme hızının 2 kat daha azaltmak gerektiği sonucu çıkar.

Burda dikkat edilmesi gereken önemli nokta ise sunucunun (server) kullanıcıların şifrelerinin doğruluğunu kontrol ederken bu istekleri karşılayabilecek kapasitede olması gerekliliğidir. Aksi halde server DOS saldırısına açık hale gelebilir. Kullanıcıyada gereksiz bekletme yaptırılmamalıdır.

Anahtar esnetme PBKDF2 ve bcrypt gibi fonksiyonlar kullanılarak yapılabilir. Bu fonksiyonlar içersinde kullanılan iterasyonlarla özetlenme süresi istenilen ölçüde uzatılır.

Özetlenme süresini uzatmak için, yazılım geliştiricinin şifreyi birden fazla, farklı veya aynı özet algoritması ile üst üste haslemesi hatalı bir düşüncedir. Örneğin çıktı olarak sabit 128 bit özet üreten özet algoritması tekrar aynı algoritma ile özetlenmeye çalışıldığında 2^128 bitlik sınırlı bir girdiyi şifrelemeye çalışacak ki bu yöntem özetler arasında çakışma olasılığını artıracaktır.

Kullanıcıların Dikkat Etmesi Gereken Hususlar

Bilişim güvenliğinde en zayıf halkanın kullanıcı olduğu gerçeği göz önünde tutulduğunda, şifrenin güven(siz)liğinide uygulama geliştiriciden önce tayin eden kullanıcıdır. Bu nedenle kullanıcı şifre seçiminde ve şifresini saklamada bilinçli olmalıdır. Kullanıcı için en büyük sorun şifreyi sık sık unutmasıdır. Bu sebeple doğum yeri, doğum tarihi, köpeğinin adı, sevdiği bir futbolcunun adı gibi unutmayacağı sözcükleri şifre olarak seçer. Yazılım geliştirici uygulama tarafında ne tür önlem alırsa alsın, saldırgan için bu tarz bir şifreyi tahmin etmek ve kırmak çok kolaydır.

Kullanıcının kendine şifre seçerken; soyad, doğum günü, aile bireylerinin adları, çalıştığı kurum gibi tahmini kolay kişisel bilgiler, anlamlı sözcükler tek başına şifre olarak seçilmemelidir.

Farklı site ve uygulamalar için farklı şifreler seçilmelidir ve belirli aralıklarla şifreler değiştirilmelidir.

Büyük küçük harf, rakam ve karakterlerin karışımından oluşan uzun şifreler kullanılmalıdır.

Kullanıcı şifrelerini hatırlamakta güçlük çekiyorsa, güvenliğinden emin olduğu bir yere yazıp saklamalı, şifresini başkalarıyla paylaşmamlaıdır. Şifresini ikinci bir şahısla paylaşma zorunluluğu olur ise zorunluluk durumu kalktığında şifresini değiştirmelidir.

Şifrelerin güvenli biçimde depolanmasını ve saklanmasını sağlayan açık kaynak kodlu “passwordsafe”, mobil cihazlar ve tabletlerde de kullanılabilen “roboform” gibi uygulamalar kullanıcıların şifre unutma derdini sona erdirmeye yardımcı olmaktadır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir