Tag Archives: anahtar

Şifreler, Şifreler Ve Şifreler

Basit ve etkili bir şifrelemeden bahsettim fakat bir şifrenin nerede saklandığı, nasıl saklandığı, bu şifrelerin nasıl kırıldığında dair bir yazım yoktu. En azından temel kriptografi bilgisi ve basit bir Hashcat örneği ile bu eksikliği giderebilirim. Yazının eksik kaldığı noktalar elbette vardır ve herhangi bir grubu tatmin etme amacı yoktur. Bu yazı bunun ve bunun derlenmiş halidir.

  • Şifreler nerede saklanıyor?

Veritabanlarında. İlk bakışta dalga geçiyorum gibi gelecek ama durum bu. Unix ve Unix benzeri işletim sistemlerinde şifreler tek bir metin dosyasında, Windows’ta ise binary dosyasında saklanmaktalar. Elbette şifrelerin kriptosuz hallerini herhangi bir metin dosyasında bulundurmak mantıklı değildir. Bu dosyayı eline geçiren bir saldırgan şifrelerinize de sahip olacaktır. Bu nedenden dolayı bütün işletim sistemleri şifreleri bir hash algoritması ile çalıştırır, sonuç olarak veritabanlarında kriptografik hash olarak saklarlar. Bu ise şunu sağlar; eğer bir saldırgan bu veritabanını bir şekilde eline geçirirse, hash olarak saklanmış şifreleri bakarak çözemeyecektir.

Örneğin, GNU/Linux’ta kullanıcı için bir şifre oluşturduğunuz zaman bu şifre sha-512 algoritması ile hashlenerek /etc/shadow dosyası içinde yerini alır (AES ve Rijndael şifrelemesini de ekleyelim). Bu dosyaya baktığımız zaman;

kame:$6$7gNvdbpz$c6fb024a22c4db9101ea1d20596034../:15758:0:99999:7:::

$6 = Sha-512 hash algoritması.
$7gNvdbpz = Salt değeri.
$6fb024a22c4db9101ea1d20596034.. = Şifre.
:15758= Son şifre değişikliği tarihi (gün sayısıdır, başlangıç tarihi 1 Ocak 1970).
:0 = Şifre değişiklikleri arasındaki minimum süre.
:99999 = Şifrenin maksimum geçerlilik süresi (gün sayısıdır).
:7 = Hesap kapatıldıktan sonra şifrenin dolma süresi.

  • Peki hash nedir?

Hash, bir hashing algoritmasının (md5, sha-1, sha-2 vs.) kriptografik çıktısıdır. Bir hashing algoritması açık metin ile şifrelenmiş metin arasında tek yönlü bir dönüşüm sağlar. Bu şu demektir; eğer ben herhangi bir açık metni bir hashing algoritması ile şifrelenmiş metne dönüştürmüşsem, hashing algoritmasını tekrar kullanarak şifrelenmiş metinden açık metne ulaşamayacağım. Herhangi bir hashing algoritması tarafından boyutu standart olmayan bir girdinin şifrelenmiş çıktısı hashing algoritmasına göre eşit uzunluktadır. Diğer bir deyişle, bir e-kitabın boyutu ya da bir filmin boyutu ya da bir metnin boyutu ne olursa olsun, çıktının uzunluğu algoritmaya göre sabittir. Bunun kriptografide önemli olmasının sebebi, eğer bütün algoritmalar kendi türleri içinde aynı uzunlukta çıktıyı verirse, girdinin boyutunu ya da türünü belirlemek mümkün olamaz.

  • Salting, biz buna tuzlama mı desek?

Salting‘in türkçeye nasıl çevrildiğini ya da ne denildiğini bilmiyorum. Nedir noktasına gelirsek eğer, Salt rastgele verilen bir değer olup gizli değildir ve rastgele oluşturulur, şifre hashi ile birlikte saklanır. Büyük boyutlardaki salt değeri önceden hesaplanmış saldırılarını, mesela rainbow tablousu, her şifreyi eşsiz olarak hashleyerek engeller. Yani Ali ile Ayşe, aynı veritabanında saklanan tıpatıp aynı şifrelere sahip olsa bile, salt değerleri ile birbirinden farklı hash değerlerine sahip olacaklar ve bir saldırgan veritabanına erişse bile bu iki kişinin şifresinin aynı olduğunu bilemeyecektir.

Saldırganın başarılı olabilmesi için her salt değerini de ayrı ayrı hesaba katması gerekmektedir. Salting’in kullanılmasının nedeni şifrelerdeki entropi düzeyini arttırmaktır. Bir diğer deyişle, bizlere fazladan koruma sağlar.

Kripto fonksiyonunda iki girdi vardır. Bunlar $salt ve $key’dir, crypt($salt, $anahtar). Eğer salt değerimizin “0Z” ve şifremizin “kame” olduğunu varsayarsak $salt + $şifre;

0Zkame

