Raspberry Pi’ı Şifreleyerek Koruyun

Herkesin, başkalarının eline geçmesini istemeyeceği ya da korumak isteyeceği dosyaları olabilir. Raspberry Pi’ınızın çalındığını düşünün? Raspberry Pi da diğer tüm işletim sistemleri gibi varsayılan olarak dosya sistemini şifreleyerek korumaya almaz, yani dosyalarınız fiziksel müdahalelere karşı tamamen korumasızdır. Raspberry Pi’ınızın bir parolasının olması diskinin (SD kart) fiziksel erişimlere karşı (çalınma durumu) güvenli olduğu anlamına gelmez. Teknik bilgisi olan kötü niyetli birisi, SD kartı kolayca okuyabilir veya kullanıcı parolasını sıfırlayarak bilgisayarı açabilir ve tüm dosyalarınıza erişebilir.

Bu gibi durumlara karşı dosyaların şifreli bir ortamda tutulması, onların başkalarının eline geçmesini önlemek için gereklidir. Raspberry Pi’ınız bir başkasının eline geçse dahi, diski şifreli olduğundan dosyalarınıza ulaşılamaz. Eğer şifreleme parolanızı unutursanız, siz de ulaşamazsınız.

VeraCrypt ile şifrelemek

Bu başlıkta, diğer popüler işletim sistemleri tarafından da desteklenen ve bir disk dosyasını şifreli bir konteyner haline getirme konusunda başarılı ve yaygın bir program olan VeraCrypt’den bahsedeceğiz.


VeraCrypt şifreleme aracının logosu

VeraCrypt geniş bir topluluk tarafından açık kaynak kod ile geliştirilen bir projedir. Geliştiricileri VeraCrypt’i “Paranoyaklar için yüksek güvenlikli açık kaynak kodlu bir disk şifreleme aracı” olarak tanımlıyorlar. Bir konteyner, diskte sıradan bir dosya olarak saklanır ve içerisinde herhangi bir tür dosya sistemini barındırabilir. Bu dosya sistemi; şifresi çözülüp açıldığında, işletim sistemi tarafından yerel bir dizine bağlanarak (mount) her türlü işlem (dosya/dizin oluşturma, değiştirme vb.) yapılabilir hale gelir. Yapılan işlemler dosya sistemi düzeyinde diske şifreli olarak işlenir veya diskten şifresi çözülerek okunur. Şifreleme ve şifre çözme işlemi çalışma anında yapıldığından (on the fly) kullanıcı sanki şifresiz bir dosya/dizin ile işlem yapıyormuş gibi hisseder. Lakin disk üzerine kayıt olunan veriler şifrelenerek yazılır. Konteynerin parolası girilip şifresi çözüldüğünde VeraCrypt’in sürücüsü devreye girerek, disk ile işletim sistemi çekirdeği arasına yerleşerek, kullanıcının konteynerin içeriği ile yaptığı her işlemin diske şifrelenerek yazılmasını sağlar. Konteyner ile yapılacak işlemler bittiğinde, konteyner kapatılarak bellek (RAM) temizlenir. Sözünü ettiğim bu çalışma ilişkisinin temsili şemasını aşağıdaki şekilde görebilirsiniz.


VeraCrypt konteynerinin işleyişi

VeraCrypt’in internet sitesi olan www.veracrypt.fr adresindeki Download sayfasında birçok işletim sistemi için derlenmiş sürümlerini bulabilirsiniz. Biz, yine bu sayfada Raspberry Pi OS (Raspberry Pi ARMv7) başlığı ile verilen, hazır derlenmiş sürümünü indirip kurulumunu yapacağız. Öncelikle sayfadaki indirme bağlantısını yani URL’ini kopyalarak aşağıdaki gibi wget aracına argüman olarak verin:

Dosya, Raspberry Pi’a indirildikten sonra ls komut ile listeleyelim:

Yukarıdaki ekran çıktısından görüldüğü üzere veracrypt-1.21-raspbian-setup.tar.bz2 adındaki dosya ev dizinimize inmiş. Bu dosya sıkıştırılmış bir arşiv dosyasıdır. Dosyayı tar aracı ile genişleterek içindekileri dışarı çıkartalım ve tekrar listeleyelim:

