Mobil uygulamalarda en çok yapılan 10 güvenlik hatası




Güvenlik, bir çok uygulama geliştiricinin özellikle zaman baskısı nedeniyle önceliklendirmediği bir konudur. Proje planlarında hak ettiği yeri almaz. Diğer yandan proje ekiplerinde güvenlikten sorumlu bir birim olmadığı müddetce de sahipsizdir, geliştiricinin insiyatifine kalmış durumdadır.

 

üvenlik ve Kullanışlılık (Usability) genelde ters orantılıdır. Güvenliği çok arttırılmış uygulamalarda kullanışlılık (süreçler, performans, akışlar) düştüğü için özellikle müşteri birimleri tarafından önceliklendirilmeyebilir.

Esasında birşeyler patlayana kadar kimse güvenlik ile ilgili kaygılarını dile getirmez. Bir çok kurumda uygulamalar güvenlik testlerine (Application Security Test) girmediği için de bu sorunlar ancak bir "hacking" durumunda masaya yatırılır.

Hiç bir uygulama yüzde 100 güvenli değildir prensibinden yola çıkarak amacımız uygulamamızı basit dokunuşlar ile diğer uygulamalara oranla daha güvenli hale getirerek hacker'ın, bizim uygulamamız yerine diğerlerini tercih etmesini sağlamak. :)

İşte mobil uygulama geliştirirken en sık yapılan 10 hata;

 1- Veri Saklama Biçimi: Öncelikle uygulama çalışırken (Runtime da) hassas bilgi mümkün mertebe cihazda kayıt edilmemeli. Veri çalışma anında işlenip, uygulama kapatıldığında yok edilmelidir. Yine de saklanması gereken veriler olması durumunda bu veriler  şifrelenerek dökümanlar klasöründe saklanmalıdır. Şifreler ise iOS ta  KeyChain, Android de ise KeyStore da tutulmalıdır.
 2- Önyüz Girdi Kontrollerinin Yapılmaması: Mobil uygulama ve diğer önyüz programlamada girdi alanlarının kontrol edilmemesi güvenlik ve veri biçimlemesi açısından sıkıntı yaratır. Mesela Numeric alanlara Alfanumeric girdi izni verilmesi, formatlı kontrollerde verinin maskelenmeden alınması, riskli karakterlerin <>' " ()|# veri alanlarında kontrol edilmemesi gibi..
 3- Sunucu Tabanlı Kontroller:  Uygulama en temelde bir önyüzdür. Bilginin saklandığı ve yönetildiği merkez sunucu tarafıdır. Sunucu tarafı mobil uygulamadan bağımsız olarak tüm kanallardan (mobil, web vs..)gelen bilginin güvenliği ve biçimi kontrol edilmelidir.
 4- SSL: Hassas veri iletişiminde mutlaka HTTPS kullanılmalıdır. Cihazın kendi SSL sertifika listesi (Certificate Store) yerine, uygulama içerisine eklenmiş hedef sunucu ile uyumlu sertifika kullanılmalıdır.
 5- Obfuscation: Android uygulamalarda geliştirilen uygulamanın yayınlanmadan önce Obfuscation dan geçirilmesi önemlidir. Yine uygulama içerisinde bir scripting dosyası kullanılıyorsa o dosyalarında ayrıca Obfucation dan geçirilmesi gerekir.
 6- Açıklama Satırları (Comment Line): Uygulamanın içerisine geliştiricilerin yazmış olduğu açıklama satırlarında verdikleri bilgiler ve bu bilgiler içerisine not aldıkları şifreler, anahtarlar daha sonra görülebilmektedir. Çok basit ve sık yapılan bir hatadır.
 7- Gereksiz Yetki (Permission): Android uygulamalarında yetki tablosu düzenlenirken, sadece ihtiyaç olanlar değerlendirilmeli. Kullanıcının telefon defteri gibi özel bilgilerine erişim mümkün mertebe verilmemeli.
 8- Şifreleme (Encryption): Şifreleme işleminde kullanılan şifre anahtarlarının yine uygulama içerisinde güvenli bölgede (Secure Storage) şifreli bir şekilde tutulmalıdır. Sonrasında kurulum dosyasının obfuscation dan geçirilmesi önemlidir. Özel durumlar dışında bu anahtarların çalışma anında sunucu üzerinden indirilmesi tavsiye edilen bir yöntem değildir.
 9- Kırılmış Cihazlar (Rooted/JailBreak): Kırılmış cihazlarda veri kaydetme biçiminde güvenlik sağlanamaz. Uygulamaların çalışacağı cihazın kırılmış olma durumu geliştirici tarafından kontrol edilebilir. Projenin akışlarına veya süreçlerine bağlı olarak bu risk değerlendirilmelidir.
10- Uygulama Bütünlüğü (Application Tampering Protection): Geliştirmiş olduğumuz uygulamanın kurulum dosyası (APK, IPA) saldırganlar tarafından değiştirilerek, farklı marketlerde yeniden yayınlanabilmektedir. Bunu engellemek için sunucu üzerinden uygulamanın dosyaları kontrol edilebilir veya hazır çözümler değerlendirilebilir.