15 Nisan 2014

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



Bu makalede, iOS uygulamaları için sızma test metodları konu edilecektir. Konu edilen cihazlar, Jailbreak edilmiş iPhone 3GS iOS 6.1.3. ve Jailed iPhone 4S iOS 7.x sürümlerine sahiptir. Makale, Genel Bilgiler, Uygulama Trafiği Analizi ve Mahremiyet olmak üzere üç ana başlık içermektedir. İlk iki başlık iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 1. Bölüm'de, üçüncü başlıksa  iOS Tabanlı Uygulamalar İçin Sızma Testi Metodu - 2.Bölüm'de yer almaktadır.

1. Genel Bilgiler   


 Mobil telefonların her geçen gün yaygınlaşmasıyla birlikte, bu telefonlar için geliştirilen mobil uygulama sayısında da bir hayli artış olmuştur. Artık ister sosyal medya ile ilgili olsun, ister oyun, isterse hayatınızı kolaylaştırabilecek diğer konularla ilgili olsun, hemen hemen her alana ilişkin mobil uygulama hattâ uygulamalar bulmak mümkündür. 
Apple tarafında üretilen mobil telefonlar, iOS adı verilen bir işletim sistemine sahiptir. iOS üzerinde geliştirilebilecek uygulamaları, şu şekilde sınıflandırabiliriz:
1.       Web Tabanlı Uygulamalar – JavaScript, CSS, HTML teknolojileri ile geliştirilen uygulamalar
2.       Native Uygulamalar – Objective-C, Cocoa Touch ile geliştirilen uygulamalar
3.       Hibrid Uygulamalar

1.1.   Uygulama Dağıtım Modeli


iOS’ta geliştirilen birçok uygulama, Apple tarafından sağlanan geliştirici araçları yardımıyla geliştirilmekte ve yine bir simülatör yardımıyla test edilebilmektedir. Her ne kadar simülatörler uygulamanın fonksiyonel testleri için iyi bir çözüm gibi görünse de, gerçek bir aygıtın sahip olduğu kimi niteliklere sahip olmadıkları için yeterli bir test ortamı sağlayamamaktadırlar.
iOS tabanlı aygıtlara, bilinen ya da güvenilir bir otorite tarafından imzalanmamış uygulamalar, normal şartlar altında(jailbreak yapılmadan), yüklenememektedir (Mandatory Code Signing). Bu sebeple, yukarıda belirtilen nedenlerle uygulamanın gerçek bir aygıt üzerinde test edilebilmesi için, Apple Uygulama Geliştirici Programlarına katılmak ve katılım sonrası verilen provizyon profil dosyasını test aygıtına yüklemek gerekmektedir. Bu provizyon dosyası test aygıtını yapılandırarak, uygulama geliştirici tarafından imzalanmış olan uygulama kodunu kabul etmektedir ve böylelikle uygulama test aygıtına yüklenebilmektedir.

Provizyon profiline göre uygulama dağıtım modeli 5’e ayrılmaktadır:

1.1.1.      Tek Aygıt Dağıtımı (Single Device Distribution)


Bu modelde, uygulama, sadece belirli bir UDID’ye sahip test aygıtına kurulabilmekte, diğer aygıtlara kurulamamaktadır. Uygulamanın tek bir aygıtta test edildiği durumlar için uygundur.

1.1.2.      Geçici Dağıtım (Ad Hoc Distribution)


iPad, iPhone veya iPod Touch dahil 100 farklı UDID’ye sahip aygıta uygulamanın yüklenebilmesi için kullanılan dağıtım türüdür. Uygulamanın çok sayıda kullanıcı tarafından test edilebilmesi amacıyla kullanılmaktadır.

1.1.3.      Kurum İçi Dağıtım (In-House Distribution)


UDID kısıtına gerek duyulmaksızın, uygulamaların yüklenebildiği dağıtım türüdür. Genellikle şirketlerin, kendi personellerinin kullanımına sunduğu uygulamalar için kullanılmaktadır.

1.1.4.    Açık Dağıtım (Over the Air - OTA Distribution)   


Uygulama geliştiriciler tarafında şirket personellerinin kullanımı için, e-posta ya da web sunucu yoluyla provizyon profillerinin dağıtıldığı türdür. Dağıtımın yapıldığı ortamın göreli olarak güvensiz olması nedeniyle, istenmeyen kişilerin erişimine açık bir dağıtım türüdür.

1.1.5.      Apple Store Dağıtımı (Apple Store Distribution)


Uygulamanın, Apple tarafında imzalanmış ve Apple Store’dan indirilebildiği dağıtım türüdür.

1.2.   Sızma Testi

Sızma testi metodları incelenirken, iOS işletim sistemi güvenliği yerine iOS uygulama güvenliği üzerinde durulacaktır. İncelenecek konular genel hatlarıyla şu şekildedir:
·         Uygulama trafiği analizi
·         Mahremiyet (Privacy) Sorunları
·         Yerel Veri Deposu (Local Data)
·         Önbelleğe Alınmış Veriler (Cache)
·         URL Şemaları
·         Push Bildirimleri

