Parolamın Güvenli Olduğunu Düşünüyorum!

Transkript

Parolamın Güvenli Olduğunu Düşünüyorum!
Parolamın Güvenli
Düşünüyorum!
Olduğunu
Maalesef yanılıyorsunuz.
1990 – 2010 yılları arasında edindiğiniz bilgiler, 8 karakter
uzunluğunda ve rastgele büyük harf, küçük harf, rakam ve
sembol içeren bir parolanın standart bilgisayar sistemlerinde
deneme-yanılma (brute-force) ataklarıyla kırılmasının uzun
yıllar aldığını söylüyordu. Bu denklemi bozan ve mevcut
bilgilerimizi gözden geçirmemizi gerektiren değişim şu ki,
şimdilerde görece düşük maliyetle sahip olunabilecek veya
kiralanabilecek bir son kullanıcı sistemiyle bu süreler 6 saat
gibi sürelere inmiş durumda!
Bu yazımızda konunun şu anki vahim boyutunun detaylarına
değinecek ve güvenli parola kullanımı için hem yazılım
geliştiricilere hem de son kullanıcılara yönelik tavsiyelerde
bulunacağız.
Biraz tarihçe..
Asıl konumuza gelmeden önce kriptolojinin (şifre bilimi)
tarihçesine şöyle göz ucuyla bir bakalım.İlk şifrelemenin
izlerine binlerce yıl önce Mısır uygarlığında rastlanmıştır.
Sonrasında Yunan ve Roma medeniyetlerinde kullanılmış olup
askeri alandaki bilinen ilk kullanımının da Sparta‘lılara ait
olduğu düşünülmektedir.
Geliştirilen ilk yöntemlerin günümüzden bakınca bir miktar
eğlenceli olduğunu söyleyebiliriz. Örneğin bunlardan birinde
şifreli bir mesaj taşınması istendiğinde taşıyıcı kişinin
saçları kesiliyor, mesaj kafasına yazılıp saçların uzaması
bekleniyor ve sonra karşı tarafa gittiğinde de saçlar tekrar
kesilmek suretiyle mesaja ulaşılıyormuş.
Tarihte biraz ilerlediğimizde önemli duraklardan biri olan
Sezar
Şifrelemesine
(https://en.wikipedia.org/wiki/Caesar_cipher) ulaşırız. Daha
yakınlara, 1900’lü yılların başına geldiğimizde ise karşımıza
Gilbert Vernam’ın doğru kullanıldığında kırılması neredeyse
imkansız olan meşhur tek kullanımlık şerit yöntemi çıkar
(https://tr.wikipedia.org/wiki/Tek_kullanımlık_şerit). Birinci
dünya savaşında şifrelemenin önemi ortaya çıkınca sonrasındaki
ikinci dünya savaşı ile birlikte şifreleme ve geri çözme
metodolojileri alanında da tam bir savaş verildiği
söylenebilir. Enigma şifreleme makinesinin kodlarının
çözülmesinin
(https://en.wikipedia.org/wiki/Enigma_machine)
savaşın kaderinin belirlenmesinde büyük rol oynadığı bugün
artık bir sır değil.
Özellikle ikinci dünya savaşı yıllarında şifreleme ve şifre
çözme alanındaki yoğun çalışmalar aynı zamanda günümüzdeki
bilgisayar bilimlerinin de temellerinin atılmasını
sağlamıştır.
Parolalarımız
saklanıyor?
sistemlerde
nasıl
Kullanıcı parolaları dosya veya veritabanlarında açık hali ile
saklanmaz. Parolaların tutulduğu veritabanı bir şekilde ele
geçirilse dahi, açık hallerine değil, her bir parolanın
şifrelenmiş (encrypted) haline ulaşılmış olur.Parola şifreleme
işleminde genellikle simetrik algoritmalar kullanılmaz,
dolayısıyla şifreden yola çıkarak parolanın açık haline
ulaşmanız mümkün değildir.
Parolalar hash algoritmaları ile şifrelenir ve bir hash değeri
üretilir. Eğer şifre veritabanı ele geçirilmişse buradan
geriye doğru parolaya ulaşılamaz ama teorik olarak tüm parola
kombinasyonları aynı hash algoritmasından geçirilerek elde
edilen sonuçla karşılaştırma yapıldığında aynı değeri
üretiyorsa, parolanın açık halinin ne olduğu bulunmuş
olur.Deneme – yanılma olarak özetlenebilecek bu saldırı biçimi
genel olarak brute-force atak şeklinde adlandırılır.
2000’li yılların başında popüler hashing algoritmalarından
MD5, NTLM, SHA1 vb. ele alındığında 8 karakterli parolalar
için tüm kombinasyonların denenmesi yüzlerce yıl almaktaydı.
Elbette 123456, admin, password, qwe123, isim ve doğum tarihi
kombinasyonları gibi belirli bir çok kullanılanlar sözlüğü ve
size özel bazı kombinasyonlardan oluşan bir parolanız varsa,
akılcı yaklaşımlarla yüzlerce yıl beklenmesine gerek
kalmaksızın bir kaç dakikada parolanız ortaya çıkacaktır.
Ancak parolanızda bu şekilde tahmin edilebilir bir desen
yoksa, deneme yanılma süreci çok uzun sürdüğünden parolanızın
yeterince güvenilir olduğunu varsayabilirsiniz.
Sistem yöneticisi iseniz, sisteminizdeki hash’lenmiş halde
tutulan parolaları periyodik olarak John The Ripper (man
john) vb. bir uygulama ile yukarıda bahsettiğimiz öntanımlı
senaryolara karşı kontrol etmeniz ve zayıf parola kullanımı
tespit edilen kullanıcıları bilgilendirmeniz iyi bir pratik
olacaktır.
Peki şimdi ne değişti?
Zaman içerisinde grafik işlemcilerin (GPU) paralel veri işleme
yetenekleri oldukça gelişti. Bugün bazı Nvidia Tesla
modellerinde CUDA mimarisinde 2880 çekirdekli bir GPU işlemci
bulunmaktadır
(http://www.nvidia.com/object/tesla-workstations.html). Benzer
şekilde ATI (AMD) GPU çekirdek sayıları ve paralel işleme
yetenekleri de ciddi performans açılımları sunmaktadır.GPU’lar
genel amaçlı bir işlemci değildir, dolayısıyla bu kadar çok
çekirdek ve paralel işleme gücü olmasına rağmen, CPU gibi
hemen her problem için kullanılması anlamlı değildir.
Ancak parolalar için kullanılan hash algoritmalarının özellikle bazıları- GPU veya FPGA üzerinde oldukça verimli bir
şekilde gerçeklenebilmektedir. Geleneksel CPU’lar ile elde
edilebilen saniyedeki hesaplanabilen hash adedi, yeni GPU
platformlarında
olağanüstü
biçimde
artış
göstermektedir.Aşağıda Linux tabanlı Virtual OpenCL platformu
üzerinde 25 adet AMD Radeon GPU’dan oluşan bir cluster sistemi
görmektesiniz.
Böyle bir sistem artık çok uygun rakamlara elde
edilebilmektedir. Ayrıca dilerseniz Amazon gibi bir
platformdan hazır GPU sunucu kümelerini kiralamanız
mümkündür: http://aws.amazon.com/ec2/instance-types
da
Yukarıda görülen sistemin Windows 2003 ve sonrasında
kullanılan NTLM, Unix/Linux sistemlerde kullanılan MD5 ve SHA1
hashing algoritmaları karşısında saniyede hesaplayabildiği
hash değeri sayıları aşağıda verilmiştir:
Algoritma
Saniyedeki Hashing Sayısı
NTLM
350.000.000.000
MD5
180.000.000.000
SHA1
63.000.000.000
SHA512Crypt
364.000
Algoritma
Saniyedeki Hashing Sayısı
Bcrypt
71.000
Scrypt
33.000
Görüldüğü üzere böyle bir sistem ile saniyede 350 milyar defa
NTLM hash üretimi yapılabilmektedir. Bu da 8 karakterli tüm
kombinasyonların 6 saatten az bir süre içerisinde
denenebileceğini ifade etmektedir. Ugh!
Bunlar yetmezmiş gibi Windows kullanıcıları için bir kötü
haberimiz daha var. Vista öncesinde (2007) Windows
sistemlerinde yoğun olarak LM hash yöntemi (Lan Manager Hash:
https://en.wikipedia.org/wiki/LM_hash) kullanılmaktaydı. Hatta
2007 sonrasında da mevcut sistemlerde geriye doğru uyumluluk
nedeniyle çoğunlukla kullanılmaya devam etmiştir (Microsoft
kullanılmasını önermese de kaç Windows Ağ Yöneticisi koca bir
sistemdeki bütün parolaların artık çalışmamaya başlamasını
göze alıp bu geçişi yapabilmiştir ki..).
LM
hash
algoritması
ile
ilgili
tasarım
nedeniyle
bu
parolaların kırılması için GPU’ya bile ihtiyacınız yoktur.
Eğer 50 GB’dan büyük kullanılabilir belleğiniz varsa, tüm
olası kombinasyonları iyi bir veri modeli ile bellekte
saklamak ve ortalama üstü bir CPU kullanmak suretiyle bir kaç
dakika içerisinde parolaya ulaşmak mümkündür! Microsoft’un
konu
ile
ilgili
açıklamalarına
da
buradan
erişebilirsiniz: https://technet.microsoft.com/en-us/library/c
c875839.aspx
Yazılım geliştiriciler ne yapmalı?
Aslında yapılacak şey basit, parolaları şifrelerken hash
değeri hesaplanması daha uzun süren algoritmaları tercih
etmeliyiz. Kullandığımız algoritmanın ise sadece CPU
üzerindeki performansı hakkında değil, GPU ve FPGA dünyasına
karşı ne kadar dayanıklı olduğuna dair de bilgi edinmeliyiz.
Eğer parola şifreleme süreçlerini de adresleyen bir yazılım
framework’ü kullanıyorsanız, güvenlik açısından framework
içerisinde doğru kararların verilmiş olup olmadığını kontrol
etmeniz de yerinde olacaktır.
Örnek olarak Ruby on Rails platformunda kullanıcı işlemleriyle
ilgili sık kullanılan kitaplıklardan biri olan Devise
(https://github.com/plataformatec/devise) içerisinde öntanımlı
hash algoritması olarak Bcrypt kullanılmaktadır. Aynı zamanda
hash algoritması olarak başka bir yöntem kullanmanıza da
olanak vermektedir.
Bcrypt algoritmasının kırılması, GPU ve FPGA’lar için de halen
çok uzun zaman almakta olduğundan güvenilirdir. Bununla
birlikte hash sürecinde kullanılan yöntemin doğrudan GPU ve
FPGA’lar üzerinde gerçeklenmesini zorlaştırmayı temel amaç
edinen Scrypt algoritmasını kullanmanız daha da iyi bir seçim
olacaktır.Özetle hash değeri hesaplaması ne kadar uzun zaman
alıyorsa o kadar güvendesiniz demektir.
Parola kaç karakterden oluşmalı?
Fazladan kullandığınız her karakter, parolanızın kırılması
için ihtiyaç duyulan deneme-yanılma sayısını geometrik biçimde
artıracak ve parolanızı daha güvenli kılacaktır. Öte yandan
sürekli bu parolaları girme zorunluluğu ve parolayı güvenli
yapacağım derken başka bir yere not etme ihtiyacı üretmesi
nedeniyle tamamen güvensiz hale gelmesi gibi bir duruma da yol
açılabilir. Şimdi güvenlik için olması gereken minimum parola
uzunluklarına bakalım.
Durumu 2 senaryo üzerinden örneklemeye çalışalım. NTLM hash
için yukarıdaki 25 GPU’lu sistemin biraz daha iyisi ile parola
kırma denemesi yapılacağını varsayalım. 8 karakterden az
parolaları hiç konuşmaya bile gerek yok, onlar anında
bulunacaktır. Burada 8 ve üzerine değineceğiz.
Karakter
Sayısı
Büyük/Küçük Harf ve
Rakam
Büyük/Küçük Harf, Rakam
ve Özel Sembol
8
< 1 dakika
2 dakika
9
2 dakika
2 saat
10
2 saat
1 hafta
11
6 gün
2 yıl
12
1 yıl
2 yüzyıl
13
> 100 yıl
> 1000 yıl
Tablodan hareketle büyük/küçük harf, rakam ve özel sembol
kombinasyonunun tümünün kullanıldığı durum için minimum 12
karakter uzunluğunda parola kullanımının güvenli olduğu
görünmektedir. Eğer özel sembol kullanmıyorsanız bu durumda
güvenli parola uzunluğu olarak 13 karakter kullanmamız
gerektiği ortaya çıkmaktadır. Bu sistemde NTLM hash yerine
Bcrypt hash yöntemi kullanılmış olsaydı, 8 karakter de işimize
yetecekti. Ancak web üzerinden onlarca sisteme girdiğiniz
parolaların hangi hash yöntemiyle tutulduğunu (hatta şifreli
tutulup tutulmadığını dahi) bilme imkanımız bulunmuyor.
Yazılım geliştiricilerin temel açmazı, kullanıcıları minimum
12 karakterlik parolalara ikna etmenin neredeyse imkansız
olduğudur. Günümüzde bu uzunluktaki parola kullanım oranının
ancak binde bir seviyelerinde olduğunu söyleyebiliriz.
Dolayısıyla geliştirilen sistemin kullanım senaryosuna göre
parola güvenliği için kullanıcıların da kabul edeceği bir orta
yol bulunması gerekecektir.
Geliştiriciler için son bir notumuz da şudur ki, kullanıcıya
parolasını girmesi için sunmuş olduğunuz formlar üzerinden
gelen girdilerin sadece minimum uzunluğunu değil, maksimum
uzunluğunu da kontrol etmeniz oldukça önemlidir. Özellikle
güvenlik amacıyla Bcrypt gibi hesaplanması yavaş olan bir hash
algoritmasının kullanımını devreye aldığınızda, kullanıcının
girdiği parolanın maksimum uzunluğunu kontrol etmiyorsanız,
özel hazırlanmış bazı isteklerle aynı anda 100.000 karakterlik
onlarca parola denemesi yapılması suretiyle bir saldırı
gerçekleştirilecek olursa, sisteminizin geri kalan
kullanıcılara yanıt veremez hale gelmesi kuvvetle muhtemeldir.
Son kullanıcılara tavsiyeler
Peki kullanıcı olarak ne yapmalıyız diye soranlar için de şu
tavsiyelerde bulunabiliriz:
Parola uzunluğunuz minimum 12 karakter olmalıdır
Parola içerisinde mutlaka büyük/küçük harf kombinasyonu,
rakam ve sembol bulunmalıdır
Tüm bu varyasyonlarla ürettiğiniz 12 karakterli parolayı
hatırlamakta
zorlanacak
iseniz,
daha
kolay
hatırladığınız bir parolanın başına, sonuna veya her iki
tarafına belirli bir deseni ekleyerek de güvenliği
karakter uzunluğu isterini yakalayabilirsiniz. Örneğin 8
karakterli parolanızın sonunda 4 adet de nokta karakteri
ekleyebilirsiniz. Ya da başına 2 virgül sonuna 2 nokta
ekleyerek de 12’ye tamamlayabilirsiniz. Burada tamamlama
için kullandığınız desenin biraz kendinize özgü
olmasında fayda vardır, herkes nokta ekleyecek olursa bu
da genel bir desene dönüşür.
Bir web sitesinde yeni kullanıcı kaydı oluşturmanız
gerektiğinde, eğer ilgili site Facebook, Google vb.
sistemler üzerinden giriş yapmanıza izin veriyorsa, yeni
kullanıcı açmak yerine bu şekilde giriş yapmayı tercih
edin. Bu modelde parolanızın şifrelenmiş hali dahi
ilgili siteye verilmemiş olacaktır. Çoğunlukla bir çok
sistemde aynı parolaları kullandığınızı düşünecek
olursanız, ne kadar az sisteme parolanızı giriyor
olursanız o kadar güvende olduğunuzu söyleyebiliriz.
Bitirirken..
Buraya kadar sabırla okumayı başarabildi iseniz artık ne
yapmanız gerektiğini biliyorsunuz; şimdi gidip minimum 12
karakter uzunluğunda olacak yeni parolanızı bulma zamanı…
Desteğinden
Hocamıza
Dolayı
Murat
Teşekkür Ediyoruz…
https://twitter.com/demirten
http://mdemirten.yh.com.tr/
Demirten

Benzer belgeler

XML DOSYASI İLE İLGİLİ TEKNİK DETAYLAR SORULAR VE

XML DOSYASI İLE İLGİLİ TEKNİK DETAYLAR SORULAR VE kombinasyonların 6 saatten az bir süre içerisinde denenebileceğini ifade etmektedir. Ugh! Bunlar yetmezmiş gibi Windows kullanıcıları için bir kötü haberimiz daha var. Vista öncesinde (2007) Window...

Detaylı