15 Nisan 2014

iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 2. Bölüm 2. 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 1. Kısım'dı. Bu bölümün sonunda, bir oyun uygulamasınun plist dosyalarında tutulan kullanıcı istatistik bilgilerinin manipüle edilmesi anlatılmaktaydı. Kaldığımız yerden devam ediyoruz.

Bilgisayarımıza kopyaladığımız dosyada ilgili değerin tutulduğu plist dosyasını ve parametreyi bulup değişiklik yapıyoruz.



İlgili değeri 2000 olarak değiştiriyoruz.






İlgili değişikliklerden sonra değişiklik yapılan skor değerinin 2000 olarak güncellendiği görülmektedir.

3.2.3. Keychain  

Keychain ya da keychain deposu, 128-bit AES şifreleme algoritmasını kullanan SQLite tipinde merkezî bir veritabanıdır. Burada, uygulamalara ve ağ servislerine ait kimlik ve parola bilgileri saklanmaktadır. Bu alana erişim kısıtlanmıştır. Keychain alanı, kullanıcı adları, kullanıcı parolaları, şifreleme anahtarları, sertifikalar ve asimetrik şifrelemede kullanılan özel anahtarlar(private keys) gibi hassas bilgilerin saklandığı bir veritabanıdır. Genel olarak iOS uygulamaları, uygulamaların kullanımı için gereken oturum açma bilgilerini burada saklayarak uygulamanın her açılışında, kullanıcının tekrar tekrar oturum açma bilgilerini girmesi ihtiyacını ortadan kaldırmaktadır. Keychain içeriğine veri yazmak ya da buradan veri okumak için, keychain kütüphanesinde tanımlı metodlar, uygulamalar tarafından kullanılmaktadır. Uygulama geliştiriciler kullanıcı oturum açma bilgileri gibi hassas bilgileri plist dosyalarında saklamak yerine daha güvenli olan keychain alanında saklayabilmek amacıyla, keychain servislerine ait API’leri kullanarak işletim sistemine bu amacı dikte ettirebilir. Keychain dosyasının bulunduğu dizin /private/var/Keychains/keychain-2.db’dir. Jailed cihazda bu alana erişmek mümkün değilken, Jailbreaked cihazda bu alana erişilebilir.

3.2.3.1.     Keychain Ögeleri

Keychain veritabanının içeriği, kriptolu veriler barındıran keychain ögeleri ile bu ögelere ait kriptosuz öznitelik kümesinden oluşmaktadır. Öznitelikler keychain ögesinin ait olduğu sınıfla(kSecClass) ilişkilidir. 

iOS’ta, keychain ögeleri 5 sınıfa ayrılmıştır. Bunlar jenerik parolalar(kSecClassGenericPassword), internet parolaları(kSecClassInternetPassword), sertifikalar(kSecClassCertificate), anahtarlar(kSecClassKey) ve dijital kimlikler(kSecClassIdentity, yani sertifika + anahtar)dir.

Keychain ögeleri, 4 tablo hâlinde saklanmaktadır. Bunlar, genp (jenerik parola), inet (internet parolası), cert (sertifika) ve key (anahtar ve dijital kimlik) tablolarıdır.

 


3.2.3.2.     Keychain Veritabanının Güvenliği


Keychain veritabanı, her iOS cihaz için bu cihaz donanımına özgü bir şifre anahtarıyla kriptolanmıştır. Bu nedenle cihazdan şifre anahtarının çıkarılması mümkün değildir. Bu sayede, keychain veritabanında tutulan verilere sadece ilgili cihaz üzerinden ulaşılabilmekte ve bu veriler bir başka cihaz üzerine taşınamamaktadır. Dolayısıyla, saldırgan bir kişi tarafından dosya sistemine fiziksel olarak erişilse bile, veritabanı içeriğinin şifresi çözülemeyeceğinden, verilere erişmek mümkün olmayacaktır.


3.2.3.3.     Keychain’de Saklanan Verilere Erişim

Keychain’de bulunan veriler mantıksal olarak bölümlenmiştir. Dolayısıyla bir uygulamaya ait verilere, bir başka uygulama erişememektedir. Uygulamaya ait keychain verileri uygulama sandbox’ının dışında saklanmaktadır. Bu nedenle işletim sistemi tarafından bu alana erişimi kontrol etmek amacıyla birtakım erişim kontrolleri uygulanmaktadır. Sadece gerekli erişim iznine sahip olan uygulamalar ilgili veriye erişebilmektedir. Bu izinler “code sign entitlement” adıyla anılan yetkilerle tanımlanmaktadır. Keychain servisleri bu yetkileri kullanarak, uygulamalara ve kendi ögelerine erişim izni vermektedir. Uygulamaya ait yetkiler, keychain erişimlerinin yanısıra push bildirimleri, iCloud erişimi gibi nitelikleri sağlayan ayarları da tanımlamaktadır.


iOS işletim sisteminde, her uygulamanın kendine özgü bir tanımlayıcısı(unique application-identifier) bulunmaktadır. Keychain servisleri, bu tanımlayıcıları kullanarak keychain verilerine erişimi kısıtlamakta ya da verilere erişilmesine izin vermektedir. Varsayılan olarak uygulamalar, sadece kendi tanımlayıcılarıyla ilişkili verilere erişebilmektedir. Keychain ögelerinin birden fazla uygulama tarafından paylaşılması gerektiğinde ise keychain-access-groups adı verilen erişim grupları tanımlanmaktadır. Aynı yetki grubuna ait olan uygulamalar, keychain ögelerine erişebilmekte ve bu verileri paylaşabilmektedir.


<<Önceki Bölüm                                                                                                      Sonraki Bölüm>>