SELinux kavramları

SELinux kavramları hakkında bilgi edinmek için bu sayfayı inceleyin.

Zorunlu erişim denetimi

Security Enhanced Linux (SELinux), zorunlu bir erişim denetimi (MAC) sistemidir kullanıyor. MAC sistemi olan Linux'tan farklıdır. bilinen isteğe bağlı erişim denetimi (DAC) sistemi. DAC sisteminde, Belirli bir kaynağın sahibi erişimi kontrol eden bir sahipliğin bulunması bekleyebilirsiniz. Bu genellikle yüzeysel ve ayrıntılı ayrıcalıksız bir şekilde artırılabilir. Ancak MAC sistemi, merkezi bir tüm erişim denemeleri hakkında karar verme yetkisine sahip olmalıdır.

SELinux, Linux Güvenlik Modülü'nün (LSM) bir parçası olarak uygulanmıştır ve hassas işlemleri tanıyan bir çerçeve, tam olarak anlamışsınızdır. Bu eylemlerin her birinin olup olmadığını belirlemek için bir LSM kancası işlevi opak bir ortamda depolanan bilgilerine bağlı olarak işleme izin verilmelidir güvenlik nesnesi. SELinux, bu kancalar için bir uygulama sağlar ve kendi politikasıyla birleşen bu güvenlik nesnelerinin yönetilmesini, erişim kararlarını belirlemeye yardımcı olur.

Diğer Android güvenlik önlemlerinin yanı sıra Android'in erişim denetimi güvenliği ihlal edilmiş makinelerin olası hasarını büyük ölçüde hesaplar. Android'in isteğe bağlı ve zorunlu erişim gibi araçları kullanma yazılımınızın yalnızca minimum düzeyde çalışmasını sağlayacak bir yapı sağlar ayrıcalık seviyesidir. Bu, saldırıların etkilerini azaltır ve ve hatta veri iletme olasılığını azaltır.

Android 4.3 ve sonraki sürümlerde SELinux, zorunlu erişim denetimi (MAC) sağlar geleneksel isteğe bağlı erişim denetimi (DAC) ortamlarında Örneğin, Örneğin, ham veri alanına yazmak için yazılımın genellikle kök kullanıcı hesabı olarak çalışması gerekir cihazlar engellenebilir. Geleneksel DAC tabanlı Linux ortamında, kök kullanıcı kullanıcının her ham blok cihaza yazabileceği güvenlik ihlali oluşur. Ancak, Bu cihazları etiketlemek için SELinux kullanılabilir. Böylece işleme, kök ayrıcalığı yalnızca ilişkili politikada belirtilenlere yazabilir. Burada Bu durumda, süreç harici verilerin ve sistem ayarlarının üzerine yazamaz. belirli bir ham blok cihazı.

Kullanım alanlarına bakın. .

Yaptırım düzeyleri

SELinux çeşitli modlarda uygulanabilir:

  • İzinli: SELinux güvenlik politikası zorunlu kılınmaz, yalnızca günlüğe kaydedilir.
  • Zorunlu kılma: Güvenlik politikası uygulanır ve günlüğe kaydedilir. Hata sayısı EPERM hataları olarak görünür.

Bu seçim ikili bir seçimdir ve politikanızın işlem yapmasını mı yoksa yalnızca bu tercihten mi kaynaklandığını belirler potansiyel hataları toplamanızı sağlar. Serbest erişim özelliği, özellikle hakkında bilgi edindiniz.

Türler, özellikler ve kurallar

Android, SELinux'un Tür Zorunluluğu (TE) bileşenini kullanır politikası. Bu, tüm nesnelerin (dosya, işlem veya yuva gibi) bir type. Örneğin, bir uygulama varsayılan olarak untrusted_app türünde olacak. Bir işlem için türü de alanı olarak bilinir. Bir türe birçok özelliğe sahip. Özellikler, birden fazla türe atıfta bulunmak için kullanışlıdır ile aynı anda oynatabilirsiniz.

Nesneler sınıflarla eşlenir (ör. dosya, dizin, sembolik bağlantı, yuva) ve farklı erişim türleri Her sınıf, izinler ile temsil edilir. Örneğin, sınıf için open izni mevcut file. Türler ve özellikler, Yeşil Ofis’in bir parçası olarak Android SELinux politikası, izinler ve sınıflar statik olarak tanımlanır ve yeni bir Linux sürümü kapsamında nadiren güncellenir.

Politika kuralları şu biçimde olur: allow source target:class permissions; burada:

  • Kaynak - Kuralın konusunun türü (veya özelliği). Erişim iznini kim istiyor?
  • Hedef: Nesnenin türü (veya özelliği). Erişim talep edilen kişi kim?
  • Sınıf: Erişilen nesnenin türü (ör. dosya, yuva).
  • İzinler: Gerçekleştirilen işlem (veya işlemler kümesi) (ör. okuma, yazma).

Kural örneği:

allow untrusted_app app_data_file:file { read write };

Bu, uygulamaların etiketlenmiş dosyaları okumasına ve yazmasına izin verildiğini belirtir app_data_file Başka uygulama türleri de vardır. Örneğin, isolated_app, şunlar için uygulama hizmetleri için kullanılır: Manifest dosyasında isolatedProcess=true. Aynı bilgileri tekrar etmek yerine kuralıyla birlikte, Android appdomain adlı bir özellik kullanır. aşağıda belirtilen tüm türler için geçerlidir:

# Associate the attribute appdomain with the type untrusted_app.
typeattribute untrusted_app, appdomain;

# Associate the attribute appdomain with the type isolated_app.
typeattribute isolated_app, appdomain;

allow appdomain app_data_file:file { read write };

Özellik adını belirten bir kural yazıldığında, bu ad otomatik olarak, özelliğini gönderin. Bazı önemli özellikler şunlardır:

  • domain: Tüm işlem türleriyle ilişkili özellik
  • file_type: Tüm dosya türleriyle ilişkili özellik.

Makrolar

Özellikle dosya erişimi söz konusu olduğunda üzerine düşünün. Örneğin, read izni stat numaralı telefonu arayın. Kural tanımını basitleştirmek için Android en yaygın durumları ele almak üzere bir makro grubu sağlar. Örneğin, bu görevlerin (yukarıdaki kural olan open gibi eksik izinleri dahil etmek için) şu şekilde yeniden yazılabilir:

allow appdomain app_data_file:file rw_file_perms;

global_macros sayfasını inceleyin. ve te_macros dosyaları yararlı makrolar için daha fazla örnek olarak sunar. Mümkün olduğunda makrolar kullanılmalıdır Böylece, ilgili dizinlerdeki retlerden kaynaklanan başarısızlık olasılığını azaltmaya izin verir.

Bir tür tanımlandıktan sonra, türün dosya veya işlemle ilişkilendirilmesi gerekir. temsil eder. SELinux'u uygulama sayfasına göz atın sayfasına bakın. Daha fazla bilgi için öğrenmek için SELinux Not Defteri.

Güvenlik Bağlamı ve Kategorileri

SELinux politikalarında hata ayıklarken veya dosyaları etiketlerken ( file_contexts veya ls -Z adlı görüşme sırasında) gelebilirsiniz güvenlik bağlamında (etiket olarak da bilinir) kullanabilirsiniz. Örneğin, örnek: u:r:untrusted_app:s0:c15,c256,c513,c768 Güvenlik bağlamı şu biçimdedir: user:role:type:sensitivity[:categories] Genellikle Biruserrolesensitivity (Belirginlik bölümüne bakın). type alanına ait yönergeler bir önceki bölümde açıklanmıştır. categories, şurada yer alıyor: Çok Düzeyli Güvenlik (MLS) desteği sona erecektir. Android S'den beri kategoriler şu amaçlarla kullanılmaktadır:

  • Uygulama verilerini başka bir uygulamanın erişimine karşı
  • Uygulama verilerini bir fiziksel kullanıcıdan diğerine ayırın.

Belirginlik

Android, SELinux tarafından sağlanan tüm özellikleri kullanmaz. Okurken aşağıdaki noktaları unutmayın:

  • AOSP'deki politikaların çoğu, Kernel Politika Dili kullanılarak tanımlanır. Yaygın Orta Düzey Dil (CIL) kullanımı için bazı istisnalar vardır.
  • SELinux kullanıcıları kullanılmaz. Tanımlanan tek kullanıcı: u. Gerektiğinde fiziksel kullanıcılar, güvenlik bağlamının "kategoriler" alanı kullanılarak gösterilir.
  • SELinux rolleri ve Rol Tabanlı Erişim Denetimi (RBAC) kullanılmaz. İki varsayılan rol tanımlanmış ve kullanılır: r özneler için object_r ve nesneler için object_r olarak ayarlanır.
  • SELinux sensitivities kullanılmaz. Varsayılan s0 hassasiyeti her zaman ayarlanır.
  • SELinux boole değerleri kullanılmaz. Politika bir cihaz için oluşturulduğunda cihazın durumuna bağlı değildir. Bu işlem, denetlenmesi ve hatalarının ayıklanması.