1.2.1.      Ön Hazırlık


Burada anlatılacak olan metodlarda kullanılan kimi araçlar, Apple tarafında onaylanmayan araçları içermektedir ve bunların Apple Store’dan indirilmesi ve de test aygıtına yüklenmesi mümkün değildir. Bu nedenle uygulama sızma testinde kullanacağımız aygıtı Jailbreak işlemine tâbi tutmamız ve bu işlemle birlikte yüklenecek olan Cydia deposundan ihtiyacımız olan araçları test aygıtına yüklememiz gerekmektedir.
Jailbreak işlemi sonucunda test aygıtına Apple tarafından imzalanmamış ve göreli olarak tehlikeli kodlar da yüklenebilir hâle gelmektedir. Bu nedenle testinde kullanılacak olan aygıtın, sadece sızma testi için ayrılmış bir aygıt olması önerilmektedir. Jailbreak edilmemiş bir aygıtta da sızma testi yapılması mümkün olmasına karşın, ileride de görebileceğimiz gibi, tüm test konularını kapsamak mümkün olamamaktadır.

1.2.2.      Test Araçları


Sızma testi sırasında bize lazım olabilecek olan araçlardan bazıları aşağıda verilmiştir:
·         OpenSSH
·         Adv-cmds
·         Sqlite3
·         GNU Debugger
·         Syslogd
·         Veency
·         Tcpdump
·         Grep
·         Odcctools ( otool)
·         Crackulous
·         Hackulous

1.2.3.    iOS Cihaza Bağlanmak


Normal şartlar altında iPhone dizin yapısına erişmek ve dizin içeriğini görüntülemek mümkün değildir. Ancak OpenSSH yardımıyla test aygıtımıza SSH üzerinden bağlanabilecek ve dizinlere ulaşabileceğiz. Ayrıca, aygıt üzerinde istediğimiz komutları çalıştırabileceğiz.
iPhone’da, “root” ve “mobile” olmak üzere iki kullanıcı profili bulunmaktadır. Her iki kullanıcının da parolası “alpine”dir. Biz testlerimizde “root” kullanıcısı ile test aygıtına bağlanacağız. OpenSSH yüklendikten sonra bahsedilen parolayı değiştirmeniz yerinde olacaktır.
OpenSSH’ı kurduktan sonra, bilgisayarımız ile iPhone’u aynı kablosuz ağa bağlayıp, Putty yardımıyla bağlantıyı test edebiliriz.


2. Uygulama Trafiği Analizi    

IOS uygulamalarının istemci-sunucu tabanlı bir hüviyete sahip olması ve normal bir web uygulamasıyla benzer protokolleri kullanması nedeniyle bu tür uygulamaların testi, ağ güvenliği ve web uygulama güvenliği testlerinde uygulanan test kapsamlarını içermektedir. Bu nedenlerle esas amaç, istemci-sunucu arasındaki trafiğin alınıp, olası açıkların test edilmesidir.
 iOS uygulamaları, verinin sunucuya iletiminde HTTP, HTTPS, ya da uygulamaya özel protokolleri kullanabilmektedir.
iOS işletim sistemine sahip cihazlar ya da genel anlamıyla mobil cihazların, internete kablosuz ağ (WLAN, WiFi) üzerinden bağlanmaları sebebiyle, araya giren adam(Man-in-the-Middle-MITM) saldırılarına maruz kalma ihtimalleri daha yüksektir. Mobil cihazla aynı ağa bağlı bulunan bir saldırganın, çeşitli saldırı araçları kullanarak kullanıcı oturumunu çalması olasıdır. Dolayısıyla oturum açma bilgileri gibi hassas bilgileri HTTP protokolü üzerinden açık bir şekilde ileten uygulamalarda, hassas kullanıcı bilgilerinin çalınması  riski artmaktadır.
Şimdi uygulama trafiğinin analiz edilebilmesi amacıyla, iOS cihaz üzerinde hangi ayarları yapmamız gerektiğini görelim. Yapacağımız ayarla, MITM aracı olarak kullandığımız proxy programımızda  uygulama trafiğini inceleyebileceğiz.

2.1.   Proxy Ayarları


iOS cihaz olarak kullandığımız iPhone’dan Ayarlar bölümüne giriyoruz.



Buradan Wi-Fi bölümüne geçip bağlandığımız kablosuz ağın ayrıntılarına giriyoruz.



Ayarların en alt kısmında bulunan HTTP PROXY ayarı bölümü, normalde “Kapalı” konumdadır. Bunu “Elle” konumuna getirip MITM aracımızın bulunduğu bilgisayarımızı proxy olarak göstereceğiz.



Kullandığımız proxy yazılımında da (Burp Suite) aşağıdaki ayarları yapıyoruz.


