Bir mobil uygulama geliştirilirken eğer bilgi güvenliği ekipleriyle işbirliğiniz yoksa, en büyük endişe kaynağınız güvenlik olacaktır. “Acaba uygulamam hacklenir mi? Ödeme ekranı koydum ama kart bilgileri çalınır mı? Kullanıcı şifrelerini nasıl koruyacağım?” gibi pek çok soru işareti aklınıza takılıyor olabilir.
Özellikle içinde bulunduğumuz pandemi döneminde ekran süresi ortalaması her geçen gün daha fazla artmaktadır. Dünya’da yıllık mobil uygulama indirilme sayısı 200 milyarı aştı. İster iOS kullanın, isterse Android platforma sahip bir akıllı telefon kullanın. Güvenlik zaafiyetleri her zaman uygulamalarınızda bulunma eğilimindedir.
İstatistiksel olarak Android marketlerde yer alan uygulamaların güvenlik açıkları, iOS’a göre daha fazla. Bu durum zaten çoğumuz tarafından bilinen bir gerçek.
Mobil uygulamamız ne tür güvenlik zaafiyetlerine sahip olabilir?
– Yetkisiz Erişim
– Hassas Verilerin Sızdırılması
– Yetkisiz Kullanıcı Tarafından Yapılan Oturum Kimliği Saldırıları
– Kötü Amaçlı Kullanıcı Yoluyla Kod Enjeksiyonları
– Daha Küçük Uygulama Penceresinin Güvenliğini Sağlama
– Kullanıcı Hesaplarının Ele Geçirilebilmesi
– Akıllı Cihazlarda Hassas Verilerin Açık Bir Şekilde Tutulması
– Mobil Cihaz Loglarından Erişilebilen Hassas Veriler
Ne tür önlemler alabiliriz?
– SSL Sertifikası Sabitleme (Videosu YouTube kanalında)
– Jailbreak Kontrolü
– Root Kontrolü
– Sahte Konum Tespiti
– Hashleme
– İki Faktörlü Kimlik Doğrulama
– Önbellekteki Verilerin Güvenli Saklanması
– Hata Kodlarının Gizlenmesi
– Token İçin Süre Sınırı
– Logcat’in Kapatılması
– Dosya Yükleme Uzantı Kontrolü
Flutter’da bu zaafiyetlerden bazılarını otomatik olarak kapatabileceğimiz paketler yer almakta. pub.dev üzerinde yayınlanan bu paketleri inceleyeceğiz. Bazı güvenlik açıkları herhangi bir yazılım geliştirme aracıyla ilişkili olmayabilir. Örneğin kullanıcıya gösterdiğiniz hata mesajlarının içeriği, login senaryosu gibi yanlış kurgulardan kaynaklı zaafiyetler oluşabilmektedir.
Öneriler
Hata Mesajlarını İçeriğini Düzenleyin
Bir login ekranında kullanıcıdan istenen kullanıcı ismi, e-posta veya telefon numarası ile ilişkilendirilmiş şifrenin olduğu senaryoyu inceleyelim. Kullanıcı şifresini yanlış girdiğinde hata parola uyarısı vermeniz kullanıcı adının doğru bir şekilde tahmin edildiği anlamına gelebilmektedir. Telefon numarasıyla giriş yapılabilen bir sistemde “Telefon numaranız sistemde kayıtlı değildir” gibi bir uyarı göstermek bu uygulamayı kullanan ve kullanmayan kişilerin bilgisini ifşalayacaktır.
Hata mesajlarınızda mümkün oldukça detay vermekten kaçının. Örneğin, “Bilgilerinizi kontrol edin” uyarısı sisteminiz için yeterli ve güvenli bir uyarı mesajı olabilir.
JailBreak, Sahte Konum ve Rootlu Cihaz Kontrolü Sağlayın
Android platformunda bir telefonun rootlanması artık çok kolay bir işlem haline geldi. Rootlu cihazlarda özel izinler, ek olarak kullanılabilecek araçların yüklenmesine olanak sağlamaktadır. Rootlu bir cihazda uygulamanızın çalıştırılmaması güvenlik açısından size büyük bir artı sağlayacaktır. Flutter’da rootlu cihaz, jailbreak ve sahte konum tespiti için trust_fall paketi bulunmaktadır.
Sahte konum tespiti için bu paketin Android platfomunda konum izninin verilmiş olması gerekiyor. Henüz bu özellik ios için çalışmıyor. Bununla ilgili bildiğiniz daha iyi bir yöntem varsa yorumlarda belirtebilirsiniz.
Jailbreak kontrolünü yine aynı paket üzerinden iOS cihazlar için sağlayabilirsiniz. Jailbreak saptantığında uygulamayı direkt olarak kapatabilir, ekranda bir hata mesajı verebilir veya butonların tamamını pasif hale getirebilirsiniz.
Sahte Konum Tespiti ise birçok alışveriş uygulamasında alınması gereken önlemlerin başında gelmektedir. trust_fall paketi de sahte konum tespiti ile ilgili bize yardımcı olmaktadır.
Link: https://pub.dev/packages/trust_fall
Önbellekte Sakladığınız Verileri Koruyun
Android ve iOS platformlarda önbelleğe kaydettiğiniz veriler local olarak cihazınıza yazılmaktadır. Örneğin shared_preferences kullandığınızı varsayalım:
Android: /data/data/UYGULAMAPAKETİSMİ/shared_prefs/FlutterSharedPreferences.xml
iOS: /private/var/mobile/Containers/Data/Application/42A253CE-4424-45EB-A175- CAC0CC1DD85C/Library/Preferences/UYGULAMAPAKETİSMİ.plist
dizinlerinde verileriniz okunabilir şekilde bulunacaktır. Buradaki önerim encrypted_shared_preferences paketinin kullanılmasıdır. Bu şekilde saklanan bilgilerin crypto işleminden geçmesini sağlayabilirsiniz. Mümkün mertebe kullanıcıya ait hassas verileri cihazda depolamayın. Buradaki paketler depolamak zorunda kaldığınız veriler için önerilmektedir.
Link: https://pub.dev/packages/encrypted_shared_preferences
Link 2: https://pub.dev/packages/flutter_secure_storage
Şifre Gibi Hassas Verileri Hashleyin
Hash, kriptografik bir fonksiyondur. Çeşitli uzunluktaki verilerin matematiksel algoritmalarla sabit uzunlukta benzersiz bir değer oluşturma işlemidir. Flutter için pub.dev üzerinde yer alan crypto paketi,
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
- SHA-512/224
- SHA-512/256
- MD5
- HMAC (i.e. HMAC-MD5, HMAC-SHA1, HMAC-SHA256)
algoritmalarını desteklemektedir. Kullanıcılara ait hassas verileri hashlemenizi öneririm.
Link: https://pub.dev/packages/crypto
SSL Sertifikasını Sabitleyin
İster web view bir uygulamanız olsun ister api yardımıyla post ve get işlemleri yaptığınız bir uygulamanız olsun. Aradaki insan saldırısına maruz kalabilirsiniz. SSL sertifikası bulunan bir url’e istek atarken SSL içerisinde bulunan parmak izini uygulamanız içerisine sabitleyerek isteğin doğru yere ulaşıp ulaşmadığını kontrol edebilirsiniz. Flutter için pub.dev üzerinde
Link: https://pub.dev/packages/ssl_pinning_plugin
Ek olarak, şifreli olarak gelen verilerinizi çözümleyebilmek, tokenınızın expire süresiyle ilgili işlemler de yapabileceğiniz jwt_decoder paketi pub.dev üzerinde bulunuyor.
Link: https://pub.dev/packages/jwt_decoder
Yetkisiz Erişim
Kullanıcının kimlik doğrulamasını doğrulamadan uygulamaya erişim sağlamak en büyük güvenlik riskidir. Bu nedenle uygulama, kullanıcının gerçek bir kullanıcı olmasını sağlamalı ve birden fazla başarısız oturum açma girişimi olması durumunda erişimi geçici olarak kilitlemelidir.
Hassas Verilerin Sızdırılması
Bu günlerde, cep telefonunun aşırı kullanımıyla, mobil uygulamalarınız kullanıcı kimlikleriniz, şifreniz, PIN’iniz, finansal bilgileriniz, kişisel bilgileriniz ve daha pek çok hassas veriye sahip. Uygulama güvenlik kontrolleri uygulamada doğru şekilde uygulanmazsa, hassas verileriniz kolayca tehlikeye girebilir. Zayıf uygulama güvenliği, yetkisiz tarafların uygulamanızdaki tüm bilgilere erişmesine izin verebilir.
Flutter tabanlı bir uygulama kullanırken, arka plan moduna geçmek üzereyken her zaman bilgi sağlar. Kullanıcının izniyle önbelleğin düzenli olarak temizlenmesi için bir zamanlayıcı ayarlamak için bilgilere erişebilirsiniz.
Daha Küçük Uygulama Penceresinin Güvenliğini Sağlama
Uygulamanın daha küçük pencerelerine erişerek başka bir göreve geçmek yaygındır. Ancak ne yazık ki, uygulamanızın daha küçük pencereleri, içeriği küçültülmüş pencerede kullanıcıya göstermeye devam edebilir. Kötü niyetli kullanıcı, uygulamanızın Touch ID’ler veya yüz tarama gibi ek önlemlerden korunmasına rağmen bu küçük ekrandan bilgileri kolayca alabilir. Flutter uygulama geliştirme şirketleri , kullanıcıların acısını kolayca anlayabilir ve uygulamanızı kötü niyetli kullanıcılardan korumak için bu tür stratejileri uygulayabilir.
Örneğin Instagram, Exxen gibi uygulamaları ekranı ikiye bölerek kullanamazsınız.
Android için: Android, doğal olarak çok çeşitli pencere modlarını destekler. Belirli ekranların ekran görüntülerini devre dışı bırakmak için Flutter uygulamasının MainActivity içindeki WindowManager bayrağını kullanabilirsiniz.
İncelemenizi öneririm:
1) https://stackoverflow.com/questions/60006167/can-i-hide-flutter-app-contents-when-the-app-is-in-background
2) https://github.com/neckaros/flutter_windowmanager
Genel olarak Flutter ile mobil uygulamanızın güvenliği için belirli adımları anlatmaya çalıştım. Tabi ki güvenlik bunlarla sınırlı değildir. Her uygulamada ortaya çıkacak zaafiyetler birbirinden farklı olabilir.
Who Am I filminden bir alıntı ile yazımı tamamlamak istiyorum:
“Hiçbir sistem güvenli değildir.”
İyi çalışmalar dilerim.