Siber Güvenlik

Android Uygulama Güvenliği Testi

Bu yazımızda Android bir uygulama için güvenlik testi yöntemleri, uygulamaları ve araçlarından bahsedeceğiz. Genel olarak bu testleri dinamik ve statik olarak ikiye ayırabiliriz.

Fatih Demirbaş |

09.01.2023

Statik yöntem uygulama, gerçek zamanlı çalışmaya başlamadan uygulama kodları ve paketini inceleyerek uygulamayı analiz etme yöntemidir. Dinamik yöntem ise uygulamanın gerçek zamanlı çalışmalarını analiz etme yöntemidir diyebiliriz.

 

Dinamik test nasıl ve hangi araçlarla yapılır bunları inceleyerek başlayalım. Ama tabii ki Android bir uygulamayı test etmek için öncelikle Android bir fiziksel ya da sanal cihaza ihtiyaç bulunmaktadır. Fiziksel cihaz yerine sanal bir emulator ile devam etmek daha kolay ve efektif olacaktır.

 

Genymotion çoğu geliştirici ve sızma testi uzmanı tarafından sık olarak kullanılan Android emulator aracıdır.

 

Buradan üzerinde çalıştığınız işletim sistemine uygun paketi indirerek kurabilirsiniz. Fakat Genymotion sanallaştırma altyapısı olarak virtualbox kullandığı için öncesinde onu kurmanız gerekmektedir. Virtualbox’u buradan işletim sisteminize uygun paketi indirerek kurabilirsiniz.

 

Genymotion kurulumunu tamamladıktan sonra burada mevcut bulunan hazır cihazları ya da ihtiyacınıza göre özel bir cihaz konfigüre ederek kullanabilirsiniz. Cihaz oluştururken Android versiyon, önbellek, çözünürlük gibi özellikleri, özel olarak belirleyebilirsiniz.

 

<adb devices komutu çıktısı>

 

Cihazımızı oluşturduktan sonra Android Debug Bridge kullanımına giriş yapabiliriz. ADB, Google'ın Android SDK'sında bulunan bir komut satırı programıdır. ADB ile Android cihazınızı bir bilgisayardan USB üzerinden kontrol edebilir, dosyaları çekebilir ya da kopyalayabilir, uygulamaları yükleyip kaldırabilir, kabuk komutlarını çalıştırabilir ve daha fazlasını yapabilirsiniz.

 

ADB’yi nasıl kuracağınıza dair detaylı içeriklere buradan ulaşabilirsiniz. ADB kurulumu tamamlandıktan sonra ADB ile canlı olarak görünen cihazlarımızı görüntüleyelim:

 

<adb devices komutu çıktısı>

 

Ek olarak birkaç önemli ADB komutuna aşina olmamız gerekiyor:

 

adb help // tüm komutları gösterme

== Adb sunucu
adb kill-server
adb start-server

== Shell
adb shell    // android cihazda shell açma ya da komut çalıştırma

== Cihazlar
adb usb
adb devices   // bağlı cihazları gösterme
adb devices -l // cihazlar (ürün/model)
adb connect <cihaz_IP:port>

== Cihaz android sürümü edinme
adb shell getprop ro.build.version.release

== LogCat
adb logcat
adb logcat -c // c parametresi(clear) cihazdaki mevcut logları siler
adb logcat -d > [kayıt_edeceğiniz_dizin] // logcat çıktısını bilgisayarınıza kayıt eder

== Dosyalar
adb push [bilgisayar_dosya_dizini] [android_dosya_dizini]    // bilgisayarınızdan android cihaza dosya kopyalar
adb pull [ndroid_dosya_dizini] [bilgisayar_dosya_dizini] // android cihazdan bilgisayarınıza dosya kopyalar

== Uygulama yükleme
adb -e install uygulama/yüklenecek/dizin/uygulama.apk

 

