
Mobil Trafik Katmanı Zafiyetleri: Mobil Uygulamalarda Görünmeyen Tehdit
Mobil Trafik Katmanı Zafiyetleri, mobil uygulamalarda en sık karşılaşılan güvenlik açıkları arasında yer alır. SSL/TLS doğrulama hataları, sertifika pinning eksiklikleri ve şifrelenmemiş HTTP trafiği gibi sorunlar; kullanıcı verilerinin ele geçirilmesine neden olabilir. Bu rehberde, saldırganların bu katmanı nasıl istismar ettiğini ve geliştiricilerin alması gereken temel önlemleri özetliyoruz.
Trafik Katmanı Nedir ve Neden Önemlidir?
Trafik katmanı, bir mobil uygulamanın sunucu ile veri alışverişini yaptığı ağ katmanıdır. Uygulamanın giriş bilgilerinden kimlik doğrulama token’larına kadar tüm kritik veri bu katmandan geçer. Dolayısıyla burada yaşanacak bir güvenlik ihlali, hem kullanıcı gizliliğini hem de kurumsal itibarını riske atar. Bir saldırgan ağ trafiğini manipüle ederse, oturum bilgilerini çalabilir veya sahte yanıtlar üreterek kullanıcıyı yanlış yönlendirebilir. Bu nedenle mobil güvenliğin en temel kuralı, trafik katmanını sağlam bir şekilde korumaktır.
En Yaygın Mobil Trafik Katmanı Zafiyetleri
1. SSL/TLS Sertifika Doğrulama Eksikliği
Birçok geliştirici test aşamasında sertifika doğrulamasını kapatarak zaman kazandığını düşünür. Fakat bu, saldırganların araya girip sahte sertifikalarla trafiği izlemesine izin verir. Man-in-the-Middle (MITM) saldırılarında, kullanıcı hiçbir şey fark etmeden tüm veriler üçüncü bir tarafın eline geçebilir. Doğru çözüm, her zaman SSL/TLS doğrulamasını aktif tutmak ve sadece güvenilir kök sertifikalara bağlantı kurmaktır.
// GÜVENSİZ: Tüm sertifikaları kabul eden TrustManager (KULLANMA)
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
}
};// GÜVENLİ: TrustManagerFactory ile doğru doğrulama
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
SSLContext sslContext = SSLContext.getInstance(“TLS”);
sslContext.init(tmf.getTrustManagers(), null, new SecureRandom());
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
2. Sertifika Pinning Eksikliği
Sertifika pinning, uygulamanın yalnızca belirli bir sertifikayı kabul etmesini sağlar. Bu özellik etkin değilse, saldırgan sahte bir sertifika oluşturarak gerçek sunucuyu taklit edebilir. Pinning, özellikle finans ve kimlik doğrulama içeren uygulamalarda zorunludur.
// Basit SSL pinning örneği (iOS)
class SSLPinningDelegate: NSObject, URLSessionDelegate {
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge) {
guard let serverTrust = challenge.protectionSpace.serverTrust else {
challenge.sender?.cancel(challenge)
return
}
let cert = SecTrustGetCertificateAtIndex(serverTrust, 0)!
let serverCertData = SecCertificateCopyData(cert) as Data
let localCertData = NSData(contentsOfFile: Bundle.main.path(forResource: “my_cert”, ofType: “der”)!)! as Data
if serverCertData == localCertData {
challenge.sender?.use(URLCredential(trust: serverTrust))
} else {
challenge.sender?.cancel(challenge)
}
}
}
3. Şifrelenmemiş HTTP Trafiği
Hâlâ HTTP kullanan uygulamalar var; bu, verilerin ağ üzerinde düz metin olarak dolaştığı anlamına gelir. Her zaman HTTPS kullan ve Android’de cleartextTrafficPermitted="false" ayarını etkinleştir.
// GÜVENSİZ
fetch(‘http://api.example.com/data’)// GÜVENLİ
fetch(‘https://api.example.com/data’, {
method: ‘GET’,
headers: { ‘Authorization’: ‘Bearer ‘ + secureToken }
});
4. Zayıf Şifreleme Algoritmaları
ECB gibi modlar verinin kalıplarını ortaya çıkarır; bunun yerine AES-GCM veya ChaCha20-Poly1305 gibi modern modlar kullanılmalı. Aşağıda Kotlin örneği temel bir AES-GCM kullanımını gösterir.
// AES/GCM şifreleme örneği (Kotlin)
val keySpec = SecretKeySpec(keyBytes, “AES”)
val cipher = Cipher.getInstance(“AES/GCM/NoPadding”)
val iv = ByteArray(12) // rastgele IV
SecureRandom().nextBytes(iv)
val gcmSpec = GCMParameterSpec(128, iv)
cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec)
val cipherText = cipher.doFinal(plainText.toByteArray(Charsets.UTF_8))
5. Hassas Verilerin Log Dosyalarına Yazılması
Token, parola veya kişisel verileri loglamak büyük hata. Üretim ortamında loglar anonimleştirilmeli, hassas bilgiler asla düz metin olarak kaydedilmemeli.
// GÜVENLİ LOG: hassas verinin kendisini yazma
Log.d(“AUTH”, “Kullanıcı token uzunluğu: ” + (jwtToken != null ? jwtToken.length() : 0));
6. Yetersiz Oturum Yönetimi
Token’ları düz metinde saklamak tehlikelidir. Android için EncryptedSharedPreferences, iOS için Keychain kullanılmalı; ayrıca token yenileme ve kısa ömürlü token politikaları uygulanmalıdır.
// Android: EncryptedSharedPreferences örneği (kısaltılmış)
MasterKey masterKey = new MasterKey.Builder(context).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build();
SharedPreferences securePrefs = EncryptedSharedPreferences.create(
context,
“secure_prefs”,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
securePrefs.edit().putString(“auth_token”, token).apply();
Güvenlik Testleri Nasıl Yapılır?
Trafik katmanındaki zafiyetleri bulmak için hem statik hem dinamik analiz şarttır. Statik analiz kaynak kodu hatalarını gösterirken, dinamik analiz gerçek trafik davranışını ortaya çıkarır. Burp Suite, Frida ve MitmProxy en yaygın araçlardır. Testleri her sürüm öncesi tekrarlamak güvenliği devamlı kılar.
Sonuç
Mobil trafik katmanı zafiyetleri, uygulama güvenliğinin en kritik alanlarından biridir. Doğru SSL/TLS konfigürasyonları, sertifika pinning, modern şifreleme, güvenli oturum yönetimi ve sürekli testler olmadan bir uygulamayı güvenli saymak mümkün değildir. Kod örnekleriyle birlikte temel önlemleri uygulayarak saldırılara karşı önemli ölçüde güçlenirsin.
Korunma Özetleri
Tüm iletişimi HTTPS ile sağlanmalı.
Sertifika pinning ve Certificate Transparency kullanılmalı.
Güçlü şifreleme (AES-GCM / ChaCha20-Poly1305) tercih edilmeli.
Hassas verileri loglama, güvenli depolama kullanılmalı.
Düzenli statik ve dinamik güvenlik testleri yapılmalı.
Kullanılan araçlar:
Burp Suite Community Edition’ı İndirin – PortSwigger
Docker: Hızlandırılmış Konteyner Uygulaması Geliştirme
Mobil Güvenlik Çerçevesi – MobSF
Mobil uygulama analizlerini okumak isterseniz:












