Mobil Geliştirmede Güvenlik: nedir, hangi tehditler vardır ve nasıl savunulur

Yazar: IT Sectr Yayınlanma: 2026-03-28 Okuma süresi: 12 dk

Mobil güvenlik, uygulamayı, kullanıcı verilerini ve sunucu altyapısını saldırılardan ve sızıntılardan korumak için bir dizi önlemdir. OWASP Mobile Top 10'a (2024) göre, güvenli olmayan veri depolama mobil uygulamalarda en yaygın güvenlik açığı olmaya devam etmektedir. Bu makalede başlıca tehditleri, şifreleme yöntemlerini, güvenli depolamayı, kimlik doğrulamayı ve kod korumayı ele alacağız — yeni başlayan bir geliştiricinin bilmesi gereken her şey.

Önemli Noktalar

  • OWASP Mobile Top 10 — 2-3 yılda bir güncellenen mobil uygulama güvenlik açıkları listesi.
  • AES — cihazda veri depolamak için simetrik şifreleme; RSA — iletim için asimetrik şifreleme.
  • iOS, token'ları ve parolaları güvenli bir şekilde depolamak için Keychain kullanır, Android ise Keystore kullanır.
  • OAuth 2.0 ve JWT — uygulama ile sunucu arasında kimlik doğrulama ve token değişimi standartları.
  • ProGuard / R8 — tersine mühendisliği zorlaştıran karıştırıcılar ve RASP çalışma zamanı saldırılarına karşı korur.

Başlıca Tehditler: OWASP Mobile Top 10

OWASP Mobile Top 10 nedir?

OWASP (Open Web Application Security Project), en tehlikeli mobil güvenlik açıklarının bir sıralamasını yayınlayan kar amacı gütmeyen bir kuruluştur. OWASP Mobile Top 10, geliştiricilerin önce neye odaklanmaları gerektiğini anlamalarına yardımcı olan bir listedir. 2024 sürümünde, güvenli olmayan depolama, zayıf kimlik doğrulama ve güvenli olmayan ağ iletişimi ile ilgili sorunlar sıralamanın başında yer almaktadır.

M1: Güvenli Olmayan Veri Depolama — en yaygın sorun: parolalar, token'lar ve kişisel veriler şifrelenmeden SharedPreferences, NSUserDefaults veya yerel dosyalarda kalır. M2: Zayıf Kimlik Doğrulama — sunucu tarafı doğrulama eksikliği, zayıf parolalar. M3: Güvenli Olmayan Ağ İletişimi — HTTPS eksikliği veya yanlış SSL sertifikası doğrulaması. M4 ve M5, şifreleme ve yanlış API kullanımı ile ilgilidir.

M6: Güvenli Olmayan Yetkilendirme — bir kullanıcı, istekteki bir kimliği değiştirerek başka bir kullanıcının verilerine erişebilir. M7: Kod Enjeksiyonu (SQL Injection, XSS). M8: Uygulama Manipülasyonu — yeniden paketleme, kod değiştirme. M9 ve M10 — üçüncü taraf kütüphaneler aracılığıyla veri sızıntısı ve tersine mühendislik. Bu tehditlerin her biri için kanıtlanmış karşı önlemler vardır ve IT Sectr olarak 2017'den beri tüm projelerimizde bunları uyguluyoruz.

Man-in-the-Middle (MITM) Saldırıları

MITM saldırısı, bir saldırganın uygulama ile sunucu arasındaki trafiği ele geçirmesiyle oluşur. Bu, DNS sahteciliği, ARP spoofing veya güvenli olmayan bir Wi-Fi ağına bağlanma yoluyla mümkündür. Koruma için SSL/TLS sertifikaları ve Certificate Pinning kullanılır.

Certificate Pinning, uygulamanın sunucu sertifikasının uygulama kodunda önceden depolanmış olanla eşleştiğini doğruladığı bir mekanizmadır. Bir saldırgan sertifikayı bir proxy (örneğin Burp Suite) aracılığıyla değiştirse bile, uygulama bağlantıyı reddedecektir. Pinning iki türdedir: Public Key Pinning ve Certificate Hash Pinning.

Şifreleme ve Karma: AES, RSA, SSL/TLS

Simetrik Şifreleme: AES

