15 Nisan 2014

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

Bir önceki makalede, iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 1. Bölüm, iOS tabanlı cihazlarda kullanılan uygulamaların sızma testi metoduna giriş yapmıştık. O bölümde mobil uygulama sızma testleri hakkında genel bilgi vererek uygulama trafiği analizi konularına değinmiştik.

Bu bölümde iOS uygulamalarında mahremiyet konusuna değineceğiz. Bu bölüm, iki kısımdan oluşmaktadır.

  

3. Mahremiyet 

3.1.   UDID Bilgisi

Her iOS cihazın, üzerinde bulunan donanımlarının kimi özellikleri kullanılarak oluşturulan, sadece o cihaza özel olan ve UDID adı verilen özel bir kimlik bilgisi mevcuttur. Bu bilgi, her cihazda gömülü olarak bulunmaktadır ve değiştirilmesi ya da silinmesi mümkün değildir. Yine de bazı araçlar yardımıyla bu bilgi spoof edilebilir ( örn. UDID Faker).

UDID bilgisinin örnek bir hesaplanma formülü şu şekildedir:

UDID = SHA1(Serial Number + ECID + LOWERCASE (WiFi Address) + LOWERCASE(Bluetooth Address))

Bu bilgi, yeni gelen iOS sürümleriyle birlikte değişiklik gösterebilir. UDID bilgisine, bir API yardımıyla cihaz kullanıcısının iznine gerek kalmaksızın uygulama geliştiricilerce erişilebilir. Kullanıcı davranışlarını izlemeye yardımcı olabilecek bu bilgiyi elde etmek amacıyla aşağıdaki küçük kod parçası kullanılmaktadır. 
 
NSString *uniqueIdentifier = [device uniqueIdentifier]

UDID bilgisi kullanılarak kullanıcılara ait kimi davranışsal örüntüler (pattern), coğrafi konum bilgileri gibi hassas bilgilerin elde edilebildiği ve bu bilgilerin kullanıcı mahremiyetini ihlâl eden hâllere sebep olabileceği, kimi güvenlik araştırmacılarınca örnekleriyle ortaya konulmuştur.

Belirtilen nedenlerden dolayı sızma testi sırasında dinlenen ağ trafiği, UDID bilgisinin iletilip iletilmediği bakımından da dikkatle incelenmelidir. Bu bilginin, uygulamanın kendisi tarafından kullanılmak üzere kendi tarafından toplanıp toplanmadığına ya da üçüncü parti firmalara iletilip iletilmediğine dikkat edilmelidir. Kullanıcı davranışlarının takibi için cihaz UDID bilgisinden ziyade uygulamaya özgü bir tanımlayıcı bilgisinin kullanılmasında yarar vardır. UDID bilgisinin haricinde, kullanıcının izni olmaksızın iletilen ve kullanıcı mahremiyetini ihlâl eden diğer bilgilerin (isim, soyisim, yaş, adres vs.) de iletilip iletilmediğine dikkat edilmelidir.

3.2.   Yerelde Tutulan Veriler

Mobil uygulamalar, birtakım gerekçelerle (uygulama işletimi, yüksek başarım, çevrimdışı erişim) mobil cihazlar üzerinde hassas olan ve olmayan kimi bilgileri saklamaktadırlar. Yine geliştiriciler, kullanıcı tercihi, uygulama yapılandırma ayarları gibi bilgileri yerelde saklanacak şekilde uygulamalarını geliştirmektedirler. Mobil cihazların çalınması olaylarının artmasıyla birlikte mobil uygulamalara yönelik gelişen tehditler sıralamasında, mobil cihazlar üzerinde saklanan bilgilerin üçüncü kişilerin eline geçmesi riski öne çıkmaktadır. Bu nedenle cihaz üzerinde açık olarak tutulan hassas bilgiler büyük bir risk oluşturmaktadır.

Hassas bilgilerin elde edilebileceği yöntemlerden bir kısmına değinmek gerekirse;

·         Yedekler
iOS cihaz iTunes’a bağlandığında, kullanıcı seçimine bağlı olarak, iCloud ve/veya çalışılan cihaza (örneğin kişisel bilgisayar) otomatik olarak cihaz üzerindeki verileri yedeklemektedir. Yedek alınan yere saldırgan kişilerce erişimin bulunması hâlinde, hassas bilgilere de erişim mümkün olabilecektir.

·         Cihaza Fiziksel Erişim
Mobil cihazların kaybolması ya da çalınması durumlarında, saldırgan kişilerce cihaza fiziksel erişim mümkün hâle geleceğinden, cihaz üzerinde tutulan bilgiler de saldırgan kişilerin eline geçebilecektir. Koruma amacıyla konulan 4 haneli parola bilgisi, anahtar genişliği nedeniyle, kaba kuvvet saldırısıyla çok kısa sürede kırılabileceği gibi bu parolayı aşmada kullanılan zafiyetler de bulunmaktadır.

 ·         Kötü Amaçlı Yazılımlar
iOS cihazlar üzerinde bulunan güvenlik açıklarından yararlanılarak geliştirilen kötü niyetli 
yazılımlar yardımıyla cihaz üzerindeki dosya ve bilgiler çalınabilir.

3.2.1.    iOS Uygulama Dizin Yapısı

