TL; DR: İsterseniz doğrudan alttaki sonuca atlamaktan çekinmeyin :)!
SELinux'un amacı, hem ayrıcalıklı hem de ayrıcalıklı kullanıcılardan olası eylemleri kısıtlayan zorunlu bir politika uygulayarak ayrıcalık yükselmesini önlemektir.
Burada "kullanıcılar" terimi, fiziksel işlemlerle (kullanıcı, siz;)) doğrudan ilişkili olup olmadığına bakılmaksızın, aygıtta çalışan tüm işlemleri de içerir, çünkü her işlem bir sistem "kullanıcı" hesabı kullanarak çalışır.
Tarihsel olarak, Unix tabanlı sistemlerde izinler İsteğe Bağlı Erişim Denetimi (DAC) sistemi kullanılarak gerçekleştirilir. Bu modelde:
- Dosyalar gibi kaynaklar, sahip oldukları kaynaklarda erişim haklarını tanımlayabilen sahiplere sahiptir: bu, belirli bir kaynağın özel mi (yalnızca sahibin ona erişebileceğini) veya diğer kullanıcılarla paylaşılıp paylaşılmayacağına karar vermelerini sağlar.
- Bunun da ötesinde
root
, yönetici kullanıcı olan ve sistemdeki her şeye erişimi olan süper kullanıcı ( Unix tabanlı sistemlerde denir ) vardır. Bu hesap, bir insan (genellikle bir sistem yöneticisi) tarafından cihazı korumak veya onarmak için etkileşimli olarak kullanılabilir, ancak genellikle bu hesap çoğunlukla bu ayrıcalık düzeyi gerektiren arka plan veya düşük düzey hizmetler tarafından kullanılır: aygıt sürücüleri, ağ yapılandırma hizmetleri, hizmetler her kullanıcıdan dosyalara erişme veya dahili kullanıcılar arası iletişimi yönetme ihtiyacı.
Bu çok güzel ve zaten iyi bir güvenlik sağlıyor. Ancak, bunlar gibi durumlar ne olacak:
root
Saldırganın böyle bir hizmeti rasgele kod çalıştırması için kandırmasına olanak tanıyacak şekilde çalışan bir hizmette bir hata bulunursa ne olur? Bu tür bir saldırgan cihaza tam bir erişim kazanacaktır. Bazı somut örnekler vermek için, bu hata telefona özel hazırlanmış ağ yapılandırma bilgileri ( DHCP ) veya MMS gönderilerek tetiklenebilir .
- Bazı kullanıcılar özel kaynakları doğru şekilde korumazsa ne olur? Daha sonra bu kaynaklara diğer ayrıcalıksız kullanıcılar tarafından kötü amaçlı bir şekilde erişilebilir (okunabilir, hatta değiştirilebilir veya silinebilir). Bu genellikle telefonunuzda kötü amaçlı bir uygulama çalışırken sahip olduğunuz şeydir (yüklemeniz için kandırılmış olsanız da veya başka bir ayrıcalıksız uygulamada, tarayıcıda veya posta istemcisinde bir hata kullanarak buraya tek başına gelse de örneğin) ve bu kötü amaçlı uygulama diğer uygulama verilerine veya depolama konumlarına doğrudan erişmeye çalışır (normalde erişilemeyen verilere erişmek veya kaldırılmasını zorlaştırmak için kendini birkaç yere yüklemek için bunu yapabilir).
İşte SELinux geliyor.
SELinux bir Zorunlu Erişim Kontrolü (MAC) sistemidir. Daha önce açıklanan DAC sisteminde kullanıcılar kendi kaynaklarına uygun haklar koymakla sorumluyken, MAC sistemi ile hem ayrıcalıklı hem de ayrıcalıklı olmayan kullanıcılara sistem çapında bir politika uygulanmaktadır.
Bu, yukarıda bahsedilen iki sorunu aşağıdaki şekillerde çözmektedir:
- Söylediğim gibi, bu politika ayrıcalıklı kullanıcılar için de geçerlidir. Bu, uygun şekilde tasarlanmış bir ilke ile, cihazın ağ yapılandırmasını işlemek için tasarlanmış bir hizmetin başka bir şey yapamayacağı anlamına gelir: örneğin SMS'e erişemeyecektir ve servis işleme SMS'in ağ yapılandırmasına erişimi olmayacaktır. ve her ikisinin de süper kullanıcı hesabını kullanarak çalışmasına rağmen, hiçbiri kullanıcının verilerine erişemeyecektir.
- Android, yakın zamanda SELinux tarafından uygulanan ve herhangi bir kullanıcının diğer kullanıcıların verilerine erişmesini engelleyen çok kullanıcılı bir özellik içeriyordu. Ancak bunun ötesinde, SELinux politikası da izin verilen uygulamaların davranışını tanımlamaktan sorumludur ve büyük olasılıkla bazı kaynaklar DAC sistemi kullanılarak düzgün bir şekilde korunmasa bile SELinux kurtarmaya gelir ve kötü amaçlı uygulamanın doğrudan bunlara erişmesini önler.
DAC ve MAC sistemleri birbirini dışlamaz, aksine MAC sistemi (SELinux) DAC sisteminin (geleneksel Unix benzeri izinler) arkasında ikinci bir savunma katmanı görevi görür. SELinux'un görevi, yalnızca DAC sistemi göz önüne alındığında kabul edilecek politikaya aykırı herhangi bir faaliyeti engellemektir.
Zor olan şey, bu tür bir politikanın yazmak için çok karmaşık olabileceğidir: gerçekten de her durumda olası her kullanım için her cihazın bileşenlerini kapsamalıdır. Aslında, durumunuzda bazı eylemlerin meşru olup olmadığı önemli değildir: politikada değilse, yasaktır . Kötü tasarlanmış politikalar bu nedenle uygulama çökmeleri, kullanılamaz işlevsellik vb. Gibi rastgele sonuçlar doğurabilir.
Bu nedenle SELinux'un Android gönderiminin ilk sürümleri varsayılan olarak "İzin Verici" moduna dahil etti. Bu modda, SELinux ilke ihlallerini günlüğe kaydeder , ancak ilişkili etkinliği engellemeye çalışmaz. Sonuçta elde edilen günlük dosyalarını analiz ederek, geriye kalan tek politika ihlali gerçekten kötü amaçlı veya istenmeyen davranışlar oluncaya kadar politikayı düzeltmek ve geliştirmek mümkün hale gelir. Bu noktada, SELinux "Zorlama" moduna dönüştürülebilir: artık sadece günlüğü değil aynı zamanda rahatsız edici her eylemi de engelleyecektir.
Sonuç
SELinux bir etki azaltma tekniğidir. Saldırganların telefonunuza girmesini engellemez, ancak bir kez orada mümkün olduğunca az şey yapabilmelerini sağlar, ideal olarak hiçbir şey işe yaramaz, böylece ilk etapta telefona saldırma ilgisini ortadan kaldırır.
ROM büyüdükçe, bu erişimi açan güvenlik hatalarının sayısı artar. SELinux, bilinen bu güvenlik açıklarına rağmen minimum güvenliği sağlamanın etkili bir yolu olacaktır, ancak düzgün çalışması SELinux karmaşık bir politikaya dayanmaktadır.
ROM'unuzda varsayılan olarak "İzin Verici" modunda SELinux varsa, bu içerdiği politikanın güvenli bir şekilde "Zorlama" moduna geçirilecek kadar güvenilir olmadığı anlamına gelir.
Yeterince teknisyenseniz ve telefon kaydına erişiminiz varsa ( dmesg
en azından, ancak genellikle de kopyalanırlar logcat
: ikincisini görmeye izin veren uygulamalar var, ancak Android sürümünüze bağlı olarak kök erişimi gerektirip gerektirmeyeceğini kontrol edebilirsiniz) "avc" girdilerini bulursunuz: bunlar SELinux'un politikaya aykırı bir eylem tespit ettiğini bildiren mesajlardır.
CyanogenMod'un web sitesinden alınan bu tür girişe bir örnek :
type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace"
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t
tcontext=system_u:object_r:sysfs_t tclass=file
Hiçbiri yoksa, bunlardan sadece birkaçı veya herhangi bir nedenle sizi telefonunuzu kullanamayabileceklerini düşünmüyorsanız, SELinux'u "Zorlama" moduna geçirmeyi deneyebilirsiniz. Eski CyanogenMod ROM'larda, bu GUI'de gizli bir seçenek kullanarak kolay ve mümkün oldu (telefonu köklendirmeye veya belirli bir uygulamayı yüklemeye gerek yok), diğer ROM'ların aynı özelliği sunup sunmadığını bilmiyorum ama CyanogenMod'u kullandığınızdan beri etiket Sanırım şanslı olabilirsin;).
setenforce 1
Terminal öykünücüsünden (kök olarak) yayınlamayı denediniz mi?