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 denetimi (MAC) uygulamak için Security-Enhanced Linux (SELinux) kullanır. Android'in SELinux uygulamasına birçok şirket ve kuruluş 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 genel modda çalışabilir:
- İzin reddetmelerinin günlüğe kaydedildiği ancak uygulanmadığı izin verici mod.
- İzin reddetmelerinin 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 önlenir ve tüm ihlal girişimleri çekirdek tarafından dmesg
ve logcat
kaydedilir. Geliştirme sırasında, 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ı genel zorlama moduna alırken belirli alanların (işlemlerin) izin verilebilir hale getirilebildiği etki alanı başına izin verme modunu da destekler. Bir etki alanı, aynı etki alanıyla etiketlenen tüm işlemlerin güvenlik ilkesi tarafından aynı şekilde ele alındığı, güvenlik ilkesindeki bir işlemi veya işlemler kümesini tanımlayan bir etikettir. Etki alanı başına izin veren mod, SELinux'un sistemin sürekli artan bir kısmına artımlı olarak uygulanmasına ve yeni hizmetler için politika geliştirilmesine (sistemin geri kalanını zorlamaya devam ederken) olanak tanır.
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 korumalı alanlar, yükleme sırasında her uygulama için benzersiz bir Linux UID'si oluşturularak tanımlanıyordu. 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, Android 4.3'ün izin verilen sürümü ve Android 4.4'ün kısmi uygulaması üzerine inşa edilerek SELinux tam olarak uygulanır. Bu değişiklikle Android, sınırlı sayıda önemli etki alanı ( installd
, netd
, vold
ve zygote
) üzerinde 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ındainit
dışında hiçbir işlem çalışmamalıdır. - Herhangi bir genel reddetme (
block_device
,socket_device
,default_service
için), aygıtın özel bir etki alanına ihtiyacı olduğunu gösterir.
Android 6.0, kullanıcılar arasında daha iyi yalıtım, IOCTL filtreleme, açığa çıkan hizmetlerde daha az tehdit, 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 sağlamlaştırdı.
Android 7.0, uygulama sanal alanını daha fazla kilitlemek ve saldırı yüzeyini azaltmak için SELinux yapılandırmasını güncelledi. Bu sürüm aynı zamanda izinlerinin kapsamını azaltmak için yekpare medya sunucusu yığınını daha küçük işlemlere ayırdı. Daha fazla ayrıntı için bkz. Android'i daha fazla Linux çekirdeği savunmasıyla koruma ve Ortam yığınını güçlendirme .
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, SELinux politikasını güncelleyerek cihaz üreticilerinin ve SOC satıcılarının politikanın kendi kısımlarını güncellemelerine, kendi imajlarını ( vendor.img
, boot.img
, vb.) oluşturmalarına ve ardından bu imajları platformdan bağımsız olarak güncellemelerine veya tam tersine izin verecek şekilde güncellendi.
Cihazda daha yüksek/daha yeni bir platform (çerçeve) sürümünün çalışması mümkün olsa da, bunun tersi desteklenmez; 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 yol açabilir. 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.
- SELinux Not Defteri , 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 politika uygulaması için görsel nasıl yapılır kılavuzunuz
- Linux için Güvenlik İyileştirmeleri
- Gelişmiş Güvenlik (SE) Android: Esnek MAC'i Android'e Getirmek
- SELinux'u Linux Güvenlik Modülü Olarak Uygulamak
- SELinux Politikasını Yapılandırma