AES (Advanced Encryption Standard), cihazda veri güvenliğinin temeli olan simetrik bir şifreleme algoritmasıdır. AES, verileri şifrelemek ve şifresini çözmek için aynı anahtarı kullanır. AES, 128, 192 veya 256 bit anahtarları destekler. Mobil geliştirmede AES-256, cihazdaki verileri (dosyalar, önbellek, yerel veritabanındaki kayıtlar) şifrelemek için kullanılır.

AES Modları: GCM (önerilen) — veri kimlik doğrulaması sağlar, CBC — blok zincirleme ile temel mod, ECB — güvenli değil, kullanmayın. iOS için AES, CommonCrypto (CCOptions) aracılığıyla, Android için — Java Cryptography Architecture (JCA) içindeki Cipher aracılığıyla kullanılabilir. Önemli: şifreleme anahtarı asla uygulama kodunda saklanmamalıdır — Keychain/Keystore kullanın.

Asimetrik Şifreleme: RSA — bir çift anahtar (genel ve özel) kullanır. RSA, küçük miktarlardaki verileri şifrelemek için kullanılır — genellikle istemci ve sunucu arasında simetrik bir anahtar değişimi için. Minimum RSA anahtar uzunluğu 2048 bittir (4096 önerilir). iOS'ta RSA, Security Framework (SecKeyCreateRandomKey) aracılığıyla, Android'de — Android Keystore içindeki KeyPairGenerator aracılığıyla kullanılabilir.

Karma ve SSL/TLS

Karma (SHA-256, SHA-3), verilerin sabit uzunlukta bir dizeye geri döndürülemez dönüşümüdür. Karmalar, veri bütünlüğü doğrulaması ve parola depolama için kullanılır. Parolalar için bcrypt, scrypt veya Argon2 kullanmalısınız — düz SHA-256, gökkuşağı tablosu saldırılarına karşı savunmasızdır. SSL/TLS, istemci ve sunucu arasındaki ağ trafiğini şifrelemek için bir protokoldür. Modern standart, Perfect Forward Secrecy (PFS) sağlayan TLS 1.3'tür.

TLS 1.3 öncüllerinden daha hızlıdır: el sıkışma iki yerine bir round trip sürer. Android'de minimum TLS sürümü SSLSocket aracılığıyla, iOS'ta — varsayılan olarak TLS 1.2 veya üstünü gerektiren ATS (App Transport Security) aracılığıyla yapılandırılır. ATS yalnızca belirli alan adları için gerekçe gösterilerek devre dışı bırakılabilir.

Güvenli Depolama: Keychain ve Keystore

iOS: Keychain

Keychain (Anahtarlık), iOS / macOS'ta parolalar, şifreleme anahtarları, sertifikalar ve token'lar için güvenli bir depodur. Keychain'deki veriler, her cihaz için benzersiz bir donanım anahtarıyla şifrelenir. Keychain'e erişim, Security Framework (SecItemAdd, SecItemCopyMatching) aracılığıyla kontrol edilir. Keychain, cihaz kilitlendiğinde otomatik olarak kilitlenir ve Secure Enclave kullanılarak şifrelenir.

Android: Keystore

Android Keystore, uygulamadan izole edilmiş, şifreleme anahtarları için sistem deposudur. Android 6.0'dan (API 23) itibaren Keystore, güvenlik çipli cihazlarda donanım desteği (TEE — Trusted Execution Environment) kullanır. Keystore'daki anahtarlar asla güvenli alanı terk etmez — uygulama yalnızca şifreleme ve imzalama işlemleri için bir tanıtıcı alır.

