Mobil Uygulama Güvenliği: Veriyi Cihazda ve Yolda Korumak

Telefon kaybolabilir, uygulama kurcalanabilir, ağ dinlenebilir. Mobil uygulama güvenliğinin üç cephesini, cihazı, iletişimi ve sunucuyu, işletme sahibinin anlayacağı dille anlattık.

İçindekiler
  1. Mobil uygulama güvenliği neden ayrı bir dikkat ister?
  2. Birinci cephe: veri cihazdayken
  3. İkinci cephe: veri yoldayken
  4. Üçüncü cephe: sunucu ve API
  5. Kişisel veriler ve yasal boyut
  6. Bu işi nasıl birlikte yaparız?
  7. Sık sorulan sorular
  8. Sonuç

Müşteriniz telefonunu kafede unuttu ya da çalışanınızın tableti şantiyede kayboldu. O cihazdaki uygulamanızı açan biri ne görebilir? Müşterinin adresini, sipariş geçmişini, belki de şirketinizin fiyat listesini. Mobil uygulama güvenliği, bu tür senaryolarda zararın sınırlı kalmasını sağlayan önlemlerin bütünüdür. Bu yazıda güvenliği üç cepheye ayırarak anlatıyorum: veri cihazdayken, veri yoldayken ve veri sunucuya ulaştığında.

Mobil uygulama güvenliği neden ayrı bir dikkat ister?

Web sitesinde kodun büyük kısmı sizin kontrolünüzdeki sunucuda çalışır. Mobil uygulama ise kullanıcının cihazına indirilen bir pakettir. Bu da birkaç önemli sonucu beraberinde getirir:

  • Uygulama dosyası incelenebilir; içine gömülen anahtarlar, adresler ve mantık çözümlenebilir.
  • Cihaz kaybolabilir, çalınabilir ya da başkası tarafından kullanılabilir.
  • Kullanıcı güvensiz halka açık Wi-Fi ağlarına bağlanabilir.
  • Bazı cihazlarda işletim sisteminin güvenlik kısıtlamaları kaldırılmış (root veya jailbreak) olabilir.

Bu nedenle temel ilke şudur: telefondaki uygulamaya asla tam güvenmeyin. Uygulama kullanıcı deneyimini sağlar; güvenlik kararlarının son sözü ise sunucuda verilir. Güvenlik topluluğu OWASP’ın mobil uygulamalar için yayımladığı risk listesi de büyük ölçüde bu ilkenin farklı yüzlerini anlatır.

Birinci cephe: veri cihazdayken

Uygulamanın cihazda sakladığı her bilgi, cihaza erişen biri tarafından okunabilir kabul edilmelidir. Bu yüzden şu kurallar önemlidir:

  • Gereksiz veri saklamayın: Uygulamanın çalışması için şart olmayan kişisel veriyi cihaza hiç yazmayın.
  • Hassas bilgiyi güvenli depoda tutun: Oturum anahtarı gibi bilgiler sıradan dosyalarda değil, iOS’ta Keychain, Android’de Keystore destekli güvenli depolama alanlarında saklanmalıdır.
  • Şifre saklamayın: Kullanıcının şifresi cihazda tutulmaz; giriş sonrası verilen, süresi sınırlı bir oturum anahtarı kullanılır.
  • Ek kilit seçeneği sunun: Bankacılık, sağlık ya da şirket verisi içeren uygulamalarda açılışta parmak izi veya yüz tanıma istemek iyi bir ek katmandır.
  • Ekran görüntüsü ve önizleme: Çok hassas ekranlarda, uygulama arka plana alındığında içeriğin görev değiştirici önizlemesinde görünmemesi sağlanabilir.

İkinci cephe: veri yoldayken

Uygulama ile sunucu arasındaki her iletişim şifreli olmalıdır. Bunun temel yolu tüm isteklerin HTTPS (TLS) üzerinden yapılmasıdır; güncel iOS ve Android sürümleri şifresiz bağlantıları varsayılan olarak kısıtlar. Yine de birkaç noktaya dikkat etmek gerekir:

  1. Sertifika doğrulamasını kapatmayın: Geliştirme sırasında kolaylık olsun diye kapatılan doğrulama yayına kadar unutulabilir; bu, araya giren saldırılara kapı açar.
  2. Sertifika sabitleme (pinning) değerlendirin: Yüksek hassasiyetli uygulamalarda uygulama yalnızca sizin sunucunuzun sertifikasını kabul edecek şekilde ayarlanabilir. Ancak sertifika yenilemelerinde uygulamanın da güncellenmesi gerektiği için dikkatli planlanmalıdır.
  3. Adreste hassas veri taşımayın: Kimlik bilgileri ve oturum anahtarları URL içinde değil, istek başlıklarında ya da gövdesinde gönderilmelidir.

Üçüncü cephe: sunucu ve API

