Mobil Uygulama Sızma Testi: Android ve iOS
Android ve iOS mobil uygulama sızma testi rehberi: OWASP MASVS, MASTG, Mobile Top 10, statik ve dinamik analiz, Frida, MobSF ve sertifika sabitleme bypass.
Mobil Uygulama Sızma Testi: Android ve iOS (OWASP MASVS / MASTG)
Hızlı Cevap
Mobil uygulama sızma testi, Android (APK) ve iOS (IPA) uygulamalarının OWASP MASVS standardına göre statik ve dinamik analizle güvenlik açıklarını ortaya çıkarmasıdır. Test; yerel veri depolama, ters mühendislik, sertifika sabitleme, API güvenliği ve IPC zafiyetlerini kapsar. Frida, Objection ve MobSF temel araçlardır.
Mobil Sızma Testi Neden Web Testinden Farklı?
Mobil uygulama, sunucuda değil kullanıcının kontrolündeki cihazda çalışır. Bu basit gerçek, tehdit modelini kökten değiştirir. Bir web uygulamasında saldırganın eline geçen tek şey HTTP trafiğidir; mobilde ise saldırgan uygulamanın ikili dosyasına (APK veya IPA), yerel dosya sistemine, çalışma zamanı belleğine ve cihazdaki tüm IPC kanallarına erişebilir.
Bu yüzden mobil sızma testi üç farklı saldırı yüzeyini birden değerlendirir:
- İstemci tarafı (uygulama ikilisi): Ters mühendislik, kod gizleme zayıflıkları, gömülü sırlar, yerel veri sızıntısı.
- Ağ tarafı (API ve trafik): Sertifika sabitleme, zayıf TLS, bozuk kimlik doğrulama, API yetkilendirme hataları.
- Cihaz tarafı (platform etkileşimi): Keystore/Keychain kullanımı, IPC, derin bağlantılar (deep link), ekran görüntüsü ve pano sızıntıları.
Genel sızma testi süreci, kapsam ve fiyatlandırma için sızma testi süreci ve fiyatı yazımıza, test türleri için sızma testi türleri ve kapsam yazımıza bakabilirsiniz. Bu makale yalnızca mobil özgü konulara odaklanır.
OWASP MASVS ve MASTG Çerçevesi
Mobil güvenliğin endüstri standardı, OWASP Mobile Application Security projesidir. İki temel bileşeni vardır:
- MASVS (Mobile Application Security Verification Standard): Ne doğrulanmalı sorusunun cevabı. Güvenlik gereksinimlerini kategorilere ayırır.
- MASTG (Mobile Application Security Testing Guide): Nasıl test edilir sorusunun cevabı. Android ve iOS için adım adım test teknikleri sunar.
MASVS Kontrol Grupları
Güncel MASVS sürümü gereksinimleri yedi ana kontrol grubunda toplar:
- MASVS-STORAGE: Hassas verinin güvenli depolanması ve sızıntının önlenmesi.
- MASVS-CRYPTO: Kriptografinin doğru kullanımı, sabit kodlanmış anahtarların olmaması.
- MASVS-AUTH: Kimlik doğrulama ve yetkilendirme mekanizmaları.
- MASVS-NETWORK: Güvenli ağ iletişimi, TLS ve sertifika sabitleme.
- MASVS-PLATFORM: Platform API'leri, IPC, WebView ve derin bağlantıların güvenli kullanımı.
- MASVS-CODE: Kod kalitesi, güncel kütüphaneler, hata ayıklama bayraklarının kapalı olması.
- MASVS-RESILIENCE: Ters mühendisliğe ve kurcalamaya karşı dayanıklılık (root/jailbreak tespiti, gizleme).
MASVS ayrıca olgunluk seviyeleri tanımlar: temel güvenlik için L1, yüksek riskli uygulamalar (bankacılık, sağlık) için L2 ve fikri mülkiyet koruması gerektiren uygulamalar için R (resilience) profili.
OWASP Mobile Top 10 (2024)
OWASP Mobile Top 10, en yaygın mobil risk kategorilerini sıralar. 2024 güncel listesi şu maddeleri içerir:
- M1 - Uygunsuz Kimlik Bilgisi Kullanımı: Sabit kodlanmış API anahtarları, parolalar ve güvensiz kimlik bilgisi yönetimi.
- M2 - Yetersiz Tedarik Zinciri Güvenliği: Güvensiz üçüncü taraf SDK'ler ve kütüphaneler.
- M3 - Güvensiz Kimlik Doğrulama/Yetkilendirme: Zayıf oturum yönetimi, atlanabilen yetkilendirme.
- M4 - Yetersiz Girdi/Çıktı Doğrulaması: Enjeksiyon, WebView üzerinden XSS.
- M5 - Güvensiz İletişim: Zayıf TLS, eksik sertifika sabitleme.
- M6 - Yetersiz Gizlilik Kontrolleri: Kişisel verinin aşırı toplanması ve sızdırılması.
- M7 - Yetersiz İkili Koruma: Kolay ters mühendislik, kod gizleme eksikliği.
- M8 - Hatalı Güvenlik Yapılandırması: Açık hata ayıklama, yanlış izinler.
- M9 - Güvensiz Veri Depolama: Hassas verinin şifrelenmemiş yerel depolanması.
- M10 - Yetersiz Kriptografi: Zayıf algoritmalar, kötü anahtar yönetimi.
Statik Analiz mi, Dinamik Analiz mi?
Mobil test iki tamamlayıcı yaklaşım kullanır. İkisi de gereklidir; biri diğerinin gözden kaçırdığını yakalar.
| Kriter | Statik Analiz (SAST) | Dinamik Analiz (DAST) |
|---|---|---|
| Çalışma şekli | Uygulama çalıştırılmadan ikili/kaynak incelenir | Uygulama cihazda çalışırken davranış izlenir |
| Yakaladığı sorunlar | Sabit kodlu sırlar, zayıf kripto, izinler, kod gizleme | Çalışma zamanı veri sızıntısı, pinning bypass, IPC kötüye kullanımı |
| Tipik araçlar | jadx, apktool, MobSF, Ghidra, class-dump | Frida, Objection, Burp Suite, Wireshark |
| Root/JB gerekir mi | Hayır | Genellikle evet (veya yeniden paketleme) |
| Avantajı | Hızlı, geniş kapsam, kaynak görünür | Gerçek davranışı kanıtlar, yanlış pozitif düşük |
| Sınırı | Çalışma zamanı davranışını göremez | Yalnızca tetiklenen kod yollarını görür |
Pratikte akış şudur: önce statik analizle hedefi haritalandırırsın (giriş noktaları, endpoint'ler, şüpheli fonksiyonlar), sonra dinamik analizle bu bulguları çalışma zamanında doğrularsın.
Android Sızma Testi
Statik Analiz: APK Decompile ve İnceleme
İlk adım APK'yı parçalarına ayırmaktır. APK aslında bir ZIP arşividir ve içinde derlenmiş DEX bytecode, kaynaklar ve manifest bulunur.
# APK'yı cihazdan çek
adb shell pm path com.hedef.uygulama
adb pull /data/app/com.hedef.uygulama-1/base.apk
# Kaynakları ve manifest'i çöz (apktool)
apktool d base.apk -o cikti_klasoru
# DEX'i okunabilir Java koduna dönüştür (jadx)
jadx -d jadx_cikti base.apk
# veya GUI ile:
jadx-gui base.apk
Manifest dosyasında öncelikli olarak şunlara bakılır:
android:debuggable="true"(hata ayıklama açık mı)android:allowBackup="true"(yedekleme ile veri sızıntısı)android:exported="true"olan Activity, Service, BroadcastReceiver ve ContentProvider'lar (IPC saldırı yüzeyi)usesCleartextTrafficve network_security_config (şifresiz trafiğe izin)- Tehlikeli izinler ve özel intent-filter'lar (derin bağlantılar)
Sabit kodlanmış sırlar için kaynak içinde arama yapılır:
# API anahtarı, parola, token kalıpları
grep -rEi "api_key|secret|password|token|aws_|firebase" jadx_cikti/
# strings.xml ve BuildConfig içinde gömülü değerler
grep -rn "https://" jadx_cikti/resources/
MobSF ile Otomatik Statik Tarama
MobSF (Mobile Security Framework) hem statik hem dinamik analizi tek arayüzde toplar. Statik tarama için:
# Docker ile MobSF çalıştır
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf
# Tarayıcıdan http://localhost:8000 adresine APK/IPA yükle
MobSF; manifest analizi, sertifika kontrolü, sabit kodlu sırlar, izin değerlendirmesi ve MASVS eşlemesini otomatik üretir. Çıktısı manuel incelemenin başlangıç noktasıdır, sonu değil.
Yerel Veri Depolama Testi
Uygulamanın hassas veriyi nasıl sakladığı en kritik konulardandır. Çalışan uygulamanın veri dizini incelenir:
# Uygulama veri dizinine eriş (root gerekir)
adb shell
su
cd /data/data/com.hedef.uygulama/
# SharedPreferences (sıkça düz metin parola/token içerir)
cat shared_prefs/*.xml
# SQLite veritabanları
find . -name "*.db"
sqlite3 databases/uygulama.db ".tables"
# Önbellek ve harici depolama
ls -la cache/ files/
Aranan zafiyetler: düz metin saklanan kimlik bilgileri, şifrelenmemiş veritabanları, harici depolamaya (SD kart) yazılan hassas veri ve loglara sızan token'lar.
Dinamik Analiz: Frida ve Objection
Frida, çalışan uygulamaya kod enjekte ederek fonksiyonları çalışma zamanında izlemeni ve değiştirmeni sağlar. Objection ise Frida üzerine kurulu, hazır komutlar sunan bir araçtır.
# Cihaza frida-server kur ve çalıştır (root)
adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server && /data/local/tmp/frida-server &"
# Çalışan uygulamaları listele
frida-ps -Ua
# Objection ile uygulamaya bağlan
objection -g com.hedef.uygulama explore
Objection oturumunda sık kullanılan komutlar:
# Keystore içeriğini dök
android keystore list
# Yerel depolamayı çalışma zamanında izle
android hooking watch class_method com.hedef.uygulama.LoginManager.checkAuth
# Tüm yüklü sınıfları listele
android hooking list classes
Root Tespiti Bypass
Güvenliği yüksek uygulamalar root tespiti yapar ve root'lu cihazda çalışmayı reddeder. Test yapabilmek için bu kontrol atlanır:
# Objection ile tek komutla root tespitini devre dışı bırak
android root disable
Daha karmaşık tespitler için özel Frida betiği yazılır. Örneğin RootBeer kütüphanesinin metodlarını kancalayıp false döndürmek:
Java.perform(function() {
var RootBeer = Java.use("com.scottyab.rootbeer.RootBeer");
RootBeer.isRooted.implementation = function() {
console.log("[+] isRooted() bypass edildi");
return false;
};
});
Sertifika Sabitleme (Pinning) Bypass
Sertifika sabitleme, uygulamanın yalnızca belirli bir sertifikaya güvenmesini sağlar ve araya girme (MITM) ile API trafiğini görmeni engeller. Test için bu atlanmalıdır:
# Objection ile evrensel pinning bypass
android sslpinning disable
Bu, OkHttp CertificatePinner, TrustManager ve yaygın pinning kütüphanelerini hedefler. Bypass sonrası Burp Suite proxy'si üzerinden tüm HTTPS API trafiği okunabilir hale gelir ve API güvenliği test edilir.
IPC ve Bileşen Testi
exported=true olan bileşenler, başka uygulamalardan tetiklenebilir. Yetkilendirme zayıfsa kimlik doğrulama atlanabilir:
# Dışa açık bir Activity'yi başlat
adb shell am start -n com.hedef.uygulama/.AdminActivity
# Dışa açık bir Service'i tetikle
adb shell am startservice -n com.hedef.uygulama/.SyncService
# ContentProvider'dan veri sorgula
adb shell content query --uri content://com.hedef.uygulama.provider/users
iOS Sızma Testi
iOS test için fiziksel bir jailbreak'li cihaz veya uygun bir test ortamı gerekir; simülatör çoğu kontrol için yetersizdir.
Statik Analiz: IPA İnceleme
IPA da bir ZIP arşividir. İçinde Payload/Uygulama.app dizini, ana ikili (Mach-O), Info.plist ve kaynaklar bulunur.
# IPA'yı aç
unzip Uygulama.ipa -d ipa_cikti
# Info.plist incele (URL şemaları, izinler, ATS ayarları)
plutil -p ipa_cikti/Payload/Uygulama.app/Info.plist
# Sınıf ve metod isimlerini çıkar
class-dump ipa_cikti/Payload/Uygulama.app/Uygulama
# İkili içinde gömülü string ve sırlar
strings -a Uygulama | grep -Ei "key|secret|token|https"
Info.plist içinde NSAppTransportSecurity (ATS) ayarlarına dikkat edilir; NSAllowsArbitraryLoads = true şifresiz veya zayıf TLS bağlantılarına izin verdiğini gösterir.
App Store'dan indirilen ikililer şifrelidir (FairPlay DRM). Statik analiz için önce şifre çözülür:
# Jailbreak'li cihazda çalışan uygulamanın şifresini çöz
frida-ios-dump -u com.hedef.uygulama
# veya dumpdecrypted/bagbak araçları kullanılır
Yerel Veri Depolama Testi (iOS)
iOS uygulamasının veri dizini incelenir. Hassas veri için şu konumlara bakılır:
Library/Preferences/*.plist(NSUserDefaults, sıkça düz metin)Documents/veLibrary/Caches/altındaki SQLite veritabanları- Keychain (parolalar ve token'lar için doğru yer, ama erişim sınıfı yanlışsa risk)
# Objection ile iOS Keychain'i dök
ios keychain dump
# NSUserDefaults içeriğini görüntüle
ios nsuserdefaults get
Keychain erişim sınıfı kritiktir: kSecAttrAccessibleAlways veya ...AfterFirstUnlock yerine ...WhenUnlockedThisDeviceOnly kullanılmalıdır; aksi halde yedeklerden veya kilitliyken veri sızabilir.
Dinamik Analiz: Frida ve Objection (iOS)
# Cihazdaki uygulamaya bağlan
objection -g com.hedef.uygulama explore
# Yüklü sınıfları ara
ios hooking list classes
# Belirli bir metodu izle
ios hooking watch method "-[LoginViewController validatePassword:]" --dump-args --dump-return
Jailbreak Tespiti Bypass
# Objection ile jailbreak tespitini devre dışı bırak
ios jailbreak disable
Manuel bypass için tipik kontroller hedeflenir: /Applications/Cydia.app varlığı, fork() çağrısının başarısı, yazılabilir sistem dizinleri. Frida ile bu kontrolleri döndüren fonksiyonlar kancalanır.
Sertifika Sabitleme Bypass (iOS)
# Objection ile pinning bypass
ios sslpinning disable
Bu komut TrustKit, AFNetworking ve NSURLSession tabanlı pinning'i hedefler. Sonrasında Burp Suite veya mitmproxy ile API trafiği incelenir.
Android ve iOS Test Farkları
İki platform aynı MASVS hedeflerini paylaşsa da teknik detaylar farklıdır.
| Konu | Android | iOS |
|---|---|---|
| Paket formatı | APK (ZIP + DEX) | IPA (ZIP + Mach-O) |
| Decompile aracı | jadx, apktool | class-dump, Hopper, Ghidra |
| Güvenli depo | Keystore + EncryptedSharedPreferences | Keychain + Data Protection |
| IPC mekanizması | Intent, ContentProvider, Service | URL şeması, Universal Link, XPC |
| Root/JB testi | adb + frida-server kolay | Jailbreak'li cihaz zorunlu, daha kısıtlı |
| İkili şifreleme | Yok (DEX açık) | FairPlay DRM (önce çözülür) |
| Cihaz erişimi | adb açık ve esnek | Daha kapalı, sınırlı erişim |
| Yan yükleme | Kolay (apk install) | Sertifika/profil gerekir |
Genel kural: Android testi araç çeşitliliği ve açık ekosistem sayesinde daha erişilebilirdir; iOS testi cihaz, jailbreak ve imzalama kısıtları nedeniyle daha çok ön hazırlık ister.
API Güvenliği: Mobil Testin Kalbi
Mobil uygulamaların büyük çoğunluğu bir backend API ile konuşur ve gerçek iş mantığı orada yaşar. Pinning bypass edildikten sonra trafiği inceleyerek şunlar test edilir:
- Bozuk nesne seviyesi yetkilendirme (BOLA/IDOR):
userIdparametresini değiştirerek başka kullanıcının verisine erişim. - Zayıf kimlik doğrulama: Tahmin edilebilir token, süresiz oturum, yenileme token'ı kötüye kullanımı.
- Aşırı veri ifşası: API'nin istemciye gereğinden fazla alan döndürmesi.
- Hız sınırı eksikliği: Kaba kuvvet ve numaralandırmaya açıklık.
- İş mantığı atlatma: İstemci tarafında yapılan kontrolün sunucuda tekrarlanmaması.
Unutulmamalıdır: istemcide yapılan her kontrol atlatılabilir. Güvenlik kararları her zaman sunucu tarafında doğrulanmalıdır.
KAOS ile Mobil Güvenlik Testi Otomasyonu
DSET'in yapay zeka destekli ofansif güvenlik ajanı KAOS yapay zeka güvenlik motoru, yetkili mobil testlerde manuel çalışmayı hızlandırır. KAOS mobil tarafta şunları otomatikleştirir:
- APK/IPA statik analiz: İkilinin otomatik çözümlenmesi, sabit kodlu sırların, zayıf kripto kullanımının ve riskli izinlerin MASVS kontrollerine eşlenmesi.
- API trafiği inceleme: Pinning bypass sonrası yakalanan trafikte yetkilendirme ve kimlik doğrulama zafiyetlerinin tespiti.
- Exploit üretimi ve doğrulama: Tespit edilen açıkların kanıt (PoC) ile doğrulanması; yanlış pozitif üretmeden, gerçek sömürülebilirliğin gösterilmesi.
- Sürekli regresyon testi: Her yeni sürümde aynı zafiyetlerin geri gelip gelmediğinin otomatik kontrolü.
Önemli ilke: KAOS yalnızca yetki dahilindeki testlerde, müşteri onayıyla ve tanımlı kapsamda çalışır. Amacı uzman analisti değiştirmek değil, tekrarlayan işi otomatikleştirip uzmanın derin manuel incelemeye odaklanmasını sağlamaktır. Test metodolojimiz PTES metodolojisi ile uyumludur.
Mobil Sızma Testi Akışı (Özet)
- Kapsam ve yetki: Hedef uygulama sürümleri, backend endpoint'leri ve test edilecek hesaplar netleştirilir.
- Statik analiz: APK/IPA decompile edilir, MobSF taranır, manifest/Info.plist ve sabit kodlu sırlar incelenir.
- Ortam hazırlığı: Root/jailbreak'li cihaz, frida-server, proxy ve sertifika kurulur.
- Dinamik analiz: Root/JB ve pinning bypass yapılır, Frida ile çalışma zamanı izlenir.
- Veri ve IPC testi: Yerel depolama, Keystore/Keychain ve dışa açık bileşenler test edilir.
- API testi: Yakalanan trafikte yetkilendirme, kimlik doğrulama ve iş mantığı denetlenir.
- Raporlama: Bulgular MASVS/Mobile Top 10'a eşlenir, PoC ve düzeltme önerileriyle sunulur.
Sıkça Sorulan Sorular
Mobil sızma testi için cihazın root veya jailbreak olması şart mı?
Statik analiz için gerekmez; APK/IPA dosyası bilgisayarda incelenir. Ancak dinamik analiz (Frida ile çalışma zamanı izleme, yerel depolama erişimi, pinning bypass) için root'lu Android veya jailbreak'li iOS cihaz pratikte zorunludur. Alternatif olarak yeniden paketleme ve Frida Gadget enjeksiyonu kullanılabilir, ama bu daha kısıtlıdır.
Sertifika sabitleme (pinning) bypass yasal mı?
Kendi uygulamanızda veya yazılı yetki aldığınız bir uygulamada, tanımlı kapsam içinde test amacıyla yapıldığında meşrudur. Yetkisiz bir uygulamaya karşı pinning bypass denemek veya trafiğine müdahale etmek yasa dışıdır. DSET tüm testleri müşteri onayı ve sözleşmeli kapsam dahilinde yürütür.
MobSF tek başına yeterli mi?
Hayır. MobSF mükemmel bir başlangıç noktasıdır ve otomatik statik bulguları hızlıca üretir, ancak iş mantığı zafiyetlerini, çalışma zamanı veri sızıntılarını ve API yetkilendirme hatalarını yakalayamaz. Otomatik araçlar tarama yapar; gerçek zafiyetleri uzman manuel analiz ve dinamik test doğrular.
Statik analiz mi dinamik analiz mi daha önemli?
İkisi de gereklidir ve birbirini tamamlar. Statik analiz sabit kodlu sırları, zayıf kriptoyu ve kod yapısını ortaya çıkarır; dinamik analiz uygulamanın gerçekte ne yaptığını, veriyi nasıl sakladığını ve API ile nasıl konuştuğunu kanıtlar. Sadece biriyle yetinmek önemli bulguların kaçmasına yol açar.
Mobil uygulama testi ne sıklıkta yapılmalı?
Her büyük sürümde ve önemli mimari değişikliklerde test önerilir. Bankacılık, sağlık ve ödeme gibi yüksek riskli uygulamalarda yılda en az bir kapsamlı test, ek olarak sürekli regresyon testi idealdir. KAOS gibi otomasyon araçları her sürümde temel kontrolleri tekrarlayarak bu döngüyü hızlandırır.
Kaynaklar
- OWASP MASVS - Mobile Application Security Verification Standard
- OWASP MASTG - Mobile Application Security Testing Guide
- OWASP Mobile Top 10
- MobSF - Mobile Security Framework
- Frida - Dynamic Instrumentation Toolkit
DSET Bilişim ve Siber Güvenlik (kuruluş 2003). Kurumsal mobil uygulama güvenlik testi ve KAOS desteği için: +90 536 662 38 09.
Kimliğinizi doğrulayın
Yetkilendirilmiş erişim alanı. Tüm giriş denemeleri kayıt altına alınır.