iOS
ortamlardaki uygulamalara yönelik sızma testleri ile ilgili ikinci
makalemizde sunucu tarafı testlerinden ziyade mobil uygulama clientı
üzerindeki testlere değinilecektir. Konuyla ilgili ilk makaleye buradan erişebilirsiniz.
İlk
olarak mobil cihazlar üzerinde tutulan veya uygulamalar aracılığı
kullanılan, mahremiyet açısından sıkıntılara sebep olabilecek hassas
bilgilerin olup olmadığı tespit edilebilir. Ve bunlar çeşitli risk
seviyesinde raporlanabilir. Örneğin UDID(Uniq device idendifier) üzerinden bir örnek verilecek olursa; herhangi bir uygulama tarafından her cihaza ait uniq değer olan UDID
değerleri ele geçirilerek bu cihazların mevcut coğrafi konumları takip
edilebilir.
Bu
açıdan bakıldığında uygulamaya yönelik tanımlayıcı değerlerin cihazı
değil sadece kurulu o uygulamayı tanımlayacak olmasında fayda var.
UDID'den ayrı olarak uygulamalar kullanıcıların kimliklerini belirleyen
yaş,isim,adres,lokasyon gibi bilgileri 3. parti analiz uygulamalarına
gönderebilir veya loglarında tutarak bu loglara erişim sağlayan
uygulamaların erişimine açık bırakabilir. Bu sebeple uygulama testinde
mevcut trafik iyi analiz edilmeli loglanan bilgilerde de hassas veri
araştırılabilir. İlgili durumlar uygulama kurulumu esnasında detaylı
olarak kullanıcıya bildirilmeden yapılması durumunda hak
mahrumiyetlerine sebibiyet verecektir ve ilgili durumlara pentest
raporlarında yer verilebilir.
İkinci
bir önemli husus ise mobil uygulamalar üzerinde çeşitli kimlik
bilgileri,kredi kartı bilgisi vs. gibi hassas verilerin hiç bir
maskeleme yöntemi kullanılmadan açık olarak tutulması. Geliştiriciler,
genellikle mobil uygulamaların daha performanslı çalışması amacıyla veya
sürekli erişim ihtiyacı olan temel bilgilere kolay erişim için bu tarz
kritik bilgileri çoğu zaman local mobil cihaz üzerinde tutarlar. Bu gibi
durumlarda mobil cihazların fiziksel olarak çalınmasıyla ciddi riskleri
beraberinde getirecegi aşikar. BGA olarak gerçekleştirdiğimiz mobil
uygulama testlerinde uygulamaların ortalama %80'nin kullanıcı bilgileri
gibi hassas verileri mobil cihazlarda tuttugu görülmüştür. Çoğunluğu
ise bu hassas bilgileri açık olarak tutmaktadır.
Cihazlarda tutulan hassas veriler saldırganlar tarafından çeşitli yollar kullanılarak elde edilebilir;
1. Backup dosyalarından ; Bir
iphone cihaz bilgisayardaki itunne 'a bağlandığı zaman itune otomatik
olarak mobil uygulamanın tüm yedeğini alır. Saldırganlar bu yedeklerin
bulunduğu bilgisayarları ele geçirmesi durumunda doğrudan bu verilerede
erişecektir.
2. Cihaza fiziksel erişim; mobil
aygıtlar kaybedilerek veya çaldırılarak saldırganların eline geçebilir
ve bu şekilde fiziksel erişim elde eden saldırgan ilgili cihazlara
saldırı gerçekleştirebilir ve hassas verileri ele geçirebilir.Parola
korumasıda bir güvenlik onlemi olmayacaktır. Çogu basit olan mobile
uygulama parolası çok süre almadan kırılabilir.
3.Zararlı Yazılım ; IOS'de çıkabilecek bir güvenlik açıklığını kullanan saldırgan bir malware bulaştırarak cihazdaki dosyaları ele geçirebilir.
Iphone Uygulama Dizin Yapısı;
IOS'de
uygulamalar bir dizin içerisindeki bir paketi temsil ettiği kabul
edilir. Paket, tüm uygulama kaynaklarını, binary'leri ve ilişkili tüm
dosyaları bu şekilde gruplar. Iphone cihazlarda uygulamalar mobile
kullanıcı hakları ile sandbox veya seatbelt adı verilen hapsedilmiş bir
ortamda çalıştırılırlar.
iOS
uygulamaları bir kullanıcı ile çalıştırıldığından dolayı Android UID
ayrımından farklıdır. Apple sandbox'ların çeşitli kaynaklara (network,
hardware reseource. vs. vs.) erişim limitlerini kontrol eden güzel bir
çözüm olduğunu söylemekte. Böylece her uygulama kendi sandbox'ının
içeriğine erişebilir, diğer uygulamaların sandbox'larına erişemez. Bir
uygulama iphone cihaza ilk kez kurulduğunda bu uygulama için sistem bir
home dizini, bazı anahtar alt dizinler ve güvenlik ayrıcalıklarını
ilgili uygulama sandbox'ı için oluşturur. Her sandbox yetkisiz ortamlara
erişimleri kısıtlanmıştır. Fakat her ne kadar Apple bu durumun çok
güvenli olduğunu söylesede Iphone cihazlarda jailbreakin işlemi
yapıldığınd bu koruma (sandbox koruması) devre dışı bırakılmış
olunuyor.
Bir
uygulama iphone cihaza kurulduğu zaman, bu uygulama için
/var/mobile/Applications dizininde uniq bir kimlik değeri ile bir dizin
oluşturulur ve tüm uygulama dosyaları bu alt dizinlerde tutulur.
Buradaki kimlik değerini bulmak zor olabilmektedir. Bunun için
uygulamanın kurulduğu tarihi bakmak faydalı olacaktır. Bunun için ls -lah komutu ile tarihten kimlik değeri bulunup bu dizine girilebilir.
Bir uygulamanın çalışması için gerekli tüm dosaylar bu dizin altındadır.
Genel Iphone uygulama dizin yapısı aşağıdaki gibidir;
- Appname.app ; Uygulama kodu ve statik verinin tutulduğu alt dizin
- Documents; Itunes aracılığı ile desktop ile paylaşılabilen veri.
- Library; Uygulama destek dosyaları, kütüphaneler
- Library/Preferences ; Uygulamaya özel ayarlar
- Library/Caches; Yedeklenmesine gerek olmayan, geçici cachelenmiş data
- tmp ; Geçici dosyalar
Iphonelarda uygulamalar verileri aşağıdaki herhangi birinde tutabilir;
- Plist dosyalarında
- XML dosyalarında
- Keychain
- Uygulama home dizini
- Cache
- Loglarda
Plist(property
list) binary olarak formatlanmış bir dosya yapısındadır. IOS paket
uygulamasının çalıştırılması için temel konfigrasyon ve iç içe gemiş
anahtar değerleri tutar. Plist dosyaları bir uygulamanın konfigrasyon
bilgisi ve kullanıcı özelliklerinin store edilmesi için de kullanılır.
Örneğin
oyun uygulamaları genellikle seviye(level) bilgilerini ve score
bilgilerini plist dosyalarında tutarlar. Genellikle uygulamalar plist
dosyalarını [Application's Home Directory]/documents/preferences dizininde tutarlar.
Plist
dosyaları ya XML formatında yada binary formattadır. XML dosyaları veri
tutma için en etkili araç olmamaları itibariyle, çoğu uygulama veri
tutma için plist dosyalarını kullanır. Fakat yapılan testlerde XML
dosyalarındada ilgili verilerin tutulduğu uygulamalar sıklıkla
rastlanılmakta.
Plist dosyalarında tutulan binary biçimlendirilmiş veri plist editörleri ile kolaylıkla görüntülenip değiştirilebilir. plutil
iyi bir plist editör aracıdır. Plist editorleri binary datayı XML'e
dönüştürür ve daha sonra kolaylıkla düzenlememizi sağlar. Plist
dosyaları temelde user preferences ve uygulama konfigrasyonlarının
tutulması amaçlı kullanılır , ancak bir çok uygulama cleartext olarak
kullanıcı adı ve parola bilgisini tutma veya o anki oturumla ilişkili
çeşitli bilgiler tutmak için kullanmaktadırlar.
Pentester
olarak uygulamanın home dizini altındaki tüm plist dosyaları
incelenmelidir ve hassas bilgi (kullanıcı adı , parola , kullanıcı
kişisel bilgileri, cookie v.s) aranmalıdır. Developerlar bu plist
dosyalarına herhangi bir uzantı atayabilmektedir. Bir plist dosyası cat
komutu ile içeriğine bakılarak kolaylıkla tespit edilebilir. Plist
dosyaları herzaman bplist ile başlar. Hassas dosyaların
store edilmesiyle birlikte, uygulamalar kimlik doğrulama ve
yetkilendirmeleri plist dosyalarında tuttukları değerlerle karar
verebilmektedirler. Meselar plist dosyaları incelenirken admin=0 gibi
bir plist girdisi ile karşılaşırsak bunu admin=1 yapıp uygulamayı
çalıştırdığımızda eğer uygulama yetkilendirme için kullanıcı girdilerini
düzenli kontrol etmiyorsa ve plist kayıtlarını baz alıyorsa
yetkilendirmede uygulamada admin olunabilir.
En
iyi uygulama geliştirme yöntemi plist dosyalarında hiç bir hassas bilgi
tutmamaktır. Birde yetkilendirme ve kimlik doğrulama için plist
dosyalarında tutulan değerlere göre karar verilmemelidir. Plist
dosyaları kullanıcı kontrollü girdileri içerir, bu sepeble tüm diğer
kullanıcı girdileri gibi bunlarda düzgünce kontrol edilmelidir. Wordpres
mobil uygulaması cleartext olarak kullanıcı adı ve parolayı plist
dosyalarında tutmaktaydı yakın zamanda ilgili açığın SANS tarafından
bildirilmesi ile acilen kapatıldı.
Plutil
ile TestIpadMobileApp isimli uygulamaya ait bir plist dosyası okunması
için aşağıdaki dizine girilerek ilgili plist dosyası benzer şekilde
kullanılabilir.
Celal-Erdiks-iPad:/var/mobile/Applications/6E58BE6B-B5F0-4A71-BF3E-7F0AA43E380F/Library/Preferences root# plutil com.gittigidiyor.TestIpadMobileApp.plist
Plist
dosyaları jailbreaking yapılmış ve yapılmamış tüm cihazlarda
görüntülenebilir. Jailbreak yapılmamış bir cihaz üzerinde plist
dosyaları iExplorer(Iphone Explorer) ve iBackupBot gibi uygulamalar
kullanılarak görüntülenip değiştirilebilirler. iExplorer disk modunda
iphone cihazına erişim verir ve iphone daki tüm dosyalar doğrudan
görüntüleyebiliriz. iExplorer ücretli bir uygulamadır. MAC cihazımıza bu
uygulama kurulduktan sonra ipad,iphone cihazımız USB aracılığı ile
bağlandığında doğrudan görsel olarak cihazdaki tüm uygulamalara
erişilebilir.
Bir
iphone cihaz bilgisayara bağlanır bağlanmaz itunes onun yedeğin alır.
iBackupBot ise itunes yedeklerine bağlanıp buradaki plist dosyalarını
düzenlememizi sağlar.
Jailbreak
yapılmış bir cihaz üzerinde plutil veya iFile araçlarının her ikisi ile
de plist dosyaları görüntülenip değiştirilebilir. Indirmek için cydia
kullanılabilir. iFile doğrudan iphone üzerinde plist dosyalarını
düzenlememize olanak sağlar.
Plutil ile herhangi bir plist dosyasında değişiklik yapma;
Örnek bir plist dosyası;
Celal-Erdiks-iPad:/var/mobile/Applications/2AA330B0-5B7B-4345-93E4-9FE3E3645F2D/Library/Preferences
root# plutil com.excelheritagegroup.voyager.plist { CBSessionCountKey = 50; CBWebImageCacheCachedImages = { 0a4547aacacfdf65d134c2e6cacb06c25147ae01 = 0a4547aacacfdf65d134c2e6cacb06c25147ae01; 0f1a6841cfc37d116e7a0eebdc8468cb3a9eff78 = 0f1a6841cfc37d116e7a0eebdc8468cb3a9eff78; 1772c002b7bdcb7eca1f034d097d323e869fb0eb = 1772c002b7bdcb7eca1f034d097d323e869fb0eb;
Buradaki CBSessionCountKey değerini 60 yapalım, bunun için aşağıdaki komut kullanılabilir.
plutil -key CBSessionCountKey -value 60 com.excelheritagegroup.voyager.plist
Son hali aşağkdaki gibi olacaktır;
Celal-Erdiks-iPad:/var/mobile/Applications/2AA330B0-5B7B-4345-93E4-9FE3E3645F2D/Library/Preferences
root# plutil com.excelheritagegroup.voyager.plist { CBSessionCountKey = 60;
Bir plist dosyasını xml'e dönüştürmek için;
plutil -convert xml1 com.testapp.testcorpIPad.plist
Daha sonra bu xml üzerinde gerekli değişiklikler yapılarak tekrar plist formatına dönüştürülebilir.
plutil -convert binary1 com.testapp.testcorpIPad.plist
IOS cihaz üzerinde kurulu bir programın pathini bulmak için;
Celal-Erdiks-iPad:/User root# find /User/Applications/ -iname testappname
şeklinde bir kullanım ile arama yapılabilir.
Testlerden
önce BigBoss recommended tools cydia üzerinden kurulmasında fayda var.
Otool başta olmak plutil,dd,grep gibi çeşitli araçlar otomatik
kurulacaktır.
Testlerde
statik analiz, uygulamanın kurulu olduğu path'e geçip buranın
incelenmesidir. Iphone ios uygulamalarda statik analiz ve testler için
iNalyzer aracı kullanılabilir. Bu uygulama ios uygulamaların class
dosyalarını görüntülememizi ve çalışma zamanlı analiz yapmamıza ve daha
bir çok test eylemi gerçekleştirmemize imkan sağlamaktadır. İlgili
uygulamanın kurulması için öncelikle cydia üzerinden ilgili uygulamanın
geliştiricisinin repository'si sisteme tanıtılmalıdır. Bunun için
jailbreak yapılmış ios cihaz üzerinde cydia üzerinden manage
bölümünden http://appsec-labs.com/cydia/ adres girilir. Ardından search
bölümünden iNalyzer şeklinde aratılarak ilgili uygulama kurulabilir.
/Users/Applications/Appname.app
dizini altında uygulamanın tüm içeriği bulunmaktadır. Buradaki dosyalar
kullanılarak uygulama çalışmaktadır. Bu dizin altındaki tüm diğer
dizinler (Documents,tmp ve Library) ve alt dizinler altındaki tüm
dosyalar incelenmelidir.
- sqlite veritabanı dosyaları
- property list (plist) dosyaları
- cache dosyası
- ayarlar ve program verileri
detaylı incelenmelidir.
Buralarda çeşitli hassas bilgiler(kredi kart no, özel mesajlaşmalar, kulalnıcı hesapları v.s) araştırılabilir. Daha önce belirttiğimiz üzere plist dosyalarını incelemek için plutil aracı,binary dosyaları okumak için otool aracı kullanılabilir.
Goatdroid
gömülü jetty ve derby databaselerine sahip üzerinde çeşitli güvenlik
açıklıkarını barındıran bir android mobile uygulama test ve geliştirme
ortamıdır. iGoad ise ios uygulamalarda sık karşılaşılan güvenlik
açıklıklarını gösteren ve iyiliştirmelerinde yardımcı olan bir ios test
ortam aracıdır. Owasp tarafından geliştirilen bu uygulamalar hem
güvenlik testlerinin gerçekleştirilmesinde hemde developerların güvenli
uygulama geliştirmede başvurduğu uygulamalardır.
Goatdroid aşağıaki bileşenlerden oluşmaktadır;
- Web servis ve SDK ile etkileşimli GUI
- Çeşitli güvenlik açıkları içeren kaynak kodlar
- Jetty veritabanı
- Derby veritabanı
Goatdroid
indirildikten ve zip dosyası açıkldıktan sonra goatdroid-gui.jar
dosyası çalıştırılır. Launch Configuration -> Edit Configuration
menusunden burada AVD pathi olarak Android virtual devices pathimizin
barındırıldığı path girilir. SDK path kısmına da SDK uygulamamızın
kurulu pathi girilmelidir. Duruma göre web servis portu da
değitştirilebiilr ön tanımlı olarak 8888 gelmektedir.
0 yorum:
Yorum Gönder
Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.