tar.bz2 uzantılı arşiv dosyasının içinden veracrypt-1.21-setup-console-armv7 ve veracrypt-1.21-setup-gui-armv7 isimli iki adet dosya çıktığını görüyoruz. Bunlardan gui isminde olanı, grafik masaüstü ortamında çalışan sürümünü; console ismindeki ise terminalde (konsol) yani metin tabanlı komut isteminde çalışan sürümüne ait kurulum dosyasıdır. Bu başlıkta konsol ortamında çalışan sürümünü kuracağımızdan, konsol için olanını aşağıdaki gibi çalıştırın:

Kurulum programı bir kullanım anlaşması metni görüntüledikten sonra şartları kabul edip etmediğinizi soracaktır. Bu anlaşma genel olarak verilerinizin güvenliği ile ilgili sorumluluğu tarafınıza yüklemek ve şifrelemede kullanılan algoritmaların ya da VeraCrypt’in bir güvenlik zafiyeti neticesinde verilerinizin ifşa olabilme ihtimalinin riskini açıklar. yes yazarak soruyu yanıtlayın. Hemen ardından VeraCrypt adındaki program /usr/bin/ dizinine kopyalanacaktır. Bu aşamadan sonra kurulumumuz tamamlanmış demektir. Veracyrpt’in sürüm bilgisini aşağıdaki gibi kontrol edebilirsiniz:

VeraCrypt ile şifreli konteyner oluşturmak

Dosya ve dizinlerin şifreli olarak saklanacağı bir konteyner oluşturmak için –create seçeneği kullanılır. Aşağıdaki gibi veracrypt’e –create seçeneği verildiğinde, içinde bulunulan dizinde bir konteyner oluşturmak için gerekli bilgileri girmeniz istenir. Hangi bilgilerin istendiğini inceleyerek konteynerimizi oluşturalım:

Volume yani konteynerin içinde oluşturulacak dosya sisteminin gizlilik tipi olarak Normal ve Gizli (hidden) olmak üzere iki seçeneğimiz var. Veracrypt, hidden seçeneği ile gizli bir konteyner bölümü oluşturabilir. Bu seçenek oluşturulan bölümü sıradan bir bölümün içerisine yerleştirerek gizliliğini artırmayı amaçlar. Bu seçeneğin uygulanmasının avantajı, ilgili inceleme araçlarının konteyner dosya içinde şifreli bir bölümün varlığının tespitini zorlaştırmaktır.

VeraCrypt tarafından oluşturulacak konteyner dosyasının adı container.hc olarak girilmiştir. Bu dosya veracrypt’in çalıştırıldığı dizin içinde oluşturulur, dilerseniz dizinlerinde dâhil olduğu tam bir patika olarak girilebilir. Dosya uzantısının herhangi bir önemi yoktur.

Burası konteynerin boyutunun tanımlandığı adımdır. Saklamak istediğiniz dosyaların boyutunu tahmin ederek bir boyut girebilirsiniz. VeraCrypt’in konteyner oluşturma işlemini tamamlamasının ardından, burada tanımlanan boyutta bir dosya oluşur. Bu boyut konteynerin içindeki dosyalardan bağımsızdır, yani; konteynerin içinde ne kadar dosyanız olursa olsun konteynerin boyutu sabittir. Yüksek değerler girmek için Gigabyte anlamına gelen G harfini, Kilobyte için K harfini ve Megabyte için de M harfini kullanabilirsiniz. Diskinizde yeterli miktarda boş alan olduğundan emin olmalısınız.

Encryption Algorithm yani şifreleme algoritması, konteynerin içeriği diske kaydedilirken veya okunurken kullanılacak şifreleme algoritmasını ifade eder. Konteynerin içindeki dosyalara ait veriler bu aşamada belirlenen algoritmaya göre şifrelenerek kaydedilir. Algoritmaların hemen hemen hepsinin kırılma zorluğu matematiksel ve olasılık bilimleri açısından garanti altındadır. En azından bu kitap yazıldığı sıralarda öyleydi. Tabii ki bunun hiçbir garantisi yok; çünkü bilişim güvenliği dünyasında her gün yeni güvenlik açıkları tespit edilmekte ve geliştiriciler tarafından hızlıca yamalanmakta. VeraCrypt de aktif bir geliştirici topluluğuna sahip bir proje olarak, güvenli addedilmekte ve akreditasyonu bağımsız geliştiriciler tarafından internetten yayınlanmaktadır.

Uyarı: Raspberry Pi’ın resmi dağıtımı olan Raspbian’ın çekirdeği sürüm 4.9.80-v7+ itibari ile AES ve Kuznyechik algoritmalarına çekirdek desteği içerdiğinden sadece bu algoritmaların kullanılması mümkün. Aksi takdirde konteyner oluşturulması sırasında şöyle bir hata mesajı alınmakta: “Error: device-mapper: reload ioctl on veracrypt1 failed: No such file or directory”

