Uygulama Korumalı Alanı

Android platformu, uygulama kaynaklarını tanımlamak ve izole etmek için Linux kullanıcı tabanlı korumanın avantajlarından yararlanır. Bu, uygulamaları birbirinden yalıtır ve uygulamaları ve sistemi kötü amaçlı uygulamalardan korur. Bunu yapmak için Android, her Android uygulamasına benzersiz bir kullanıcı kimliği (UID) atar ve bunu kendi sürecinde çalıştırır.

Android, çekirdek düzeyinde bir Uygulama Korumalı Alanı oluşturmak için UID'yi kullanır. Çekirdek, uygulamalara atanan kullanıcı ve grup kimlikleri gibi standart Linux olanakları aracılığıyla uygulamalar ve sistem arasındaki güvenliği süreç düzeyinde sağlar. Varsayılan olarak uygulamalar birbirleriyle etkileşime giremez ve işletim sistemine sınırlı erişime sahiptir. A uygulaması, B uygulamasının verilerini okumak veya izinsiz telefonu çevirmek gibi kötü amaçlı bir şey yapmaya çalışırsa, uygun varsayılan kullanıcı ayrıcalıklarına sahip olmadığı için bunu yapması engellenir. Korumalı alan basit, denetlenebilir ve süreçlerin ve dosya izinlerinin onlarca yıllık UNIX tarzı kullanıcı ayrımına dayalıdır.

Uygulama Korumalı Alanı çekirdekte olduğundan, bu güvenlik modeli hem yerel kodu hem de işletim sistemi uygulamalarını kapsar. İşletim sistemi kitaplıkları, uygulama çerçevesi, uygulama çalışma zamanı ve tüm uygulamalar gibi çekirdeğin üzerindeki tüm yazılımlar Uygulama Korumalı Alanında çalışır. Bazı platformlarda geliştiriciler belirli bir geliştirme çerçevesi, API kümesi veya dille sınırlıdır. Android'de, güvenliği sağlamak için gereken bir uygulamanın nasıl yazılabileceğine dair herhangi bir kısıtlama yoktur; bu bakımdan yerel kod, yorumlanmış kod kadar korumalı alana alınır.

Korumalar

Genel olarak, uygun şekilde yapılandırılmış bir cihazda Uygulama Korumalı Alanından çıkmak için Linux çekirdeğinin güvenliğinden ödün verilmesi gerekir. Bununla birlikte, diğer güvenlik özelliklerine benzer şekilde, uygulama sanal alanını uygulayan bireysel korumalar da dayanıklı değildir; bu nedenle, tekli güvenlik açıklarının işletim sisteminin veya diğer uygulamaların güvenliğinin ihlal edilmesine yol açmasını önlemek için derinlemesine savunma önemlidir.

Android, uygulama sanal alanını zorlamak için bir dizi korumayı kullanır. Bu yaptırımlar zamanla uygulamaya konmuş ve orijinal UID tabanlı isteğe bağlı erişim denetimi (DAC) sanal alanını önemli ölçüde güçlendirmiştir. Önceki Android sürümleri aşağıdaki korumaları içeriyordu:

  • Android 5.0'da SELinux, sistem ve uygulamalar arasında zorunlu erişim kontrolü (MAC) ayrımı sağladı. Ancak tüm üçüncü taraf uygulamalar aynı SELinux bağlamında çalışıyordu, dolayısıyla uygulamalar arası izolasyon öncelikle UID DAC tarafından uygulanıyordu.
  • Android 6.0'da SELinux sanal alanı, uygulamaları fiziksel kullanıcı sınırına göre izole edecek şekilde genişletildi. Buna ek olarak Android, uygulama verileri için daha güvenli varsayılanlar da belirledi: targetSdkVersion >= 24 olan uygulamalar için, bir uygulamanın ana dizinindeki varsayılan DAC izinleri 751'den 700'e değiştirildi. Bu, özel uygulama verileri için daha güvenli bir varsayılan sağladı (ancak uygulamalar bu varsayılanları geçersiz kılabilir) .
  • Android 8.0'da tüm uygulamalar, uygulamaların kullanmasına izin verilen sistem çağrılarını sınırlayan ve böylece uygulama/çekirdek sınırını güçlendiren bir seccomp-bpf filtresiyle çalışacak şekilde ayarlandı.
  • Android 9'da targetSdkVersion >= 28 sahip tüm ayrıcalıklı olmayan uygulamalar, uygulama bazında MAC sağlayacak şekilde ayrı SELinux sanal alanlarında çalışmalıdır. Bu koruma, uygulama ayrımını iyileştirir, güvenli varsayılanların geçersiz kılınmasını önler ve (en önemlisi) uygulamaların veri dünyasını erişilebilir hale getirmesini engeller.
  • Android 10'da uygulamalar, dosya sisteminin sınırlı bir ham görünümüne sahiptir ve /sdcard/DCIM gibi yollara doğrudan erişim yoktur. Ancak uygulamalar, Context.getExternalFilesDir() gibi uygulanabilir yöntemlerin döndürdüğü şekilde pakete özgü yollara tam ham erişimi korur.