Mobil uygulama güvenliği tartışmalarında en çok ihmal edilen kısım aslında en önemlisidir. Uygulamanın konuştuğu API, gerçek verinin ve kuralların bulunduğu yerdir. Sunucu tarafında şu kontroller mutlaka yapılmalıdır:

  • Her istekte yetki kontrolü: Kullanıcı yalnızca kendi siparişini görebilmeli; istek adresindeki numarayı değiştirerek başkasının verisine ulaşamamalıdır.
  • Fiyat ve tutarı sunucuda hesaplayın: Sepet toplamı, indirim ve kampanya tutarı uygulamadan geldiği gibi kabul edilmemelidir.
  • İstek sınırlama: Şifre deneme ve doğrulama kodu gibi uç noktalara sınır konmalıdır.
  • Kısa ömürlü oturum anahtarları: Anahtarlar belirli sürede geçersiz olmalı, şüpheli durumda tüm oturumlar sonlandırılabilmelidir.

Bu başlıkların her birini API güvenliği yazısında, oturum anahtarlarının yapısını da JWT nedir yazısında ayrıntılı anlattım. Arka ucun genel mimarisi için mobil uygulama backend yazısına da bakabilirsiniz.

Uygulamaya gömülen anahtarlar

Harita, bildirim ya da ödeme servislerinin anahtarları bazen uygulamanın içine yazılır. Uygulama paketi çözümlenebildiği için bu anahtarlar gizli sayılmamalıdır. Gizli kalması gereken anahtarlar yalnızca sunucuda tutulmalı; uygulamaya gömülmesi zorunlu olan anahtarlar ise ilgili servisin panelinden uygulamanın paket adına ve kullanım kapsamına göre kısıtlanmalıdır. Flutter uygulamalarında kodun karartılması (obfuscation) incelemeyi zorlaştırır ama tek başına koruma değildir.

Kişisel veriler ve yasal boyut

Uygulamanız müşterilerinizin adını, telefonunu, konumunu ya da sağlık bilgisini işliyorsa güvenlik teknik bir tercih olmaktan çıkar, yasal bir yükümlülüğe dönüşür. KVKK kapsamında aydınlatma metni, gerekli durumlarda açık rıza ve verinin güvenliğini sağlayacak teknik tedbirler beklenir. Ayrıca Apple ve Google, uygulamanın hangi verileri topladığını mağaza sayfasında beyan etmenizi ister. Kesin hukuki değerlendirme için bir uzmana danışmanızı öneririm.

Bu işi nasıl birlikte yaparız?

Güvenliği sonradan eklenen bir katman olarak değil, geliştirme boyunca alınan kararlar olarak ele alıyorum:

  1. Veri envanteri: Uygulamanın hangi verileri topladığını, nerede sakladığını ve kimin erişmesi gerektiğini birlikte listeleriz.
  2. Risk ve kapsam: Uygulamanın hassasiyet düzeyine göre biyometrik kilit, sertifika sabitleme gibi ek önlemlere gerek olup olmadığını belirler, teklifimi buna göre hazırlarım.
  3. Geliştirme ve test: Güvenli depolama, şifreli iletişim ve sunucu tarafı yetki kontrollerini uygular; yetkisiz erişim senaryolarını özellikle test ederim.
  4. Yayın sonrası takip: Bağımlılıklardaki güvenlik güncellemelerini izler, gerektiğinde hızlıca yeni sürüm yayımlarız.

Mevcut uygulamanızın güvenliğini gözden geçirmek ya da yeni bir projeyi güvenli temeller üzerine kurmak isterseniz iletişim sayfasından bana yazabilirsiniz.

Sık sorulan sorular

Mağazadan onay alan uygulama güvenli sayılır mı?

Mağaza incelemesi belirli kurallara uyumu ve bazı temel riskleri kontrol eder, ancak uygulamanızın sunucu tarafındaki yetki hatalarını ya da veri sızıntılarını tespit etmez. Güvenlik sorumluluğu geliştiricide ve işletmededir.

Root veya jailbreak yapılmış cihazlarda uygulama engellenmeli mi?

Bankacılık gibi yüksek riskli uygulamalarda bu cihazları tespit edip uyarmak ya da bazı işlemleri kısıtlamak tercih edilebilir. Çoğu işletme uygulamasında ise asıl önemli olan, sunucu tarafındaki kontrollerin sağlam olmasıdır.

Kaybolan bir cihazdaki oturum uzaktan kapatılabilir mi?

Evet, sunucu tarafında oturum yönetimi doğru kurgulanmışsa kullanıcının ya da yöneticinin o cihaza ait oturumu sonlandırması mümkündür. Kurumsal uygulamalarda bu özellik baştan planlanmalıdır.

Güvenlik testi ne zaman yapılmalı?

İlk yayından önce ve önemli güncellemelerden sonra. Hassas veri işleyen uygulamalarda bağımsız bir güvenlik incelemesi yaptırmak da değerlendirilebilir.

Sonuç

Mobil uygulama güvenliği; cihazda az ve güvenli veri saklamak, iletişimi şifrelemek ve her kararı sunucuda doğrulamak üzerine kuruludur. Bu üç cephe birlikte ele alındığında hem kullanıcılarınızın verisi hem de işletmenizin itibarı korunur. Uygulamanızın güvenliğini konuşmak isterseniz bana ulaşabilirsiniz.