21 Temmuz 2013

Android Mobil Uygulama Güvenlik Testleri-II

Posted by: Fırat Celal Erdik 21 Temmuz 2013

Bir önceki mobil uygulama güvenlik testi ile ilgili makalede burp ve zap gibi proxy uygulamalar ile mobil uygulamalarda araya girip trafiğin manipule edilmesi ile güvenlik açıklıklarının tespitine değinilmişti. İlgili makaleye buradan erişebilirsiniz. Bu makalemizde ise mobil android uygulamalarına yönelik testleri fiziksel bir aygıta ihtiyaç duymadan bir emulator aracılığı ile nasıl yapılacağına değinilecektir.Testler esnasında kullanılacak emulator için android SDK uygulaması kurulmalıdır. Bu uygulama üzerinde android emulatoru ile birlikte gelmektedir. İlgili uygulama buradan indirilebilir. 


Ayrıca makalemizde .apk uzantılı android uygulamalarının android debug bridge (adb) kullanılarak komut satırından kurulması, mobil uygulamaların cache'inin incelenmesi, veritabanlarına erişimlerinin ön tanımlı bırakılmış ise parolasız erişilip erişilemediği, sql injection gibi açıklıklar ile veritabanına sızma gerçekleştirilip gerçekleştirilemeyeceği testlerine değinilecektir.

Öncelikle Android SDK Manager uygulaması kullanılarak emulatorde çalışacak yeni bir mobil aygıt hazırlamamız gerekli. Bunun için öncelikle aşağıdaki gibi mobil cihazımız için uygun ortam araçları kurulmuştur. Biz testimiz için Android 4.0.3 (API 15) araç setini kullanıyoruz.

 
İlgili uygulamalar kurulduktan sonra tools menusu kullanılarak yeni aygıt oluşturulabilir. Tools/Manage AVDs/New yolu takip edilerek aşağıdaki gibi yeni aygıt oluşturulabilir. İlgili ortamı tamamen kendi isteğinize göre kurabilirsiniz. Burada cihazınıza isim vermekten tutunda oluşturulan SD kart hafıza boyutu, kullanılacak API, android versiyon bilgisi vs. belirlenebilir.

 
Ardınan ilgili aygıt seçilerek start denildiğinde emulator ortamında mobil aygıtımız kurulmuş olacaktır. Burada dikkat edilmesi gereken snapshot seçili olması ve start ekran boyutunun ön tanımlı 4.0 dan bir miktar daha büyütülmesi. Biz uygulamayı rahat kullanabilmek için 8.0 olarak seçtik.

 
Launch dediğimizde artık hazırladığımız mobil cihazımız çalışmış olacaktır.


Mobil aygıtımızı çalıştırdıktan sonra komut satırından android debug bridge (adb) uygulamasını kullanarak mobil cihazımıza uygulama kurarak ve testlerimizi buradan gerçekleştirebiliriz. Adb aracı, komut satırından çalışan ve emulator üzerinde çalışan mobil aygıtımızla iletişim kurabileceğimiz bir uygulamadır. Detaylı kullanımı için komut satırından adb -h şeklinde kullanılabilir.

 
Adb uygulamasının en sık başvurulan kullanımlarından bazıları aşağıdaki gibidir.

adb install uygulama.apk
adb push yerel uzak
adb pull uzak yerel
adb shell
adb logcat

Biz ilgili android cihazımıza bir uygulama kurmadan önce adb ile mevcut android deviceların listesine bakarak sorunsuz bir şekilde mobil aygıtımıza erişebildiğimizi görelim. Bunun için adb devices -l komutu kullanılabilir.

Görüldüğü üzere emulator-5554 ismi ile aygıtımız listelendi. Şimdi ilgili cihazımıza bir .apk uzantılı uygulama kuralım. Bunun için adb install db.apk şeklinde bir komut veriyoruz. Aşağıda görüldüğü gibi uygulamamız kurulmuş oldu.

 
İlgili uygulamaya mobil cihazımızdan artık erişebiliriz. Bu uygulama üzerinde sql injection açıklığı olup olmadığını tespit edelim. Bunun için öncelikle DB uygulaması açılır. Apps altında aşağıdaki gibi DB ismi ile görülebilir.
 
İlgili uygulama seçilerek açıldığında aşağıdaki gibi kayıtlar girilebilen ve girilen kayıtlar içerisinden sorgulama yapılan bir mobil uygulama olduğu görülmektedir. Aşağıdaki gibi örnek bir kayıt giriyoruz.

 
İnsert diyerek ilgili kaydı veritabanına kaydedebiliriz. Ardından fetch ile istedigimiz bir kaydı sorgulayabiliriz fakat biz buraya sql injection açıklığını test edeceğimiz bazı payloadlar gönderip cevaplarını gözlemleyebiliriz. Bunun için sorgu textbox'ına şu iki payloadu gönderip cevaplarına bakalım;
bga mobile pentest' and '2'='2
bga mobile pentest' and '2'='3


