android之SELinux小記

image.png

什么是SELinux

SELinux是安全增強(qiáng)型 Linux(Security-Enhanced Linux)簡稱 SELinux。它是一個 Linux 內(nèi)核模塊,也是 Linux 的一個安全子系統(tǒng)割粮。

SELinux 主要由美國國家安全局開發(fā)。2.6 及以上版本的 Linux 內(nèi)核都已經(jīng)集成了 SELinux 模塊。

SELinux 的結(jié)構(gòu)及配置非常復(fù)雜拳球,而且有大量概念性的東西,要學(xué)精難度較大珍特。很多 Linux 系統(tǒng)管理員嫌麻煩都把 SELinux 關(guān)閉了祝峻。

SELinux目的在于明確的指明某個進(jìn)程可以訪問哪些資源(文件、網(wǎng)絡(luò)端口等)扎筒。強(qiáng)制訪問控制系統(tǒng)的用途在于增強(qiáng)系統(tǒng)抵御 0-Day 攻擊(利用尚未公開的漏洞實(shí)現(xiàn)的攻擊行為)的能力莱找。

在目前的大多數(shù)發(fā)行版中,已經(jīng)默認(rèn)在內(nèi)核集成了SELinux嗜桌。

舉例來說奥溺,系統(tǒng)上的 Apache 被發(fā)現(xiàn)存在一個漏洞,使得某遠(yuǎn)程用戶可以訪問系統(tǒng)上的敏感文件(比如 /etc/passwd 來獲得系統(tǒng)已存在用戶) 骨宠,而修復(fù)該安全漏洞的 Apache 更新補(bǔ)丁尚未釋出浮定。此時 SELinux 可以起到彌補(bǔ)該漏洞的緩和方案。因?yàn)?/etc/passwd 不具有 Apache 的 訪問標(biāo)簽层亿,所以 Apache 對于 /etc/passwd 的訪問會被 SELinux 阻止桦卒。

優(yōu)勢

相比其他強(qiáng)制性訪問控制系統(tǒng),SELinux 有如下優(yōu)勢:

  • 控制策略是可查詢而非程序不可見的匿又。
  • 可以熱更改策略而無需重啟或者停止服務(wù)方灾。
  • 可以從進(jìn)程初始化、繼承和程序執(zhí)行三個方面通過策略進(jìn)行控制碌更。
  • 控制范圍覆蓋文件系統(tǒng)裕偿、目錄、文件针贬、文件啟動描述符击费、端口、消息接口和網(wǎng)絡(luò)接口桦他。

SELinux for Android

SELinux for Android在架構(gòu)和機(jī)制上與SELinux完全一樣蔫巩,考慮到移動設(shè)備的特點(diǎn),所以移植到Android上的只是SELinux的一個子集快压。SELinux for Android的安全檢查幾乎覆蓋了所有重要的系統(tǒng)資源圆仔,包括域轉(zhuǎn)換,類型轉(zhuǎn)換蔫劣,進(jìn)程坪郭、內(nèi)核、文件脉幢、目錄歪沃、設(shè)備嗦锐,App,網(wǎng)絡(luò)及IPC相關(guān)的操作沪曙。

Android分為寬容模式(僅記錄但不強(qiáng)制執(zhí)行 SELinux 安全政策 )和強(qiáng)制模式(強(qiáng)制執(zhí)行并記錄安全政策奕污。如果失敗,則顯示為 EPERM 錯誤液走。 )碳默;在選擇強(qiáng)制執(zhí)行級別時只能二擇其一。

您的選擇將決定您的政策是采取操作缘眶,還是僅允許您收集潛在的失敗事件嘱根。寬容模式在實(shí)現(xiàn)過程中尤其有用。

寬容模式 DAC (Discretionary Access Control巷懈,自主訪問控制)

DAC是傳統(tǒng)的Linux的訪問控制方式该抒,DAC可以對文件、文件夾砸喻、共享資源等進(jìn)行訪問控制柔逼。

在DAC這種模型中,文件客體的所有者(或者管理員)負(fù)責(zé)管理訪問控制割岛。

DAC使用了ACL(Access Control List,訪問控制列表)來給非管理者用戶提供不同的權(quán)限犯助,而root用戶對文件系統(tǒng)有完全自由的控制權(quán)癣漆。

強(qiáng)制模式 MAC (Mandatory Access Control,強(qiáng)制訪問控制)

MAC是任何進(jìn)程想在SELinux系統(tǒng)中干任何事情剂买,都必須先在安全策略配置文件中賦予權(quán)限惠爽。

凡是沒有出現(xiàn)在安全策略配置文件中的權(quán)限,進(jìn)程就沒有該權(quán)限瞬哼。

這個機(jī)制相當(dāng)于一個白名單婚肆,這個白名單上配置了所有進(jìn)程的權(quán)限,進(jìn)程只能做白名單上權(quán)限內(nèi)的事情坐慰,一旦它想做一個不屬于它權(quán)限的操作就會被拒絕较性。

這就需要使用到配置文件和其對應(yīng)的te語法。

te基本語法

rule_name source_type target_type:class perm_set

語法解析:

語法 含義
source_type 一個進(jìn)程或一組進(jìn)程的標(biāo)簽结胀。也稱為域類型赞咙,因?yàn)樗皇侵高M(jìn)程的類型
target_type 一個對象(例如,文件糟港、套接字)或一組對象的標(biāo)簽
Class 要訪問的對象(例如攀操,文件、套接字)的類型
perm_set 要執(zhí)行的操作(例如秸抚,讀取速和、寫入)
rule_name命令
rule_name命令 含義
allow 允許某個進(jìn)程執(zhí)行某個動作
auditallow audit含義就是記錄某項(xiàng)操作歹垫。默認(rèn)SELinux只記錄那些權(quán)限檢查失敗的操作。 auditallow則使得權(quán)限檢查成功的操作也被記錄颠放。注意排惨,allowaudit只是允許記錄,它和賦予權(quán)限沒關(guān)系慈迈。賦予權(quán)限必須且只能使用allow語句
dontaudit 對那些權(quán)限檢查失敗的操作不做記錄
neverallow 沒有被allow到的動作默認(rèn)就不允許執(zhí)行的若贮。neverallow只是顯式地寫出某個動作不被允許,如果添加了該動作的allow痒留,則會編譯錯誤
source_type命令

指定一個“域”(domain)谴麦,一般用于描述進(jìn)程,該域內(nèi)的的進(jìn)程伸头,受該條TE語句的限制匾效。

type關(guān)鍵字,把一個自定義的域與原有的域相關(guān)聯(lián),最簡單地定義一個新域的方式為:

type shell, domain

意思為賦予shell給domain屬性恤磷,同時面哼,shell與屬于domain這個集合里。

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

target_type命令

進(jìn)程需要操作的客體(文件,文件夾等)類型(安全上下文)河胎,同樣是用type與一些已有的類型闯袒,屬性相關(guān)聯(lián)。

type有兩個作用游岳,定義(聲明)并關(guān)聯(lián)某個屬性政敢。

可以把這兩個作用分開,type定義胚迫,typeattribute進(jìn)行關(guān)聯(lián)喷户。

Class命令

class定義在文件system/sepolicy/private/security_classes中.

image.png

perm_set命令

定義在system/sepolicy/private/access_vectors。有兩種定義方法访锻。

  1. 用common命令定義:


    image.png
  2. 用class命令定義:


    image.png

SecurityContext語法

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

例如在 SELinux for Android中哭懈,進(jìn)程的SContext可以通過PS-Z命令查看灾馒,如下:

$ 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  

其中:

語法 含義
u user:SEAndroid中定義了一個SELinux用戶,值為u
r role:role:角色遣总,它是SELinux中一種比較高層次睬罗,更方便的權(quán)限管理思路轨功,即RoleBased Access Control(基于角色的訪問控制,簡稱RBAC)容达。簡單點(diǎn)說古涧,一個user可以屬于多個role,不同的role具有不同的權(quán)限花盐。
init init域(Doamin)羡滑。MAC的基礎(chǔ)管理思路是所謂的TypeEnforcement Access Control(簡稱TEAC,一般用TE表示)算芯。對進(jìn)程來說Type就是Domain柒昏,比如init這個Domain有什么權(quán)限,都需要在策略文件(init.te)中定義熙揍。
s0 SELinux為了滿足軍用和教育行業(yè)而設(shè)計(jì)的Multi-LevelSecurity(MLS)機(jī)制有關(guān)职祷。簡單點(diǎn)說,MLS將系統(tǒng)的進(jìn)程和文件進(jìn)行了分級届囚,不同級別的資源需要對應(yīng)級別的進(jìn)程才能訪問有梆。

SELINUX相關(guān)的代碼目錄

1. kernel/msm-3.18/security/selinux/
2. external/selinux/
3. 用BOARD_SEPOLICY_DIRS添加的各te文件和安全配置文件,主要包括device/<oem_name>/sepolicy/<product_name>/和system/sepolicy/意系,以及其他功能模塊添加的配置文件泥耀。

參考

一文徹底明白linux中的selinux到底是什么
SELinux之一:SELinux基本概念及基本配置
Android selinux配置和用法
詳解 SEAndroid 以及 Hack 其規(guī)則(sepolicy)
SELinux/SEAndroid 實(shí)例簡述(二) TE語言規(guī)則

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛔添,隨后出現(xiàn)的幾起案子爆袍,更是在濱河造成了極大的恐慌,老刑警劉巖作郭,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弦疮,居然都是意外死亡夹攒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門胁塞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咏尝,“玉大人,你說我怎么就攤上這事啸罢”嗉欤” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵扰才,是天一觀的道長允懂。 經(jīng)常有香客問我,道長衩匣,這世上最難降的妖魔是什么蕾总? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任粥航,我火速辦了婚禮,結(jié)果婚禮上生百,老公的妹妹穿的比我還像新娘递雀。我一直安慰自己,他們只是感情好蚀浆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布缀程。 她就那樣靜靜地躺著,像睡著了一般市俊。 火紅的嫁衣襯著肌膚如雪杨凑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天秕衙,我揣著相機(jī)與錄音蠢甲,去河邊找鬼。 笑死据忘,一個胖子當(dāng)著我的面吹牛鹦牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勇吊,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼曼追,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汉规?” 一聲冷哼從身側(cè)響起礼殊,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎针史,沒想到半個月后晶伦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啄枕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年婚陪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片频祝。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泌参,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出常空,到底是詐尸還是另有隱情沽一,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布漓糙,位于F島的核電站铣缠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攘残,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一拙友、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歼郭,春花似錦遗契、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泰涂,卻和暖如春鲫竞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逼蒙。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工从绘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人是牢。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓僵井,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驳棱。 傳聞我的和親對象是個殘疾皇子批什,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容