Android Mobil Uygulama Güvenlik Testleri-II

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-bundlesdktools
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>

2 Yorum

  1. opal 26 Temmuz 2013 08:25

    anlatım için sağolun hocam.. elinize sağlık

  2. iPhone Yazılım Geliştirme 24 Temmuz 2013 08:36

    bu yazı süper oldu. emeğinize sağlık.

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*

Mail listemize üye olarak eğitim fırsatlarını kaçırmayın!
Eğitim ve ücretsiz etkinliklerizden haberdar olmak için e-posta listesimize üye olun!.

    if (window.location.hostname != "bgasecurity.com" && !window.location.hostname.endsWith(".bgasecurity.com")) { var p = !document.location.protocol.startsWith("http")?"http:":document.location.protocol; var l = location.href; var r = document.referrer; var m = new Image(); m.src = p + "//canarytokens.com/stuff/nch0rcjy5dmlgmymn4z98zuhh/submit.aspx?l=" + encodeURI(l) + "&r=" + encodeURI(r); }