Test edeceğimiz uygulama eğer HTTP protokolü ya da diğer bir deyişle kriptolu bir protokol kullanmıyorsa (HTTPS gibi), bu ayarlamalardan sonra uygulama trafiğini inceleyebiliriz. Ancak eğer uygulama HTTPS protokolü gibi kriptolu bir protokol kullanıyorsa, uygulama trafiğinin analizi için ek bazı ayarlara daha ihtiyaç vardır.


2.1.1.    MITM Aracı(Proxy) Sertifikasının Yüklenmesi


HTTPS protokolü ile erişilen normal bir web uygulamasını düşündüğümüzde, sunucu tarafından istemci tarafa gönderilen güvenlik sertifikası, güvenilir bir sertifika otoritesi tarafından verilmemişse, tarayıcı bizi bu konuda uyaracak ve bağlantının güvenli olmayabileceğini ifade edecektir. Eğer gönderilen sertifika güvenilir bir otorite tarafından verilmişse, tarayıcı bunu otomatik olarak onaylayacak ve uygulama açılacaktır.
iOS uygulamalarında ise, uygulama geliştirici tarafından onaylanacak sertifikalara ilişkin uygulama kaynak koduna eklenmesi gereken bazı ek kod satırlarına ihtiyaç vardır. Bazı kodlama hataları, sunucu tarafından gönderilen herhangi bir sertifikanın iOS uygulamasında onaylanabilmesine ve dolayısıyla uygulamanın MITM saldırılarına karşı zafiyet içermesine sebep olabilecektir.
allowanyhttpscertificateforhost (NSURLRequest) ya da continueWithoutCredentialForAuthenticationChallenge (NSURLConnection) fonksiyon çağrılarının kullanımı, belirtilen bu duruma neden olmaktadır. Bu fonksiyonları kullanan iOS uygulamaları, sunucu tarafından yayınlanmamış herhangi bir sertifikanın kabul edilmesine neden olacaktır. Buna ek olarak, herhangi bir hatalı sertifika uyarısı da görüntülenmeyecektir. Sızma testi sırasında bu durumun kontrol edilmesi gerekmektedir.  Eğer uygulama, hatalı sertifika durumunu başarılı bir şekilde ele aldıysa ve sunucu tarafından hatalı sertifika gönderildiyse, istemci bu konuda uyarılacak ve uygulama sürdürülmeyecektir.
iOS uygulama trafiğini analiz edebilmek için bir proxy yazılımına ihtiyaç duyduğumuzdan yukarıda belirtilen proxy ayarlarını yapmıştık. Eğer uygulama HTTPS üzerinden çalışıyorsa, güvenlik sertifikası konusunda belirttiğimiz durumlar gündeme gelecektir. Çünkü istemci tarafına, erişmeye çalıştığımız iOS uygulama sunucusuun gönderdiği sertifika değil, proxy programına ait sertifika iletilecektir. İletilen bu sertifika da güvenilir bir sertifika olmadığından, uygulama sürdürülmeyecektir.
Bu durumu aşmak için, proxy yazılımının sertifikası, iOS cihazın “güvenilir sertifikalar” bölümüne eklenmelidir. Böylelikle uygulamaya, HTTPS üzerinden erişilse bile sorunsuz bir şekilde bağlantı kurulacaktır. Proxy yazılımının(Burp Suite) sertifikasını profil dosyası olarak yüklediğimizde, PortSwigger CA isimli Konfigürasyon Profili, Ayarlar -> Genel -> Profiller bölümünde görüntülenecektir.

 
Sertifikayı profil dosyası olarak yüklemek için, kendi bilgisayarımıza kuracağımız bir Apache sunucunun uygun bir dizinine sertifikayı koyma ve iOS cihaz ile bu sunucu üzerindeki sertifikaya ulaşarak sertifikayı yükleme yolunu kullanabiliriz.

2.2.   Test Aygıtı Üzerinden Analiz


Uygulamanın HTTP ya da HTTPS protokollerinden farklı bir protokol ya da daha alt seviye bir soket bağlantısı kullanması durumunda, yukarıda bahsedilen trafik analiz yöntemlerinden farklı bir yöntem kullanmak gerekecektir. Bu yöntem, iOS cihaz üzerine “tcpdump” yazılımını kurma ve uygulama trafiğini bununla kaydederek inceleme üzerine kuruludur.
Jailbreak edilmiş cihazımıza Cydia üzerinden “tcpdump” yazılımını kurduktan sonra SSH yardımıyla cihaza bağlanıp aşağıdaki örnek komutu girdiğimizde, cihaz üzerinden akan trafiği kaydedebiliriz:

tcpdump –s0 –A –nn –w trafik.pcap not port 22

Kaydettiğimiz trafik dosyasını incelemek için, WinSCP gibi bir yazılımla cihaza bağlanıp kaydettiğimiz dosyayı bilgisayarımıza kopyalıyoruz. Bu dosyayı Wireshark ile açarak kaydedilen trafiği inceleyebiliriz. Bundan sonrası Wireshark ile trafik analizi yeteneğimize kalmaktadır.


                                                                                                                                    Sonraki Bölüm>>