Artık bu hashlenecek ve şifre veritabanında saklanacaktır. Bu şifrenin eğer bir kullanıcı şifresi olduğunu varsayarsak, /etc/shadow altında hash ile birlikte saklandığını görebiliriz. Örneğin, sisteme giriş yapmak istediğimizde, doğrulama yapmamız gerekecektir. Doğrulama, kullanıcı adı ve şifresi girildiğinde önce salt değerini alacak ve girilen şifre ile birlikte kripto fonksiyonunu çalıştıracaktır. Ardından, eğer şifreniz doğru ise hashler birbirini tutacak ve sisteme girebileceksiniz.

  • Birkaç örnek

En popüler hashing algoritmalarından biri (bugünlerde zayıf olduğu sıkça tekrarlansa da) MD5‘tir. MD5 hashing algoritması 128 bit yani 16 byte’tır. Çıktısı 32 haneli, onaltılı (0,…,9, a,…,f) (hex) sayıdan oluşur. Yani, 2 hex = 1 byte, 16 byte = 128-bit.

kame” dizisini MD5’e dönüştürürsek;

kame ~ % echo -n 'kame' | md5sum | cut -f 1 -d " "
366b18ce0695e44bfc30423b9eb8a793

İçinde sadece “test” yazan “test.txt” dosyasını MD5’e dönüştürürsek;

kame ~ % md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

MD5’e göre daha güçlü ve NSA tarafından tasarlanan bir diğer hashing algoritması ise SHA-2‘dir. SHA-2, 224, 256, 386 ve 512 gibi çeşitli bit uzunluklarında 4 farklı seçenek sunar.

kame ~ % echo -n 'kame' | sha256sum | cut -f 1 -d " "
be45d72f76fc702161620f5d5462443cb038fffd5b839d28d5c85dcf3b46cac5

kame ~ % sha256sum test.txt
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  test.txt

256/128 = 2 > 32 x 2 = 64! Yani, algoritma, 64 hex haneli hash üretir.

Hashing algoritmaları ayrıca bir veriyi doğrulamak için de kullanılmaktadır. Örneğin, Internet üzerinden indirmek istediğiniz herhangi bir dosya için yayınlayan kişi bu dosyaya ait bir hash bilgisi de vermektedir. Böylece indirdiğiniz dosya ile Internette verilen hashleri karşılaştırıp doğrulama yapabilirsiniz.

Hashlere saldırılar ikiye ayrılmaktadır. Birincisi çevrimiçi saldırılar, yani elinizde kırmak isteyeceğiniz bir hash listesi yoktur, Internet üzerinden bulunan bir uygulama ya da servise, veritabanlarında bulunan hashlerle karşılaştırması için çoklu şifre tahminlerinde bulunursunuz. İkincisi ise çevrimdışı olan saldırılardır. Bunlarda ise elinizde bulunan veya bir yerlerden elde ettiğiniz hash listesini çeşitli saldırı türleri ile kırmaya çalışırsınız. Bu saldırı türlerinden en bilinenleri, bruteforce, rainbow tablosu ve sözlük saldırılarıdır.

  • Bruteforce

Varolan bütün kombinasyonların denenmesi anlamına gelmektedir. Kullanılan karakterlere göre değişmektedir. Örneğin sadece a,z aralığı ya da a,z ve A,Z aralıkları veya A,Z,0,9 aralığı gibi çok çeşitli kombinasyonlar oluşturabilirsiniz. En yavaş yöntem olabilir fakat sadece kombinasyon oluşturmaz. Ayrıca her kombinasyon için hash de oluşturur ve bunları karşılaştırır.

Elbette 4 hanelik bir şifrenin hash’ini kırmak çok uzun sürmez fakat hanesi sayısı artarsa, bunu kırmak için geçecek süre de artacaktır.

  • Rainbow Tablosu

Bir Rainbow (gökkuşağı) tablosu, daha önceden hesaplanmış hash’leri içermektedir. Yani, diğer bir deyişle, hash’ler hazır ve karşılaştırılmayı beklemektedir. En önemli artısı, işlemci yükünü azaltarak küçük boyutlu işlerde çok etkili sonuç verir. Sözlük saldırılarında, önce hash oluşturup ardından bunu kırmak istediğimiz hash ile karşılaştırırız. Gökkuşağı’nda ise hashlere zaten sahibiz ve tek yapmamız gereken bunları karşılaştırmak. İyi bir gökkuşağı tablosu oluşturmak vakit alacak bir iştir fakat etrafta çok büyüt boyutlu ve işe yarar tablolar da dolanmaktadır.

Gökkuşağı tablosunun etkisini azaltmak için yukarıda bahsettiğim salt yöntemi etkili bir yöntemdir.

  • Sözlük

Sözlük, kelimelerden, karakterlerden ve bunların kombinasyonlarından oluşan basit bir metin dosyasıdır. Sağda solda gördüğünüz “wordlist” ya da kelime listeleri de aynı anlama gelmektedirler. Sözlük, genel olarak kullanıcının basit şifreler kullanması fikrine dayanır. Bu yüzden herhangi bir sözlük metin dosyasına baktığınız zaman “12345678”, “qwerty” gibi ya da “home”, “pass” gibi dizilerden oluştuğunu görebilirsiniz.

Sözlük saldırıları şu şekilde olur; kırmak istediğiniz hash’e karşılık sözlükteki her dizinin bir hash karşılığı oluşturulur ve bununla karşılaştırılır. Eğer iki hash de birbirini tutarse, kırılmış demektir. Günümüzde artık CPU’lar epey güçlü olduğu için 1-2 dakika içerisinde 14 milyon girdi test edilebilir.

