Android platformu, uygulama kaynaklarını tanımlamak ve izole etmek için Linux kullanıcı tabanlı korumadan yararlanır. Bu, uygulamaları birbirinden izole eder 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 Uygulama Korumalı Alanını ayarlamak için UID'yi kullanır. Çekirdek, uygulamalara atanan kullanıcı ve grup kimlikleri gibi standart Linux tesisleri aracılığıyla uygulamalar ile sistem arasında güvenliği süreç düzeyinde zorlar. Varsayılan olarak, uygulamalar birbirleriyle etkileşim kuramaz ve işletim sistemine sınırlı erişime sahip olur. Uygulama A, B uygulamasının verilerini okumak veya telefonu izinsiz ç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. Sanal alan basittir, denetlenebilir ve onlarca yıllık UNIX tarzı kullanıcı işlem ve dosya izinlerine dayanır.
Uygulama Korumalı Alanı çekirdekte olduğu için, bu güvenlik modeli hem yerel koda hem de işletim sistemi uygulamalarına kadar uzanır. İş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 bağlamda, yerel kod, yorumlanan kod kadar korumalı alana alınır.
Korumalar
Genel olarak, düzgün yapılandırılmış bir aygıtta 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 da yenilmez değildir, bu nedenle, tek güvenlik açıklarının işletim sisteminin veya diğer uygulamaların tehlikeye atılmasına yol açmasını önlemek için derinlemesine savunma önemlidir.
Android, uygulama sanal alanını zorunlu kılmak için bir dizi korumaya güvenir. Bu yaptırımlar zaman içinde uygulamaya kondu 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:
- SELinux, Android 5.0'da sistem ve uygulamalar arasında zorunlu erişim kontrolü (MAC) ayırımı sağladı. Bununla birlikte, tüm üçüncü taraf uygulamaları aynı SELinux bağlamında çalıştığı için uygulamalar arası izolasyon öncelikle UID DAC tarafından zorlandı.
- Android 6.0'da, SELinux korumalı alanı, uygulamaları fiziksel kullanıcı sınırı boyunca izole etmek için genişletildi. Ayrıca Android, uygulama verileri için daha güvenli varsayılanlar da ayarladı:
targetSdkVersion >= 24olan uygulamalar için, bir uygulamanın ana
targetSdkVersion >= 24varsayılan DAC izinleri
targetSdkVersion >= 24700'e değiştirildi. Bu, özel uygulama verileri için daha güvenli bir varsayılan sağladı (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-bpffiltresiyle çalışacak şekilde ayarlandı.
- Android 9'da
targetSdkVersion >= 28sahip ayrıcalıklı olmayan tüm uygulamalar, uygulama başına MAC sağlayan ayrı SELinux korumalı 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ünyaları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 herhangi bir uygulanabilir yöntemle döndürüldüğü üzere, pakete özgü yollarına tam ham erişimi korur.
Dosya paylaşma kuralları
Uygulama verilerini dünyanın her yerinden erişilebilir olarak ayarlamak zayıf bir güvenlik uygulamasıdır. Erişim herkese verilir ve erişimi yalnızca hedeflenen alıcılarla sınırlamak mümkün değildir. Bu uygulama, bilgi ifşası sızıntılarına ve kafa karıştırıcı yardımcı güvenlik açıklarına yol açmıştır 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 sonraki sürümlerde,
targetSdkVersion>=28 olan uygulamalar için dosyaların bu şekilde paylaşılmasına açıkça izin verilmez.
Uygulama verilerini herkes için erişilebilir yapmak 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 herkes tarafından erişilebilen UNIX izinlerinin pek çok dezavantajı olmadan paylaşır (ayrıntılar için, İçerik sağlayıcı temel bilgilerine bakın).
- Uygulamanızda gerçekten dünya tarafından erişilebilir olması gereken dosyalar (fotoğraflar gibi) varsa, bunlar medyaya özgü olmalı (yalnızca fotoğraflar, videolar ve ses dosyaları) veMediaStore sınıfı kullanılarak depolanmalıdır. (Bir medya öğesinin nasıl ekleneceği hakkında daha fazla ayrıntı için bkz. Medya dosyalarına paylaşılan depodan erişme .)
Depolama çalışma zamanı izni, MediaStore aracılığıyla türü kesin 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.
- Manifest bayrağı varsayılan değeri, Android 9'u (ve önceki sürümleri) 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 manifest bayrağının değerini
true.
- Yükleyici, kısıtlı izinleri kullanarak korumalı alanda olmayan depolama için izin verilen uygulamaları beyaz listeye ekler. Beyaz listede olmayan uygulamalar korumalı alana alınır.