Android güvenlik modelinin bir parçası olarak Android, kök/süper kullanıcı ayrıcalıklarıyla (Linux yetenekleri) çalışan işlemler de dahil olmak üzere tüm işlemler üzerinde zorunlu erişim kontrolünü (MAC) uygulamak için Güvenliği Geliştirilmiş Linux'u (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ırlandırabilir, 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 redlerinin günlüğe kaydedildiği ancak uygulanmadığı izin verilen mod.
- İzin redlerinin hem günlüğe kaydedildiği hem de zorunlu kılındığı 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 girişimleri çekirdek tarafından dmesg
ve logcat
kaydedilir. Geliştirme sırasında, yazılımınızı ve SELinux politikalarınızı uygulamadan önce iyileştirmek için bu hataları kullanmalısınız. Daha fazla ayrıntı için bkz. SELinux'u Uygulamak .
SELinux ayrıca, sistemin geri kalanını genel zorlama moduna geçirirken belirli alanların (işlemlerin) izin verilebilir hale getirilebildiği etki alanı başına izin veren modu da destekler. Etki alanı, güvenlik ilkesindeki bir işlemi veya işlemler kümesini tanımlayan bir etikettir; burada aynı etki alanıyla etiketlenen tüm işlemler, güvenlik ilkesi tarafından aynı şekilde ele alınır. Etki alanı başına izin veren mod, SELinux'un sistemin giderek artan bir kısmına artımlı olarak uygulanmasına ve yeni hizmetler için politika geliştirilmesine olanak tanır (sistemin geri kalanını zorlayıcı tutarken).
Arka plan
Android güvenlik modeli kısmen uygulama sanal alanları kavramına dayanmaktadır. Her uygulama kendi sanal alanında çalışır. Android 4.3'ten önce bu sanal alanlar, kurulum sırasında her uygulama için benzersiz bir Linux UID'sinin oluşturulmasıyla tanımlanıyordu. Android 4.3 ve üzeri, Android uygulama sanal alanının sınırlarını daha da tanımlamak için SELinux'u kullanır.
Android 5.0 ve sonraki sürümlerde, SELinux tamamen uygulanır ve Android 4.3'ün izin verilen sürümü ve Android 4.4'ün kısmi uygulanması temel alınır. Bu değişiklikle birlikte Android, sınırlı sayıdaki önemli alan adları ( installd
, netd
, vold
ve zygote
) üzerindeki yaptırımdan her şeye (60'tan fazla alan adı) geçiş yaptı. Özellikle:
- Android 5.x ve üzeri sürümlerde her şey zorlama modundadır.
-
init
alanındainit
dışında hiçbir işlem çalışmamalıdır. - Herhangi bir genel reddi (
block_device
,socket_device
,default_service
için), cihazın özel bir alana ihtiyacı olduğunu gösterir.
Android 6.0, kullanıcılar arasında daha iyi izolasyon, IOCTL filtreleme, açığa çıkan hizmetlere yönelik tehditlerin azaltılması, SELinux etki alanlarının daha da sıkılaştırılması ve son derece sınırlı /proc
erişimi içerecek şekilde politikamızın izin verilebilirliğini azaltarak sistemi güçlendirdi.
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ı daraltmak için monolitik medya sunucusu yığınını daha küçük süreçlere ayırdı. Daha fazla ayrıntı için Android'i daha fazla Linux çekirdek savunmasıyla koruma ve Medya yığınını güçlendirme bölümlerine bakın.
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 SOC satıcılarının politikanın kendi bölümlerini güncellemesine, kendi görüntülerini ( vendor.img
, boot.img
, vb.) oluşturmasına ve ardından bu görüntüleri platformdan bağımsız olarak güncellemesine (veya tam tersi) izin vermek için SELinux politikasını güncelledi.
Cihazda daha yüksek/daha yeni platform (çerçeve) sürümünün çalıştırılması mümkün olsa da bunun tersi durum desteklenmez; satıcı görselleri ( vendor.img/odm.img
) platformdan ( system.img
) daha yeni bir sürüme sahip olamaz. Bu nedenle, daha yeni bir platform sürümü, SELinux uyumluluk sorunlarına yol açabilir çünkü platform SELinux politikası, politikanın satıcı SELinux bölümlerinden daha yeni bir sürümdedir. Android 8.0 modeli, gereksiz eşzamanlı OTA'ları önlemek amacıyla uyumluluğu koruyan bir yöntem sağlar.
Ek kaynaklar
Yararlı SELinux ilkeleri oluşturma konusunda yardım için aşağıdaki kaynaklara bakın.
- SELinux Notebook , SELinux için güncel referans. Bu belge politika dili, anahtar kelimelerin her birinin anlamı ve güvenlik bağlamlarının nasıl hesaplandığı hakkında daha fazla ayrıntı içerir.
- SELinux politikasının uygulanması için görsel nasıl yapılır rehberiniz
- Linux için Güvenlik Geliştirmeleri
- Güvenliği Geliştirilmiş (SE) Android: Esnek MAC'i Android'e Getirme
- SELinux'u Linux Güvenlik Modülü olarak uygulamak
- SELinux Politikasını Yapılandırma