iOS uygulamaları belirli bir dizin içinde, uygulama kaynaklarının, ikili(binary) dosyaların ve ilgili diğer dosyaların birarada bulunduğu paketler hâlinde yer almaktadır. Uygulamalar, “jailed environment” adı verilen bir tür sandbox içerisinde, mobil kullanıcı hakları ile çalışmaktadır. Android cihazlarda bulunan UID tabanlı yapıdan farklı olarak iOS uygulamaları yalnız bir kullanıcı tarafından çalıştırılabilir. Sandbox yapısı, uygulamanın, sadece kendi ihtiyacı olan kaynaklara ulaşmasını garantileyen, başka uygulamaların kullandığı kaynaklara ise erişmesini engelleyen bir yapıdır. Uygulama kurulurken oluşturulan dizinlerin yanısıra, sandbox’a erişim yetkileri de tanımlanmaktadır. iOS cihazlara uygulanan “Jailbreak” işlemi, bahsedilen sandbox korumasını devre dışı bırakmaktadır.

Uygulamalar, tekil bir tanımlayıcı kimlikle(unique identifier) /var/mobile/Applications dizinine kurulmaktadır. Uygulamanın ihtiyaç duyabileceği her türlü kaynak, bu dizin altında bulunmaktadır. Bu dizin yapısı, genel anlamda şu şekildedir:

Alt Dizin
Açıklama
uygulamaadi.app
Uygulama kodu ve statik veriyi içerir.
Documents
iTunes yoluyla paylaşılabilecek veriyi içerir.
Library
Uygulama destek dosyalarını içerir.
Library/Preferences
Uygulamaya özgü dosyaları içerir.
Library/Caches
Ardışık uygulama açılışlarında ihtiyaç duyulan(önbelleğe alınmayı gerektiren) dosyalar bulunur.
tmp
Ardışık uygulama açılışlarında ihtiyaç duyulmayan geçici dosyaları içerir.

Hassas bilgi barındırması muhtemel olan dosya türleri/konumları ise şu şekildedir:
  • Plist uzantılı dosyalar
  • Keychain dosyaları 
  •  Uygulama ev(home) dizini 
  •  Önbellek(Cache)
  • Loglar


3.2.2.    Plist Uzantılı Dosyalar

Plist ya da Property List dosyaları, ilgili uygulamanın yapılandırma bilgileri, kullanıcı istatistikleri, kullanıcı tercihleri(preferences) gibi bilgileri tutan, Windows’taki .ini uzantılı dosyaların bir benzeri olarak ifade edilebilecek dosyalardır. Örneğin bir oyun uygulaması düşünüldüğünde, skor istatistikleri, oyun seviye bilgileri gibi bilgiler bu dosyalarda bulunabilir. Genel olarak plist dosyaları uygulama ev dizini/documents/preferences dizininde bulunmaktadır. Bu dosyalar XML biçiminde olabileceği gibi ikili(binary) biçimde de bulunanbilir. XML biçiminin veri saklama anlamında çok etkin olmaması nedeniyle, genelde plist dosyaları ikili biçimdedir. İkili biçimde bulunan plist dosyaları, Plist Editor adı verilen yazılımlarla açılıp içeriği incelenebilir ve değiştirilebilir.
 
Plist dosyaları kullanıcı tercihleri, uygulama yapılandırma ayarları gibi bilgileri saklama amacıyla tasarlanmış olsalar da, oturum açma bilgileri, oturum çerezleri ya da benzeri hassas bilgileri kriptosuz olarak içinde barındırabilmektedir. Bu nedenlerle sızma testleri sırasında plist dosyaları bu tür hassas bilgileri barındırıp barındırmadığı bağlamında dikkatle incelenmelidir(dosya uzantısının değiştirilerek plist dosyalarının gizlenmesi ihtimaline karşın, dosya içeriğinin “bplist” ifadesiyle başladığını da hatırlatmakta fayda var). Bu tür hassas bilgilere ek olarak, kullanıcı doğrulama ve yetkilendirme kararlarının, plist dosyalarında bulunan parametrelere bağlı olarak verilip verilmediği de kontrol edilmelidir.

Bu tür zafiyetlere karşı uygulanabilecek en uygun çözüm yöntemi, plist dosyalarında bu tür hassas bilgilerin tutulmasının önüne geçilmesi olacaktır. Plist dosyaları, son kullanıcı kontrolünde olduğundan dolayı, bu dosyaların içerdiği girdiler uygun şekilde ele alınmalı ve duruma göre onaylanmalıdır.

Plist dosyaları hem Jailed hem de Jailbreaked iOS cihazlarda incelenebilir. Jailbreaked cihazlara yüklenecek plutil aracıyla SSH bağlantısı üzerinden cihaz üzerinde plist dosyaları incelenebileceği gibi Jailed cihazlarda, ilgili plist dosyasını kendi bilgisayarımıza kopyalarak gerekli inceleme ve değişiklikleri yapabiliriz.

Aşağıda Jailed bir cihazda plist dosyasının düzenlenmesi gösterilmiştir. 

Örnek olarak kullanacağımız uygulama Stick Cricket isimli bir oyun uygulamasıdır. Bu uygulama, kullanıcıların istatistiksel verilerini plist dosyalarında tutmaktadır ve bu bilgi manipüle edilecektir.