Şimdi de oluşturduğumuz test cihazına bir test uygulama yükleyelim. Uygulamayı Google Play marketten ya da uygulamanın apk dosyası vasıtasıyla yükleyebiliriz. Test için InsecureBank apk dosyamızı buradan indirebiliriz. Ek bilgi olarak bir uygulamanın direkt olarak apk dosyasını elde etmek istiyorsak Apkpure gibi platformlardan yararlanılabilir.

 

Elde ettiğimiz apk dosyasını direkt android emulatordeki cihaza sürükle bırak ya da adb install komutlarıyla yükleyebiliriz.

 

$ adb install </dizin/uygulama.apk>

 

Uygulamamızı kurduktan sonra şimdi de trafikleri yakalayabilmek ve manipüle edebilmek için Burp proxy aracıyla araya girebiliriz.

 

Öncelikle Burp aracındaki sertifikayı Android cihazımıza girmemiz gerekiyor. Burp aracı üzerinden Proxy > Options > Proxy Listeners alanından dinleyeceğimiz portu ayarlamalıyız. Hangi porttan dinlemek isterseniz bu porta göre değişiklik yapmalıyız. Biz burada 8080 portu üzerinden denemeler yapacağız. Ayrıca arabirim için de tüm arabirimlere göre seçim yaparsak arabirim bağımsız 8080 portuna gelen tüm trafikleri yakalayabiliriz. Aksi takdirde Android emulatörün çalıştığı ağ ile Burp üzerindeki arabirim çakışmaları yaşanabilir.

 

Android Uygulama Güvenliği

 

Ek olarak SSL trafiklerinin sorunsuz bir şekilde alınabilmesi için Android cihazımızın Burp aracının sertifikasına güvenmesi gerekir. Burada Burp aracımızdan sertifika üretip Android cihazımıza eklememiz gerekiyor.

 

Yine buradan “Import / export CA certificate” diyerek .cer uzantılı bir sertifika üretip bunu Android cihazımıza sürükle bırak ya da adb push komutları ile gönderebiliriz.

 

$ adb push burp.cer /sdcard/Downloads/burp.cer

 

Android Uygulama Güvenliği

 

Daha sonra bu sertifikaya tıklayarak sertifikayı yükleyip, cihaz üzerinde bu sertifikaya güveniyoruz.

 

Bu arada Android cihazımızdan ya da emulatörümüzden trafikleri yönlendirmek istediğimiz bilgisayara doğru proxy ayarlarını girmemiz gerekiyor.

 

Settings > Network & Internet > Wifi > AndroidWifi ayarlarını düzenleyerek Proxy seçeneğini Manual olarak değiştirip Burp aracımızın bulunduğu trafikleri yönlendirmek istediğimiz bilgisayarımızın local IP adresini girerek kaydediyoruz.

 

Android Uygulama Güvenliği

 

Şimdi SSL trafiklerin gelip gelmediği örnek bir uygulama üzerinden kontrol edelim:

 

Android Uygulama Güvenliği

 

Fakat her uygulamanın bu kadar basit bir yöntemle SSL trafiğinin alınmaması için uygulama tarafında SSL pinning gibi sıkılaştırmalar da mevcut olabiliyor. SSL pinning; uygulama trafiği için ek bir güvenlik katmanı olarak SSL sabitleme tekniğini kullanır. SSL pinning sayesinde, uygulama özel sertifikalara güvenmez ve proxy araçlarının trafiği kesmesine izin vermez. SSL pinning için de bypasslama yöntemleri mevcuttur. Burada Frida aracına bir giriş yapacağız.

 

Frida, Javascript parçacıklarını sisteme entegre eden dinamik bir araç takımıdır. Frida kullanarak SSL pinning ve root algılama vb. gibi güvenlik kontrollerini atlatabiliriz.

 

Frida kullanarak SSL Pinning Bypass

 

Öncelikle pip ile Frida araçlarını bilgisayarımıza yükleyelim:

 

$ pip install frida-tools

 

Frida’yı bilgisayarımıza yükledikten sonra Android cihazımıza uyumlu olan bir ajan gibi çalışan Frida Server yüklememiz gerekiyor.

 

Android cihazımıza uygun Frida Server indirmek için Android cihazımızın mimarisini kontrol edelim.

 