Söz konusu güvenlik olunca VeraCrypt de yüksek duyarlılığının bir göstergesi olan söz konusu algoritmaların birlikte kullanılmasını öngören seçenekleri (6., 7., 8., 9. ve 10. yöntemler) geliştirmiştir. Bu yöntemler farklı matematiksel şifreleme algoritmalarının iç içe kullanılarak, şifreli verinin çözülmesini zorlaştırma amacını taşır. Bu amaç, güvenlik seviyesini yükseltme konusunda işe yararken ek CPU gücü kullanımını gerekli kılar, yani konteyner ile çalışırken okuma ve yazma işlemleri algoritmanın türü ve kombinasyonu ile doğru orantılı olarak değişir. Aşağıdaki tabloyu şifreleme ve şifre çözme süreleri açısından algoritmaları kıyaslamak için kullanabilirsiniz (değerler Raspberry Pi üzerinde elde edilmiş gerçek değerler değildir):

Karıştırma algoritması (hash algorithm), konteyner şifreleme anahtarını ve konteyner meta verisini karıştırmak amacıyla kullanılır. Verinin karıştırılması deneme yanılma yöntemi ile kırılmasını güçleştiren ek bir güvenlik sağlar. Böylece konteyner inşa edilirken sabit meta verilerinin konteynerin güvenliği üzerinde daha az zafiyet oluşturması sağlanmış olur.

Konteynerin içerisinde oluşturulacak dosya sisteminin türünün belirlendiği adımdır. Bu adımda kullanmak istediğiniz dosya türünü seçerek devam edebilirsiniz. Eğer oluşturduğunuz konteyneri sadece Linux ortamında açıp kullanacaksanız Ext4 seçmenizi tavsiye ederim. Ext bir Linux standardı olduğu için, Linux Ext biçimli dosya sistemleri ile daha uyumlu çalışır. Eğer konteyneri Mac, Android ve Windows gibi diğer işletim sistemleri ile de kullanmak istiyorsanız exFAT seçebilirsiniz. Windows’un kendi dosya sistemi olan NTFS seçtiğiniz takdirde, konteynerin oluşturulabilmesi için ntfs-3g paketinin hâlihazırda yüklü olması gerekiyor. Paketi yüklemek için sudo apt install ntfs-3g komutunu kullanabilirsiniz.

VeraCrypt bu aşamada konteynerin şifrelenmesi için kullanılacak parolayı belirtmemizi ister. En az 20 karakterlik bir parola VeraCrypt tarafından güvenli kabul edilir. Daha kısa parolalar da girilmesine izin verir; fakat bu tavsiye edilmez. 20 karakterden kısa parolalar, VeraCrypt tarafından sabit karakterler ile 20’ye tamamlandığından şifrenin kaba kuvvet saldırısı ile yani deneme yanılma yöntemiyle kırılması kolaylaşır. Şifreleri oluşturan karakterleri değişik uzunluklarda sırayla yan yana getirip deneyerek bulmaya çalışan birçok program vardır. Bunlara genel olarak kaba kuvvet saldırısı ile kıran programlar denir (brute force crackers). Sadece küçük harflerden oluşan 4 karakter uzunluğundaki parolayı bulmak çok kolaydır. Bu şekilde oluşturulabilecek parola sayısı 29^4 dür, yani 29*29*29*29=707281. Bu programlar saniyede binlerce parola denemesi yapabilir. Bu nedenle parolanızda büyük/küçük harfler, rakamları ve noktalama işaretlerini kullanmanız konteynerin güvenliği açısından çok önemlidir. 29 küçük harf, 29 büyük harf, 10 rakam (0 dâhil) ve 10 özel karakterden oluşan 78 karakterlik bir kümeyi kullanarak 20 karakter uzunluğunda bir parola tanımladığınızda, denenmesi gereken toplam parola kombinasyonu sayısı 78^20 gibi 38  haneli bir sayıya karşılık gelir. Böyle bir parola günümüz şartlarında oldukça güvenli kabul edilir. Bu kadar fazla sayıda denemeyi makul sürelerde yapacak bir teknoloji henüz keşfedilmemiştir. Bu nedenle girdiğiniz parolayı unutmayacağınız bir ifadeden seçmeniz önemlidir. Eğer parolanızı unutursanız konteynerdeki tüm verinizi kaybetmiş olursunuz.

