Android güvenlik modelinin bir parçası olarak, root/süper kullanıcı ayrıcalıklarına (Linux özellikleri) sahip işlemler de dahil olmak üzere tüm işlemler üzerinde zorunlu erişim denetimini (MAC) zorunlu kılmak için Güvenlik Gelişmiş Linux'u (SELinux) kullanır. Birçok şirket ve kuruluş, Android'in SELinux uygulamasına katkıda bulunmuştur. Android, SELinux ile 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 koddaki olası kusurlardan koruyabilir.
SELinux, varsayılan olarak reddetme ilkesine göre çalışır: Açıkça izin verilmeyen her şey reddedilir. SELinux iki genel modda çalışabilir:
- İzin reddedilmelerinin günlüğe kaydedildiği ancak zorunlu kılınmadığı izin verici modu.
- İzin reddedilmelerinin hem günlüğe kaydedildiği hem de zorunlu kılındığı Zorunlu Kılma modu.
Android, SELinux'u zorunlu modda ve AOSP'de varsayılan olarak çalışan ilgili bir güvenlik politikasıyla birlikte içerir. Zorunlu kılma modunda, izin verilmeyen işlemler engellenir ve tüm ihlal denemeleri çekirdek tarafından dmesg
ve logcat
'a kaydedilir. Geliştirme yaparken, yazılımınızı ve SELinux politikalarınızı uygulamadan önce bu hataları kullanarak hassaslaştırmanız gerekir. Daha fazla bilgi için SELinux'u uygulama başlıklı makaleyi inceleyin.
SELinux, sistemin geri kalanını genel yaptırım moduna yerleştirirken belirli alanların (işlemlerin) izin verilebilir hale getirilebileceği alan başına izin verilebilir modunu da destekler. Alan, güvenlik politikasındaki bir süreci veya işlem grubunu tanımlayan bir etikettir. Aynı alanla etiketlenen tüm süreçler, güvenlik politikası tarafından aynı şekilde ele alınır. Alan başına izin verilen mod, SELinux'un sistemin giderek artan bir bölümüne kademeli olarak uygulanmasını ve yeni hizmetler için politika geliştirmeyi sağlar (sistemin geri kalanı uygulanmaya devam eder).
Arka plan
Android güvenlik modeli kısmen uygulama korumalı alanları kavramına dayanır. Her uygulama kendi korumalı 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 oluşturularak tanımlanıyordu. Android 4.3 ve sonraki sürümler, Android uygulama korumalı 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, Android 4.3'ün izin verici sürümünü ve Android 4.4'ün kısmi yaptırımını temel alarak tamamen uygulanır.
Bu değişiklikle birlikte Android, sınırlı sayıda önemli alan adında (installd
, netd
, vold
ve zygote
) yaptırım uygulamaktan tüm alanlara (60'tan fazla alan adı) yaptırım uygulamaya geçti. Özellikle:
- Android 5.x ve sonraki sürümlerde her şey zorunlu moddadır.
init
alanındainit
dışında başka işlem çalıştırılmamalıdır.- Genel retler (
block_device
,socket_device
,default_service
için), cihazın özel bir alana ihtiyaç duyduğunu gösterir.
Android 6.0, kullanıcılar arasında daha iyi izolasyon, IOCTL filtreleme, açık hizmet tehdidinin azaltılması, SELinux 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 vericiliğini azaltarak sistemi güçlendirdi.
Android 7.0, uygulama korumalı alanını daha da kilitlemek ve saldırı yüzeyini azaltmak için SELinux yapılandırmasını güncelledi. Bu sürümde, izinlerinin kapsamını azaltmak için monolitik medya sunucusu yığını da daha küçük süreçlere bölündü. Daha fazla bilgi için Android'i daha fazla Linux çekirdek savunmasıyla koruma ve Medya yığınını güçlendirme başlıklı makaleleri inceleyin.
Android 8.0, SELinux'u Treble ile çalışacak şekilde güncelledi. Bu güncelleme, alt düzey tedarikçi kodunu Android sistem çerçevesinden ayırır. Bu sürüm, SELinux politikasını cihaz üreticilerinin ve SOC tedarikçilerinin politikadaki kendi bölümlerini güncellemelerine, kendi resimlerini (vendor.img
, boot.img
vb.) oluşturmalarına ve ardından bu resimleri platformdan bağımsız olarak güncellemelerine veya bunun tam tersini yapmalarına izin verecek şekilde güncelledi.
Cihazda daha yüksek/yeni bir platform (çerçeve) sürümünün çalışması mümkün olsa da bunun tersi desteklenmez; tedarikçi firma resimleri (vendor.img/odm.img
), platformdan (system.img
) daha yeni bir sürüme sahip olamaz. Bu nedenle, platform SELinux politikası, politikanın tedarikçi firma SELinux bölümlerinden daha yeni bir sürümde olduğu için daha yeni bir platform sürümü SELinux uyumluluğu sorunları ortaya çıkarabilir. Android 8.0 modeli, gereksiz eşzamanlı OTA'ları önlemek için uyumluluğu koruma yöntemi sunar.
Ek kaynaklar
Faydalı SELinux politikaları oluşturma konusunda yardım için aşağıdaki kaynaklara bakın.
- The SELinux Notebook (SELinux Not Defteri), SELinux ile ilgili güncel referanstır. Bu belgede, politika dili, anahtar kelimelerin her birinin anlamı ve güvenlik bağlamlarının nasıl hesaplandığı hakkında daha fazla bilgi verilmektedir.
- SELinux politika yaptırımıyla ilgili görsel "Nasıl yapılır?" kılavuzunuz
- Linux için Güvenlik Geliştirmeleri
- Güvenlik Geliştirilmiş (SE) Android: Android'e Esnek MAC'i Getirme
- SELinux'u Linux Güvenlik Modülü olarak uygulama
- SELinux Politikası'nı yapılandırma