Gelecegi yazanlar logo

Bloga geri dön

Android

Android Uygulamalarında Statik Kod Analizi- 1

Geleceği Yazanlar'da Android uygulamalarında statik kod analizini öğrenmek için hemen okuyun!
Blog image

Mobil uygulamalar; bankacılık, sosyal medya, sağlık ve e-ticaret gibi birçok alanda hayatımızın önemli bir parçası haline gelmiştir. Mobil uygulamalar, kullanıcıların kişisel ve hassas verilerini barındırdığı için güvenlik açısından büyük riskler taşımaktadır.

Bu noktada, statik kod analizi gibi teknikler, güvenlik açıklarını erken tespit etmek adına kritik bir rol oynamaktadır.


Bu içerikte;

  • Android uygulamalarında temel güvenlik prensipleri,
  • OWASP Mobile Top 10 2024 güvenlik açıkları,
  • MobSF gibi statik analiz araçlarının kullanımı konularına değineceğim.


1 . Statik Kod Analizi Nedir ve Neden Önemlidir?

Statik kod analizi, mobil uygulamaların kaynak kodlarını veya derlenmiş APK’larını çalıştırmadan inceleyerek potansiyel güvenlik açıklarını belirleme yöntemidir. Bu yöntem, uygulamayı çalıştırma gereksinimi olmadan, kod içindeki tehlikeli kalıpları ve zafiyetleri daha hızlı tespit etme imkanı sunar. Böylece, geliştiriciler uygulamayı piyasaya sürmeden önce zafiyetleri çözerek daha güvenli bir sürüm elde edebilir.

Statik analizin ilk adımlarından biri, uygulamanın AndroidManifest.xml dosyasını incelemektir. Bu dosya, uygulamanın temel bileşenlerini, izinlerini ve dış dünya ile olan etkileşimini detaylı bir şekilde ortaya koyduğu için kritik bir öneme sahiptir. Manifest dosyası, uygulamanın güvenliği ve stabilitesi açısından analiz edilmesi gereken en temel unsurlardan biridir.



2. OWASP Mobile Top 10 2024: Mobil Güvenlik Zafiyetleri


Mobil uygulamalarda karşılaşılan en yaygın güvenlik zafiyetleri, OWASP Mobile Top 10 listesinde özetlenmektedir. Aşağıdaki tablo, bu on başlık ve statik kod analiziyle tespit edilebilecek örnek güvenlik açıklarını içermektedir:



Yukarıdaki maddeler, Android uygulamaları özelinde sıklıkla karşılaşılan güvenlik risklerini özetler. Ancak bu zafiyetlerin büyük kısmını kavrayabilmek için öncelikle Android’in temel güvenlik yapısını ve Manifest dosyasının rolünü anlamak gerekir.


3. Sandboxing: Android Güvenlik Mimarisinin Temel Taşı

Android'in güvenlik mimarisinde önemli bir yer tutan sandboxing, her uygulamaya benzersiz bir kullanıcı kimliği (UID) atayarak yalnızca kendi verilerine erişmesini sağlar. Bu yöntem, zararlı yazılımların diğer uygulamaların verilerine erişmesini engeller ve bankacılık bilgileri, fotoğraflar veya mikrofon gibi hassas verilere izinsiz ulaşılmasını önler.

Android, Linux tabanlı bir sistem olduğu için her uygulamayı ayrı bir kullanıcı kimliğiyle çalıştırır. Bu sayede uygulamalar birbirlerinin verilerine erişemez. Ancak, cihazın root edilmesi veya yanlış izin yapılandırmalarının yapılması, bu güvenlik mekanizmasını zayıflatabilir ve uygulamaların birbirlerinin verilerine erişmesine yol açabilir. 



4.1. AndroidManifest.xml Dosyasının Rolü

Android uygulamalarında Manifest dosyası, uygulamanın bileşenlerini (Activity, Service, BroadcastReceiver, ContentProvider), ihtiyaç duyduğu izinleri ve temel ayarları tanımlayan kritik bir bileşendir. Statik analiz yaparken dikkat etmemiz gereken ilk yerlerden biri bu dosyadır.


4.2 İzinlerin Tanımlanması ve Yönetilmesi

Android uygulamaları, ihtiyaç duydukları izinleri AndroidManifest.xml dosyasında belirtir. Örneğin, bir uygulama fotoğraflara erişim izni veya mikrofon erişimi talep edebilir.

Eğer bir uygulama, gereksiz yere mikrofon veya kamera gibi izinler istiyorsa, bu durum güvenlik riskleri yaratabilir. Örneğin, pdf oluşturma uygulaması olarak tanıtılan bir uygulamanın, kullanıcıdan mikrofon izni istemesi kullanıcının gizliliğini tehdit edebilir.



“Dangerous” Permissions (Özelleştirilmiş İzinler )

Bazen uygulamalar arasında hassas verilerin, örneğin şifreler veya tek kullanımlık şifreler (OTP) gibi, paylaşılması gerekebilir. Bu tür verilerin güvenli bir şekilde transfer edilebilmesi için özelleştirilmiş izinler kullanılır.