Bu aşamada bir PIM (Personal Iterations Multiplier) sayısı girmeniz istenir. PIM şifreleme anahtarını oluşturan algoritmanın öz yineli olarak kaç kez çalıştırılacağını belirler. Yani, şifreleme anahtarının girdiğinizi parola ve şifreleme algoritmasına göre ne derece rastlantısal oluşturulacağını belirler. Bu ek bir güvenlik önlemidir ve kaba kuvvet saldırılarına karşı yüksek güvenlik sağlar. Eğer PIM değeri 0 girilirse veya boş geçilirse VeraCrypt ön tanımlı en yüksek PIM sayısını kullanır. PIM sayısının büyüklüğü konteynerin şifreleme anahtarının oluşturulması ve deşifre edilmesi için yapılacak karıştırma işlemi sayısı arttırdığından, konteynerin oluşturulması ve açılması sırasında geçen süreyi etkiler. Bu süre en büyük PIM değeri için 2 dakikayı bulabilmektedir. Bu nedenle konteyner bu süreden sonra oluşturulmaya başlanır. Eğer bu süre kullanımınız açısından size fazla geliyorsa en düşük değer olan 1’i kullanabilirsiniz.

Parola yerine herhangi bir dosyanın kendisini (key file yani anahtar dosya) daha doğrusu dosyanın içeriğini oluşturan byte’ların değerlerini parola olarak kullanılmasını sağlayabilirsiniz. Bu durumda konteyneriniz ile çalışırken bir parola yerine ilgili dosyaya ihtiyacınız olur. Diğer taraftan bu dosyayı güvenli bir yerde saklama ve kaybetmeme gibi zorluk doğar. Bu özellik güvenlik açısından ek bir yük getirdiği için herkes tarafından tercih edilmez. Biz bu aşamada bu soruyu Enter tuşuna basarak boş (none) geçtik.

Bu aşamada VeraCrypt konteynerin oluşturulması için üretilecek şifreleme anahtarını yaratmak için yeterince rastlantısal bir üretece ihtiyaç duyar. Tam olarak rastlantısal değerler üretmenin bilgisayar mantığı açısından bir yolu yoktur. Bu nedenle VeraCrypt ilgili rastlantısallığı üretme görevini bilgisayarın dışına, gerçek dünyaya yani bize devreder. Bu aşamada klavyeden en az 320 karakterli rastgele uzunlukta bir metin girmemiz istenir. Bu metin şifreleme anahtarının yeterince rastgele oluşturulmasında kullanılır.

Konteynerin oluşturulması tamamlandığında aşağıdaki gibi bir dosya oluşur:

VeraCrypt konteynerini bir dizine bağlamak

Önceki adımda VeraCrypt’i kullanarak container.hc adında bir 5GB’lık bir konteyner oluşturmuştuk. Şim di bu konteynerin içerisinde dosya depolamak için onu açacağız. VeraCrypt bize konteynerin parolasını ve PIM sayısı soracak. Konteynerin kendisi bir dosya olduğundan üzerinde çalışabilmek için onu bir dizine bağlamamız gerekir. Aşağıdaki gibi konteyner dosyamızı VeraCrypt’e seçenek geçerse VeraCrypt bize sırasıyla konteynerin parolasını, PIM sayısını ve hangi dizine bağlamak istediğimizi, anahtar dosyasının yolunu ve gizli bolum özelliğine sahip olup olmadığını soracak. Bağlama işleminden önce bir dizin oluşturalım:

Konteyneri oluştururken bir anahtar dosya kullanmadığımız için keyfile sorusunu Enter’a basarak boş geçtik. Aynı şekilde gizli bölüm sorunu da Enter’a basarak No olarak cevapladık. Bu işlemin sonunda konteyner.hc dosyamız konteyner dizinine bağlanmış oldu. Bundan sonra (ta ki konteynerimizi kapatıp konteyner dizinini ayırana kadar) konteyner dizinine kaydedeceğiniz her şey diske şifreli olarak kaydedilir. Aynı şekilde bu dizinden okunan her dosya sanki şifresizmiş gibi şifresi çözülerek kullanılır olur. Linux’ta yapabileceğiniz tüm dosya işlemlerini bu dizin üzerinde yapabilirsiniz. VeraCrypt’in -l (list) seçeneği hâlihazırda açık olan konteynerler ve bağlı oldukları dizinleri listelemeyi sağlar:

Yukarıdaki kullanım etkileşimli bir kullanımdır, yani VeraCrypt bağlamak istediğimiz konteyner için bize sırasıyla bazı sorular sorar ve biz de cevaplarız. Aynı işi VeraCrypt ile etkileşime girmeden gerçekleştirmek için seçenekler kullanılabilir. Aşağıda etkileşimsiz bir bağlamaya örnek yer alıyor:

VeraCrypt konteynerini ayırmak

Konteyner ile çalışmanız bittiğinde mutlaka VeraCrypt ile ayırma ve kapatma işlemini gerçekleştirmeniz gerekir. Aksi takdirde konteynere yazılmayan verilerinizi kaybetme ihtimaliniz vardır. Konteyneri kapatmak için bağladığınız dizini -d seçeneğine argüman olarak verebilirsiniz:

Konteyneri kapatmanın önemine farklı bir açıdan dikkatinizi çekmek istiyorum. Konteynerimizi bağladığımız dizin diğer Linux dizinleri gibi olağan kullanımlara açıktır. Diğer dizinlerden hiçbir farkı yoktur. Eğer Raspberry Pi’ınızı fiziksel veya ağ üzerinden erişme yetkisi olan birisi varsa konteyner içeriğine diğer dizinler gibi erişebilir. Bu açıdan Raspberry Pi’a kullanıcı hesabı ve fiziksel konsol (fare ve klavye ile) ile erişme imkânı olması durumlarını güvenlik açısından hassasiyetle irdelemelisiniz. Eğer Raspberry Pi’ınız ya da konteyner dosyasının bulunduğu SD kart çalınır ise tamamen güvendesinizdir. Tabii ki parolanızın zorluğu kadar. Diski ele geçiren kişi enerjiyi kesmek zorunda olacağından VeraCrypt de kapanır. Dolayısıyla konteynerin şifreleme/şifre çözme sürecini yöneten bir işlem (process) ile bağlanan dizin arasındaki ilişki de (mapping) kalkar ve konteyner kapanmış olur. Kısacası Raspberry Pi’ınızın fiziksel konsolunu ve kullanıcı parolasını güvende tutmanız konteyner dizininin güvenliği açısından önem arz eder.

VeraCrypt konteynerinin parolasını değiştirmek

VeraCrypt konteynerini oluşturduktan sonra dilediğiniz zaman parolasını değiştirebilirsiniz. Parolayı değiştirmek için konteyner dosyası ile birlikte -C seçeneğinden yararlanabilirsiniz:

Parola değiştirme sürecinde VeraCrypt bize mevcut parolayı ve PIM sayısını ardından yeni parolayı iki kere girmemizi ister ve yeni şifreleme anahtarının oluşturulabilmesi için en az 320 karakterli bir klavye girdisi yapmamızı ister.

Parola değiştirmenin konteynerin oluşturulma süresine göre çok daha kısa sürede tamamlandığını fark etmiş olabilirsiniz. VeraCrypt yeni parola ile tüm konteyneri yeniden şifrelemez bunun yerine daha pratik bir çözüm olan; konteynerin şifrelenmesinde kullanılan anahtarın kendisini şifreler. Yani, bir konteyner şifrelenirken girilen parola şifreleme yapmak için tek başına kullanılmaz. Bunun yerine çok daha fazla uzunlukta olan ve rastgele üretilen şifreleme anahtarları kullanılır. Esasen parola olarak girdiğimiz ifade, şifreleme anahtarını şifreleyerek koruma altına almayı sağlar.

encryptfs ile şifrelemek

Önceki başlıkta konteyner kullanarak dosyalarımızın disk üzerindeki güvenliğinin nasıl sağlanacağına bakmıştık. Bu başlıkta, Linux çekirdeği tarafından desteklenen şifreli dosya sistemini (encryptfs) kullanarak aynı işlemi yapacağız. Linux çekirdeği 2.6.19 sürümünden itibaren bu kısımda anlatılan şifreleme yöntemini dosya sistemi düzeyinde destekler.

Örneğin /home/pi/korunakli dizininin tüm içeriğinin disk üzerinde şifreli olarak nasıl kaydedilebileceğine bakalım. Bu işlemi yaparken mount komutundan faydalanacağız. Mount komutu ile korunakli adındaki dizini şifreli olarak bağlayacağız.

Her bağlama sırasında tanımladığımız parolayı girmek içeriği şifrelenmiş dizinimizin güvenliğini sağlayan en önemli unsurdur. Şöyle ki; Raspberry Pi’ın enerjisi kesildiğinde ya da kapatıldığında (init 0) şifreli olarak bağladığımız dizin de otomatik olarak ayrılacak (unmount) ve dosyalarımız şifreli olarak disk üzerinde korunmaya devam edilecektir. Şifrelediğimiz dizini kullanmak istediğimizde ise mount komutu ile parolamızı girerek dizini yeniden bağlamamız yeterlidir.