Aşağıda görüleceği üzere bga mobile pentest' and '2'='2 şeklinde gönderilen payload için ilgili kaydımızı getirdi.

 
Şimdi ise bga mobile pentest' and '2'='3 şeklinde yanlış bir matematiksel ifade ile sql injection olması durumunda çalışmamasını beklediğimiz payloadu gönderiyoruz ve beklediğimiz gibi sonuç dönmüyor. 
 
Bu durumda ilgili parametrede sql injection açıklığı olduğunu tespit etmiş oluyoruz. Bu aşamadan sonra manuel veya otomatize toollar kullanılarak yerel veritabanıdaki tüm datalara erişilebilir.

Şimdi ise mobile uygulamaların local mobile cihazlardaki veritabanlarının güvenliğine yönelik sızma testine bir örnek verelim. Öncelikle adb shell komutu kullanılarak emulatordeki mobile aygıtımız üzerinde shell elde ediyoruz. Ardından cd /data/data/ dizinine girip uygulamamıza ait dizine giriyoruz. Daha sonra buradanda databases isimli dizine gidiyoruz. Burada uygulamaya ait veritabanlarını ls komutu ile listeleyebiliriz. Bu veritabanlarından herhangi birine bağlanmak için sqlite3 veritabanıadı şeklinde bir komut koşturulması gerekir. Ön tanımlı olarak android uygulamaların veritabanları parola korumasız olduğu için bu şekilde mobile uygulamalara ait veritabanları ele geçirilebilir aksi durumda kaba kuvvet saldırısı veya deneme yanılma ile sık kullanılan parolalar ile test yapılabilir.
Yukarıda bahsettiğimiz veritabanına bağlantı ile ilgili komutlar aşağıda verilmiştir. Db.apk uygulamasına ait books veritabanına parolasız doğrudan erişilebilmiştir.


Görüldüğü gibi veritabanına erişim sağlanabilmiştir. Bundan sonra mevcut tablo isimlerini görmek için .tables komutu verilebilir. İlgili uygulamamız için iki adet tablo ismi listelenmiştir. Bundan sonra normal sql cümlecikleri ile ilgili kayıtlara erişilebilir. Select * from titles; sorgusu ile ilgili tablodaki tüm datalar listelenmiştir.

 
Mobile uygulamalar bazen önemli hassas veriler aygıt diskinde tutabilir. Bunun için mobile uygulamalarda SD kart ve cache dosyalarınında incelenmesinde fayda vardır. Bunun için adb shell komutu ile komut satırı alınan mobile aygıt üzerinde cd cache komutu ile cache dizinine geçilip burada varsa dosyalar incelenebilir.

Testler esnasında karşılaşılan hatalar veya sorunlar ile ilgili detaylı loglar incelenmek istenebilir. Mobile aygıtımıza ait logları real time olarak izleyebilmek için adb logcat komutu kullanılabilir. Ardından uygulama kullanıldıkça yaptığımız her hareket karşılığında logcat ekranına loglar canlı olarak dökülecektir.

İlgili logları komut satırından değilde görsel bir uygulama ile görüntülemek ve üzerinde filtreler oluşturulmak istenirse android debug monitor çalıştırılabilir. Bunun için C:\adt-bundle\sdk\tools altındaki ddms.bat çalıştır, ardından aynı dizindeki monitor.bat dosyası çalıştırılır. Böylece  android debug montioru açılacaktır buradan görsel olarak istedigimiz uygulamaya ait logları filtreleyip yalnız o uygulamaya ait logları görüntüleyebiliriz.


Son olarak .apk uzantılı android uygulamaların nasıl decompile edilebileceğine ve class dosyalarına erişim sağlanılabileceğine değinelim. Öncelikle .apk formatındaki dosyaların oluşturulma sürecine bakılacak olursa öncelikle java kodları bytecode’lara (.class dosyaları)  dönüştürülür. Ardından dx aracı kullanılarak dalvik formatına (.dex) dönüştürülür ardından bunlar birleştirilerek .apk dosyaları elde edilir.  Android uygulamaları olan .apk dosyalarını decompile etmek için d2j-dex2jar.bat uygulaması kullanılabilir.
İlgili bat dosyasına aşağıdaki gibi .apk dosyası verilir.
C:\> d2j-dex2jar.bat db.apk
d2j-dex2jar.bat aracı ile decompile edilen .apk uzantılı uygulama .jar uzantılı bir dosya oluşturacaktır. Bu dosya zip uygulaması ile veya java decompiler uygulaması ile açılırsa ilgili class dosyalarındaki kaynak kodlara erişim sağlanabilir ve güvenlik testlerine buradan devam edilebilir.  Java decompile rile açılmış bir .jar dosyasına ait .class dosyaları aşağıdaki ekran görüntüsünde verilmiştir.


























F. Celal Erdik <celal.erdik@bga.com.tr>

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.

Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.