15 Nisan 2014

iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 2. Bölüm 4. Kısım

Bu makalede, daha önce giriş yaptığımız iOS tabanlı uygulamalarda mahremiyet konusuna devam edeceğiz.

Daha önceki bölüm iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 2. Bölüm 3. Kısım'dı. Bu bölümde kaldığımız yerden (Keychain'de Saklanan Verilerin İncelenmesi) devam ederek yazı dizimizi sonlandıracağız.


keychain_dumper gibi araçlar, kullanıcı parolasının kullanılmadığı durumlarda, cihaz üzerindeki keychain verilerinin okunmasını sağlayacaktır. Bu nedenle, yukarıda bahsedildiği gibi, veri koruma mekanizmasının etkinleştirilmesi için kullanıcı parolasının kullanılması ve yeterli kuvvette parolalar atanması; ayrıca keychain veritabanı dosyasında görülen ve her bir keychain verisi için bir karşılığı olan pdmn(protection domain) değerinin, kullanıcı parolasıyla etkinleşecek şekilde(kSecAttrAccessibleWhenUnlocked) düzenlenmesi önem arz etmektedir.

 

Veri koruma etkinleştirildiğinde, aşağıdaki gibi bir ifade iOS aygıt ekranında görüntülenecektir:


3.2.4. SQLite Verileri 

SQLite, dünyada en çok dağıtılan ve tavsiye edilen, kaynak kodları halka açık, tamamen C/C++ programlama dilleriyle geliştirilmiş, sunucu yazılımı ve konfigürasyon gereksinimi olmayan, işlemsel ve ilişkisel bir SQL veritabanı motorudur. Bu tür niteliklerinin yanında SQLite’in az yer kaplaması ve güvenilir olması,  iOS cihazlar için uygun bir depolama çözümü olmasında etkili olmuştur.

iOS’ta bulunan SQLite kütüphanesi, küçük ve güçlü oluşu gibi sebeplerle, kolaylıkla bir iOS uygulaması içinde kullanılabilmektedir. SQLite veritabanı, kayıtlara hızlı erişim imkanı sağlamaktadır. Böylelikle iOS uygulamaları kendi veritabanlarını oluşturup yönetebilmektedir.

Bu tür olumlu yanlarına karşın iOS’la gelen SQLite’in yerleşik bir şifreleme desteği bulunmamaktadır. Bu nedenle verilerini bu tür veritabanlarında tutan uygulamaların birçoğuna ait veriler, açık-metin olarak SQLite veritabanlarında bulunabilmektedir. 

Bu nedenle cihaza fiziksel erişim olması hâlinde ya da aygıt yedekleme dosyalarından yararlanılarak açık-metin olarak tutulan bu verilerin, yetkisiz kişilerin eline geçmesi ve yetkisiz kişilerce okunabilmesi riski ortaya çıkmaktadır. Kütük(dosya) yönetim sistemlerinden aşina olduğumuz bir konu, saklanan verileri silmek istediğimizde, verinin kendisi yerine onu işaret eden işaretçi bölümlerin silindiğidir. Benzer şekilde SQLite biçiminde tutulan veriler silindiğinde, onları işaret eden etiket bilgisi ortadan kaldırılmakta, verinin kendisi tamamen temizlenmemektedir. Bu nedenle bu şekilde “silinen” verilere SQLite logları yardımıyla erişebilmek olasıdır. Bir diğer ifadeyle, SQLite aracılığıyla saklanan verilere her daim erişme olasılığı bulunmaktadır. Bu sebeple SQLite’ta hassas veriler saklanırken, şifreli bir şekilde saklanması gerekmektedir. Ayrıca veriler silinirken de, verilerin disk üzerinde bulunduğu adreslerin üzerine rastgele verilerin yazılması veri gizliliğinin ihlali riskini azaltacaktır.

3.2.5.    Cookies.binarycookies

Bu dosya, web uygulamalarından aşina olduğumuz oturum yönetiminin bir parçası olan oturum çerezlerinin tutulduğu dosyadır. Dosya içeriği okunarak oturum yönetiminde kullanılan oturum çerezlerinin değerlendirmesi yapılabilir. Buna ek olarak dosyanın hassas bilgi içerip içermediği kontrol edilebilir. Cookies.binarycookies dosyası normal şartlarda ikili biçimdedir. Bu nedenle dosya içeriğini okuyabilmek için yardımcı araçlar kullanılabilir.

3.2.6.    Klavye Sözlüğü