Şifreleme desteğinden yararlanabilmek için ecryptfs araçlarını yükleyelim:

Şimdi içeriğini şifrelemek istediğimiz dizini oluşturalım ve bağlayalım:

Mount komutu ile dosya sistemi tipi yerine ecryptfs seçeneğini geçerek, bu dizinin kayıtlı olduğu disk alanının şifreli olarak kaydedileceğini belirttik. mount komutu interaktif olarak sizden bazı soruları yanıtlamanızı ister. İlk soruda parola kullanım tipi olan passphrase için 2 girdik. Sonraki iki soruda şifrelemede kullanılacak algoritmanın AES, dosya sistemini şifrelemede kullanılacak anahtarın uzunluğunun da 16 byte yani 128 bit (16×8) olacağını belirtmiş olduk. Dilerseniz güvenliği yükseltmek için 24/32 bits seçebilirsiniz. Enable plaintext passthrough sorusuna no cevabını vererek şifresiz dosyaların korunakli dizini içinde kullanılmamasına, Enable filename encryption sorusuna no diyerek de dosya isimlerinin şifrelenmemesine karar verdik. Komut başarıyla çalışıp, korunakli isimli dizini başarıyla bağladığında, Mounted eCryptfs mesajını görüntüleyerek kullanıma açacaktır.

Bu işlemden sonra dizin içerisinde oluşturacağımız tüm dosya ve dizinler bağlı olduğu süre boyunca disk üzerine şifreli olarak kaydedilecektir.

Bu aşamada bir detaydan bahsetmek istiyorum; mount komutu normalde sınırlı bir kullanıcı olan pi’nin çalıştırabileceğini bir komut olmadığından, sudo ile yetki vererek root kullanıcısı yetkileri ile çalıştırmamız gerekir. mount komutu şifreleme anahtarını saklamak için /root/.ecryptfs/ dizini içinde sig-cache.txt dosyasını oluşturur. Dilerseniz anahtarı görmek için cat komutundan faydalanabilirsiniz.

İçiniz rahat olsun, şifreleme anahtarının bu dosyada kayıtlı ve görüntülenebilir olması bir güvenlik açığı değildir. Bu dosyada yer alan 16 byte’lık AES anahtarı parolanız ile korunmuş durumdadır. Yani, önceki başlıkta da belirtildiği gibi, rastgele oluşturulan bir şifreleme anahtarı belirlediğimiz parola ile yeniden şifrelenir. Dikkat etmeniz gereken tek şey yeterince karmaşık ve uzun bir parola seçmektir. Şifreleme anahtarınız seçtiğiniz parolanın zorluğu kadar güvendedir.

Artık şifreli dizinimizi kullanmaya başlayabilirsiniz. İsterseniz bir deneme yaparak şifrelemenin çalıştığından emin olalım. Nano komutu ile şifrelenmiş dizin içerisinde bir metin dosyası oluşturalım.

Vicdan dediğimiz şey, içimizde alevlenen belli bir arzunun, dış dünya tarafından reddedildiğinin iç dünyamız tarafından algılanmasıdır. Freud

Ctrl+X ile kaydedip çıktıktan sonra korunakli dizinini umount komutu ile serbest bırakalım (ayıralım) ve daha sonra cok_gizli.txt dosyasının içeriğine bir göz atalım. Dizini ayırdığımız sırada, dizinin içinde olmamaya dikkat edelim.

Yukarıdaki ekran görüntüsünde de görebileceğiniz gibi; cok_gizli.txt isimli dosyanın içeriği disk üzerinde şifreli olarak saklanmaktadır. SD kartı eline geçiren kötü niyetli bir kişinin göreceği veri de bundan ibarettir. Dosyanın içeriğini normal şekilde görüntüleyip dizin içerisinde işlem yapabilmek için dizinimizi parolamızı kullanarak mount komutu ile tekrar bağlamamız gerekir. Aşağıda olduğu gibi mount komutu, şifreli dizini bağlayabilmek için parolayı soracaktır.

Vicdan dediğimiz şey, içimizde alevlenen belli bir arzunun, dış dünya tarafından reddedildiğinin iç dünyamız tarafından algılanmasıdır. Freud

Dosyaları güvenli şekilde silmek