$ adb shell getprop ro.product.cpu.abi

 

Komutun çıktısındaki mimariye göre uygun Frida Server buradan indirilebilir.

 

İndirilen Frida Server yine ADB push komutları ile Android cihaza atılır.

 

$ adb push frida-server /data/local/tmp/

 

Daha sonra ilgili Frida Server ajanına gerekli yetkiler verilir.

 

$ adb shell “chmod 755 /data/local/tmp/frida-server”

 

Ardından frida-server cihaz üzerinde çalıştırılır.

 

$ adb shell “/data/local/tmp/frida-server &”

 

Frida-server aktif edildikten sonra yine Frida aracımızı kullanarak Android cihazımızda çalışan işlemleri görüntüleyebiliriz.

 

$ frida-ps -Uai

 

Android Uygulama Güvenliği

 

SSL pinning olan bir uygulamada SSL trafikleri Burp proxy aracımıza aktarmak için buradaki Javascript kodunu bilgisayarımıza kaydettikten sonra Frida ile SSL pinning atlatabiliriz.

 

$ frida -U -l pinning.js -f <app_identifier> --no-pause

 

Bu komut ardından uygulama açılacak ve SSL pinning atlatılmış olacaktır.

 

Ek olarak buradaki Javascript parçacığı ve yöntemiyle de SSL pinning atlatılabilir. Trafikler proxy aracımıza geldiğinde istekler ve trafikler dilenildiğince incelenip zafiyetler araştırılabilir.

 

Aynı zamanda yine frida-server ve objection aracı da kullanılarak bu işlem yapılabilir. Objection; bir komut satırı arabirimi de sunarak güvenlik kontrollerini atlatmayı sağlayan bir mobil keşif aracıdır. Aşağıdaki komut ile objection yükleyebiliriz.

 

$ pip install objection

 

Objection yüklendikten sonra aşağıdaki komut ile de SSL pinning bypasslanabilir.

 

$ objection -g <app_identifier> explore —startup-command ‘android sslpinning disable’

 

Böylece uygulama tekrar açılır ve istekler proxy aracı üzerinden yönlendirilir. Objection açıldığında diğer yeteneklerini de keşfedebilirsiniz.

 

Android Üzerinde Tersine Mühendislik

 

Uygulamamızın kodlarına erişmek için jadx aracı ile decompile edebiliriz.

 

Jadx, Android Dex ve Apk dosyalarından Java kaynak kodu üretmek için kullanılan bir komut satırı ve GUI aracıdır. Başlıca özelliği, Dalvik bayt kodunu (.dex) Java sınıflarına kaynak koda dönüştürmektir.

 

Jadx buradan indirebilirsiniz.

 

Apk dosyamızı jadx gui ile açarak decompile edebilirsiniz. Böylece uygulama kaynak kodlarını ve konfigürasyon dosyalarını inceleyebilirsiniz.

 

Android Uygulama Güvenliği

 

Source code bölümünde uygulamanın kodunu oluşturan dosyalar bulunur.

 

Resources bölümünde uygulama varlıkları, sertifikaları, imza bilgileri vb bilgiler bulunur.

 

AndroidManifest.xml dosyasında ise uygulamanın önemli bir parçasıdır ve uygulama yapısı bileşenleri ve izinleri gibi birçok konuda veri sağlar.

 

Genel olarak statik analiz kısmında OWASP Mobil Top 10 dokümanından faydalanabiliriz.

 

Ayrıca statik ve dinamik analiz için popüler olarak kullanılan MobSF aracı kullanılabilir.

 

Mobile Security Framework (MobSF), hem Android/iOS sızma testi hem de android uygulamalarında statik ve dinamik analizler gerçekleştirebilen ve aynı zamanda bu süreci otomatikleştirebilen ücretsiz ve açık kaynaklı bir araçtır.

 

MobSF sayfasında kurulum ve nasıl kullanılacağı hakkında detaylı açıklamalar mevcuttur.

Fatih Demirbaş |

09.01.2023

Yorumlar

Hello kity
17.01.2023 - 05:56

teşekkürler