Mobil Uygulama Güvenliği: Riskler ve Kapsamlı Rehber
Mobil uygulama güvenliği, dijital dünyada artık kurumların en çok dikkat etmesi gereken konuların başında geliyor. Bir mobil uygulama yayına girdiği an, cihaz üzerinde önemli verileri tutmaya başlar. Üstelik bu veriler arasında token’lar, oturum bilgileri veya doğrudan kullanıcı kimlik detayları bulunur. Elbette web tarafındaki alışılmış güvenlik refleksleri burada her zaman işe yaramaz. Çünkü uygulama artık sunucudan çok uzakta çalışır. Hatta doğrudan kullanıcının cebinde ve sizin kontrolünüz dışındaki bir ortamda bulunur. Mobil uygulama güvenliği tam da bu noktada kritik bir rol üstlenir. İstemci tarafında çalışan kodun, verinin ve iş mantığının mutlaka korunması gerekir.
Bu yazıda mobil uygulama güvenliği süreçlerini detaylıca inceleyeceğiz. Ayrıca test aşamalarının nasıl işlediğine, hangi standartların kullanıldığına ve sık görülen hatalara bakacağız. Sonuç olarak gerçek senaryolar üzerinden risk zincirlerini daha net anlayacaksınız.
Mobil Uygulama Güvenliği Kapsamı
Mobil uygulama güvenliği, Android veya iOS uygulamalarının tüm yaşam döngüsündeki riskleri azaltmayı hedefler. Geliştirme, dağıtım ve çalışma zamanı süreçleri bu kapsama girer. Ayrıca statik kod analizi, dinamik test ve API koruması da bu çalışmanın parçalarıdır. Veri depolama kontrollerini ve sistem servislerini sertleştirme (hardening) adımlarını da unutmadan yapmak gerekir. Konuyu sadece uygulamadaki açıkları bulmak şeklinde özetleyemeyiz. Asıl mesele, uygulamanın çalıştığı cihazın güvenilmez bir ortam olduğunu baştan kabul etmektir. Dolayısıyla mimariyi de tamamen bu risklere göre kurmalısınız.
OWASP Mobile Top 10 listesi bu alanı belirli kategorilere ayırıyor. Örneğin güvensiz veri depolama, güvensiz iletişim ve zayıf kimlik doğrulama ilk sıralarda yer alır. Bunun yanı sıra yetersiz kriptografi, istemci tarafı enjeksiyon ve kod kalitesi sorunları da bulunur. Güvenli bir uygulama için tüm bu alanlarda belirli bir olgunluk seviyesine ulaşmalısınız. Sadece bir alanda mükemmel olmak maalesef diğerlerindeki zafiyeti kapatmıyor.
Mobil Uygulama Güvenliği Neden Önemlidir
Bir uygulamadaki zafiyet, arka uç sistemlere açılan doğrudan bir kapı haline gelebiliyor. Örneğin uzmanlar bir APK dosyasını statik olarak decompile ediyor. Daha sonra içindeki bir API anahtarını kolayca bulabiliyor. Böylece saldırgan, kimlik doğrulamayı tamamen atlayıp sunucuya yetkisiz istekler atabiliyor. Kurumsal açıdan bu durum oldukça yıkıcı sonuçlar doğurur. Çünkü itibar kaybı ve ciddi idari para cezaları karşınıza çıkar. Ayrıca bazı kritik sektörlerde düzenleyici kurum incelemeleri başlar. Öte yandan saldırı senaryoları da her geçen gün çeşitleniyor. Sahte uygulama mağazalarındaki klonlar veya ortadaki adam saldırıları bunlara örnektir.
Bir güvenlik açığı kurumsal tarafta genellikle şu sorunları tetikler:
- Kullanıcı verilerine veya ödeme bilgilerine yetkisiz kişilerin erişmesi.
- Marka güveninin sarsılması ve uygulama mağazalarındaki puanların hızla düşmesi.
- KVKK ve GDPR kapsamında büyük idari yaptırımların uygulanması.
- Klon uygulamalar üzerinden kurum itibarının ciddi şekilde kötüye kullanılması.
- Zafiyetin arka uca sıçraması durumunda tüm platformun zarar görmesi.
Bu maddelerin çoğu birbirini doğrudan tetikler. Yani tek bir zayıf nokta, zincirleme şekilde çok daha büyük bir soruna dönüşür.
Mobil Uygulama Güvenliği Testlerinin Çalışma Mantığı
Güvenlik uzmanları, mobil uygulama güvenliği değerlendirmelerini tipik olarak iki katmanda gerçekleştirir. Bunlar statik ve dinamik analiz olarak adlandırılır. Uzmanlar öncelikle statik analizi yapar. statk analizde uygulamanın paketlerini decompile(tersine derleme) ederler. Sonrasında kaynak koduna, manifest dosyasına ve gömülü kütüphanelere detaylıca bakarlar. Burada asıl amaç sabit kodlanmış sırları veya gereksiz izinleri bulmaktır. Ayrıca zayıf şifreleme kullanımını da tespit ederler.
Dinamik analiz aşamasında ise uzmanlar uygulamayı gerçek bir cihazda çalıştırırlar. Aynı zamanda ağ trafiğini, bellek kullanımını ve anlık davranışları dikkatlice gözlemlerler. Örneğin Frida gibi araçlar yardımıyla fonksiyonlara kanca atarlar. Bununla birlikte SSL pinning korumasını aşmaya çalışırlar. Gerçek bir saldırgan tam olarak bu yöntemleri uygulayacağı için, testler de aynı bakış açısıyla yapılır.
Test Sürecinin İşleyişi
Mobil uygulama güvenlik testleri genellikle üç aşamada tamamlar. Ancak uygulamanın mimarisine bağlı olarak bu sıra bazen değişebilir.
Kapsam Belirleme ve Bilgi Toplama
İlk olarak ekiplerimiz hangi platformların test edileceğini netleştirir. Uygulamanın kullandığı üçüncü taraf SDK’lar ve uç noktalar bu aşamada haritalanır.
Statik ve Dinamik Testler
Uzmanlar statik ve dinamik testleri eşzamanlı olarak yürütürler. Dosyaları decompile edip kodu satır satır incelerler. Ardından uygulamayı bir proxy arkasında çalıştırıp ağı dinlerler. Yetkilendirme kontrollerini ve yerel depolama mekanizmalarını tek tek test ederler.
Raporlama ve Doğrulama
Bulunan her güvenlik açığını etki derecesiyle birlikte detaylıca raporlarız. Geliştirici ekip düzeltmeleri tamamladıktan sonra mutlaka doğrulama testini yaparız. Kesinlikle bu adım atlanmamalıdır. Çünkü açığın kapandığından tamamen emin olmalıyız.
Kullanılan Standartlar
Siber güvenlik uzmanları mobil testlerde her zaman OWASP MASVS standardını referans alırlar. Bu standart, uygulamanın hangi güvenlik seviyesinde doğrulanacağını net olarak belirler. Aynı zamanda OWASP MASTG rehberi, bu kontrollerin nasıl yapılacağını adım adım açıklar. Ayrıca bankacılık gibi kritik sektörlerde ISO 27001 kılavuzlarını da sürece dahil ederiz. Böylece uygulamanız regülasyonlara da tam uyumlu hale gelir.
Araçlar ve Teknikler
Statik analiz sürecinde uzmanlarımız MobSF, jadx ve apktool gibi araçlara başvurur. Bu araçlar APK dosyasını okunabilir koda çevirip hızlı bir tarama yapmayı sağlar. Dinamik analizde ise Frida oldukça popülerdir. Trafik analizleri için Burp Suite kullanırız. Öte yandan iOS tarafında Cycript, Android tarafında ise Drozer tercih ederiz.
Ancak sadece emülatör üzerinde test yapmak hiçbir zaman yeterli olmaz. Bazı uygulamalar emülatör ortamını hemen tespit eder ve farklı davranır. Bu nedenle Sibertim uzmanları kritik testleri her zaman gerçek cihazlar üzerinde tekrarlar.
Yaklaşımların Karşılaştırılması
Otomatik tarama araçları gerçekten çok hızlı ve tutarlıdır. Hardcoded anahtarlar veya açık unutulmuş hataları hemen bulurlar. Fakat iş mantığı hatalarını otomatik bir araç maalesef göremez. İşte bu noktada manuel testler mutlaka devreye girmelidir. Sibertim olarak biz, hızı sağlayan otomasyon ile derinliği sağlayan manuel testi her zaman birleştiriyoruz.
| Yaklaşım Tipi | Özellikler ve Avantajlar | Eksik Yönler |
|---|---|---|
| Otomatik Tarama | Hızlı, tekrarlanabilir, bilinen zafiyet kalıplarında güçlü. | İş mantığı hatalarını ve mantıksal zafiyetleri göremiyor. |
| Manuel Test | Derinlemesine inceleme yapar, yetkilendirme atlatma kısımlarını yakalar. | Yavaş ilerler ve uzmanlık gerektirir. |
| Hibrit (İkisi Birlikte) | Geniş kapsamı otomasyonla tarayıp riskli noktalara manuel testle odaklanılır. | – |
Gerçek Hayat Senaryosu
Geçtiğimiz dönemde bir fintech uygulamasını test ettik. Statik analiz sırasında APK içinde açık metin olarak duran bir API anahtarı bulduk. İlk başta durum pek kritik görünmüyordu. Fakat bu anahtarla sunucuya istek attığımızda, kimlik doğrulaması olmadan işlemlere erişebildiğimizi gördük. Aynı zamanda uygulamanın sertifika sabitleme kullanmadığını da fark ettik. Sonuç olarak iki bulgu birleşti ve çok kritik bir risk yarattı. Ekibimiz anahtarı arka uca taşıttı ve sertifika sabitlemeyi ekletti. Böylece güvenlik riski tamamen ortadan kalktı.
Düzenli Testin Gerekliliği
Mobil uygulama güvenliği tek seferlik bir iş kesinlikle değildir. Yeni bir sürüm veya eklenen basit bir SDK, daha önce kapanan bir riski tekrar açabilir. Bu nedenle testleri ideal olarak her yeni sürümde tekrarlamalısınız. En azından yılda bir kez düzenli penetrasyon testi yaptırmalısınız. Sürekli entegrasyon süreçlerindeki otomatik taramalar tek başlarına yeterli koruma sağlamazlar.
Sık Yapılan Hatalar
Sahada en çok karşılaştığımız güvenlik hataları aslında çok benzerdir:
| Hata Türü | Açıklaması |
|---|---|
| Gömülü Sırlar | API anahtarlarının kod içine doğrudan ve şifresiz gömülmesi. |
| Sertifika Sabitleme Eksikliği | Sertifika sabitleme korumasının hiç uygulanmaması. |
| Şifresiz Depolama | Hassas verilerin şifrelenmeden cihaz hafızasında açıkça saklanması. |
| İstemci Tarafı Yetkilendirme | Sunucu tarafındaki yetkilendirmenin tamamen mobil uygulamaya bırakılması. |
| Denetimsiz SDK Kullanımı | Üçüncü taraf paketlerin güvenlik denetiminden geçirilmeden projeye entegre edilmesi. |
Gördüğünüz gibi bunların hiçbiri bulunması zor açıklar değildir. Dolayısıyla doğru bir geliştirme kültürüyle bunları kolayca önleyebilirsiniz.
Sonuç
Mobil uygulama güvenliği, uygulamanın yaşam döngüsüne yayılan sürekli bir disiplindir. Statik ve dinamik analizlerin yanı sıra doğru güvenlik standartlarının uygulanması şarttır. Karşılaşılan zafiyetlerin çoğu aslında çok temel ve kolayca önlenebilir hatalardır. Geliştirme sürecinin en başından itibaren güvenliği bir tasarım parçası olarak ele almalısınız. Böylece hem maliyeti hem de gelecekte yaşayacağınız sürprizleri ciddi oranda azaltırsınız.
Sık Sorulan Sorular
Mobil uygulama güvenliği testi ne kadar sürer?
Süre genellikle uygulamanın karmaşıklığına ve ekran sayısına göre değişir. Ancak ortalama bir uygulama için bu süreç 5 ila 15 iş günü arasında tamamlanır.
Android ve iOS aynı anda mı test edilmelidir?
Evet, kesinlikle ayrı ayrı ve aynı dönemde test edilmelidir. Çünkü platform mimarileri farklıdır ve birindeki güvenlik açığı diğerinde bulunmayabilir.
Sertifika sabitleme her uygulamada gerekli midir?
Finansal işlemler veya hassas kullanıcı verileri taşıyan uygulamalarda zorunludur. Ancak düşük riskli ve statik içerikli uygulamalarda önceliği biraz daha düşük olabilir.
Mağaza onaylı uygulamalar güvenli midir?
Hayır, mağaza onay süreçleri kod seviyesinde derinlemesine bir güvenlik analizi yapmaz. Çoğunlukla sadece kötü amaçlı yazılım tespitine odaklanırlar.
Startuplar için mobil güvenlik testi öncelikli midir?
Evet, kesinlikle çok önceliklidir. Kullanıcı verisi işleyen her uygulama risk altındadır ve veri sızıntısının güven kaybı maliyeti büyüktür.