Android SELinux vendor init(轉(zhuǎn)自官網(wǎng))

<devsite-heading text="供應(yīng)商 init" for="%E4%BE%9B%E5%BA%94%E5%95%86-init" level="h1" class="devsite-page-title"># 供應(yīng)商 init</devsite-heading>

init 進(jìn)程具有幾乎不受限制的權(quán)限,并可使用系統(tǒng)分區(qū)和供應(yīng)商分區(qū)中的輸入腳本在啟動(dòng)過(guò)程中初始化系統(tǒng)洗鸵。該訪問(wèn)權(quán)限會(huì)導(dǎo)致 Treble 系統(tǒng)/供應(yīng)商拆分中出現(xiàn)巨大漏洞悴侵,因?yàn)楣?yīng)商腳本可能會(huì)指示 init 訪問(wèn)不屬于穩(wěn)定系統(tǒng)-供應(yīng)商 ABI(應(yīng)用二進(jìn)制接口)的文件、屬性等。

供應(yīng)商 init 已設(shè)計(jì)為使用單獨(dú)的安全增強(qiáng)型 Linux (SELinux) 域 vendor_init欣喧,以利用供應(yīng)商專屬權(quán)限來(lái)運(yùn)行 /vendor 中的命令歹撒,從而填補(bǔ)此漏洞。

<devsite-heading text="機(jī)制" for="mechanism" level="h2" link="" toc="" class="" back-to-top="">## 機(jī)制</devsite-heading>

<devsite-heading text="機(jī)制" for="mechanism" level="h2" link="" toc="" class="" back-to-top=""></devsite-heading>

供應(yīng)商 init 會(huì)在啟動(dòng)過(guò)程的早期派生在 SELinux 環(huán)境 u:r:vendor_init:s0 中運(yùn)行的 init 子進(jìn)程看疗。此 SELinux 環(huán)境具有的權(quán)限明顯少于默認(rèn) init 環(huán)境沙峻,并且其訪問(wèn)權(quán)限僅限于供應(yīng)商專用或?qū)儆诜€(wěn)定系統(tǒng)-供應(yīng)商 ABI 的文件、屬性等两芳。

Init 會(huì)檢查它加載的每個(gè)腳本以查看其路徑是否以 /vendor 開(kāi)頭摔寨,如果是,則添加標(biāo)記以指示其命令必須在供應(yīng)商 init 環(huán)境中運(yùn)行怖辆。每個(gè)內(nèi)置 init 都使用布爾值進(jìn)行注釋是复,該布爾值指定是否必須在供應(yīng)商 init 子進(jìn)程中運(yùn)行相應(yīng)命令:

  • 訪問(wèn)文件系統(tǒng)的大多數(shù)命令都被注釋為在供應(yīng)商 init 子進(jìn)程中運(yùn)行,因此受供應(yīng)商 init SEPolicy 的約束竖螃。
  • 大多數(shù)會(huì)影響內(nèi)部 init 狀態(tài)的命令(例如淑廊,啟動(dòng)和停止服務(wù))都在普通 init 進(jìn)程中運(yùn)行。這些命令能獲知供應(yīng)商腳本正在調(diào)用它們來(lái)處理它們自己的非 SELinux 權(quán)限特咆。

Init 的主處理循環(huán)包含一項(xiàng)檢查季惩,以檢查是否會(huì)發(fā)生以下情況:如果某個(gè)命令被注釋為在供應(yīng)商子進(jìn)程中運(yùn)行并且源自供應(yīng)商腳本,則系統(tǒng)會(huì)通過(guò)進(jìn)程間通信 (IPC) 將該命令發(fā)送到供應(yīng)商 init 子進(jìn)程,然后這個(gè)子進(jìn)程會(huì)運(yùn)行該命令并將結(jié)果發(fā)送回 init画拾。

<devsite-heading text="使用供應(yīng)商 init" for="using-vendor-init" level="h2" link="" toc="" class="" back-to-top="">## 使用供應(yīng)商 init</devsite-heading> <devsite-heading text="使用供應(yīng)商 init" for="using-vendor-init" level="h2" link="" toc="" class="" back-to-top=""></devsite-heading>

供應(yīng)商 init 默認(rèn)處于啟用狀態(tài)啥繁,其限制適用于 /vendor 分區(qū)中存在的所有 init 腳本。對(duì)于其腳本尚未訪問(wèn)系統(tǒng)專用文件青抛、屬性等的供應(yīng)商旗闽,供應(yīng)商 init 應(yīng)該是透明的。

