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:

  1. M1 - Uygunsuz Kimlik Bilgisi Kullanımı: Sabit kodlanmış API anahtarları, parolalar ve güvensiz kimlik bilgisi yönetimi.
  2. M2 - Yetersiz Tedarik Zinciri Güvenliği: Güvensiz üçüncü taraf SDK'ler ve kütüphaneler.
  3. M3 - Güvensiz Kimlik Doğrulama/Yetkilendirme: Zayıf oturum yönetimi, atlanabilen yetkilendirme.
  4. M4 - Yetersiz Girdi/Çıktı Doğrulaması: Enjeksiyon, WebView üzerinden XSS.
  5. M5 - Güvensiz İletişim: Zayıf TLS, eksik sertifika sabitleme.
  6. M6 - Yetersiz Gizlilik Kontrolleri: Kişisel verinin aşırı toplanması ve sızdırılması.
  7. M7 - Yetersiz İkili Koruma: Kolay ters mühendislik, kod gizleme eksikliği.
  8. M8 - Hatalı Güvenlik Yapılandırması: Açık hata ayıklama, yanlış izinler.
  9. M9 - Güvensiz Veri Depolama: Hassas verinin şifrelenmemiş yerel depolanması.
  10. 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)
  • usesCleartextTraffic ve 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/ ve Library/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): userId parametresini 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)

  1. Kapsam ve yetki: Hedef uygulama sürümleri, backend endpoint'leri ve test edilecek hesaplar netleştirilir.
  2. Statik analiz: APK/IPA decompile edilir, MobSF taranır, manifest/Info.plist ve sabit kodlu sırlar incelenir.
  3. Ortam hazırlığı: Root/jailbreak'li cihaz, frida-server, proxy ve sertifika kurulur.
  4. Dinamik analiz: Root/JB ve pinning bypass yapılır, Frida ile çalışma zamanı izlenir.
  5. Veri ve IPC testi: Yerel depolama, Keystore/Keychain ve dışa açık bileşenler test edilir.
  6. API testi: Yakalanan trafikte yetkilendirme, kimlik doğrulama ve iş mantığı denetlenir.
  7. 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


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.