Android platformu, aşağıdakileri yapmak için Linux kullanıcı tabanlı koruma özelliğinden yararlanır. uygulama kaynaklarını tespit edip izole etme. Bu sayede uygulamalar birbirinden izole edilir ve hem uygulamalar hem de sistem kötü amaçlı uygulamalardan korunur. Android bunu yapmak için Her Android uygulamasına benzersiz kullanıcı kimliği (UID) ekler ve bunu kendi içinde çalıştırır bahsedeceğim.
Android, çekirdek düzeyinde Uygulama Korumalı Alanı oluşturmak için UID'yi kullanır. İlgili içeriği oluşturmak için kullanılan çekirdek, uygulamalar ile sistem arasında işlem düzeyinde güvenliği zorunlu kılar atanan kullanıcı ve grup kimlikleri gibi standart Linux tesisleri aracılığıyla hoş geldiniz. Varsayılan olarak uygulamalar birbirleriyle etkileşime geçemez ve işletim sistemine erişmelerini isteyebilirler. A uygulaması, B uygulamasının verilerini okumak veya telefon araması yapmak gibi kötü amaçlı bir işlem yapmaya çalışırsa uygun varsayılan kullanıcı ayrıcalıklarına sahip olmadığı için bu işlem yapması engellenir. Korumalı alan basit, denetlenebilirdir ve on yıllardır kullanılan UNIX tarzı kullanıcı ayırma işlemlerine ve dosya izinlerine dayanır.
Uygulama Korumalı Alanı çekirdekte bulunduğundan, hem yerel kod hem de işletim sistemi uygulamalarını kapsar. Yukarıda belirtilen tüm yazılımlar çekirdeklerini inceleyip görebilirler. Uygulama Korumalı Alanı'nda çalıştırılmalıdır. Bazı platformlarda geliştiriciler belirli bir geliştirme çerçevesi, API grubu veya dil ile sınırlıdır. Android'de, güvenliğin uygulanması için bir uygulamanın nasıl yazılabileceğiyle ilgili herhangi bir kısıtlama yoktur. Bu açıdan yerel kod, yorumlanmış kod kadar korumalı bir alandadır.
Korumalar
Genellikle, düzgün yapılandırılmış bir cihazda Uygulama Korumalı Alanı'ndan çıkmak için Linux çekirdeğinin güvenliğinin ihlal edilmesi gerekir. Ancak diğer güvenlik özelliklerine benzer şekilde, uygulama korumalı alanını zorunlu kılan bireysel korumalar saldırılara karşı bağışık değildir. Bu nedenle, tek bir güvenlik açığının işletim sisteminin veya diğer uygulamaların güvenliğini ihlal etmesini önlemek için derinlemesine savunma önemlidir.
Android, uygulama korumalı alanını zorunlu kılmak için çeşitli korumalardan yararlanır. Bu yaptırımlar zaman içinde yürürlüğe girdi ve orijinal UID tabanlı isteğe bağlı erişim denetimini önemli ölçüde güçlendirdi (DAC) korumalı alanı. Önceki Android sürümleri aşağıdaki korumaları içeriyordu:
- SELinux, Android 5.0'da zorunlu erişim denetimi (MAC) ayırması sağlıyordu sistem ve uygulamalar arasında geçiş yapın. Ancak, tüm üçüncü taraf uygulamaları aynı Uygulama arası izolasyonun öncelikli olarak UID DAC tarafından zorunlu kılınması için SELinux bağlamı.
- Android 6.0'ta SELinux korumalı alanı, uygulamaları fiziksel kullanıcı başına sınırda izole edecek şekilde genişletildi. Bunun yanı sıra Android,
uygulama verileri:
targetSdkVersion >= 24
içeren uygulamalar için varsayılan Bir uygulamanın ana sayfa dizininde DAC izinleri 751'den 700'e değiştirildi. Bu sağlanan özel uygulama verileri için daha güvenli bir varsayılan ayardır (ancak uygulamalar bunları geçersiz kılabilir varsayılan olarak ayarlanır). - Android 8.0'da tüm uygulamalar
seccomp-bpf
ile çalışacak şekilde ayarlanmıştı. Bu da, izin verilen syscall'ları sınırlayan bir filtre uygular. uygulama/çekirdek sınırını güçlendirmek. - Android 9'da
targetSdkVersion >= 28
içeren ayrıcalıklı olmayan tüm uygulamalar, MAC'i uygulama bazında sağlayarak ayrı SELinux korumalı alanlarında çalışmalıdır. Bu koruma, uygulama ayırımını iyileştirir, güvenli varsayılan değerlerin geçersiz kılınmasını önler ve (en önemlisi) uygulamaların verilerini dünya genelinde 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şemez. Ancak uygulamalar herhangi bir güvenlik anahtarının döndürdüğü, pakete özgü yollarına Context.getExternalFilesDir() gibi geçerli yöntemler kullanılır.
Dosya paylaşma kuralları
Uygulama verilerini dünya genelinde erişilebilir olarak ayarlamak kötü bir güvenlik uygulamasıdır. Erişim herkese verilir ve erişimi yalnızca amaçlanan alıcılarla sınırlamak mümkün değildir. Bu uygulama, bilgi açıklama sızıntılarına ve kafa karıştırıcı yardımcı güvenlik açıklarına yol açmıştır. Ayrıca, hassas verileri olan 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 paylaşım
targetSdkVersion>=28
Uygulama verilerini dünya genelinde erişilebilir hale getirmek yerine, dosya paylaşırken aşağıdaki yönergeleri kullanın:
- Uygulamanızın başka bir uygulamayla dosya paylaşması gerekiyorsa içerik sağlayıcı. İçerik sağlayıcılar, verileri herkese açık UNIX izinlerinin birçok olumsuz yönünü ortadan kaldırarak uygun ayrıntı düzeyinde paylaşır (ayrıntılar için İçerik sağlayıcılarla ilgili temel bilgiler başlıklı makaleyi inceleyin).
- Uygulamanızda herkese açık olması gereken dosyalar (ör. fotoğraflar) varsa bu dosyalar medyaya özel (yalnızca fotoğraflar, videolar ve ses dosyaları) olmalı ve MediaStore sınıfı kullanılarak depolanmalıdır. (Medya içeriği ekleme hakkında daha ayrıntılı öğesi için bkz. Paylaşılan depolama alanındaki medya dosyalarına erişin.)
Depolama çalışma zamanındaki izni, MediaStore aracılığıyla güçlü şekilde yazılmış koleksiyonlara erişimi kontrol eder.
PDF'ler ve MediaStore.Downloads sınıfı gibi zayıf yazılmış dosyalara erişmek için uygulamalar,
amaçlarına (ör. ACTION_OPEN_DOCUMENT
) sahip olmalıdır.
Android 10 davranışını etkinleştirmek için şunu kullanın:
requestLegacyExternalStorage
manifesto
özelliğini kullanın ve Uygulama izinleri ile ilgili en iyi uygulamaları izleyin.
- Android 9'u (ve önceki sürümleri) hedefleyen uygulamalar için manifest işaretinin varsayılan değeri
true
'tür. - Android 10'u hedefleyen uygulamalar için varsayılan değer false (yanlış) değerini alır. Filtrelenmiş reklamları geçici olarak devre dışı bırakmak için:
Android 10'u hedefleyen uygulamalardaki depolama alanı görünümü,
manifest işaretinin değerini
true
olarak ayarlayın. - Yükleyici, kısıtlanmış izinleri kullanarak korumalı olmayan depolama için izin verilen uygulamaları izin verilenler listesine ekler. İzin verilenler listesine eklenmeyen uygulamalar korumalıdır.