Özelleştirilmiş izinler, AndroidManifest.xml dosyasına tanımlanarak yalnızca belirli uygulamaların bu verilere erişmesine olanak tanır. Burada dikkat edilmesi gereken en önemli unsur, izinlerin protection level ayarlarıdır. Eğer bir izin "tehlikeli" (dangerous) olarak tanımlanmışsa, kullanıcıya bu izni verme konusunda bir onay kutusu gösterilir. Diğer taraftan, signature koruma seviyesi kullanıldığında, yalnızca aynı imza anahtarına sahip uygulamalar bu verilere erişebilir. Bu mekanizmalar, hassas verilerin güvenliğini sağlamaya yardımcı olur.




  1. App Bugra: Bu uygulama, hassas verilere erişim sağlamak için iki "tehlikeli" izin tanımlar.
  2. App Bank: Bu uygulama, belirtilen izinleri kullanabilmek için kullanıcıdan izin talep eder.
  3. Android Sistemi: Kullanıcıya onay kutusu gösterilir. Eğer kullanıcı izin verirse, izinler etkin hale gelir.
  4. Diğer Uygulamalar: İzinler verildikten sonra, bu izinleri kullanarak verilere erişebilirler.



Android uygulamalarında, güvenlik açıklarının büyük bir kısmı ağ trafiği, özellikle HTTPS veya diğer TCP bağlantılarıyla ilgili olsa da, uygulamanın temel bileşenlerinde de ciddi güvenlik riskleri bulunabilir. Bu temel bileşenlere ilk aşamada Activity inceleyerek başlayacağız.


Activity Nedir?

Android uygulamaları başlatıldığında, örneğin telefonunuzda bir uygulama simgesine tıkladığınızda ekranda açılan sayfa, bir Activity’dir. Uygulamaya login olmak istediğinizde kullanıcı adı ve şifre girdiğiniz giriş ekranı (login screen), bir Login Activity olarak tanımlanır. Eğer doğru giriş yaptıysanız ve profil ekranına geçiş yaptıysanız, bu da farklı bir Activity’dir. Bu şekilde, her ekran bir Activity olarak kabul edilebilir.

Her Activity, genellikle bir XML dosyasında yapılandırılmış bir ekran düzenine (layout) sahip olup uygulama her açıldığında bu ekran yüklenir. Ancak, bazı Activity’ler güvenlik önlemleri ile korunur. Örneğin, Profile Activity ve Settings Activity, kullanıcı adı ve şifre gerektirir ve bu ekranlara yalnızca doğrulama sonrasında erişim sağlanabilir.


Activity Arasındaki Etkileşimler

Bir Activity, başka bir Activity’yi başlatabilir. Örneğin, Files Activity başka bir ekran olan Profile Activity’ye yönlendirebilir. Ancak, bazı Activity’lere güvenlik nedeniyle yalnızca belirli kullanıcıların erişim sağlaması gerekmektedir.



Bazen uygulamalar, dışarıdan çağrılabilen Activity’lere ihtiyaç duyar. Örneğin, bir QR kod tarayıcı uygulaması, taranan veriyi açmak için farklı bir Activity’yi başlatmak isteyebilir. Bu gibi durumlarda, geliştiriciler exported="true" özelliğini kullanarak belirli bir Activity'yi dışa açabilir.


Ancak, tüm Activity’leri dışa açmak ciddi güvenlik riskleri oluşturabilir. Örneğin, Profile Activity gibi hassas bilgileri içeren bir ekranın dışa açılması, zararlı bir uygulamanın bu Activity’yi izinsiz başlatarak güvenli alanlara erişmesine olanak tanır.

Bu nedenle, geliştiriciler sadece gerekli Activity'leri dışa açmalıdır. Bu yaklaşım, uygulamaların hem işlevselliğini artırırken hem de kullanıcı verilerini koruma konusunda etkili bir adım atmalarını sağlar.


Android Manifesti ve Activity Export Durumu

Android’de bir Activity’nin dışa açık (exported) olup olmadığını anlamanın en güvenilir yolu, AndroidManifest.xml dosyasını kontrol etmektir. Eğer bir Activity exported="true" olarak tanımlanmışsa, bu Activity diğer uygulamalar tarafından başlatılabilir.



Buna ek olarak, intent filter kullanımı da bir Activity’yi dış dünyaya açabilir. Eğer bir Activity içerisinde bir intent filter tanımlanmışsa, bu Activity otomatik olarak dışa açık hale gelir. Örneğin, bir tarayıcı uygulaması belirli bir URL’yi açabilmek için gerekli intent filter ayarlarına sahip olmalıdır. Ancak, bu durum güvenlik açısından riskler oluşturabilir.

Exported Ayarı:

  • exported="true": Bir Activity’yi dışa açarak diğer uygulamaların bu Activity’yi başlatmasını sağlar.
  • exported="false" (varsayılan ayar): Activity yalnızca kendi uygulaması içinde başlatılabilir.


Intent’ler ve Activity Geçişlerindeki Rolü