Dosya paylaşımına ilişkin yönergeler

Uygulama verilerini dünya çapında erişilebilir olacak şekilde ayarlamak zayıf bir güvenlik uygulamasıdır. Erişim herkese verilir ve erişimi yalnızca amaçlanan alıcı/alıcılarla sınırlamak mümkün değildir. Bu uygulama, bilgilerin ifşa edilmesine ve yardımcı güvenlik açıklarının karıştırılmasına yol açmıştır ve hassas verilere sahip uygulamaları (e-posta istemcileri gibi) hedefleyen kötü amaçlı yazılımların favori hedefidir. Android 9 ve üzeri sürümlerde, targetSdkVersion>=28 özelliğine sahip uygulamalar için dosyaların bu şekilde paylaşılmasına açıkça izin verilmez.

Uygulama verilerini dünya çapında erişilebilir hale getirmek yerine, dosyaları paylaşırken aşağıdaki yönergeleri kullanın:

  • Uygulamanızın başka bir uygulamayla dosya paylaşması gerekiyorsa bir içerik sağlayıcı kullanın. İçerik sağlayıcılar, verileri uygun ayrıntı düzeyinde ve dünyanın her yerinden erişilebilen UNIX izinlerinin pek çok dezavantajı olmadan paylaşırlar (ayrıntılar için İçerik sağlayıcıyla ilgili temel bilgiler bölümüne bakın).
  • Uygulamanızda gerçekten tüm dünyanın erişebilmesi gereken dosyalar (fotoğraflar gibi) varsa, bunların medyaya özel olması (yalnızca fotoğraflar, videolar ve ses dosyaları) ve MediaStore sınıfı kullanılarak saklanması gerekir. (Medya öğesinin nasıl ekleneceği hakkında daha fazla ayrıntı için bkz . Paylaşılan depolama alanından medya dosyalarına erişme .)

Depolama çalışma zamanı izni, MediaStore aracılığıyla türü kesin olarak belirlenmiş koleksiyonlara erişimi denetler. PDF'ler ve MediaStore.Downloads sınıfı gibi zayıf yazılmış dosyalara erişmek için uygulamaların ACTION_OPEN_DOCUMENT amacı gibi amaçları kullanması gerekir.

Android 10 davranışını etkinleştirmek için requestLegacyExternalStorage bildirim özelliğini kullanın ve Uygulama izinleri ile ilgili en iyi uygulamaları izleyin.

  • Bildirim bayrağı varsayılan değeri, Android 9'u (ve daha eskisini) hedefleyen uygulamalar için true .
  • Android 10'u hedefleyen uygulamalar için varsayılan değer false'tur. Android 10'u hedefleyen uygulamalarda filtrelenmiş depolama görünümünü geçici olarak devre dışı bırakmak için bildirim bayrağının değerini true olarak ayarlayın.
  • Yükleyici, kısıtlı izinleri kullanarak korumalı alan olmayan depolama için izin verilen uygulamaları beyaz listeye alır. Beyaz listede olmayan uygulamalar korumalı alana alınır.