Peki bu yolculuğun başlangıç noktasının güvenliği hakkında oturup düşündünüz mü hiç? Sabit diskinizde duran verileriniz, Mozilla'nın kendiliğinden form doldurma özelliğini kullanarak sakladığınız kredi kartı numaranız, bütün arkadaşlarınızın email adreslerinin bulunduğu liste, çalıştığınız şirket için hassas olan belgeler içeren iş dizininiz, ve buna benzer diğer verileriniz acaba güvende mi?
Amerika birleşik devletlerinde gayet sık rastlanan bir olayı sizlere aktarmak isterim. Ülkemizde de kullanımının tartışıldığı Sosya Güvenlik Numaraları (SSN) Amerikada oldukça yaygındır, ve fakat bunların kullanımında herhangi bir güvenlik yoktur. Örneğin, başka bir şahsın adına kredi kartı almak için başvurabilmek için elinizde o şahsın Adı, Soyadı, Doğum Tarihi ve SSN'i olması yeterlidir. Hiç kimse "Kartınızı görebilir miyim?" diyemez -ki zaten karta PVC kaplanması bile yasak olduğundan genelde kimse beraberinde bulundurmaz. SSN konusunda bu şekil güvenlik açıkları bulunduğundan dolayı bu numaraları çalarak (kimlik hırsızlığı) para kazanmanının yollarını bulmuş bir çok çete mevcuttur. Bu tip bilgilere sahip olan doktor kayıtları, sigorta kayıtları, ehliyet kayıtları gibi bilgilerin bulunduğu sunucu merkezlerinin çok yüksek güvenlik altında olduğunu biliriz. Hepsinin kapısında parmak iziyle giriş cihazı, içinde 24 saat kamera gibi ileri teknoloji ürünü güvenlik sistemleri mevcuttur. Fakat malesef bu önlemler, bahsettiğimiz çetelerin sunucu merkezinin binasının yanına kamyonlarını parkedip duvarı delmek suretiyle bu bilgileri tutan sabit disklere ulaşmalarını engellememektedir. Kulağa bir macera filmi senaryosu gibi geldiğinin farkındayim. Fakat çalındığı veritabanının türüne göre (örneğin yüksek limitli kredi kartı kullanıcılarının olduğu bir veritabanı daha çok para edecektir.) bu SSN lere ödenen ücretin tanesi 10$ seviyesine kadar çıkabilmektedir. Bir diskte yüzbinlerce değil milyonlarca böyle numara olduğunu göz önüne alırsaniz, kamyon dayayıp duvar delme senaryosunun da bazı kişiler tarafından göze alınabilecek bir risk olduğu göreceksiniz.
Gerek bu gibi bir durumu engellemek icin, gerekse sizin çok önemli bilgilerinizin başkası tarafından okunmasını önlemek icin elimizde çok güçlü bir silah bulunuyor. Bu öyle bir silah ki evinize girip sadece sabit diskinizi değil, bütün bilgisayarınızı alıp götürseler bile, kimse diskinizde koruma altına aldığıniz hiç bir şeyi okuyamıyor, sizin görülmesini istemediğiniz resimlerinize bakamıyor, yazmış olduğunuz programların kaynak koduna ulaşamıyor. Yazımın bundan sonrasından "şifreleme" olarak bahsedeceğim bu silahın adı "Encryption". Zaten SSH, SCP ve HTTPs'den aşina olduğumuz gibi şifreleme belli matematik kuralları çerçevesinde oluşturulmuş bir takım yöntemleri kullanarak parolayı bilen kişiler haricinde verilere ulaşılmasını engelliyor. İşin güzel tarafı bu şifreleme yöntemlerini artık Linux çekirdeği de desteklediği için Linux altında sabit disklerimizi de şifrelememiz mümkün. Şimdi hep beraber Linux altında verilerimizi şifreleyebilmek için ne yapmamız gerektiğine kısaca bir göz atalım.
Linux çekirdeği seviyesinde şifreleme işlemini gerçekleştiren yazılım CryptoAPI adı ile anılıyor. Bu yazılım henüz ana çekirdeğe resmi olarak girmiş olmasa da çekirdeğe ayrıca yamamak suretiyle elde edilmesi hiç de zor değil. ( CryptoAPI'nin dosya şifreleme harici birçok başka kullanım şekli de mevcut) Eğer kendi çekirdeğinizi derlemek konusunda tecrübeli değilseniz kullandığınız Linux sürümünün CryptoAPI destekleyen bir çekirdek yayınlayıp yayınlamadığınızı araştırmanız gerekiyor.
CryptoAPI Kurulumu:
Bu işlemler sırasında çekirdeğimizi baştan derlememiz şart değil. Kurulum için gerekli olan CryptoAPI ve CryptoLoop sistemleri modül olarak da sisteme eklenebiliyor. Fakat ben daha kolay olması ve sorunsuz olması bakımından bu yazılımlarla birlikte çekirdeğin kendisinin de derlenmesini tavsiye ediyorum.
İşe başlamadan önce gerekli yazılımların kaynak kodlarını indirmemiz gerekiyor. Bu yazılımlar ve indirilecek adresleri şu şekilde:
Linux Çekirdeği:
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.gz
CryptoAPI:
http://www.kernel.org/pub/linux/kernel/people/hvr/testing/cryptoapi-0.1.0.tar.gz
CryptoLoop:
http://www.kernel.org/pub/linux/kernel/people/hvr/testing/cryptoloop-0.0.1-pre1.tar.gz
Bu kaynaklara ilaveten eğer sisteminizdeki util-linux paketinde gelen 'losetup' adlı program CryptoAPI destekli değilse (Debian dahil bazı sürümler CryptoAPI destekli bir losetup ile geliyor) o zaman makalenin sonundaki losetup'ın tekrar derlenmesine değinen eki okuyunuz.
Yapılması gereken kurulum biraz karışık görünse de eğer benim kadar şanslı iseniz sorunsuz tamamlanacaktır. Tamamlamanız gerek işlemleri adım adım sıralıyorum:
- Linux Çekirdeği paketini /usr/src dizinine açıp, adını "linux" olarak değiştirin. (/usr/src/linux oluşacak şekilde)
- CryptoAPI paketini aynı şekilde /usr/src/cryptoapi olacak şekilde açın.
- CryptoLoop paketini aynı şekilde /usr/src/cryptoloop dizinine açın.
- /usr/src/cryptoapi dizinine girip 'make patch-kernel' yazıp enter'a basın.
- /usr/src/cryptoloop dizinine girip 'make patch-kernel' yazıp enter'a basın.
- Bu aşamada çekirdeğimiz istediğimiz gibi yamalanmış oluyor.
- /usr/src/linux dizinine girip 'make menuconfig' komutu ile çekirdeğin derleme ayarlarını yapmaya başlayın. Eğer bu konuda tecrübeli değilseniz öncelikle bu konudaki belgeleri okuyarak bilgi edinmeniz gerekiyor. Çekirdek derlemek çok zor olmamasına rağmen biraz el alışkanlığı gerektiren bir iştir, lütfen önce bu beceriyi kazanıp öyle deneyin.
- Çekirdeğin derleme ayarlarını yaparken daha önce orada olmayan ve yamalamadan sonra ortaya çıkmış 'Cryptography Support' adlı yeni bir şeçenek göreceksiniz. Buradaki bütün seçenekleri (tercihen Module olarak) işaretleyin.
- Ayrıca 'Block Devices' ana başlığı altındaki, 'Loopback device support' seçeneğini de işaretlemeniz gerekiyor.
- make dep && make clean bzImage modules modules_install
- Yukarıdaki komutları tek satırda çalıştırarak kerneli derleyip, modülleri gitmeleri gereken yerlere gönderin.
- Kullandığınız sürüme göre /usr/src/linux/arch/i386/boot/ dizininde oluşan yeni çekirdeğinizi (bzImage) gitmesi gereken yere kopyalayın. (Çoğu sürümde çekirdekler / veya /boot dizininde tutulur. Kurulumunuz ayrıca bir 'initrd' ön çekirdeği de gerektirebilir. Lütfen çekirdek derleme konusunu iyice öğrendikten sonra bu adımları izleyiniz)
- Gerekli lilo veya Grub ayarlarını yaptıktan sonra bu yeni çekirdeğiniz ile sistemi açın.
CryptoAPI Kullanımı
CryptoAPI kullanarak bütün bir sabit diski, belli bir sabit disk bölümünü (partition), bir CDROM'u veya tek bir dosyayı şifrelemek mümkündür. Bu yazımızda bunlardan uygulaması en kolay olan dosya şifreleyip loopback aracılığıyla bu dosyayı sisteme bir sabit disk gibi ekleme yolunu öğreneceğiz.
CryptoAPI'yi kullanabilmemiz için öncelikle gerekli çekirdek bileşenlerini yüklememiz gerekiyor.
$ modprobe cryptoloop
komutu ile bunu gerçekleştiriyoruz. Bu aşamada 'lsmod' komutunun çıktısında 'cryptoloop', 'cryptoapi' ve eğer modül olarak derlendiyse 'loop' bileşenlerinin listelenmesi gerekiyor.
Kullanıma geçmeden önce içinde saklamayı düşündüğümüz verinin rahat rahat sığacağı bir alana ihtiyacımız var. Bu alanı bize sağlayacak dosyayı oluşturmak için /dev/urandom adlı rastgele veri oluşturan araçtan yararlanacağız. Diyelim ki bize 500 MBlik bir alan yeterli olacak. Öncelikle 500MB boş yer bulunan bir dizin belirlemeliyiz. Diyelim ki /home dizininde yeterince yer var.
$ dd if=/dev/urandom of=/home/cryptoapi bs=1M count=500
komutu uzunca bir süre çalıştıkran sonra bize /home/cryptoapi adından tamamen rastgele değerlerden oluşan 500MB boyutunda bir dosya üretecektir. (Denemelerinizde 5MB) kullanırsanız uzun süre beklemek zorunda kalmazsınız)
Bir sonraki aşamada kullanmak istediğimiz şifreleme yöntemini belirleyip, bununla ilgili bileşeni yüklememiz gerekiyor.
$ modprobe cipher-twofish
komutunu çalıştırarak 'twofish' yöntemiyle şifreleme bileşenini yükleyebiliriz.
Artık hem kullanmak istediğimiz alan hem de bütün şifreleme bileşenleri yüklü olduğuna göre oluşturduğumuz dosyayı şifreleyip bir disk olarak sisteme eklemeye hazırız. Dosyayı şifrelemek için:
$ losetup -e twofish /dev/loop0 /home/cryptoapi
komutunu çalıştırmamız yeterli olacaktır. Eğer komut çalışmazsa kullandığıniz sürümdeki 'losetup' komutu CryptoAPI destekli değil demektir. Lütfen makale sonundaki ekteki bilgiler takip ederek 'losetup' programını olması gerektiği şekilde yeniden derleyiniz. Eğer yukarıdaki komut başarıyla çalıştı ise, size şifrelemede kullanılacak anahtar boyutunu (Keysize) ve bir paralo soracaktır (Password). Anahtar boyu olarak ne kadar büyük bir sayı kullanırsanız o kadar güvenlidir, fakat sayı büyüdükçe daha yavaş çalışacaktır. Ayrıca bütün şifreleme yöntemleri bütün anahtar boyutlarını desteklememektedir. Bu yüzden anahtar boyunu 128 yapmanızı tavsiye ederim.
Bu aşamada gireceğiniz parolayı çok iyi belirlemeniz gerekiyor, çünkü daha sonra kolayca değiştirilmesi mümkün değil. Ayrıca bu parola bütün şifreleme işleminin en zayıf noktasını oluşturuyor. Eğer parolayı tahmin etmek çok kolaysa, bütün emekleriniz boşa gidebilir. Tekrar üzerine basmakta fayda görüyorum. Parolanızı bilen herkes verilerinize kolaylıkla ulaşabilir! Bu uyarıları göz önünde bulundurarak kuvvetli bir parola seçiniz.
Hazırladığımız dosya loopback aracılığıyla kullanıma hazır olduğuna göre artık üzerinde bir dosya düzeni hazırlayabiliriz. Windows'u hala hatırlayanlar icin bu işlem 'formatlama' işlemine benzetilebilir. Bu dosya düzenlemede istenilen dosya düzeni şekli kullanılabilir fakat biz en düşük bileşen olduğu için ext2 biçemini kullanacağız.
# mkfs -t ext2 /dev/loop0
Dosya biçemi bu şekilde halledildikten sonra başta 500MBlik bir dosya olarak hayatına başlayan alanımız /dev/loop0 üzerinden bilgisayarımıza yeni bir sabit disk gibi eklenebilecek bir duruma geliyor. Bu yeni sabit diski bilgisayarımza bağlamak icin /mnt dizini içinde 'crypto' adlı bir dizin oluşturalım. Bu dizin oluştuktan sonra
# mount -o loop /dev/loop0 /mnt/crypto
ifadesi ile loopback üzerinden şifreleme özelliği vererek tanımladığımız 500MB boyundaki dosyamızı sistemimize /mnt/crypto dizini altında bir sabit disk gibi eklemiş bulunuyoruz. Bunun böyle olduğunu 'mount' komutunu kullanıp aşağıdaki kısmi çıktı ile karşılaştırarak onaylayınız. Ayrıca 'df' komutunda da 500MB'e yakın bir alan görmelisiniz.
# mount
/dev/loop0 on /mnt/crypto type ext2 (rw,loop=/dev/loop0)
#
Artık /mnt/crypto dizinine istediğiniz gibi dosya kaydedebilir veya gizli belgelerinizi taşıyabilirsiniz. Bu dizine gönderdiğiniz herşey şifreli olarak yazılacaktır.
COK ÖNEMLİ: Bu şifreli dizinin güvenli olabilmesi icin işiniz bittiği zaman kesinlikle /mnt/crypto ile bağı kopartıp ayrıca parola girerek başlattığınız 'losetup' oturumunu sona erdirmelisiniz. Normalde bilgisayarınızı kapatmanız yeterlidir. Fakat eğer uzun süre açık kalan bir bilgisayarınız varsa, kullanmayacağınız zaman bu dizinin sistemle bağını koparmanızda fayda vardır. Bunun için
# umount /mnt/crypto
komutu ile sabit disk gibi kullanımı sonlandırdıktan sonra,
# losetup -d /dev/loop0
ile şifreleme oturumunu da kapatmanız gerekmektedir. Sadece 'umount' adımını tamamlayıp bırakırsanız şifreleme oturumu 'mount' komutu kullanılarak şifreli verilere ulaşıma hazır bir şekilde bekleyecektir.
Yukarıdaki gibi bilgisayarınizla ilişiği kesilmiş şifreli dizinimizi geri getirmek için 'losetup' komutunu daha önce kullandığımız şekliyle kullanmalıyız. Aşağıdaki oturum örneğini takip ederek tekrar bağlamayı gerçekleştiriniz. 'mkfs' ile biçem oluşturma adımınin atlandığına dikkat ediniz. Eğer bu adım tekrarlanırsa bütün verilerinizi yok edersiniz.
# losetup -e twofish /dev/loop0 /home/cryptoapi
Available keysizes (bits): 128 192 256
Keysize: 128
Password:
Eğer yanlış bir Anahtar boyu veya yanlış bir parola girerseniz hiç bir hata mesajı verilmeyecektir. Fakat 'mount' ile sisteme ekleme aşamasına geldiğinizde bunu başaramadığınızı göreceksiniz. Eğer böyle bir durumla karşılaşırsanızi 'losetup -d /dev/loop0' ile adımınızı geri alarak yukarıdaki adımları tekrarlamanız yeterlidir.
Oktay Altunergil
5 Nisan 2003
Not: Bu makale bir çekirdek yamalama, çekirdek veya herhangi bir yazılımı derleme klavuzu değildir. Okuyucunun bu becerileri başka kaynaklardan edinmeleri gerekir.
Ek: Util-Linux (losetup) yamalama ve yeniden derleme:
Öncelikle aşağıdaki iki paketi indirmeniz gerekiyor. (Util-Linux'un daha ileri sürümleri olmasında rağmen, bunlara eş yama dosyası bulunmadığı için biraz daha eski sürümünü kullanıyoruz)
Util-Linux CryptoAPI yaması: http://www.kernel.org/pub/linux/kernel/people/hvr/util-linux-cryptoapi/util-linux-2.11r.patch.gz
Util-Linux : http://www.kernel.org/pub/linux/utils/util-linux/util-linux-2.11r.tar.gz
Bunları herhangi bir dosyaya açın. Bu örnek icin /tmp dizinini kullanacağız. Patch dosyasının düzgün çalışması için bu dizinde 'util-linux' adından bir sembolik link oluşturup bunu indirdiğimiz util-linux paketini açtığımız yere yönlendirmeliyiz.
$ ln -s ln -s util-linux-2.11r util-linux
Yukarıdaki komutu /tmp dizininde çalıştırarak ihtiyacımız olan linki hazırlamış oluyoruz. Bundan sonra yamalama işlemini gerçekleştirmek çok basit. Tek yapmanız gereken aynı dizinde 'patch' komutunu aşağıdaki şekilde kullanmak.
/tmp# ls -alF total 1588 drwxr-xr-x 3 root root 4096 Apr 5 14:49 ./ drwxrwxrwt 23 root root 20480 Apr 5 14:54 ../ lrwxrwxrwx 1 root root 16 Apr 5 14:54 util-linux -> util-linux-2.11r/ drwxr-xr-x 18 root root 4096 May 8 2002 util-linux-2.11r/ -rw-r--r-- 1 root root 65669 Apr 1 18:52 util-linux-2.11r.patch /tmp# patch -p0 < util-linux-2.11r.patch patching file util-linux/mount/Makefile patching file util-linux/mount/lomount.c patching file util-linux/mount/lomount.h patching file util-linux/mount/losetup.8 patching file util-linux/mount/mount.8 patching file util-linux/mount/mount.c patching file util-linux/mount/rmd160.c patching file util-linux/mount/rmd160.h patching file util-linux/mount/sha512.c patching file util-linux/mount/sha512.h patching file util-linux/mount/sundries.c /tmp#
Daha sonra util-linux dizinine geçerek 'configure && make' komutu ile derlemeyi tamamlayabilirsiniz. 'make install' yapmanızda bir sakınca yok ama tercih ederseniz sadece oluşan 'losetup' programıni gerektiği yere kopyalayarak da kullanabilirsiniz. (Bu şekilde hem eski hem yeni losetup programlarınızı bilgisayarınızda tutmanız da mümkün)
Bu arada çekirdeği derlemek yerine ilgili işlevselliği yüklenebilir modül halinde devreye sokmak için nelerin yapılması gerekiyor? Sanırım yazıda bunlar anlatılmamış. Bunların da adım adım anlatıldığı bir kaynak var mıdır acaba?