Mobil uygulama güvenliğinde en sık duyduğumuz cümle şu: "API tarafını güvenli yaptık, uygulama sadece istemci." Bu cümle yarı doğru. Sunucu tarafı güvenliği zorunlu, ama istemcide bırakılan bir sır veya kontrol, sunucu ne kadar sağlam olursa olsun bir kapı açıyor. OWASP'ın MASVS'i (Mobile Application Security Verification Standard) bu konuda dağınık tartışmayı düzenli bir kontrol listesine çeviriyor.
MASVS'i neden Top 10'a tercih ediyoruz
Mobile Top 10 farkındalık için iyi bir liste, ama denetim yapmak için fazla genel. MASVS ise doğrulanabilir gereksinimler halinde yazılmış: veri depolama, kriptografi, kimlik doğrulama, ağ iletişimi, platform etkileşimi, kod kalitesi ve dayanıklılık başlıkları altında "şunun şöyle olduğunu kanıtla" diyen maddeler var. Müşteriye teslim edilebilir bir rapor çıkarmak isteyen ekip için bu fark büyük.
Sahada en çok bulduğumuz beş şey
- Gömülü sırlar. Üçüncü parti API anahtarları, imza sırları, hatta veritabanı bilgileri derlenmiş uygulamanın içinde. Kod karartma (obfuscation) bunu çözmüyor, sadece geciktiriyor. Doğru cevap: sır sunucuda kalır, istemci kısa ömürlü token alır.
- Hassas verinin yanlış yerde saklanması. Oturum tokenı
SharedPreferencesveya düz dosyada. Bunun yeri Keychain / Keystore; Flutter tarafında güvenli depolama paketleri bu köprüyü kuruyor. - Sertifika doğrulamasının gevşetilmesi. Geliştirme sırasında kapatılan doğrulamanın üretime sızması, gördüğümüz en tehlikeli tek satır. Yalnızca hata ayıklama derlemelerinde etkin olacak biçimde koşullayın.
- Yetkilendirmenin arayüzde yapılması. Butonu gizlemek yetki kontrolü değildir. Her yetki kararı sunucuda tekrar verilmelidir.
- Kayıt (log) sızıntısı. Üretim derlemesinde istek ve yanıt gövdelerini yazan kayıt ara katmanları, kişisel veriyi cihaz kayıtlarına döküyor.
Sertifika sabitleme: ne zaman evet
Sertifika sabitleme (pinning) güçlü bir önlem ama bedava değil. Sertifikanız yenilendiğinde uygulamanız güncellenmediyse tüm kullanıcılarınız erişimi kaybediyor. Bankacılık, sağlık veya ödeme akışı barındıran uygulamalarda öneriyoruz; bunun dışında yedek sabitleme (backup pin) ve uzaktan güncellenebilir bir yapılandırma olmadan girmeyin. Kısacası: riski azaltırken operasyonel riski artırmadığınızdan emin olun.
Denetimi sürece bağlamak
Tek seferlik denetim rapor üretir, güvenlik üretmez. Bizim kurduğumuz akış şu: MASVS maddelerinden projeye uyan alt kümeyi seçip bir kontrol listesine çeviriyoruz, bu listeyi sürüm çıkarma (release) kontrol listesinin parçası yapıyoruz ve otomatikleştirilebilen maddeleri — bağımlılık taraması, sır tarama, statik analiz — CI hattına koyuyoruz. Elle yapılacak maddeler her ana sürümde tekrar gözden geçiriliyor.

Gerçekçi olalım: küçük bir ekipte MASVS'in tamamını uygulamak mümkün değil. Uygulamanın işlediği verinin hassasiyetine göre bir seviye seçin ve o seviyeye tam uyun. Yarım uygulanmış yüksek seviye, tam uygulanmış makul seviyeden daha zayıf.
Dayanıklılık maddeleri: beklentiyi doğru kurmak
MASVS'in dayanıklılık (resilience) başlığı altındaki maddeler — kök/jailbreak algılama, hata ayıklayıcı tespiti, kod karartma, bütünlük kontrolü — sık sık yanlış anlaşılıyor. Bunlar bir zafiyeti kapatmıyor; kararlı bir saldırganın işini zorlaştırıyor. Yani dayanıklılık önlemleri, doğru yapılmış sunucu tarafı yetkilendirmenin yerine değil, üstüne gelir.
Pratik ölçütümüz şu: uygulamanız cihazda değerli bir sır tutuyorsa veya cihaz üzerinde çalışan bir iş kuralı varsa, dayanıklılık maddelerine yatırım yapın. Tüm kritik kararlar sunucuda veriliyorsa, aynı bütçeyi sunucu tarafı denetimine ayırmak daha fazla kazandırıyor.

Ekip alışkanlığına dönüşmesi için
Güvenliği kalıcı hale getiren şey araçlar değil, geri bildirim hızı. Bir sır yanlışlıkla depoya girdiğinde bunu altı ay sonra bir denetimde değil, aynı gün taramada öğrenmek gerekiyor. Bu yüzden CI hattına koyduğumuz ilk şey sır taraması oluyor; en düşük maliyetli, en yüksek etkili kontrol. Ardından bağımlılık zafiyet taraması geliyor. Bu ikisi otomatikleştikten sonra elle yapılan denetim, gerçekten düşünme gerektiren maddelere odaklanabiliyor — ki denetimin asıl değeri de orada.
Mobil uygulamanız için bağımsız bir güvenlik gözden geçirmesi veya sürüm öncesi kontrol listesi kurmak istiyorsanız, iletişim sayfamızdan bize ulaşın. Flutter ve yerel platformlarda 16 yıllık tecrübemizle, bulguları yalnızca listelemekle kalmayıp nasıl kapatılacağını da yazıyoruz.