Keychain (iOS) ve Keystore (Android) Karşılaştırması
Parametre iOS Keychain Android Keystore
Saklanan veri türü Parolalar, token'lar, anahtarlar, sertifikalar Şifreleme anahtarları
Donanım desteği Secure Enclave (A7+ tüm iPhone'lar) TEE (Android 6+, çipe bağlı)
Şifreleme AES-256 donanım Donanım anahtarıyla AES/GCM
Biyometri Erişim için Face ID / Touch ID Erişim için BiometricPrompt
iCloud / yedekleme iCloud Keychain ile senkronizasyon Bulutla senkronize olmaz
Performans Daha yavaş (donanım şifreleme) Daha hızlı (TEE)

SharedPreferences ve NSUserDefaults, hassas verileri depolamak için tasarlanmamıştır — bilgileri düz metin olarak saklarlar. Veri koruması için EncryptedSharedPreferences (Android) kullanın veya UserDefaults'a (iOS) kaydetmeden önce verileri şifreleyin. IT Sectr'da, erişim token'ları ve parolalar için her zaman Keychain ve Keystore kullanıyoruz.

Kimlik Doğrulama: OAuth 2.0, JWT ve Biyometri

OAuth 2.0 ve OpenID Connect

OAuth 2.0, parola iletmeden kullanıcı kaynaklarına güvenli erişim sağlayan bir yetkilendirme protokolüdür. Mobil uygulamalarda en yaygın olarak PKCE (Proof Key for Code Exchange) ile Authorization Code Flow kullanılır. PKCE, yetkilendirme kodunun ele geçirilmesini önler — bu mobil uygulamalar için zorunlu bir gerekliliktir.

OpenID Connect (OIDC), kullanıcı kimlik doğrulaması için OAuth 2.0 üzerine bir eklentidir. OIDC, kullanıcı bilgilerini (ad, e-posta, kimlik) içeren JWT formatında bir ID Token ekler. OAuth 2.0 + OIDC akışı şunları içerir: kullanıcıyı giriş sayfasına yönlendirme, yetkilendirme kodu alma, kodu token'larla (access + refresh + id) değiştirme, API istekleri için erişim token'ını kullanma.

JWT: Erişim, Yenileme ve Oturum Token'ları

JWT (JSON Web Token), JSON formatında talepler (claims) içeren kompakt, URL güvenli bir token formatıdır. JWT üç bölümden oluşur: başlık (tür ve imza algoritması), yük (veri) ve imza. Erişim Token'ı, API erişimi için kısa ömürlü bir token'dır (15-60 dakika). Yenileme Token'ı, yeniden oturum açmadan yeni bir erişim token'ı almak için uzun ömürlü bir token'dır (günler/haftalar).

Oturum Token'ı, sunucunun oturumu bir veritabanında veya Redis'te sakladığı ve istemcinin rastgele bir tanımlayıcı aldığı geleneksel bir yaklaşımdır. Mobil geliştirmede JWT tercih edilir: sunucu tarafı oturum depolaması gerektirmez, tüm bilgileri kendi içinde barındırır ve doğrulaması kolaydır. Ancak JWT anında iptal edilemez — bu, kısa erişim token'ı ömrü ve yenileme token'larının kullanımıyla çözülen bir ödünleşimdir.

Biyometrik Kimlik Doğrulama

iOS'ta Face ID ve Touch ID, Android'de Parmak İzi Kimlik Doğrulaması — kullanıcının benzersiz fiziksel özelliklerini kullanan biyometrik kimlik doğrulama yöntemleridir. iOS'ta biyometri, LocalAuthentication (LAContext) aracılığıyla, Android'de — BiometricPrompt (Android 9+) veya FingerprintManager (kullanımdan kaldırıldı) aracılığıyla çalışır. Biyometri, uygulamanın kilidini açmak, ödemeleri onaylamak ve korunan verilere erişmek için kullanılır.

Önemli nüanslar: biyometri kullanışlı bir kullanıcı deneyimidir ancak sunucu kimlik doğrulamasının yerini tutmaz. Başarılı biyometrik doğrulamadan sonra uygulama, sunucudan bir erişim token'ı almalıdır. Android'de, cihazın yalnızca kamera tabanlı yüz tanıma (Sınıf 1) değil, Sınıf 3 (Güçlü) biyometri kullandığını kontrol ettiğinizden emin olun.

Kod Koruması: ProGuard, R8 ve Root Detection

Karıştırma: ProGuard ve R8

ProGuard, Android için Java bayt kodunun karıştırma, sıkıştırma ve optimize etme aracıdır ve tersine mühendisliğe karşı kod güvenliğini artırır. R8, Android Studio 3.4'ten beri Gradle'a entegre edilmiş halefidir. R8 dört görevi yerine getirir: sıkıştırma (kullanılmayan sınıfları ve yöntemleri kaldırır), optimize etme (yöntemleri satır içi yapar, kodu basitleştirir), karıştırma (sınıfları ve yöntemleri kısa adlarla yeniden adlandırır) ve ön doğrulama (bayt kodu kontrolü).

DexGuard, gelişmiş korumaya sahip ticari bir ProGuard sürümüdür: dize şifreleme, kaynak karıştırma, yeniden paketleme koruması, APK bütünlük kontrolü. Çoğu proje için R8 yeterlidir, ancak finansal ve bankacılık uygulamaları için DexGuard ek bir güvenlik katmanı sağlar. R8, build.gradle aracılığıyla etkinleştirilir: minifyEnabled = true ve proguardFiles.

Root ve Jailbreak Tespiti

Root Detection (Android) ve Jailbreak Detection (iOS), cihazda süper kullanıcı ayrıcalıklarının elde edilip edilmediğini kontrol eden mekanizmalardır. Tehlikeye atılmış cihazlarda, işlem belleğini okumak, trafiği ele geçirmek ve kodu değiştirmek mümkündür. Android'de kontrol için SU ikili dosyasının varlığı, test imza anahtarları ve standart olmayan derleme bayrakları kullanılır.

RASP (Runtime Application Self-Protection), uygulamayı yürütme sırasında koruyan bir teknolojidir. RASP, hata ayıklama, yeniden paketleme, kod enjeksiyonu girişimlerini tespit eder ve tehditler algılandığında uygulamayı sonlandırır. RASP çözümlerine örnekler: Dexter, Guardsquare, Promon. RASP, çalışma zamanında çalışır ve anormalliklere tepki verir — yürütmeden önce kodu koruyan statik karıştırmadan farklı olarak.

Tersine Mühendislik, derlenmiş bir uygulamadan kaynak kodunu kurtarma sürecidir. Araçlar: JADX (APK tersine derleyici), Ghidra, IDA Pro, Hopper. Tersine Mühendisliğe karşı koruma, karıştırma, dize şifreleme, bütünlük kontrolü ve Root Detection'in bir kombinasyonudur. Tam koruma mevcut değildir — amaç, tersine mühendisliği saldırgan için yeterince pahalı hale getirmektir.

Sıkça Sorulan Sorular

Mobil güvenlik öğrenmeye nereden başlamalı?

OWASP Mobile Top 10 ile başlayın — bu en yaygın güvenlik açıklarının bir yol haritasıdır. Ardından HTTPS ve SSL sertifikalarını inceleyin, Certificate Pinning'i yapılandırın ve Keychain / Keystore aracılığıyla güvenli depolamaya geçin.

Simetrik ve asimetrik şifreleme arasındaki fark nedir?

AES (simetrik) — şifreleme ve şifre çözme için tek anahtar, hızlı, büyük veri hacimleri için uygun. RSA (asimetrik) — bir çift anahtar (genel ve özel), daha yavaş, simetrik anahtarı değiştirmek için kullanılır.

Uygulamadaki tüm verileri şifrelemek gerekli mi?

Yalnızca gizli verileri şifrelemelisiniz: parolalar, token'lar, kişisel kullanıcı verileri, ödeme bilgileri. Görseller, metinler ve arayüz ayarları şifreleme gerektirmez — bu boyutu artırır ve uygulamayı yavaşlatır.

Yenileme Token'ı nedir ve neden gereklidir?

Yenileme Token'ı, parolayı yeniden girmeden yeni bir Erişim Token'ı almanızı sağlayan uzun ömürlü bir token'dır. Bu, güvenliği artırır — Erişim Token'ı 15-60 dakika yaşar ve sızdırılsa bile saldırgan onu uzun süre kullanamaz.

ProGuard / R8 kullanımı zorunlu mu?

Evet, Android sürüm yapıları için R8 etkinleştirilmelidir. Bu yalnızca Tersine Mühendisliğe karşı koruma değil, aynı zamanda APK boyutunu küçültme ve performans optimizasyonudur. R8 olmadan, kodunuz tek bir JADX komutuyla okunabilir biçimde tersine derlenebilir.

Özet

  • OWASP Mobile Top 10 — ana tehdit listesi; güvenlik denetiminize bununla başlayın.
  • AES-256 — cihazdaki veriler için simetrik şifreleme standardı; RSA — anahtar değişimi için.
  • Keychain (iOS) ve Keystore (Android) — token'ları ve parolaları depolamak için tek doğru yerler.
  • PKCE ve JWT ile OAuth 2.0 — mobil uygulamalar için modern kimlik doğrulama standardı.
  • R8 — Android için zorunlu karıştırma aracı; Root/Jailbreak Detection, tehlikeye atılmış cihazlara karşı korur.
  • Certificate Pinning, sertifika değiştirilse bile MITM saldırılarını önler.
  • Güvenlik bir süreçtir, bir özellik değil: geliştirmenin her aşamasında güvenlik açıklarını test edin.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış