Uygulama Korumalı Alanı

Android platformu, uygulama kaynaklarını belirlemek ve izole etmek için Linux kullanıcı tabanlı korumadan yararlanır. Bu, uygulamaları birbirinden ayırı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 onu kendi işleminde çalıştırır.

Android, çekirdek düzeyinde bir Uygulama Korumalı Alanı kurmak için UID'yi kullanır. Çekirdek, uygulamalara atanan kullanıcı ve grup kimlikleri gibi standart Linux tesisleri aracılığıyla süreç düzeyinde uygulamalar ve sistem arasında güvenliği 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 olarak telefonu aramak 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 onlarca yıllık UNIX tarzı kullanıcı işlemleri ve dosya izinleri 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ı içinde çalışır. Bazı platformlarda geliştiriciler, belirli bir geliştirme çerçevesi, API kümesi veya dil ile sınırlıdır. Android'de, güvenliği sağlamak için gerekli olan bir uygulamanın nasıl yazılabileceği konusunda herhangi bir kısıtlama yoktur; bu bakımdan, yerel kod, yorumlanmış kod kadar korumalıdı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ı zorlayan bireysel korumalar zarar görmez değildir; bu nedenle, tek 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 korumaya güvenir. Bu yaptırımlar zamanla tanıtıldı ve orijinal UID tabanlı isteğe bağlı erişim denetimi (DAC) sanal alanını önemli ölçüde güçlendirdi. Önceki Android sürümleri aşağıdaki korumaları içeriyordu:

  • Android 5.0'da SELinux, sistem ve uygulamalar arasında zorunlu erişim denetimi (MAC) ayrımı sağladı. Ancak, tüm üçüncü taraf uygulamalar aynı SELinux bağlamında çalıştığından, uygulamalar arası yalıtım öncelikle UID DAC tarafından zorunlu kılındı.
  • Android 6.0'da, SELinux korumalı alanı, uygulamaları fiziksel kullanıcı başına sınır boyunca yalıtmak için genişletildi. Buna ek olarak, Android ayrıca uygulama verileri için daha güvenli varsayılan ayarlayın: ile uygulamalar için targetSdkVersion >= 24 , 700'e kadar 751'den değiştirildi Bir uygulamanın ev dir varsayılan DAC izinleri Bu özel uygulama verileri için daha güvenli varsayılan sağlanan (uygulamalar bu varsayılan geçersiz kılabilir rağmen) .
  • Android 8.0, tüm uygulamalar bir birlikte çalışacak şekilde ayarlanmış seccomp-bpf böylece app / çekirdek sınır güçlendirilmesi, uygulamalar kullanımına izin verildi syscalls sınırlı filtrenin.
  • Android 9'da tüm ayrıcalıklı olmayan uygulamalar targetSdkVersion >= 28 başına app bazında MAC sağlayan bireysel SELinux'un sanal alanlarında çalıştırmalısınız. 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, /sdcard/DCIM gibi yollara doğrudan erişim olmaksızın, dosya sisteminin sınırlı bir ham görünümüne sahiptir. Gibi herhangi bir geçerli yöntemler ile geri Ancak, uygulamalar, kendi paket spesifik yolları tamamına ham şekilde erişebilirler () Context.getExternalFilesDir .

Dosyaları paylaşma yönergeleri

Uygulama verilerini dünya çapında erişilebilir olarak ayarlamak, zayıf bir güvenlik uygulamasıdır. Erişim herkese verilir ve erişimi yalnızca hedeflenen alıcı(lar) ile sınırlamak mümkün değildir. Bu uygulama, bilgi ifşası sızıntılarına ve karmaşık güvenlik açıklarına yol açtı ve hassas verilere sahip uygulamaları (e-posta istemcileri gibi) hedefleyen kötü amaçlı yazılımlar için favori bir hedeftir. Android 9 ve üstü olarak, paylaşım bu şekilde açık bir şekilde belirtilen uygulamalar için izin verilmeyen dosyaları targetSdkVersion>=28 .

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

  • Başka bir uygulama ile dosya paylaşmak için uygulama ihtiyaçları olursa, kullanmak içerik sağlayıcı . İçerik sağlayıcılar uygun boyu ile ve dünyaca erişilebilir UNIX izinleri birçok olumsuz yanlarını olmadan veri paylaşımı (detaylar için, bakınız İçerik sağlayıcı temelleri ).
  • Uygulama (örneğin, fotoğraflar gibi) gerçekten dünyaya erişilebilir olmalıdır dosyaları varsa, bunlar medyaya özgü (fotoğraflar, videolar ve ses dosyaları için) kullanılarak saklanan olmalıdır Mediastore sınıfını. (Bir medya öğesi ekleme hakkında daha fazla ayrıntı için bkz paylaşılan depolama Erişim medya dosyalarını .)

Depolama çalışma zamanı izni denetimleri Mediastore aracılığıyla kesinlikle yazılan koleksiyonlarına erişin. Zayıf yazılan PDF gibi dosya ve erişmek için MediaStore.Downloads sınıfını, uygulamalar gibi amaçları kullanmalıdır ACTION_OPEN_DOCUMENT niyet.

Android 10 davranışını etkinleştirmek kullanmak için requestLegacyExternalStorage tezahür niteliğini ve izleyin uygulama izinlerini en iyi uygulamaları .

  • Tezahür bayrak varsayılan değerdir true Android'i 9 hedefleyen uygulamalar için (ve daha düşük).
  • Varsayılan değer geçici olarak tezahür Bayrağını değerini Android 10 hedefleme uygulamalarda süzülmüş depolama görüntüsü, devre dışı Android 10. To hedefleyen uygulamalar için yanlıştır true .
  • Yükleyici, kısıtlı izinleri kullanarak korumalı alan dışı depolama için izin verilen uygulamaları beyaz listeye alır. Beyaz listeye eklenmemiş uygulamalar korumalı alana alınır.