但是脂凶,如果給定供應(yīng)商腳本中的命令違反了供應(yīng)商 init 限制宪睹,則這些命令將無(wú)法運(yùn)行。如果命令運(yùn)行失敗蚕钦,系統(tǒng)會(huì)在 init 內(nèi)核日志中記錄一行(可通過(guò) dmesg 查看)來(lái)指示其運(yùn)行失敗亭病。因 SELinux 政策限制而運(yùn)行失敗的任何命令都會(huì)伴有 SELinux 審核。包含 SELinux 審核的失敗示例如下:

<devsite-code no-copy=""><pre class="" is-upgraded="">type=1400 audit(1511821362.996:9): avc: denied { search } for pid=540 comm="init" name="nfc" dev="sda45" ino=1310721 scontext=u:r:vendor_init:s0 tcontext=u:object_r:nfc_data_file:s0 tclass=dir permissive=0
init: Command 'write /data/nfc/bad_file_access 1234' action=boot (/vendor/etc/init/hw/init.walleye.rc:422) took 2ms and failed: Unable to write to file '/data/nfc/bad_file_access': open() failed: Permission denied</pre></devsite-code>

如果某個(gè)命令運(yùn)行失敗嘶居,則有兩種選擇:

  • 如果該命令是因既有限制而運(yùn)行失斪锾(例如,如果該命令訪問(wèn)的是系統(tǒng)文件或?qū)傩裕┯势ǎ瑒t必須以適合 Treble 的方式重新實(shí)現(xiàn)該命令整袁,并僅采用穩(wěn)定的接口。Neverallow 規(guī)則禁止添加訪問(wèn)不屬于穩(wěn)定系統(tǒng)-供應(yīng)商 ABI 的系統(tǒng)文件的權(quán)限佑吝。
  • 如果 SELinux 標(biāo)簽是新的且尚未在系統(tǒng) vendor_init.te 中為其授予權(quán)限坐昙,也未通過(guò) neverallow 規(guī)則為其排除權(quán)限,則可以在設(shè)備專用 vendor_init.te 中為這個(gè)新標(biāo)簽授予權(quán)限芋忿。

對(duì)于搭載 Android 9 之前版本的設(shè)備炸客,可以通過(guò)將 data_between_core_and_vendor_violators 類型屬性添加到設(shè)備專用 vendor_init.te 文件來(lái)繞過(guò) neverallows 規(guī)則。

<devsite-heading text="代碼位置" for="code-locations" level="h2" link="" toc="" class="" back-to-top="">## 代碼位置</devsite-heading>

<devsite-heading text="代碼位置" for="code-locations" level="h2" link="" toc="" class="" back-to-top=""></devsite-heading>

供應(yīng)商 init IPC 的大部分邏輯都位于 system/core/init/subcontext.cpp 中戈钢。

命令表位于 system/core/init/builtins.cpp 中的 BuiltinFunctionMap 類中痹仙,其中包含用于指示是否必須在供應(yīng)商 init 子進(jìn)程中運(yùn)行相應(yīng)命令的注釋。

供應(yīng)商 init 的 SEPolicy 已被拆分到 system/sepolicy 中的私有目錄 (system/sepolicy/private/vendor_init.te) 和公共目錄 (system/sepolicy/public/vendor_init.te)殉了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末开仰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薪铜,更是在濱河造成了極大的恐慌众弓,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔箍,死亡現(xiàn)場(chǎng)離奇詭異田轧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鞍恢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門傻粘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)每窖,“玉大人,你說(shuō)我怎么就攤上這事弦悉≈系洌” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵稽莉,是天一觀的道長(zhǎng)瀑志。 經(jīng)常有香客問(wèn)我,道長(zhǎng)污秆,這世上最難降的妖魔是什么劈猪? 我笑而不...
    開(kāi)封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮良拼,結(jié)果婚禮上战得,老公的妹妹穿的比我還像新娘。我一直安慰自己庸推,他們只是感情好常侦,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贬媒,像睡著了一般聋亡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上际乘,一...
    開(kāi)封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天坡倔,我揣著相機(jī)與錄音,去河邊找鬼脖含。 笑死罪塔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的器赞。 我是一名探鬼主播垢袱,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼墓拜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼港柜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起咳榜,我...
    開(kāi)封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夏醉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后涌韩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畔柔,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年臣樱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靶擦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腮考。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玄捕,靈堂內(nèi)的尸體忽然破棺而出踩蔚,到底是詐尸還是另有隱情,我是刑警寧澤枚粘,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布馅闽,位于F島的核電站,受9級(jí)特大地震影響馍迄,放射性物質(zhì)發(fā)生泄漏福也。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一攀圈、第九天 我趴在偏房一處隱蔽的房頂上張望暴凑。 院中可真熱鬧,春花似錦量承、人聲如沸搬设。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拿穴。三九已至,卻和暖如春忧风,著一層夾襖步出監(jiān)牢的瞬間默色,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工狮腿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腿宰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓缘厢,卻偏偏與公主長(zhǎng)得像吃度,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贴硫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

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