Bu saldırıları gerçekleştirebileceğimiz çevrimdışı bir uygulama arıyorsak eğer Hashcat bu iş için biçilmiş kaftan.

  • Hashcat

Hashcat, çok hızlı ve çok yönlü hash kırıcısı (cracker)’dır. Dağıtımlarınızın repolarında muhtemelen vardır, kurarsanız altta vereceğim örnek üzerinde nasıl çalıştığını daha iyi anlayabilirsiniz.

kame
dizisinin MD5 çıktısı “366b18ce0695e44bfc30423b9eb8a793” olduğunu yukarıda söylemiştik. Bunu bir metin dosyası içine, örneğin test.txt, yapıştırın ve kaydedin. Bu örneğimiz için bize bir sözlük lazım;

1ANORMUSWL
RockYou

İstediğinizi indirebilirsiniz. Bu örnekte 1ANORMUSWL dosyasını kullanacağım.

kame ~ % hashcat -m 0 -a 0 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt /home/kame/hashcat/pass/1aNormusWL.txt
Initializing hashcat v0.46 by atom with 8 threads and 32mb segment-size...

Added hashes from file /home/kame/hashcat/test.txt: 1 (1 salts)
Activating quick-digest mode for single-hash


NOTE: press enter for status-screen

366b18ce0695e44bfc30423b9eb8a793:kame

All hashes have been recovered

Input.Mode: Dict (/home/kame/hashcat/pass/1aNormusWL.txt)
Index.....: 1/5 (segment), 3498468 (words), 33550338 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, 33.39M words
Progress..: 3428536/3498468 (98.00%)
Running...: --:--:--:--
Estimated.: --:--:--:--

Started: Tue Oct 29 20:49:48 2013
Stopped: Tue Oct 29 20:49:49 2013

Görüldüğü üzere “-m“, seçtiğim hash algoritmam, 0, yani MD5, “-a” ise saldırı türüm , 0, yani doğrudan (burada sözlüğe bakıp her dizi için hash karşılaştırması yapıyor).

Herhangi bir sözlük kullanmadan bu saldırıyı yapmak istersek;

kame ~ % hashcat -m 0 -a 3 -o /home/kame/hashcat/sonuc.txt /home/kame/hashcat/test.txt ?l?l?l?l

Terminal çıktısı çok uzun olduğu için onu koymadım. Burada, farklı olarak saldırı türünü 3, yani bruteforce olarak belirledik ve sözlük yerine “?l” parametresini, yani sadece küçük harfleri (a,…,z) kullanmasını söyledik. 4 tane koymamın nedeni 4 haneden (kame) oluşması. Hangi şifrenin kaç haneden oluştuğunu, hangi karakterleri içerebileceğini bilemeyeceğimiz için saldırı modellerini kendiniz geliştirmeniz gerekmektedir.

Hashcat, çok başaralı ve hızlı bir hash kırıcısıdır. Burada çok temel bir örnek vererek anlatmam, sizlerin sağda solda denk getirdiğiniz herhangi bir hash algoritmasını oturup kırsın diye değildir. Daha fazla ayrıntılı bilgi almak isterseniz Hashcat’in wikisi, özellikle mask saldırısı ya da RTFM ve internette bulabileceğiniz sayısız döküman var.

Ccrypt İle Şifreleme

Platform bağımsız ve kullanması kolay bir uygulama olarak, ccrypt, dosya şifrelemede kullanmak için gayet basit ve güvenli, ayrıca sistem kaynaklarını da bir o kadar az tüketen bir araç olarak durmakta. Bu basit rehberi en azından denemeniz ve hatta kalıcı olarak kurup kullanmanız için hazırladım.

ccrypt, dosyaları şifrelemek ve şifresini çözmek için kullanılan, Rijndael Blok Şifresi üzerine kurulu açık kaynak, özgür yazılım bir uygulamadır. ccrypt’in sahip olduğu algoritma simetrik değildir. Bununla birlikte, ccencrypt ile dosya şifrelerken ccdecrypt ile şifre çözemektedir (ccrypt -e ya da ccrypt -d ile de yapabilirsiniz). Ayrıca ccat ile şifresiniz çözdüğünüz dosyayı sadece terminal ekranına yazdırabilir ve bilgisayarınızda geçici dosyalar bırakma riskinizi düşürebilirsiniz.

  • ccrypt güvenliği

ccrypt 256-bitlik bir şifrelemeye sahiptir. AES’in de seçtiği Rijndael Blok Şifresi‘ni kullanmaktadır. ccrypt’in AES ile farkı ise, AES 128-bit blok boyutu kullanırken kullanırken, ccrypt, Rijndael’in izin verdiği 256-bit blok boyutu kullanmaktadır. Bu onu elbette AES’ten daha az güvenli yapmamaktadır. Sadece AES standartına sahip değildir. Ayrıca, bu şifreleme eğer kırılırsa duyulması da o kadar çabuk olacaktır.

