1. 程式人生 > 其它 >selinux for android一、 基礎概念

selinux for android一、 基礎概念

技術標籤:android os

文章目錄

SElinux

Security-Enhanced Linux,安全增強型Linux,一個核心模組,也是Linux的安全子系統。
由美國國家安全域性開發,2.6及以上Linux版本都已經集成了SELinux模組。

SElinux結構及配置非常複雜,而且有大量概念性東西,要學精難度很大,很多Linux系統管理員嫌麻煩把SElinux關了。

SElinu目的在於明確指明某個程序可以訪問哪些資源(檔案,網路埠)強制訪問控制系統的用途在於增強系統抵禦0-Day攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。

比如:Apache被發現存在一個漏洞,使得某個遠端使用者可以訪問系統上的敏感檔案,(比如/etc/passwd來獲得系統已存在的使用者),而修復該安全漏洞的Apache更新補丁尚未釋放出,此時SELinux可以起到彌補該漏洞的緩和方案,因為/etx/passwd不具有Apache的訪問標籤,所以Apache對於/etc/passed的訪問會被SELinux阻止。

優勢

相比其他強制性訪問控制系統,SELinux有如下優勢

  • 控制策略是可查詢
  • 可以熱更新策略無需重啟或者停止服務
  • 可以從程序初始化,繼承和程式執行三個方面通過策略進行控制。
  • 控制範圍覆蓋檔案系統,目錄,檔案,檔案啟動描述符,埠, 訊息介面和網路介面。

SELinux for Android

SELinux for android在架構和機制上與SELinux完全一樣,考慮到移動裝置特點,移植到Android上的只是SELinux的一個子集,SELinux for Android的安全檢查幾乎覆蓋所有重要的系統資源,包括域轉換,型別轉換,程序,核心,檔案,目錄,裝置,App,網路及IPC相關的操作。
android的兩種模式,只能二選一。

  • 寬容模式DAC(Discretionary Access control自主訪問控制)

    僅記錄但不強制執行,SELinux安全策略 DAC是傳統Linxu訪問控制方式,可以對檔案,資料夾,共享資源進行訪問控制。
    DAC這種模型中,檔案客體的所有者或者系統管理員負責訪問控制
    DAC採用ACL(Access Control List訪問控制列表)來給非管理者使用者提供不同的許可權,而root使用者對檔案系統有完全自由的控制權。

  • 強制模式 MAC (Manddatory Access Control)
    強制執行並記錄安全政策,如果失敗,顯示EPERM錯誤。MAC是任何程序想在SELinux系統中幹任何事情,都必須現在安全策略配置檔案中賦予許可權,

凡是沒有出現在安全策略配置檔案中的許可權,程序就沒有該許可權。

該機制相當於一個白名單,這個白名單上配置了所有程序的許可權,程序只能做白名單上許可權內的事情。否則會被拒絕。

這就需要使用到配置檔案和其對應的te語法

te語法

rule_name source_typ target_type:class perm_set

例如:allow system_app proc_vmstat:file read

對應關係

語法解析:

語法含義
source_type(system_app )一個程序或一組程序的標籤,也成為域型別,程序的型別
target_type(proc_vmstat)一個物件(檔案,套接字)或一組物件的標籤
Class(file )要訪問的物件(檔案、套接字)的型別
perm_set (read)要執行的操作

rule_name命令

命令含義
allow允許某個程序執行某個動作
audital lowaudit含義就是記錄某項操作,預設SELinux只記錄那些許可權檢查失敗的操作
dontaudit對那些許可權檢查失敗的操作不做記錄
neverallow沒有被allow到的動作預設就不允許執行,neverallow只是顯式地寫出某個動作不被允許,如果添加了該動作的allow,則會編譯錯誤

source_type命令,

指定一個域(donmain)。一般用於描述程序,該域內的程序,受該條TE語句的限制,

type關鍵字,把一個自定義的域與原有的域相關聯,最簡單地定義一個新域的方式為:

type shell, domain

意思為賦予shell給domain屬性,同時,shell與屬於domain這個集合裡。

例如:有一個allow domain xxxxx 的語句,同樣地也給了shell xxxxx的屬性

target_type命令

程序需要操作的客體(檔案,資料夾等)型別,(安全上下文),同樣是用type與一些已有的型別,屬性相關聯。

type有兩個作用,定義(宣告)並關聯某個屬性。

可以把這兩個作用分開,type定義,typeattribute進行關聯。

Class命令

class定義在檔案system/sepolicy/private/security_classes中.

SecurityContext語法

SELinux中,每種東西都會被賦予一個安全屬性,它就是SecurityContext(Security Context以下簡稱SContext,安全上下文或安全屬性)是一個字串,主要由三部分組成。

檢視客體安全上下文如下:

coral:/ # ls -Z /proc/vmstat
u:object_r:proc_vmstat:s0 /proc/vmstat

檢視主體安全上下文:

$ ps -Z
LABEL                          USER     PID   PPID  NAME  
u:r:init:s0                    root      1     0     /init  
u:r:kernel:s0                  root      2     0     kthreadd
u:r:kernel:s0                  root      258   2     irq/322-HPH_R O  
u:r:logd:s0                    logd      259   1     /system/bin/logd  
u:r:healthd:s0                 root      260   1     /sbin/healthd  
u:r:lmkd:s0                    root      261   1     /system/bin/lmkd  
u:r:servicemanager:s0          system    262   1     /system/bin/servicemanager  
u:r:vold:s0                    root      263   1     /system/bin/vold  

語法含義
usuer:SEAndroid中定義了一個SELinux使用者,值為u
rrole:角色,它是SELinux中一種比較高層次,更方便的許可權管理思路。RoleBased Access Control(基於角色的訪問控制,簡稱RBAC),簡言之就是一個user可以屬於過個role。不同的role具有不同選前
initinit域(Doamain)MAC的基礎管理思路是所謂的TypeEnforcement Access Control(簡稱TEAC一般用te表示),對於程序來說Type就是Domain,比如init這個Donmain有什麼許可權,都需要在策略檔案init.te中定義
s0SELinux為了滿足軍用和教育行業而設計的Muti_LevelSecurity(MLS)機制有關,簡言之MLS將系統的程序和檔案進行了分級,不同級別的資源需要對應級別的程序才能訪問。

SELinux相關程式碼目錄1. kernel/msm-3.18/security/selinux/

  1. external/selinux/
  2. 用BOARD_SEPOLICY_DIRS新增的各te檔案和安全配置檔案,主要包括device/<oem_name>/sepolicy/<product_name>/和system/sepolicy/,以及其他功能模組新增的配置檔案。