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.
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.
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.
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.
dediğimizde artık hazırladığımız mobil cihazımız çalışmış olacaktır.
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.
uygulamasının en sık başvurulan kullanımlarından bazıları aşağıdaki gibidir.
uygulama.apk
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.
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.
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.
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.
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;
pentest’ and ‘2’=’2 şeklinde gönderilen payload için ilgili kaydımızı
getirdi.
‘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.
olduğunu tespit etmiş oluyoruz. Bu aşamadan sonra manuel veya otomatize toollar
kullanılarak yerel veritabanıdaki tüm datalara erişilebilir.
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.
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.
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.
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.
İ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.
.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.
bat dosyasına aşağıdaki gibi .apk dosyası verilir.
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>