iOS cihazlarda, kullanıcıların klavye üzerinde girdiği karakterleri kaydeden bir özellik bulunmaktadır. Bu özellik kullanılarak iOS cihazlarda bulunan otomatik düzeltme gibi yardımcı araçlar kullanılabilmektedir. Bu özelliğin bilgi güvenliği açısından sakınca oluşturan yönü ise, klavyeden girilen her karakterin klavye sözlüğü de denilen bir dosyaya kaydedilmesidir. Bu dosya, cihaza SSH ile bağlanıldığında Library/Keyboard dizininde bulunmaktadır. Türkçe klavye sözlüğü dosyası, tr_TR-dynamic-text.dat dosyasıdır. Dosya bilgisayarımıza kopyalanıp bir Hex Editor yardımıyla açıldığında içindeki veriler okunabilir.

Klavye sözlüğünde “Secure” olarak işaretlenmiş olan alanlara girilen değerler tutulmamaktadır. Bu nedenle varsayılan olarak “Secure” işareti bulunan parola, pin gibi alanlara girilen değerler klavye sözlüğünde bulunmazlar. “Secure” işaretsiz metin alanlarına girilen değerler ise klavye sözlüğünde bulunabilirler. Sızma testi sırasında klavye sözlüğü silinerek uygulamaya girilen değerlerden hangilerinin klavye sözlüğüne yazıldığı anlaşılabilir. Klavye sözlüğünü silmek için Ayarlar -> Genel -> Sıfırla -> Klavye Sözlüğünü Sıfırla adımı takip edilebilir.


Uygulama geliştirirken parola alanlarına girilen değerlerin Klavye Sözlüğüne kaydedilmesini önlemek için ilgili alan ya “Secure” olarak işaretlenmeli ya da alanının autocorrection özelliği kapatılmalıdır.

3.2.7.    Snapshot

Bilindiği gibi iOS cihazlarda “Home” tuşuna basıldığında uygulama ana ekranda kapanmakta ancak arka planda çalışmaya devam etmektedir. Bu geçiş, iOS’un kullandığı bir küçülme efektiyle sağlanmaktadır. Bu efekti sağlayabilmek içinse açık olan uygulamanın ekran görüntüsü alınmaktadır ve ilgili uygulama dizininde bu ekran görüntüsü saklanmaktadır. Bu nedenle cihaz üzerinde hassas olabilecek bilgilerin saklanması riski oluşmaktadır(alınan ekran görüntüsünde bulunabilecek hassas bilgiler).

Bu durumu önlemek için uygulamanın arkaplana atılıp atılmadığını kontrol eden fonksiyonun dönüşünden önce ekran temizlenebilir ya da uygulamanın arkaplanda çalışması ilgili property list(.plist) dosyasına arkaplanda çalışmayı engelleyen nitelik eklenerek önlenebilir.

3.2.8.    Dosya Önbelleği

Belirtilen dosya türlerinin haricinde, .pdf, .txt gibi dosyalar uygulama üzerinde görüntülendiği takdirde, geçici dosyalar olarak saklanabilmektedir. Bu sebeple bu tür geçici dosyaların uygulama kapatıldıktan sonra silinmesi gereklidir. Bu tür dosyaların saklanıp saklanmadığı, uygulama dizininde kontrol edilebilir. Uygulama açıkken(ya da uygulamaya giriş yapıldığında-login) ve kapalıyken(ya da uygulamadan çıkış yapıldığında-logout) alınan iki farklı dizin yapısı karşılaştırılarak hassas bilgi saklanıp saklanmadığı kontrol edilebilir.

3.2.9. Hata İzleri (Logları)   

iOS uygulamaları, hata giderme ve sorun çözme amaçlarıyla iz kaydı üretmektedir. Bu izler, belirtilen amaçlar için faydalı olabilecek bilgilerin yanında hassas bilgiler de içerebilir. iOS üzerinde bulunan bir iz toplama fonksiyonuna parametre olarak girilen veriler, Apple System Log(ASL) tarafından da kaydedilmekte ve aygıt yeniden başlatılana kadar cihaz üzerinde tutulmaktadır. Ayrıca hata izleri, uygulama sandbox’ın dışında bulunabilmektedir (sınır kontrolünün olmaması nedeniyle). Böylelikle bir uygulamanın ürettiği ve hassas bilgi içeren iz kayıtları, bir başka uygulama tarafından okunabilecektir. Bu da yetkisiz erişim riskini doğuracaktır. Sızma testine tabi tutulan uygulamanın ürettiği logların hassas bilgi içerip içermediğini kontrol etmek faydalı olacaktır. Bunun için iPhone Configuration Utility isimli araç kullanılabilir.

Veri gizliliğini sağlamak için sorun çözme, hata ayıklama(debugging) gibi izlerin tutma özelliklerinin uygulama yayınlanmadan önce kaldırılması gereklidir. Yine iz kayıtlarında herhangi bir hassas bilginin bulunmadığından emin olunmalıdır.



<<Önceki Bölüm