Android ekosisteminde, Intent'ler uygulama bileşenleri arasında iletişim kurmanın temel bir aracıdır. Bir Intent, bir uygulamanın bir bileşeninin (Activity, Service, Broadcast Receiver gibi) başka bir bileşeni başlatmasını veya bileşenler arasında veri iletmesini sağlar. Bu, Android'in modüler ve esnek yapısını mümkün kılar. Örneğin, bir kullanıcı telefonunda bir resim çekmek istediğinde, kamera uygulaması bir Intent göndererek resim çekme işlevini başlatır.


Exported Ayarı ve Intent Filtreleri

Yanlış yapılandırılmış bir exported ayarı veya dikkatsizce tanımlanan intent filter'lar, zararlı uygulamaların yetkisiz erişim sağlamasına neden olabilir. Özellikle, dışa açık bırakılan hassas bir Activity, zararlı uygulamaların bu Activity’yi izinsiz olarak başlatarak hassas kullanıcı verilerine erişim sağlamalarına yol açabilir.


Intent Türleri: Explicit ve Implicit Intent’ler

Intent’ler, iki ana türe ayrılır: Explicit (açık) Intent ve Implicit (örtük) Intent. Bu türlerin her biri, farklı kullanım senaryolarında önemli avantajlar sağlar.



1. Explicit (Açık) Intent'ler

Explicit Intent'ler, belirli bir bileşene yönelik işlemlerde kullanılarak hedef bileşeni belirgin bir şekilde tanımlar. Bu tür Intent'ler, hedef bileşenin sınıf adını veya niteliğini doğrudan belirtir. Örneğin, bir kullanıcı giriş yaptıktan sonra doğrudan profil sayfasına yönlendirilecekse, bu durum için Explicit Intent kullanılır.



Bu örnekte, ProfileActivity.class belirtilen hedef ile doğrudan çalışır, bu da Explicit Intent'in tipik bir örneğidir.

Explicit Intent'lerin avantajları:

  • Güvenilirlik: Hedef bileşen net olarak belirlenir, bu da zararlı uygulamaların müdahale etme ihtimalini azaltır.
  • Doğrulanabilirlik: Belirli bir bileşene yönelik olduğu için hata payı düşüktür ve geliştirici tarafında kolayca denetlenebilir.


2. Implicit (Örtük) Intent'ler

Implicit Intent'ler ise belirli bir bileşeni doğrudan belirlemeden genel bir işlem veya eylemi tanımlar. Bu tür Intent'ler, Android sisteminin uygun bileşeni seçerek kullanıcıya sunması için tasarlanmıştır. Örneğin, bir e-posta göndermek isteyen bir uygulama, bu işlemi yapmak için uygun bir e-posta uygulamasını seçmek üzere Implicit Intent kullanabilir.


Implicit Intent'lerin avantajları:

  • Esneklik: Uygulama geliştiricisi belirli bir bileşen belirtmek zorunda olmasa da, Android işletim sistemi uygun bir uygulama seçer.
  • Genel Uyumluk: Farklı uygulamalar arasında entegre çalışma imkanı sağlar.



Bu örnekte, ACTION_SEND eylemi genel bir intent olarak tanımlanır ve Android kullanıcıya uygun bir e-posta uygulaması seçme seçeneği sunar.


Intent'lerin Güvenlik Riskleri ve Önlemler

Intent'ler güçlü ve esnek araçlar olmakla birlikte, yanlış kullanıldığında güvenlik sorunlarına neden olabilir. Bu tür sorunları önlemek için dikkat edilmesi gerekenler:

  1. Explicit Intent'leri Tercih Edin: Explicit Intent'ler, hedef bileşenin net bir şekilde tanımlanması nedeniyle daha güvenlidir. Implicit Intent'ler ise birden fazla bileşen tarafından işlenebilir ve bu nedenle daha riskli olabilir.
  2. Hassas Verileri Koruyun: Intent'ler aracılığıyla hassas verilerin paylaşılması, zararlı uygulamalar tarafından ele geçirilme riski taşır. Bu tür veriler için şifreleme ve güvenlik önlemleri uygulanmalıdır.
  3. Intent Filtrelerini Doğru Tanımlayın: Implicit Intent'ler için kullanılan Intent filtreleri dikkatlice hazırlanmalı ve olası suistimal edilme ihtimaline karşı önlemler alınmalıdır. Belirli bir Intent için hangi filtrelerin uygulanacağını netleştirmek, güvenlik açıklarını azaltmada önemli bir adımdır.

Bu bağlamda, mobil uygulama geliştirme dünyasında sıkça kullanılan deep link ve app link kavramları da dikkat gerektirir. Kullanıcıların uygulama içindeki belirli sayfalara doğrudan erişmesini sağlayan bu özellikler, yanlış yapılandırıldığında ciddi güvenlik açıklarına neden olabilir.


Deep Link Nedir ve Güvenlik Riskleri

Deep Link: Mobil uygulamalar içinde belirli bir sayfaya doğrudan erişim sağlayan bağlantılardır. Kullanıcı bir deep link'e tıkladığında, uygulamanın ilgili aktivitesi açılır.

