Mobil Kod Katmanı Zafiyetleri: OWASP Mobile Top 10’dan Kritik Açıklar

Mobil kod katmanı zafiyetleri, günümüz mobil uygulama güvenliğinin en kritik sorunlarından biridir. Akıllı telefonlarımız artık sadece mesajlaşmak için değil; banka hesaplarımızı, sağlık verilerimizi, iş e-postalarımızı, fotoğraflarımızı ve hatta konum geçmişimizi de barındırıyor. Bu nedenle, kod seviyesinde yapılan küçük bir hata bile, kullanıcıların tüm kişisel verilerinin tehlikeye girmesine yol açabilir.

Bu makalede, mobil kod katmanı zafiyetlerini detaylı inceleyecek, bu açıkların nasıl sömürüldüğünü örneklerle görecek ve güvenli geliştirme pratiklerini ele alacağız.

 Mobil Kod Katmanı Zafiyeti Nedir?

Kod katmanı zafiyeti, bir mobil uygulamanın kaynak kodunda bulunan ve saldırganların sisteme yetkisiz erişim sağlamasına, veri çalmasına veya uygulamanın normal işleyişini bozmasına neden olan güvenlik açıklarını ifade eder.

Örnek riskler:

  • Tersine mühendislik (APK decompile)

  • Hassas verilerin düz okunması

  • SSL pinning atlatılması

  • Uzaktan kod çalıştırma (RCE)

Güvensiz Veri Depolama

En sık yapılan hata: hassas verilerin düz metin olarak saklanması.
Android’de SharedPreferences, iOS’ta UserDefaults verileri şifrelemeden saklarsa, cihaz rootlu/jailbreak’li olmasa bile kolayca okunabilir.

Saldırı Senaryosu (Android):

adb shell
cd /data/data/com.ornek.app/shared_prefs/
cat user_prefs.xml

Burada kullanıcı adı, token veya şifreyi görebilirsiniz.

Çözüm:

  • Android’de Keystore API

  • iOS’ta Keychain Services

  • AES-256 ile şifreleme + Base64 encoding

  • Root/Jailbreak tespiti yaparak kritik işlemleri engelleyin

Güvensiz Ağ İletişimi

HTTP kullanmak ya da SSL doğrulamasını devre dışı bırakmak, uygulamanızı MitM saldırılarına açık bırakır.

Saldırı Senaryosu:
Bir saldırgan mitmproxy veya Burp Suite ile trafiğinizi dinleyip login isteklerini görebilir.

Frida Hook Örneği (SSL Pinning bypass için saldırgan bakış açısı):

Java.perform(function() {
var SSLContext = Java.use(“javax.net.ssl.SSLContext”);
SSLContext.init.overload(‘[Ljavax.net.ssl.KeyManager;’, ‘[Ljavax.net.ssl.TrustManager;’, ‘java.security.SecureRandom’)
.implementation = function(a, b, c) {
console.log(“Bypassing SSL Pinning”);
this.init(a, null, c);
};
});

Çözüm:

  • Tüm çağrılarda HTTPS

  • SSL Pinning (sertifika doğrulaması)

  • TLS 1.2/1.3 kullanımı

Yetersiz Kimlik Doğrulama ve Yetkilendirme

Uzun ömürlü token’lar, yeniden kullanılabilir session’lar ya da yanlış yapılandırılmış biyometrik doğrulama, saldırganlara davetiye çıkarır.

Çözüm:

  • Token’lar kısa ömürlü olsun (JWT → exp süresi)

  • Refresh token mantığı kullanın

  • Çok faktörlü kimlik doğrulama (MFA) ekleyin

JWT doğrulama snippet (Node.js örneği):

const jwt = require(“jsonwebtoken”);

function verifyToken(token) {
return jwt.verify(token, process.env.SECRET_KEY, { algorithms: [“HS256”] });
}

Kod Obfuscation Eksikliği

Bir .apk dosyası kolayca decompile edilip incelenebilir. Kodunuzda API key, gizli algoritmalar veya iş mantığı düz okunuyorsa saldırgan direkt kopyalar.

Çözüm:

  • Android → ProGuard, R8

  • iOS → LLVM Obfuscator

  • String encryption + sınıf/metot isimlerini gizleme

Araç Önerisi:
JADX ile APK decompile edip test edin. Eğer kendi API key’inizi okuyabiliyorsanız, saldırgan da okur.

Güvenilmeyen Girdilerin Doğrulanmaması

Kullanıcıdan alınan veriler (URL, form input, QR, NFC) doğrulanmazsa XSS, SQL Injection, RCE mümkün hale gelir.

Android WebView örneği (tehlikeli kullanım):

webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJSInterface(), “Android”);

Bu şekilde saldırgan, Java üzerinden cihaz API’lerine erişebilir.

Çözüm:

  • addJavascriptInterface kullanımını sınırla

  • Input validation (regex, whitelist)

  • Prepared statements ile SQL sorguları

Hassas Bilgilerin Loglara Yazılması

Geliştirme sırasında Log.d("Password", password); bırakılırsa, bu bilgi Logcat ile kolayca okunur.

ADB ile log okuma:

adb logcat | grep “Password”

Çözüm:

  • Üretimde hassas veri loglamayın

  • Debug logları build pipeline’da otomatik temizleyin

Zayıf Şifreleme Algoritmaları

MD5, SHA1, DES gibi eski algoritmalar saldırganlar için çocuk oyuncağı.

Güvenli Seçenekler:

  • AES-256

  • SHA-256

  • PBKDF2 veya Argon2 (parola saklama için)

Örnek (Python AES-256 CBC):

from Crypto.Cipher import AES
import base64

cipher = AES.new(key, AES.MODE_CBC, iv)
encrypted = base64.b64encode(cipher.encrypt(pad(data.encode(), AES.block_size)))

Güvenlik Kontrollerinin Atlanması

Uygulamanız root/jailbreak tespit etmiyorsa, saldırgan Frida, Xposed veya Magisk ile kolayca bypass yapabilir.

Çözüm:

  • Android SafetyNet / Play Integrity API

  • iOS Jailbreak detection (kontrol edilen dosyalar, anormal process’ler)

Frida hook ile bypass (saldırgan bakış açısı):

Java.perform(function() {
var rootCheck = Java.use(“com.ornek.security.RootCheck”);
rootCheck.isRooted.implementation = function() {
console.log(“Bypassing root check”);
return false;
};
});

Güvenli Mobil Geliştirme İçin Altın Kurallar

  • OWASP Mobile Top 10’u ezberleyin.

  • CI/CD pipeline’a güvenlik taraması (MobSF, SonarQube) ekleyin.

  • Hardcoded credential kullanmayın.

  • Bağımlılıkları sürekli güncel tutun.

  • Kod + ağ + veri güvenliğini birlikte düşünün.

Sonuç

Mobil uygulama güvenliği, sonradan eklenen bir özellik değil; kodun kalbine yerleşmesi gereken bir refleks olmalı.
Geliştiriciler için güvenli kodlama alışkanlıkları sadece teknik bir detay değil, etik bir sorumluluk.

Kaynakça:

OWASP Mobil İlk 10 | OWASP Vakfı

Ayarlar katmanı zafiyetleri hakkında bilgi almak isterseniz : Mobil Cihazlarda Ayarlar Katmanı Zafiyeti: Görünmez Tehlike ve Alınması Gereken Önlemler

About The Author

Reply