ccrypt ile bir dosyayı şifrelerseniz eğer, ccrypt o dosyanın üzerine yazacak, yeni bir dosya oluşturmayacaktır. Bununla birlikte, artık harddiskinizde orjinal dosya olmayacaktır. Fakat, siz bu dosyayı silseniz dahi donanım ataklarında harddiskiniz/ram’iniz/takasınız bu dosyanın izini taşıyabilir. Eğer bu izleri silmek isterseniz, bunun için çeşitli araçlar mevcut. Bunlardan bir tanesi GNU/Linux için wipe.

Eğer, şifreleme esnasında “–tmpfiles” parametresi kullanırsanız, orjinal dosyanın üzerine yazmak yerine geçici bir dosya oluştabilir, ardından da wipe ile silebilirsiniz.

kame ~ % ccencrypt --tmpfiles sifrelenecekdosya && ls

sifrelenecekdosya
sifrelenecekdosya.cpt

  • Dosya ve dizin şifreleme, şifre çözme

ccrypt ile herhangi bir dosyayı sorunsuz bir şekilde şifreleyebilirsiniz. Fakat, sizinleri şifrleyemezsiniz. Dizin için farklı bir yol izleyeceğiz.

Dosya şifreleme;
kame ~ % ccencrypt sifrelenecekdosya
Enter encryption key:
Enter encryption key: (repeat)

Gördüğünüz üzere ccencrypt (ya da ccrypt -e sifrelenecekdosya) ile dosyamızı anahtarımız ile şifrelemiş olduk. Anahtarı ise unutmamanız çok önemli. Tamamen unutursanız eğer şifrelenen dosyayı kurtarmanız mümkün olmayacaktır.

Dizin şifreleme;
kame ~ % tar -zcvf sifrelenecekdizin.tar.gz dizin/
kame ~ % ccencrypt sifrelenecekdizin.tar.gz

İlk komutumuz dizin adındaki dizinimizi (balık adındaki balık, komik değil biliyorum.) tar.gz formatında sıkıştırmak olacaktır. Ardından arşiv dosyamızı ccrypt ile sorunsuz bir şekilde şifreleyebilirsiniz.

Şifre çözme;
kame ~ % ccdecrypt sifrelenmisdosya.cpt
Enter decryption key:

ccrypt’in şifrelediği dosyaların uzantısı “.cpt” olarak değiştirmektedir. Eğer şifreyi çözmek isterseniz kullandığınız ccdecrypt ile (ya da ccrypt -d sifrelenmisdoya.cpt) anahtarınızı girerek dosyanızın şifresini çözebilirsiniz.

  • Anahtarımı unuttum, ne yapmalıyım?

Eğer anahtarınızı unutmuşsanız, şifrelediğiniz dosyaya erişmeniz mümkün olmayacaktır. Fakat, ccguess ile şifrenizi yanlış yazmış olabileceğinizi düşünerek ne olabileceğine dair bir kalıp deneyebilirsiniz.

Diyelim ki, şifrenizi “abcdefg” yaptınız (ben yaptım siz yapmayın), ve aklınızda sadece a, b, c, d ile e’yi içerdiği kalmış;

kame ~ % ccguess sifrelidosya.cpt
Enter approximate key: abcde


Generating patterns...1..2..3..4..5..sorting...done.

Possible match: abcdefg (2 changes, found after trying 1890639 keys)

Burada şu unutulmamalı; anahtarınız ne kadar çok karakter içerirse doğru tahmin için o kadar çok karakteri doğru hatırlamak zorundasınız, yoksa çabalarınız boşuna olacaktır.

  • Şifreleme esnasında sistem çöktü, peki şimdi ne olacak?

Örneğin, elinizde 100mb bir dosya var ve tam bunu şifrelerken ya da şifreyi çözerken sisteminiz kitlendi, elektrikler gitti vs. Ayrıca, bu dosyanın yedeğini şifrelemeden önce almadınız ve tek kopya şifrelemeye çalıştığınız dosya. Öncelikle yapmanız gereken şifrelenen dosyayın şifresini “-m” parametresi ile çözmek olacaktır.

kame ~ % ccdecrypt -m bozukdosya.cpt

Bu yöntemle dosyanın çözülen şifrelenmiş kısmı ile bozuk kısmından oluşan 2 ayrı dosya oluşturacak. Orjinal dosyayı bu iki kısmı birleştirerek tekrar oluşturabilirsiniz, fakat şifreleme ve çözümün birleştiği noktadaki 32-63 byte’lık bölümü malesef kaybedeceksiniz.

  • Anahtar oluştururken neleri kullanmamalı?

Yazdırılabilir ASCII karakterlerin hepsini kullanabilirsiniz. Sadece ‘\n’, ‘\r’ ve ”’ı kullanamazsınız. Bunların dışında, işletim sisteminiz eğer bazı özel karakterleri yazdıramıyorsa, doğal olarak onları da anahtar oluştururken kullanamayacaksınız.

  • Windows’ta şifreledim, GNU/Linux veya Mac Os’ta açabilir miyim?

Evet! ccrypt, platform bağımsız bir uygulamadır.

  • Şifrelenecek dosyanın boyutu önemli mi?

Hayır! İstediğiniz büyüklükte bir dosyayı ccrypt ile şifreleyebilirsiniz. Önemli olan sisteminizin bunu kaldırabilmesi.

SSL, Man In The Middle Ve TurkTrust

Wired‘da yayımlanan Law Enforcement Appliance Subverts SSL makalesinden (haber mi deseydik?) sonra biraz geriye gidip makale üzerinden ve yakınlarda gerçekleşmiş TurkTrust‘ın hatalı sertifika üretimi üzerine enteresan bir benzerlikten bahsedeceğim.

Man in the middle attack nedir?
man-in-the-middle
MitM saldırısı yapısı itibariyle aktif bir dinlemedir. Kurban ile sunucu arasındaki orjinal bağlantıya bağımsız bir bağlantı ile giren saldırgan, aslında kendi kontrolü altında bulunan iletişimi, kurbanı ve sunucu ile arasındaki iletişimin gizli ve sadece birbirleri arasında gerçekleştiğine inandırır. Tüm bu süreçte ise gönderilen ve alınan mesajlar saldırgan üzerinden gider. Daha iyi anlaşılabilmesi için wiki‘de bulunan çok güzel bir örnek üzerinden adım adım gidelim (şema Tails‘tan alıntıdır):

  1. Ali, hoşlandığı kız Ayşe’ye bir mesaj göndermek ve onunla pastanede buluşmak ister fakat aralarında bir üçüncü şahıs olan ve Ayşe’den hoşlanan ortak arkadaş Işık vardır ve ikisi de Işık’tan haberdar değildir;
  2. Ali “Ayşe, ben Ali. Bana anahtarını ver.”-> Işık Ayşe
  3. Işık, Ali’nin gönderdiği bu mesajı Ayşe’ye yönlendirir fakat Ayşe bu mesajın Işık’tan geldiğini bilmez;
  4. Ali Işık -> “Ayşe, ben Ali. Bana anahtarını ver.” Ayşe
  5. Ayşe anahtarı ile yanıt verir;
  6. Ali Işık <- “Ayşe’nin anahtarı” Ayşe
  7. Işık, Ayşe’nin anahtarını kendi anahtarı ile değiştirir ve mesajı Ali’ye yönlendirir;
  8. Ali <- “Işık’ın anahtarı” Işık Ayşe
  9. Ali, Ayşe’ye göndereceği mesajı Ayşe’nin sandığı anahtar ile şifreler ve Ayşe’ye gönderir;
  10. Ali “Saat 22:00’da pastanede buluşalım(Işık’ın anahtarı ile şifrelenmiş)” -> Işık Ayşe
  11. Anahtar aslında Işık’ın olduğu için, Işık mesajın şifresini kırar, içeriğini istediği gibi okur, eğer isterse mesajın içeriğini değiştirir, ve elinde bulunan Ayşe’nin anahtarı ile yeniden şifreler ve mesajı Ayşe’ye yönlendirir;
  12. Ali Işık “Saat 22:00’da çorbacıda buluşalım(Ayşe’nin anahtarı ile şifrelenmiş)” -> Ayşe
  13. Ayşe ise bunun Ali’den kendi anahtarı ile şifrelenmiş olarak ulaştığını düşünür. Garibim Ali saat 22:00’da pastanede Ayşe’yi beklerken Ayşe ise Ali ile buluşacağını düşünüp saat 22:00’da çorbacıya, yani Işık’a gider.

SSL, bir kriptografik protokol olup, web trafiğini şifrelemek için kullanılmaktadır. Bu protokol sörf, e-posta, internet üzerinden fax ve VOIP gibi çok geniş çaplı uygulamaları kapsar ve yüksek düzeyde bir şifrelemedir. Tarayıcı ile sunucu arasındaki iletişim ve verinin yukarıda bahsettiğim şekilde dinlenilmesini önler. Hergün ziyaret ettiğiniz birçok site HTTP[S] kullanmaktadır. HTTP ise bu şifrelemeye sahip değildir, gönderilen mesajlar herkes (mesela İSS’niz, ağınızdaki başka bir şahıs) tarafından zorlanmadan okunabilmekte/dinlenebilmektedir.

Makaleye dönecek olursak, Packet Forensics isimli bir şirket bir kutu yapıyor ve bu kutu şifre kırmadan iletişimin arasına girerek gerçek SSL sertifikasını kendi oluşturduğu sahte SSL sertifikası ile değiştiriyor. Şirket sözcüsü Ray Saulino ise bu kutuyu kanun uygulayıcıları için yaptıklarını, Internette tartışıldığını ve çok özel bir şey olmadığını söylüyor. Bununla birlikte, TurkTurst firması 2013 yılı başında 2 adet “hatalı” SSL sertifikası ürettiğini farkediyor (konu ile ilgili ayrıntılı bilgi almak için bu yazıyı okuyabilirsiniz!)

TurkTrust yapığı 4 Ocak 2013 tarihli kamuoyu açıklamasında şöyle diyor:

Yapılan incelemeler sonucunda, söz konusu hatalı üretimin sadece bir kez gerçekleştiği, sistemlerimize herhangi bir müdahalenin söz konusu olmadığı, hatalı üretim sonucu ortaya çıkan bir zarar bulunmadığı tespit edilmiştir.

Microsoft’un duyurusu:

TURKTRUST Inc. incorrectly created two subsidiary CAs (*.EGO.GOV.TR and e-islem.kktcmerkezbankasi.org). The *.EGO.GOV.TR subsidiary CA was then used to issue a fraudulent digital certificate to *.google.com. This fraudulent certificate could be used to spoof content, perform phishing attacks, or perform man-in-the-middle attacks against several Google web properties.

Microsoft, duyurusunda TurkTrust firmasının 2 tane hatalı sertifika oluşturduğunu (*.ego.gov.tr ve e-islem.kktcmerkezbankasi.org), bu hatalı sertifikanın çeşitli Google web özelliklerine karşı phishing ya da man in the middle saldırılarına neden olabileceğini söylüyor.

Microsoft çözümü:

To help protect customers from the fraudulent use of this digital certificate, Microsoft is updating the Certificate Trust list (CTL) and is providing an update for all supported releases of Microsoft Windows that removes the trust of certificates that are causing this issue.

Microsoft, kullanıcılarını bu sahte sertifakalardan koruyabilmek için bir yama yayımlamak zorunda kalıyor. Açık ve net olarak sahte sertifikadan kullanıcıların haberdar olmadığını (muhtelemen man in the middle saldırısı ile ilişkili), ve bunun için de kullandıkları hedef işletim sistemlerini güncellemelerini istiyor.

Mozilla’nın çözümü:

Mozilla is actively revoking trust for the two mis-issued certificates which will be released to all supported versions of Firefox in the next update on Tuesday 8th January. We have also suspended inclusion of the “TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007” root certificate, pending further review.

Mozilla ise duyurusunda Firefux’un 8 Ocak Salı günü tüm desteklenen sürümleri için bu sertifikaları kaldıracaklarını ayrıca “Aralık 2007 tarihlikök sertifikayı ise ileri bir inceleme için askıya alacaklarını söylüyor.

Wired’ın makalesinde geçen kısmı aynen buraya aktarıyorum:

The boxes were designed to intercept those communications — without breaking the encryption — by using forged security certificates, instead of the real ones that websites use to verify secure connections.

Diyor ki; kutular, yukarıda da kısaca bahsettiğim gibi -şifreyi kırmadan- websitelerin güvenli bağlantıları onaylamak için kullandığı gerçek sertifikalar yerine, sahte güvenlik sertifikaları tarafından iletişimlerine müdahale etmek için tasarlanmıştır. Yani burada söz konusu olan saldırı “man in the middle attack“‘tır. Makalenin değindiği bir başka nokta ise daha da vahim bir şeyi ortaya çıkartıyor:

To use the Packet Forensics box, a law enforcement or intelligence agency would have to install it inside an ISP, and persuade one of the Certificate Authorities — using money, blackmail or legal process — to issue a fake certificate for the targeted website. Then they could capture your username and password, and be able to see whatever transactions you make online.

Packet Forensics kutusunu kullanmak için mesela bir istihbarat servisinin (Türkiye için MİT diyelim) kutuyu İSS (mesela TTNet) içine kurmalı, bir tane Sertifika Sağlayıcısı’nı (tesadüfe bakın, TurkTrust) para ile, şantajla ya da yasal bir süreçle hedef websitesi için sahte sertifika üretmesine ikna etmeli. Sonuçta ne oluyor, sizin çevrimiçi olarak yaptığınız işlemler görülebilir ve kullanıcı adınızla şifreniz elde edilebilir olacaktır.

Tabi ki yazından TurkTrust böyle bir şey yapmıştır sonucuna varılmamalı. Öncelikli olarak, Packet Forensics’in böyle bir kutu ürettiği, bu kutunun kullanıldığı ve kapalı kapılar ardında tanıtıldığı, kanun uygulayıcıları ya da istihbarat servislerinin hedef pazarları olduğu (kim bilir başka kimler var?) ve bunu pişkince söyleyebildikleridir. İkinci olarak, böyle bir kutunun kullandığınız ya da kullandığımız İSS tarafından “kanun uygulayıcılarına” ya da “istihbarat servisine” yardımcı olsun diye kurulup kullanıldığı ve bir SSL sertifika sağlayıcısının bir şekilde buna ortak edilebileceği olasılığıdır. Tüm bunlar “olanaklı mıdır?” sorusuna gelirsek (TurkTrust’ı bunun dışında tutuyorum); gönderdiğiniz bir e-postanın bir kopyasının aynı anda NSA sunucularında da yer alması, görüntülü konuşmaların simultane olarak NSA tarafından kaydedilmesi gibi uç örnekler, çok büyük boyutlardaki verinin NSA tarafından her yıl yedeklenmesi gibi daha bir sürü örnek vereceğimiz şeylerin olması da çoğu insana olanaklı gözükmüyordu. Her şeyden önce (bu örneğe istinaden) deşifrelemek için  uğraşmak yerine MitM (kutunun yaptığı) çok daha etkili bir sonuç verecektir. SSL sertifikasını kırmaya çalışmak yerine “araya girmek” ve akışa müdahale etmek çok daha basit ve hızlıdır. XKCD’nin şu karikatürü ise çok güzel bir özet. Dahası, bir İSS düşünün, Phorm, DPI, Finfisher ve bilinmeyen bir sürü kötücül uygulamaya sahip ve (gerçek olduğunu varsayarak) böyle bir kutunun varlığından da bir şekilde haberdar, bunu mu kullanmayacak? Bir diğer nokta da, (makaleye istinaden) diyelim ki devletiniz ve istihbarat servisiniz kapınızı çaldı ve sizden böyle bir şey istedi, kafa tutacak güce sahip misiniz? Her geçen gün kişisel gizlilik haklarının yok sayıldığı, ihlal edildiği ve insan haklarına aykırı durumların çıktığı şu günlerde sizlere bol sabır dilerim.

PGP Kullanın

Bir uygulamayı nasıl kullanabileceğinize dair rehberler hazırlanırken, hazırlayan kişi -kaçınsa da- kendisi nasıl kullanıyorsa öyle anlatır. Bu bir hata değildir, bunda yanlış bir şey yoktur. Az bildiği anlamına da gelmez. Aynı şekilde alışkanlıklarının dışına çıkması onu anlatacağı şeyde hata yapmaya da götürebilir.

Böyle bir giriş yaptıktan sonra PGP üzerine hazırlanan bu rehberin, yazan kişinin kullanım çerçevesinde ilerleyeceği için “eksik” olduğu düşünülen noktalar aslında bilerek boş bırakılmıştır. Adım adım ilerleyecek olursak:

  1. PGP, e-posta ve dosyaların güvenliği için bir kriptolama ve doğrulama (matematiksel kısmı için aramaya inanın) aracıdır. Sizlere gönderdiğiniz dosyanın ya da e-postanın şifrelenmesini ve başkaları tarafından okunmamasını (ya da sadece gönderdiğiniz kişi tarafından okunabilmesini), gönderen kişinin kimliğini doğrulamayı ve gönderilen dosya ya da e-postanın yapısının bozulmadan size ulaşmasını (ya da bozulup bozulmadığını anlamanızı) sağlar.
  2. Kullandığınız e-posta sağlayıcı ne kadar güvenli olursa olsun e-posta mahremiyeti artık ayaklar altına alındığı için gönderdiğiniz e-postaları bu yöntemle göndermeniz güvenliğinizi kat kat arttıracak, e-posta içeriğiniz üçüncü şahıslar tarafından okunamayacaktır.
  3. PGP anahtarları oluşturmak için açık kaynak veya ticari yazılımlar mevcuttur. GNU/Linux kullanan biri olarak sadece GPG; GnuPrivacyGuard ve Terminal üzerinden gideceğim. O yüzden açık bir terminaliniz olursa hemen başlayabilirsiniz. Çünkü her şeyi onun üzerinde yapacağız. “#” komut, “>” ise terminal çıktısıdır.

Dağıtımınızın ne olduğunu bilmediğim ve bilemeyeceğim için paket yöneticinizden gnupg‘nin kurulu olup olmadığına bir bakın. Eğer kurulu değilse kurun. Her şeyin artık hazır olduğunu varsayarak;

# gpg --gen-key
> Please select what kind of key you want:
> (1) RSA and RSA (default)
> (2) DSA and Elgamal
> (3) DSA (sign only)
> (4) RSA (sign only)

Burada sizlere ne tür bir kriptolama yöntemi kullandığınız soruluyor. Varsayılan olan 1’i seçip (1 ve enter) yolumuza devam ediyoruz.

> RSA keys may be between 1024 and 4096 bits long.
> What keysize do you want? (2048)

Anahtarınız ne kadar güçlü olacak burada belirleyeceğiz. En büyük olanı iyidir diyoruz. 4096 yazın ve devam edin.

> Please specify how long the key should be valid.
> 0 = key does not expire
> = key expires in n days
> w = key expires in n weeks
> m = key expires in n months
> y = key expires in n years
> Key is valid for? (0)

Burada anahtarınızın ömrünü biçeceğiz. Bir nevi son kullanım tarihi. Sınırsız olmasını pek tavsiye etmiyorum. 3-5 gün sonra dolması da bana mantıklı gelen bir şey değil (eğer paylaşmayacaksanız). İdeal olarak 1-2 sene seçilebilir. 1y ya da 2y yazarak devam edebilirsiniz.

> GnuPG needs to construct a user ID to identify your key.
> Real name:
> Email address:
> Comment:
> Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Adınız veyahut takma adınız, kullanacağız e-posta adresiniz, anahtarla ilgili -varsa- yorumunuz (bu daha çok neden kullandığınız, ne işi yaradığı ile ilgili olabilir), son olarak O yazarak devam ediyoruz. Karşınıza şifre belirlemeniz için bir pencere açılacak. Buraya büyük, küçük harf, rakam ve işaretler kullanarak en az 10 karakterlik bir şifre yazıyorsunuz. İleride unutmayacağınız fakat güçlü bir şifre yazmanız sizin yararınıza olacaktır.

Anahtarın oluşturulabilmesi için rastgele bytes’a ihtiyaç olacak. Bu yüzden film açın, tarayıcınızda sitelere girin, metin editörüne bir şeyler yazın. Anahtarın oluşması biraz zaman alacaktır. Oluştuğunda ise:

> gpg: key ******** marked as ultimately trusted
> public and secret key created and signed

Şeklinde bir çıktı alacaksınız. ******** (rakam ve harflerden oluşan 8 hane) sizin anahtarınızın ID’si olmaktadır. Bu ID ayrıca 40 hanelik fingerprint’in son 8 hanesidir.

Sıra geldi oluşturduğumuz anahtarımızı nasıl kullanabilir, paylaşabiliriz, yedekleyebilir ve silebiliriz kısmına. Diyelim ki elinizde önemli bir dosya var ve kimsenin açık kurcalamasını istemiyorsunuz:

# gpg -e ******** dosya.txt

Dosyanızın kriptolanmış hali olan dosya..txt.gpg‘nin oluştuğunu göreceksiniz. Açmak isterseniz:

# gpg -d dosya.txt.gpg
# gpg --output dosya.txt --decrypt dosya.txt.gpg

Anahtarınızı paylaşmanızın iki yolu var. Biri anahtarınızı dışa aktarıp (ASCII-armored) göndermek, bir diğeri de anahtar sunucularına yollamak. ASCII-armored için:

# gpg --output anahtarım.asc --export -a ********

Böyle e-postanız üzerinden anahtarım.asc‘yi arkadaşlarınıza gönderebilirsiniz. Herhangi bir sunucuya göndermek için:

# gpg --send-key ********

Böylece arkadaşlarınız paylaştığınız anahtarınızı kullanarak sizlere kriptolanmış e-posta veya dosya gönderebilecekler. Şimdi size gönderilen bir anahtarı nasıl aktarabileceğinize bakalım:

# gpg --import arkadaşımınamahtarı.asc

Arkadaşınız eğer anahtarını sunuculardan birine göndermiş ve siz sadece ID’sini biliyorsanız:

# gpg --recv-key ********

Size gönderilen bir anahtarı doğrulamak isterseniz muhakkak fingerprint’ini karşılaştırın.

# gpg --fingerprint ********

Aynı şekilde anahtarınızı imzalamanız da anahtarı kullanan kişilere anahtarın sahibi olduğunuzu söyler.

# gpg --sign-key ********

Çok önemli bir adım olarak anahtarınızı nasıl yedeklersiniz? Öncelikle anahtar(larınızı) listelemek için:

# gpg --list-keys

Açık anahtarınız; pub 4096R/ ve gizli anahtarınız; sub 4096R/ ‘den sonraki 8 karakterlik kısımdır. Açık anahtarınızı yedeklemek için;

# gpg -ao açıkanaharım.key --export ********

Gizli anahtarınızı yedeklemek için;

# gpg -ao gizlianahtarım.key --export-secret-keys ********

Silinirse geri yüklemek için;

# gpg --import açıkanahtarım.key
# gpg --import gizlianahtarım.key

Bu yedekleri usb diskinizde saklayabilir, cd’ye yazdırabilirsiniz. Önemli olan bunları kaybetmemek. Bununla birlikte, anahtarı iptal etmek (revoke) bilmemiz gereken başka bir şeydir. Bir anahtar neden iptal edilire gelirsek (bu bilginiz olsun kısmı):

  1. Şifrenizi unutmuşsunuzdur ve hatırlama ihtimaliniz yoktur.
  2. Anahtarınızı kaybetmişsinizdir ve geri yükleyemiyorsunuzdur.
  3. Birileri tarafından kullandığınız şifre bulunmuştur.

Her türlü kötü durumları bu konuda kafanızda canlandırabilirsiniz. Ama temel olarak bu üç neden kafanızın bir yerinde bulunsun. İptal edilmiş bir anahtar ile karşılaştığınızda hatırlarsınız.

Revoke anahtarı oluşturmak için:

# gpg --gen-revoke ********

Anahtarı aktarmak için:

# gpg --import revoke.asc

Eğer anahtarı bir sunucuya göndermişseniz revoke edilmiş anahtarı tekrar göndermeniz o anahtarın iptal edildiğini gösterecektir.

Son olarak, oluşturduğunuz anahtarı ve sahip olduğunuz anahtarları silmek isterseniz:

# gpg --delete-secret-key ********
# gpg --delete-key 'arkadaşım@epostası'

O kadar uğraştık, bir e-posta göndereceğim ama nasıl diyorsanız, diyelim ki göndereceğiniz kişinin anahtarı sizde mevcut ve bir metin editörü ile (ben vim kullanıyorum bana bakmayın) e-postada anlatmak istediklerinizi yazdınız;

# gpg -e -u 'BenimanahtarIDim' -r 'ArkadaşımınanahtarIDsi' eposta.txt

Eklentiye eposta.txt.gpg‘yi koyun ve gönderin. Arkadaşınız yukarıda bahsettiğimiz şekilde e-posta.pgp.txt’yi açacak ve e-postayı okuyacaktır. Ben biraz eski kafalı olduğum için bu şekilde yapıyorum. Kullandığınız e-posta istemcisi (Thunderbird, Claws vs) ya da web tabanlı e-posta istemciniz bunu otomatik yapıyor olabilir. Onu sizin keşfetmeniz gerekecek.

Tekrar tekrar söylemeye gerek yok ama ben gene söyleyeyim. Kullandığınız e-posta servisi ne kadar güvenilir olduğunu iddaa ederse etsin, siz PGP kullanın!