Örnek Deep Link Yapılandırması:



Örneğin, shopping://www.myshoppingapp.com/product/123 linki, kullanıcıyı mobil uygulamanın ProductDetailActivity sayfasına yönlendirir.



Eğer bir deep link üzerinden kullanıcı bilgileri veya oturum açma token'ları gibi hassas veriler iletiliyorsa, bu veriler zararlı uygulamalar tarafından ele geçirilebilir. Örneğin, bir access token veya oturum bilgisi deep link ile taşınıyorsa ve bu link zararlı bir uygulama tarafından tetiklenirse, saldırgan bu hassas bilgilere erişebilir.


Örnek: Eğer bir link URL’sinde hassas bilgiler taşınıyorsa:

shopping://www.myshoppingapp.com/product/123?session_id=abcd1234

Bu URL, zararlı bir uygulama tarafından ele geçirilebilir ve hassas bilgiler (örneğin oturum bilgileri veya erişim token'ları) saldırganların eline geçebilir.


Ayrıca bir saldırgan, android:scheme="shopping" şemasını ve belirli host değerlerini taklit ederek zararlı bir uygulama oluşturabilir. Bu uygulama, kullanıcıdan gelen deep link taleplerini kendi sistemine yönlendirebilir ve bilgileri çalabilir.


Güvenlik Riskleri:

  1. Hassas Veri İfşası: Deep link'ler üzerinden kullanıcı bilgileri (örneğin, session ID'leri) gönderildiğinde, zararlı uygulamalar bu bilgileri çalabilir.
  • Örnek URL: shopping://www.myshoppingapp.com/product/123?session_id=abcd1234  Bu tür URI’ler oturum bilgilerini tehlikeye atabilir.
  1. Zararlı Uygulama: Saldırgan, belirli host değerlerini taklit eden zararlı bir uygulama oluşturabilir ve kullanıcıdan gelen deep link'leri toplayarak verileri çalabilir.


Deep link kullanımında dikkat edilmesi gereken güvenlik önlemleri şunlardır:

  1. Veri Şifreleme: Deep link ile iletilen hassas veriler mutlaka şifrelenmelidir. Bu, zararlı uygulamaların veriyi anlamasının önüne geçer.
  2. Doğrulama: Deep link verileri yalnızca güvenli ve doğrulanan kaynaklardan alınmalıdır. Statik kod analizi yapılmalı, güvenlik kontrollerinin yeterliliği denetlenmelidir.
  3. Zararlı Uygulama Tespiti: Uygulama, deep link ile gelen verilerin kaynağını kontrol etmeli ve doğrulamayı sağlamalıdır.


Web Link Nedir ve Güvenlik Riskleri Nelerdir?

Web link, bir tarayıcıda açılabilen ve çoğunlukla web sayfasına yönlendiren bağlantılardır. Bu linkler genellikle HTTP veya HTTPS protokolünü kullanır ve URL formatında tanımlanır. Örneğin:

https://www.myshoppingapp.com/product/123


Örnek Web Link Yapılandırması:



Kullanıcı https://www.myshoppingapp.com/product/123 linkine tıkladığında, belirtilen web sayfasına yönlendirilir.


Güvenlik Riskleri:

  1. Phishing Saldırıları: Kötü niyetli bir kullanıcı, gerçek bir web link’ini taklit ederek sahte bir sayfaya yönlendirebilir.
  • Örnek Tehlikeli Link: https://www.myshopingapp.com/product/123 (gerçek URL’ye benzer, “shopping” yerine “shoping” yazılmış).
  1. Hassas Verilerin Açığa Çıkması: URL'lerde oturum ya da kimlik bilgileri taşınması riski vardır.
  2. URL Manipülasyonu: URL parametreleri değiştirilerek yetkisiz verilere erişilebilir.


App Link Nedir?

App Link, bir mobil uygulamanın belirli bir içeriğini açan bir URL’yi ifade eder. Web linkler gibi tarayıcıda açılmak yerine, bir App Link tıklandığında doğrudan mobil uygulama açılır ve kullanıcıyı ilgili sayfaya yönlendirir. Bu mekanizma genellikle Android App Links ve iOS Universal Links olarak bilinir.


App Link ile Deep Link Arasındaki Fark

  • Deep Link: Kullanıcıda uygulama yüklü değilse, bağlantı çalışmaz veya bir hata mesajı verir.
  • App Link: Kullanıcıda uygulama yüklü değilse, bağlantı bir web sayfasına yönlendirilir (back-up URL).


App Link Nasıl Çalışır?

  1. URL Yapılandırması: Web URL formatında (https) çalışır. Örnek: https://www.example.com/product/123
  2. Doğrulama (Digital Asset Links): URL’nin uygulamaya ait olduğunu doğrulamak için bir assetlinks.json dosyası kullanılır.
  3. Otomatik Yönlendirme: Tarayıcıdan ziyade, uygulamanın ilgili sayfasını açar.



Aşağıdaki tablo, Deep Links, Web Links, ve App Links arasındaki farkları gösterir:



!!! Deep Links: URL’nin özel bir şema (holiday://) kullanması gerekir.

!!! Web Links: HTTPS protokolü kullanılır, ancak autoVerify yapılandırması yoktur.

!!! App Links: HTTPS protokolü kullanır ve autoVerify özelliği ile doğrulama yapılır.


Android Uygulamalarında Content Provider ve Güvenlik Riskleri

Android uygulama geliştirme sürecinde, Content Provider (İçerik Sağlayıcı) bileşenleri, uygulamaların veri paylaşımı yapmasını sağlayan önemli bir yapıdır. Ancak, bu bileşenlerin yanlış yapılandırılması veya kötüye kullanılması, ciddi güvenlik risklerine yol açabilir. Bu yazıda, Content Provider'ların ne olduğunu, nasıl çalıştığını ve olası güvenlik risklerini ele alacağız.


Content Provider Nedir?

Content Provider, Android uygulamalarının diğer uygulamalarla veri paylaşmasını sağlayan bir bileşendir. Verilerin düzenli bir şekilde saklanması ve alınması için standart bir yapı sunar. Bu veriler, bir yerel veri tabanında, dosyada veya uzak bir sunucuda saklanabilir. Content Provider'lar, uygulamalar arası veri paylaşımını güvenli ve kontrollü bir şekilde yönetmek için kullanılır.


Content Provider Nasıl Çalışır?

Content Provider, veri üzerinde sorgulamaeklemegüncelleme ve silme işlemlerine olanak tanır. Bu işlemleri gerçekleştirirken URI (Uniform Resource Identifier) tabanlı bir sistem kullanır. URI, hangi tür verinin nerede olduğunu belirler ve uygulamaların bu verilere erişmesini sağlar.

Örneğin: content://com.android.contacts/contacts/1

Bu URI, cihazda bulunan kişi veritabanındaki 1. kişiyi işaret eder.

Bir Content Provider genellikle android.content.ContentProvider sınıfından türetilir ve aşağıdaki yöntemler özelleştirilir:

  • onCreate(): Content Provider ilk kez oluşturulduğunda çağrılır.
  • query(): Veri sorgulamak için kullanılır.
  • insert(): Yeni veri eklemek için kullanılır.
  • update(): Var olan verileri güncellemek için kullanılır.
  • delete(): Verileri silmek için kullanılır.
  • getType(): Belirli bir URI’nin veri türünü döndürmek için kullanılır.


Content Resolver ile Veri Erişimi

Bir uygulama, başka bir uygulamanın Content Provider’ına erişmek istediğinde, ContentResolver nesnesini kullanır. ContentResolver, Content Provider ile uygulama arasında köprü görevi görür. İstekleri Content Provider’a ileterek veri alımı veya işlemini gerçekleştirir.Örneğin, bir uygulama telefon rehberindeki kişilere erişmek istediğinde, ContentResolver üzerinden bir sorgu yaparak bu verileri alabilir.



Content Provider ve Güvenlik Riskleri

Content Provider'lar, uygulamalar arası veri paylaşımını kolaylaştırırken, yanlış yapılandırıldığında ciddi güvenlik risklerine neden olabilir. Dikkat edilmesi gereken bazı riskler:

  1. Yetkisiz Erişim: Eğer bir Content Provider herkese açık şekilde yapılandırılmışsa,zararlı  uygulamalar bu verilere erişebilir. Bu nedenle, Content Provider'ların izinlerle (permissions) korunması önemlidir.
  2. SQL Injection: Content Provider'lar genellikle SQL sorguları kullanır. Eğer kullanıcı girdileri düzgün bir şekilde kontrol edilmezse, SQL Injection saldırılarına açık hale gelebilir.
  3. Veri Sızıntısı: Yanlış yapılandırılmış bir Content Provider, hassas verilerin sızmasına neden olabilir. Örneğin, kullanıcı bilgileri veya özel mesajlar gibi veriler yetkisiz kişiler tarafından görüntülenebilir.
  4. URI Yetkilendirme: URI'ler üzerinden yapılan erişimlerde, yetkilendirme mekanizmalarının doğru bir şekilde uygulanmaması, verilere yetkisiz erişime yol açabilir.


Content Provider ve Güvenlik Açıkları: SQL Injection ve Path Traversal

Android uygulamalarında veri paylaşımı ve yönetimi için sıklıkla kullanılan Content Provider'lar, uygulamanın veritabanına erişim sağlamak için SQL benzeri sorgular kullanır. Ancak bu durum, özellikle kullanıcı girdilerinin doğru şekilde kontrol edilmemesi durumunda, ciddi güvenlik açıklarına yol açabilir. 

1. SQL Injection: Veritabanı Güvenliğini Tehdit Eden Bir Saldırı

SQL Injection, bir saldırganın uygulamanın veritabanına zararlı SQL komutları göndererek yetkisiz işlemler gerçekleştirmesine olanak tanıyan bir saldırı türüdür. Content Provider'lar, veri sorgulamak için SQL benzeri yöntemler kullandığından, bu tür saldırılara karşı savunmasız olabilir.

Nasıl Gerçekleşir?

Content Provider'ın query metodu, kullanıcı girdilerini doğrudan SQL sorgularına yerleştirirse, saldırgan bu girdileri manipüle ederek zararlı komutlar ekleyebilir. Örneğin, bir kullanıcı adı alanına normal bir değer yerine zararlı bir SQL kodu girilirse, bu kod veritabanında çalıştırılabilir.

Örnek Senaryo:

Aşağıdaki örnekte, saldırganın "admin" kullanıcısının bilgilerine erişmek için kullandığı bir SQL enjeksiyonu gösterilmektedir:



Bu sorguda, -- karakteri SQL'de yorum satırı başlatır. Bu nedenle, sorgunun geri kalanı yok sayılır ve saldırgan "admin" kullanıcısının tüm bilgilerine erişebilir. Bu tür bir saldırı, kullanıcı şifreleri ve diğer hassas bilgilerin ifşasına neden olabilir.



Nasıl Önlenir?

  • Parametreli Sorgular Kullanın: Kullanıcı girdilerini doğrudan sorgulara yerleştirmek yerine, parametreli sorgular kullanarak SQL enjeksiyon riskini azaltabilirsiniz.
  • Girdi Doğrulama: Kullanıcı girdilerini regex veya diğer yöntemlerle doğrulayarak zararlı karakterlerin filtrelenmesini sağlayın.
  • İzinleri Sınırlandırın: Content Provider'ın erişim izinlerini sınırlandırarak, yetkisiz kullanıcıların hassas verilere erişmesini engelleyin.


2. Path Traversal: Dosya Erişiminde Güvenlik Açığı

Path Traversal, bir saldırganın dosya yolu manipülasyonu yaparak uygulamanın erişim izni olmayan dosyalarına ulaşmaya çalıştığı bir saldırı yöntemidir. Content Provider'lar yanlış yapılandırıldığında, bu tür saldırılara açık hale gelebilir.

Nasıl Gerçekleşir?

Content Provider'lar, dosya erişimi sağlarken kullanıcı girdilerini doğru şekilde doğrulamazsa, saldırganlar ../ gibi özel karakterler kullanarak dosya yollarını manipüle edebilir. Bu, uygulamanın korunan dosyalarına erişim sağlanmasına neden olabilir.

Örnek Senaryo:

Aşağıdaki örnekte, bir saldırganın Content Provider'ı manipüle ederek korunan bir dosyaya erişmeye çalıştığı gösterilmektedir:



Bu sorguda, saldırgan ../ karakterlerini kullanarak dosya yolunu manipüle etmiş ve uygulamanın shared_prefs dizinindeki pin.xml dosyasına erişmeyi denemiştir. Bu tür dosyalar, uygulamanın hassas bilgilerini içerebilir.

Nasıl Önlenir?

  • Girdi Doğrulama ve Temizleme: Kullanıcı girdilerini dikkatlice doğrulayın ve zararlı karakterleri filtreleyin.
  • Dosya Yolu Kısıtlamaları: Content Provider'ın erişebileceği dosya yollarını sınırlandırın ve mutlak yollar kullanmaktan kaçının.
  • İzin Kontrolleri: Dosya erişim izinlerini sıkı bir şekilde kontrol ederek, yetkisiz erişimleri engelleyin.

Content Provider’ların ardından, manifest dosyasının analizi, uygulamanın genel yapısını ve olası güvenlik açıklarını daha iyi anlamamızı sağlar.

MobSF ile Android Uygulama Analizi


MobSF (Mobile Security Framework), Android uygulamalarının güvenlik açıklarını tespit etmek için kullanılan güçlü bir statik ve dinamik analiz aracıdır. Bu bölümde, MobSF’in sunduğu analiz özelliklerini ve tespit edilen güvenlik açıklarını detaylı bir şekilde inceleyeceğiz.



Android uygulamalarının manifest dosyası, uygulamanın nasıl çalıştığını ve hangi bileşenleri içerdiğini anlamamıza yardımcı olan en kritik dosyalardan biridir. Şimdi bu dosyayı detaylı bir şekilde inceleyelim.


1. Uygulamanın Temel Bilgileri: İlk Adım

MobSF, analize başlamadan önce uygulamanın temel bilgilerini sunar. Bu bilgiler, uygulamanın güvenlik durumunu anlamak için önemli bir başlangıç noktasıdır.

Paket Adı: com.android.insecurebankv2

Bu, uygulamanın benzersiz kimliğidir. Google Play Store’da ve cihazınızda bu isimle tanınır.

Uygulama Sürümü: 1.0

Kullanıcıya gösterilen sürüm numarası.

Minimum SDK Sürümü: 15 (Android 4.0.3)

Uygulamanın çalışması için gereken minimum Android sürümü. Bu, uygulamanın hangi cihazlarla uyumlu olduğunu gösterir.

Hedef SDK Sürümü: 22 (Android 5.1)

Uygulamanın hangi Android sürümü için optimize edildiğini belirtir. Bu sürüm, modern API’lerden ve güvenlik özelliklerinden yararlanmasını sağlar.

Ana Aktivite: LoginActivity

Uygulama başlatıldığında açılan ilk ekran. Genellikle kullanıcı girişi için kullanılır.

Bu bilgiler, uygulamanın genel yapısını anlamak ve güvenlik açıklarını tespit etmek için önemli bir temel oluşturur.


2. İzinler - Permissions

Android uygulamaları, çeşitli sistem kaynaklarına erişmek için izinler talep eder. Ancak, bu izinler kötüye kullanıldığında kullanıcı verileri ciddi risk altında olabilir. MobSF, uygulamanın talep ettiği izinleri analiz eder ve bu izinlerin kötüye kullanım risklerini değerlendirir.



SMS Gönderme İzni (SEND_SMS):

Bu izin, uygulamanın kullanıcıdan habersiz SMS göndermesine olanak tanır. Zararlı yazılımlar, bu izni kullanarak ücretli mesajlar gönderebilir veya kullanıcının kişisel bilgilerini sızdırabilir.

Harici Depolamaya Yazma İzni (WRITE_EXTERNAL_STORAGE):

Bu izin, uygulamanın harici depolama alanına (SD kart gibi) veri yazmasına izin verir. Zararlı yazılımlar, bu izni kullanarak cihaza zararlı dosyalar yükleyebilir veya kullanıcı verilerini dışarı sızdırabilir.

Kişiler Listesine Erişim İzni (READ_CONTACTS):

Bu izin, uygulamanın kullanıcının rehberindeki kişilere erişmesine olanak tanır. Zararlı yazılımlar bu izni kullanarak kişiler listesini ele geçirebilir ve bu bilgileri spam veya phishing saldırılarında kullanabilir.

Hassas Konum Bilgilerine Erişim İzni (ACCESS_FINE_LOCATION):

Bu izin, uygulamanın kullanıcının tam konum bilgilerine erişmesine olanak tanır. Zararlı yazılımlar bu izni kullanarak kullanıcının hareketlerini izleyebilir ve bu bilgileri kötü amaçlarla kullanabilir.

Telefon Durum Bilgilerine Erişim İzni (READ_PHONE_STATE):

Bu izin, uygulamanın cihazın durum bilgilerine (telefon numarası, arama durumu, IMEI numarası gibi) erişmesine olanak tanır. Zararlı yazılımlar, bu izni kullanarak cihazın benzersiz kimliğini ele geçirebilir ve bu bilgileri kötü amaçlarla kullanabilir.


Bu izinler, zararlı yazılımlar tarafından kullanıcı verilerini sızdırmak veya zararlı eylemler gerçekleştirmek için kullanılabilir. Bu nedenle, uygulama sadece ihtiyaç duyduğu izinleri talep etmeli ve gereksiz erişimlerden kaçınmalıdır.


3. Aktivite Tanımlamaları

Manifest dosyasındaki aktiviteler, uygulamanın hangi ekranlardan oluştuğunu ve bu ekranlara nasıl erişileceğini tanımlar.

  • Ana Aktivite: LoginActivity (Uygulama başlatıldığında açılan ilk ekran).
  • Dışa Açık Aktiviteler:
  • FilePrefActivity
  • Dologin
  • PostLogin
  • WrongLogin
  • ViewStatement

Birçok aktivite, android:exported="true" olarak işaretlenmiş. Bu durum, dış uygulamaların bu aktiviteleri doğrudan çağırmasına olanak tanır. Bu da zararlı bir uygulamanın, aktiviteleri izinsiz bir şekilde tetikleyerek uygulamanın işleyişini manipüle etmesine neden olabilir.


4. Debug Modu

Manifest dosyasına baktığımızda, uygulamanın hata ayıklama modunun açık olduğunu görüyoruz:

  • android:debuggable="true"

Hata ayıklama modunun açık olması, saldırganların uygulamanın kaynak kodunu ve iç yapısını analiz etmesine olanak tanır. Bu, uygulama zafiyetlerini keşfetmeyi kolaylaştırır.


5. Content Providers ve Broadcast Receivers

Son olarak, uygulamada kullanılan Content Providers ve Broadcast Receivers bileşenlerini inceler:

  • Content Provider: TrackUserContentProvider (Dışa açık).
  • Broadcast Receiver: MyBroadcastReceiver (Dışa açık).

Dışa açık olarak tanımlanan Content Provider ve Broadcast Receiver bileşenleri, zararlı uygulamalar tarafından manipüle edilebilir. Özellikle Content Provider’lar, doğru yapılandırılmadığında hassas verilerin açığa çıkmasına yol açabilir.


6. Signer Certificate (Sertifika İmzası)



Sertifikanın imzası, uygulamanın doğruluğunu ve güvenliğini doğrulamak için kullanılır.

  • V1 İmzası: Uygulama sadece v1 imza şemasıyla imzalanmış. Daha güvenli olan v2 ve v3 imzalarının eksikliği, uygulamayı Janus açığı gibi bazı saldırılara karşı savunmasız hale getirebilir.
  • Hash Algoritması: Uygulama, SHA-256 algoritması ile imzalanmış.



7. Manifest Dosyası Analizi



AndroidManifest.xml dosyasındaki yapılandırmaların analizidir. Bu dosya, uygulamanın çalışma şekli hakkında bilgi verir. MobSF, APK'nın manifest dosyasını inceleyerek uygulamanın güvenlik zafiyetlerini tespit eder. MobSF taraması sonucu manifest dosyasından elde edilen bazı bulgular şunlardır:

  • Hata Ayıklama Etkin (Debugging Enabled): Uygulamanın hata ayıklama modunda çalışması, saldırganların uygulamanın çalışma şeklini incelemesini kolaylaştırır ve güvenlik açıklarını daha hızlı keşfetmelerine olanak tanır.
  • Verilerin Yedeklenebilir Olması (Application Data Can Be Backed Up): Uygulamada hata ayıklama özelliği açıkken, adb aracı kullanılarak uygulama verileri yedeklenebilir. Bu durum, kullanıcı verilerinin yetkisiz kişilerin eline geçmesine yol açabilir.
  • StrandHogg 2.0 Açığı: Uygulama, StrandHogg 2.0 adlı bir güvenlik açığına karşı savunmasızdır. Bu açık, zararlı uygulamaların hedef uygulamanın ekranı üzerine sahte bir ekran yerleştirerek kullanıcıları yanıltarak phishing saldırılarıyla hassas bilgileri çalmasına olanak tanır. Bu sorun, SDK’nın güncellenmesi ve uygulamanın doğru yapılandırılmasıyla giderilebilir.


8. POSSIBLE HARDCODED SECRETS 

Uygulama kodunda kullanıcı adı, şifre gibi hassas veriler sabitlenmiş olarak bulunabilir. Bu verilerin yetkisiz kişiler tarafından ele geçirilmesi, uygulamaya yetkisiz erişim sağlanmasına neden olabilir.



9. Aktiviteler

Android uygulamaları, aktiviteler aracılığıyla farklı ekranlar sunar. Yapılan analizde, uygulamanın aktiviteleri üzerinden bazı güvenlik açıkları oluşabilir:


  • Login Bypass : ADB komutları kullanılarak giriş ekranı atlatılabilir. Bu tür güvenlik açıkları, uygulamanın kritik işlevlerine yetkisiz erişim sağlanmasına yol açabilir.
  • Adb Komutu :



10)Strings 