Aslında bu başlık kafanızda önemli bir soru işareti oluşturmalı. Dosya silmenin güvenli şekli nasıl olabilir ki? İşletim sistemine dosya silme komutunu verdiğinizde sizin için dosya sistemi üzerinde gerekli işlemi (değişikliği) yaparak dosyayı siler. Aslında bilgisayar gibi hiçbir sayısal depolama cihazında gerçekten bir silme işlemi söz konusu değildir. Evet, yanlış okumadınız, geçekte dosya silme diye bir işlem yoktur.

İşletim sisteminin dosya sistemi yöneticisi, bir dosyayı gerçekten silmez sadece silindi olarak işaretleyerek kullandığı disk alanını boş olarak işaretler. Ancak boşa çıkan disk alanına yeni bir dosya kaydedildiğinde eski dosya gerçekten ulaşılamaz olur ve silinmiş olarak kabul edilebilir. Şunu hatırlayın; diyelim ki bir DVD’nin içeriğini bilgisayarınıza kopyalamak istiyorsunuz; bu işlem ortalama olarak 5 dk. sürecektir. Sıra bu içeriği bilgisayardan silmeye geldiğinde aynı içerik birkaç saniye içerisinde silinir! Bu işlem sayısal depolama kullanan tüm teknolojilerde aynıdır. Bilgisayarın burada yaptığı işlem sadece FAT adı verilen ve bir kitabın içindekiler listesine benzetebileceğimiz bir listeden dosya adının silinmesi ve ilgili kitap sayfalarının boş olarak işaretlenmesinden ibarettir.

Bu nedenle gizliliği olan dosyalarınızı rm komutu ya da standart bir yöntemle silmek güvenli değildir. Kurtarma programları ile silinen dosyalar (aslında silinmiş olarak işaretlenen) geri alınabilir. Eğer güvenli silme gerçekleştirilmezse; örneğin ticari amaçla geliştirdiğiniz bir yazılımın kaynak kodları SD kart ile müşterilerinize ulaşabilir. Shred adlı program Linux’ta, dolayısıyla Raspberry Pi’da dosyaları güvenli olarak silmek için kullanabileceğiniz başarılı birçok programdan birisidir. Shred temel olarak silinmek istenen dosyaların verisi üzerine belli sayıda rastgele değerler yazmakta ve orijinal veriyi sürekli olarak değiştirmektedir. Böyle bir durumda dosya geri kurtarılsa dâhi sadece anlamsız verilere ulaşılmış olur.

Shred komutu sistemde yüklü değilse apt ile aşağıdaki gibi yükleyebilirsiniz.

Shred komutunun temel kullanımı aşağıdaki gibidir:

Aşağıdaki komut örneğini inceleyin:

Yukarıdaki komutun seçeneklerini açıklamak gerekirsek; n seçeneği ile güvenli olarak silinecek dosyanın verileri üzerine 6 kez rastgele veri yazılmış, –v (verbose) seçeneği ile de işlem durumu hakkında ekrana çıktı verilmesi sağlanmıştır. Dosyanın üzerine ne kadar çok rastgele değer yazılırsa güvenli silme o denli güçlü gerçekleşir. Dosyanın boyutuna göre bu sayıyı istediğiniz kadar artırabilirsiniz. Askeri seviyede bir güvenli silme işlemi en az 30 tekrar yazma gerektirir. Bu komutun sonunda dosya verisi geri kurtarılamayacak şekilde karıştırılmış; fakat dosyanın kendisi silinmemiştir. Dosyanın kendisinin de diskten silinmesi için kullanılan –u seçeneğine bir örnek kullanım da şöyledir:

Yukarıdaki shred komut örneğinde farklı olarak –u seçeneği kullanılmıştır. Bu seçenek ile hem dosya diskten silinmiş hem de silinmeden önce dosya adı bilgisi FAT’den (dosya yerleşim tablosu) üzerine rastgele (00000) değerler yazılarak yok edilmiştir. Bu sayede hangi dosyanın silindiğine dair de disk üzerinde (SD Kart) iz bırakılmaması sağlanmış olur.

Son olarak bir dizini, alt dizinleri ile beraber tamamen silmek için aşağıdaki gibi bir sıralı komut çalıştırılabilir. Bu kullanımda find komutu ile /home/pi/dev dizini altındaki tüm dosyalar listelenmekte ve 48 tur güvenli silme işlemi için shred programına yönlendirilmektedir. Komutun çalışmasının tamamlanması, işlem tur sayısı ve dizinin boyutuna göre değişen miktarda zaman alacaktır.

Magnetic force microscopy ve şifreleme

