CryptoAPI ile Verilerimizi Güvenlik Altına Alalım (ama nasıl?)

0
anonim
21. yüzyılda yaşadığımızı göz önüne alarak artık hepimizin mümkün olduğunca Telnet yerine SSH, FTP yerine SFTP ve HTTP yerine HTTPS kullanarak verilerimizin Internet üzerinde bir noktadan bir noktaya ulaştırılması sırasında yol üzerinde pusuya yatmış karanlık şahıslar tarafından ele geçirilmesini engellediğimizi sanıyorum. Eğer bunu yapmıyorsanız, bu karanlık şahıslara fırsat verdiğiniz için er ya da geç Nasreddin Hoca'nın başına gelen "Peki ama hırsızın hiç mi suçu yok?" durumuna düşmeniz kaçınılmazdır...
Veri paketlerinizi bu şekilde ssl ve ssh ile yolculuk sırasında güvenceye aldınız diyelim.

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)

Görüşler

0
FZ
Çok şık bir yazı olmuş. Tebrik ederim! İşe yarayacağından şüphem yok.

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?
0
anonim
http://www.kerneli.org/howto/node2.php

Kisaca make patch-kernel adimi yerine 'make modules' yapiliyor. Kendim bazi sorunlar yasadim bununla. Onun icin saglam olsun diye cekirdek yamalama yolunu tercih ettim.

Oktay
Görüş belirtmek için giriş yapın...

İlgili Yazılar

Siyah Şapkalar Buluşuyor (Black Hat USA 2005)

sefalet

Siyah Şapkaların buluşması rüya şehri Las Vegas'da gerçekleşmekte.Bilişim güvenliği üzerine çeşitli bildiri ve eğitimlerin verildiği etkinlikler 23-28 temmuz arasında.

Etkinliklerin içeriğine bakmak için;
http://blackhat.com

Ama açıkcası benim haberi paylaşmamın nedeni giden olur ihtimali değil, şu adresteki güzel arşiv;
http://blackhat.com/html/bh-multimedia-archives-index.html

Metasploit artık Rapid7'nin

caiaphas_

Uzun zamandan beri hem UNIX hem de WIN32 üzerinde başarı ile çalışan ve tüm otoriteler tarafından da en çok tercih edilen penetrasyon aracı olan Metasploit Rapid7 tarafından satın alındı.

Açık kaynak desteğinin devam edip etmeyeceği Metasploit tarafından yapılan açıklama ile netlik kazandı. Metasploit açık kaynak kod üretmeye devam edecek, bunun yanında Rapid7'nin güvenlik açığı tarama ürünü olan NeXpose ile de entegre edilecek. Habere göre HD Moore dahil pek çok Metasploit geliştiricisinin Rapid7 ekibine katıldığı da ayrıca belirtiliyor. HD bundan sonra güvenlik şefi olarak görevine devam edecek.

Spam ve Hacking Elele

sundance

Spam hepimizin malumu, "Internet ne de güzel bir yer, bulalım birilerinin e-posta adreslerini de reklamla bombalayalım" eylemine verilen isim. Yurt dışında ciddi parasal cezaları olan spam, Türkiye içinde de en ünlü ISP`mizin başını bayağı bir ağrıtmıştı zamanında.

Genelde fazla bilgisayar bilgisi olmayan Spamciler bu sefer oldukça teknik bir yöntem geliştirmişler. Spam atabilmek için birkaç ISP`i hack edip onun üstünden mail göndermişler...

Açık Kaynağın Yararları

Soulblighter

Geçen hafta çalınan Windows 2000 kaynak kodlarını inceleyen iyi niyetli :) bir yazılımcı, IE 5 gözatıcısında açık tespit etti.

Bu açık kullanılarak, bitmap dosyası ile (ne alakaysa, klasik M$ açığı) kullanıcının bilgisayarında aşırı yüklenme meydana getirilebiliyor. Açığı bulan yazılımcı, haberi www.securitytracker.com adresinde duyurdu.

SecureProgramming.com: Güvenli Programlama Teknikleri

FZ

Süper bir uygulama geliştitiriyorsunuz, keskin bir C/C++ (ya da Java, PHP, vs.) programcısı olduğunuzu düşünüyorsunuz, uygulamanızı diğerleri ile de paylaşıyor ve bununla gurur duyuyorsunuz.

Birkaç gün sonra defalarca ıncığına cıncığına dek test ettiğiniz uygulamadaki açıklar SecurityFocus gibi sitelerde yayınlanıyor... Klasik ve kulağa tanıdık gelen bir senaryo değil mi?

Ciddi anlamda uygulama geliştiren ve abuk sabuk güvenlik açıklarına yazılımlarında yer vermek istemeyen programcıların, Secure Programming Cookbook for C and C++ kitabının yazarları tarafından kamuya açılan http://www.secureprogramming.com sitesini ziyaret etmelerinde fayda var.