MobSF, APK dosyasındaki string analizini yaparak, uygulama içerisinde yer alan karakter dizilerini tespit eder. Bu diziler, uygulamanın işlevselliği ve güvenliği hakkında önemli bilgiler sunar. Özellikle API anahtarları, kullanıcı şifreleri, veritabanı bağlantı bilgileri, URL’ler gibi hassas veriler, genellikle bu stringlerde yer alabilir. Bu tür veriler, şifrelenmeden ve güvensiz bir şekilde uygulama içinde saklandığında, yetkisiz kişiler tarafından ele geçirilebilir ve kötüye kullanılabilir.


APK dosyalarında string veriler genellikle res/values/strings.xml dosyasında, kullanıcıya gösterilen metinler için saklanırken, hassas veriler ve API anahtarları smali ve dex dosyalarında sabitlenmiş (hardcoded) şekilde bulunabilir.




11. ABUSED PERMISSIONS (Kötüye Kullanılan İzinler)

  • Uygulamanın kötüye kullanım riski taşıyan izinleri analiz edilir. SMS gönderme, harici depolama yazma gibi izinler, zararlı yazılımlar tarafından yaygın olarak kullanılmaktadır.



12. Kod Analizi 

MobSF’in Code Analysis sekmesi, mobil uygulamaların kaynak kodunu statik olarak analiz ederek güvenlik açıklarını tespit etmek için kullanılan bir araçtır. Bu sekme, hassas bilgilerin günlük dosyalarına kaydedilmesi, hassas verilerin geçici dosyalara yazılması, üretim yapılandırmasında debug modunun açık olması, SQL enjeksiyonuna yol açabilecek güvenilmeyen kullanıcı girdileri ve şifrelenmeden veritabanına yazılan hassas bilgiler gibi güvenlik açıklarını tespit eder. Ayrıca, harici depolama alanına yapılan yanlış erişimler ve diğer uygulamaların bu verilere erişebilmesi gibi dışa veri sızma risklerini de kontrol eder. MobSF, tespit edilen açıklarla ilgili detaylı raporlar sunarak geliştiricilerin güvenlik önlemleri almasını sağlar ve uygulamanın genel güvenliğini artırmalarına yardımcı olur.




MobSF’in Malware Lookup sekmesi, mobil uygulamanın zararlı  yazılım içerip içermediğini tespit etmek için kullanılır, ancak Triage Report doğrudan zararlı yazılım tespiti yapmaz. Bunun yerine, genel bir güvenlik değerlendirmesi sağlar. Diğer raporlar (VirusTotal Report, MetaDefender Report, ve Hybrid Analysis Report) ise, uygulamanın zararlı yazılım içeriği açısından taranmasını sağlayan ve daha derinlemesine analizler sunan araçlardır.



Ahmet Buğra Demirel

|

25 Haziran 2025