Android'de Güvenliği Artırılmış Linux

Android güvenlik modelinin bir parçası olarak Android, kök/süper kullanıcı ayrıcalıklarıyla (Linux yetenekleri) çalışan süreçler dahil tüm süreçlerde zorunlu erişim kontrolünü (MAC) uygulamak için Güvenliği Geliştirilmiş Linux (SELinux) kullanır. Birçok şirket ve kuruluş, Android'in SELinux uygulamasına katkıda bulunmuştur. SELinux ile Android, sistem hizmetlerini daha iyi koruyabilir ve sınırlayabilir, uygulama verilerine ve sistem günlüklerine erişimi kontrol edebilir, kötü amaçlı yazılımların etkilerini azaltabilir ve kullanıcıları mobil cihazlardaki olası kod kusurlarından koruyabilir.

SELinux, varsayılan reddetme ilkesine göre çalışır: Açıkça izin verilmeyen her şey reddedilir. SELinux iki global modda çalışabilir:

  • İzin reddinin günlüğe kaydedildiği ancak zorunlu tutulmadığı izinli mod.
  • İzin reddinin hem günlüğe kaydedildiği hem de uygulandığı zorlama modu.

Android, zorlama modunda SELinux'u ve AOSP'de varsayılan olarak çalışan ilgili bir güvenlik politikasını içerir. Zorlama modunda, izin verilmeyen eylemler engellenir ve tüm ihlal teşebbüsleri çekirdek tarafından dmesg ve logcat kaydedilir. Geliştirme yaparken, bunları uygulamadan önce yazılımınızı ve SELinux ilkelerinizi iyileştirmek için bu hataları kullanmalısınız. Daha fazla ayrıntı için bkz. SELinux'u Uygulama .

SELinux ayrıca, sistemin geri kalanını küresel zorlama moduna geçirirken belirli etki alanlarının (süreçlerin) izinli hale getirilebildiği etki alanı başına izinli bir modu da destekler. Etki alanı, aynı etki alanı ile etiketlenen tüm süreçlerin güvenlik politikası tarafından aynı şekilde ele alındığı, güvenlik politikasındaki bir süreci veya bir dizi süreci tanımlayan bir etikettir. Etki alanı başına izinli mod, SELinux'un sistemin sürekli artan bir bölümüne aşamalı olarak uygulanmasını ve yeni hizmetler için politika geliştirmeyi (sistemin geri kalanını zorunlu tutarken) sağlar.

Arka plan

Android güvenlik modeli, kısmen uygulama sanal alanları kavramına dayanmaktadır. Her uygulama kendi korumalı alanında çalışır. Android 4.3'ten önce, bu sanal alanlar, kurulum sırasında her uygulama için benzersiz bir Linux UID'si oluşturularak tanımlandı. Android 4.3 ve sonraki sürümleri, Android uygulama sanal alanının sınırlarını daha fazla tanımlamak için SELinux'u kullanır.

Android 5.0 ve sonraki sürümlerde, SELinux, Android 4.3'ün izin verilen sürümüne ve Android 4.4'ün kısmi uygulamasına dayalı olarak tamamen uygulanır. Bu değişiklikle birlikte Android, sınırlı bir dizi önemli etki alanında ( installd , netd , vold ve zygote ) zorlamadan her şeye (60'tan fazla alan) geçti. özellikle:

  • Android 5.x ve sonraki sürümlerde her şey zorlama modundadır.
  • init etki alanında init dışında hiçbir işlem çalışmamalıdır.
  • Herhangi bir genel reddetme ( block_device , socket_device , default_service için), cihazın özel bir etki alanına ihtiyacı olduğunu gösterir.

Android 6.0, kullanıcılar arasında daha iyi izolasyon, IOCTL filtreleme, açıkta kalan hizmetlere yönelik tehdidin azaltılması, SELinux etki alanlarının daha da sıkılaştırılması ve son derece sınırlı /proc erişimini içerecek şekilde politikamızın izin verilebilirliğini azaltarak sistemi sağlamlaştırdı.

Android 7.0, uygulama sanal alanını daha da kilitlemek ve saldırı yüzeyini azaltmak için SELinux yapılandırmasını güncelledi. Bu sürüm ayrıca izinlerin kapsamını azaltmak için monolitik medya sunucusu yığınını daha küçük işlemlere böldü. Daha fazla ayrıntı için, bkz. Android'i daha fazla Linux çekirdek savunmasıyla koruma ve Medya yığınını sağlamlaştırma .

Android 8.0, SELinux'u, alt düzey satıcı kodunu Android sistem çerçevesinden ayıran Treble ile çalışacak şekilde güncelledi. Bu sürüm, cihaz üreticilerinin ve boot.img satıcılarının politikanın kendi bölümlerini güncellemelerine, görüntülerini oluşturmalarına ( vendor.img .

Cihazda daha yüksek/daha yeni platform (çerçeve) sürümünün çalışması mümkün olsa da, tersi durum desteklenmemektedir; satıcı resimleri ( vendor.img/odm.img ) platformdan ( system.img ) daha yeni bir sürüme sahip olamaz. Bu nedenle, platform SELinux ilkesi, ilkenin satıcı SELinux bölümlerinden daha yeni bir sürümde olduğundan, daha yeni bir platform sürümü SELinux uyumluluk sorunlarına neden olabilir. Android 8.0 modeli, gereksiz eşzamanlı OTA'ları önlemek için uyumluluğu korumak için bir yöntem sağlar.

Ek kaynaklar

Yararlı SELinux ilkeleri oluşturma konusunda yardım için aşağıdaki kaynaklara bakın. Bazı SELinux kavramları Android tarafından kullanılmaz, harici belgeleri değerlendirirken Özgüllük bölümüne bakın.