Neden aynı verinin üzerine birçok kere rastgele değer yazıldığını merak etmiş olabilirsiniz. Bu işin arka planı çoğu kimse için aşırı teknik olabileceğinden basitçe şöyle ifade edebilirim: Verinin üzerine bir kez yazılması orijinal veriyi tamamen ulaşılmaz yapmaz. Yeterli teknolojik donanımı olan kişi/kuruluş üzerine yazılmış veriden orijinal veriyi elde edebilir. Buradaki yeterli teknolojik imkânlardan kasıt aslında sadece devletlerin sahip olabileceği imkânlar ya da bu işe zarar etme pahasına para yatırmış olma ihtimali olan dolar milyarderleri ve yüksek bütçeli kuruluşlar. Üzerine veri yazılan disk/bellek alanı hücresi (bit) bir önceki değerini belli oranda muhafaza etmektedir. Yani, 1 olarak okunan verinin daha önce sahip olduğu değerin 0 ya da 1 olduğu öğrenmek mümkündür. Bu zafiyetin suistimali en çok manyetik kayıt ortamlarında (HDD) karşımıza çıkar.

Manyetik Diske Veri Yazılması ve Okunması

Diskler, verileri (yani 1 ve 0’ları) nano ölçekteki mıknatısların sahip olduğu konumu kullanarak saptarlar. Örneğin SN (Güney/Kuzey) pozisyonunda duran bir mıknatıs 0’ı ifade ederken tam tersi pozisyonda duran NS mıknatıs 1’i ifade eder. Manyetik disklerde bu iki durum arasında net bir ayrım yoktur ve belli toleranslar ölçüsünde disk işlemcisi tarafından yorumlanarak 0 veya 1 olarak yorumlanırlar. İdeal koşullarda SN pozisyonundaki bir mıknatısın referans ekseni ile tam olarak 90 derece açı yapması gerekirken disk işlemcisi tarafından bu açı örneğin %10’luk (manyetik malzemenin üretim teknolojisine bağlı olarak) bir sapma payı ile tolere edilir. Yani, 84 veya 89 dereceye konumlanmış bir mıknatıs da 0 olarak kabul edilir. Birden fazla tur yazma ihtiyacı bu tolerans değerin genişliğinden kaynaklanmaktadır. Örneğin 83 derecelik orijinal konuma sahip bir 0 değerinin üzerine tekrar 0 yazılırsa bu açı benzer bit’lere göre bir miktar daha ideal derecesi olan 90 dereceye yaklaşır. Örneğin 84,2 (seksen dört tam onda iki) derece olur. Benzer şekilde aynı bit -82 (eksi seksen iki) derece ile 1 değerine sahip iken üzerine sıfır yazılırsa önceki örneğe göre ideal değere yaklaşma oranı daha az olacaktır (çünkü orijinalinden zıt bir manyetik alan uygulanarak 0 yazılmıştır). Bu özelliklerinden dolayı manyetik disklerden silinen verileri elde etme işlemi, tüm disk yüzeyi ileri teknoloji donanım ve yazılımlar ile taranarak gerçekleştirilebilmektedir. Bu işlem için disk plakaları sökülerek Magnetic Force Microscope adı verilen ve nano ölçekte büyültme yapabilen mikroskopların altında fotoğraflanarak ilgili yazılımla tüm diskteki veriyi oluşturan bit’lerin korelasyonu üzerinden bir hesaplama yapılarak orijinal veri tahmin edilmeye çalışılır. Bu nedenle disk verisinin üzerinden birden fazla tur ile geçmek verinin geri döndürülememesi açısından önemlidir. Aynı güvenlik zafiyeti kapasitif mantıkla (enerji depolayan nano ölçekli kondansatörler/kapasiteler) çalışan statik belleklerde de vardır (SD kart, Flash Bellek, SSD vb.). Bu kayıt ortamlarında 1 ve 0’lar mıknatıs yerine şarj ve deşarj olan minik kapasiteler/kondansatörler ile temsil edilir. Mıknatıslarda olduğu gibi bu minik kapasitelerin de şarj ve deşarj tolerans aralıkları vardır. Amerikan ordu standardında bu tur sayısı 7 olarak standartlaştırılmışken 30’un üzerindeki değerler de çoğu kişi için paranoyak seviyede görülmemektedir. Zamanınıza ve mahremiyetini muhafaza etmek istediğiniz verinizin değerine göre tur sayısını olabildiğince uzun tutmak güvenlik açısından akılcı bir yaklaşım olacaktır.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.