Android platformu, uygulama kaynaklarını belirlemek ve izole etmek için Linux kullanıcı tabanlı korumadan 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 onu kendi sürecinde ç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 zorlar. 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ı süreçleri 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 bağlamda, 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. Ancak, 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. Ayrıca Android, uygulama verileri için daha güvenli varsayılanlar 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
olan tüm ayrıcalıklı olmayan uygulamalar, uygulama bazında MAC sağlayarak 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, /sdcard/DCIM gibi yollara doğrudan erişim olmaksızın dosya sisteminin sınırlı bir ham görünümüne sahiptir. Ancak uygulamalar, Context.getExternalFilesDir() gibi herhangi bir uygulanabilir yöntem tarafından döndürüldüğü gibi, pakete özel yollarına tam ham erişimi korur.
Dosyaları paylaşmak için yönergeler
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 yardımcı güvenlik açıklarının karışmasına neden oldu 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, bu şekilde dosya paylaşımına, targetSdkVersion>=28
ile uygulamalar için açıkça izin verilmez.
Uygulama verilerini dünya çapında erişilebilir kılmak 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üzeyiyle ve dünya çapında erişilebilen UNIX izinlerinin birçok dezavantajı olmadan paylaşır (ayrıntılar için İçerik sağlayıcı temel bilgilerine bakın).
- Uygulamanızda gerçekten dünyanın erişebileceği dosyalar varsa (fotoğraflar gibi), medyaya özel (yalnızca fotoğraflar, videolar ve ses dosyaları) olmalı ve MediaStore sınıfı kullanılarak depolanmalıdır. (Bir 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 kesin olarak girilmiş koleksiyonlara erişimi kontrol eder. Uygulamalar, PDF'ler ve MediaStore.Downloads sınıfı gibi zayıf yazılmış dosyalara erişmek için ACTION_OPEN_DOCUMENT amacı gibi amaçlar kullanmalıdır.
Android 10 davranışını etkinleştirmek için requestLegacyExternalStorage
bildirim özniteliğini kullanın ve Uygulama izinleriyle 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ünden geçici olarak çıkmak için bildirim bayrağının değerini
true
olarak ayarlayın. - 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.