平臺(tái):OKT507-C開發(fā)板
系統(tǒng):Android10.0
OKT507-C開發(fā)板Android系統(tǒng)版本為Android10.0,默認(rèn)開啟了SELinux。基于MAC訪問控制模型的SElinux,可以更好地保護(hù)我們的Android系統(tǒng), 比如限制系統(tǒng)服務(wù)的訪問權(quán)限、控制應(yīng)用對(duì)數(shù)據(jù)和系統(tǒng)日志的訪問等措施,這樣就降低了惡意軟件的影響,并且可以防止因代碼存在的缺陷而產(chǎn)生的對(duì)系統(tǒng)安全的影響。
從系統(tǒng)安全方面考慮,SELinux是保護(hù)神,但是從軟件開發(fā)方面,SELinux就是一道牽絆,這是一把雙刃劍。
比如我們開發(fā)應(yīng)用或者增加系統(tǒng)服務(wù)的某些權(quán)限的時(shí)候,我們必須遵循SELinux的規(guī)則,給我們的應(yīng)用設(shè)置對(duì)應(yīng)的安全策略,否則我們的應(yīng)用就不具備訪問數(shù)據(jù)或者設(shè)備的權(quán)限。下面我們MAC訪問控制模型開始,簡(jiǎn)單的梳理一下OKT507-C開發(fā)板 Android的安全策略,以及自定義OKT507-C開發(fā)板 Android安全策略的方法。訪問控制模型DAC,MAC
訪問控制是指控制對(duì)計(jì)算機(jī)或者網(wǎng)絡(luò)中某個(gè)資源的訪問。沒有它,所有人都可以訪問任何資源。有了訪問控制,用戶在獲取實(shí)際訪問資源或進(jìn)行操作之前,必須通過識(shí)別、驗(yàn)證、授權(quán)。自主訪問控制(DAC: Discretionary Access Control)系統(tǒng)識(shí)別用戶,根據(jù)被操作對(duì)象的權(quán)限的設(shè)置,來決定該用戶對(duì)其擁有的操作權(quán)限,read、write、exec。擁有這個(gè)對(duì)象權(quán)限的用戶,又可以將該權(quán)限分配給其他用戶,此謂之“Discretionary”。缺陷就是對(duì)權(quán)限控制比較分散,不便于管理,比如無法簡(jiǎn)單地將一組文件設(shè)置統(tǒng)一的權(quán)限開放給指定的一群用戶。
強(qiáng)制訪問控制(MAC: Mandatory Access Control)MAC是為了彌補(bǔ)DAC權(quán)限控制過于分散的問題而誕生的。在MAC這種模型里,管理員管理訪問控制。管理員制定策略,用戶不能改變它。策略定義了哪個(gè)主體能訪問哪個(gè)對(duì)象。這種訪問控制模型可以增加安全級(jí)別,因?yàn)樗诓呗裕魏螞]有被顯式授權(quán)的操作都不能執(zhí)行。MAC被開發(fā)和實(shí)現(xiàn)在最重視保密的系統(tǒng)中,如軍事系統(tǒng)。主體獲得清楚的標(biāo)記,對(duì)象得到分類標(biāo)記,或稱安全級(jí)別。
基于MAC的SElinux
-
參考鏈接:
-
https://source.android.google.cn/security/selinux
軟件通常情況下必須以Root用戶帳號(hào)的身份運(yùn)行,才能向原始?jí)K設(shè)備寫入數(shù)據(jù)。在基于DAC的傳統(tǒng)Linux環(huán)境中,如果Root用戶遭到入侵,攻擊者便可以利用該用戶身份向每個(gè)原始?jí)K設(shè)備寫入數(shù)據(jù)。從Android4.3 起,SELinux開始為傳統(tǒng)的自主訪問控制 (DAC)環(huán)境提供強(qiáng)制訪問控制(MAC)保護(hù)功能。
作為Android安全模型的一部分,Android使用安全增強(qiáng)型 Linux(SELinux) 對(duì)所有進(jìn)程強(qiáng)制執(zhí)行強(qiáng)制訪問控制 (MAC),甚至包括以Root/超級(jí)用戶權(quán)限運(yùn)行的進(jìn)程(Linux 功能)。例如可以使用SELinux為這些設(shè)備添加標(biāo)簽,以便被分配了 Root 權(quán)限的進(jìn)程只能向相關(guān)政策中指定的設(shè)備寫入數(shù)據(jù)。這樣一來,該進(jìn)程便無法重寫特定原始?jí)K設(shè)備之外的數(shù)據(jù)和系統(tǒng)設(shè)置。
借助 SELinux,Android可以更好地保護(hù)和限制系統(tǒng)服務(wù)、控制對(duì)應(yīng)用數(shù)據(jù)和系統(tǒng)日志的訪問、降低惡意軟件的影響,并保護(hù)用戶免遭移動(dòng)設(shè)備上的代碼可能存在的缺陷的影響。
OKT507-C開發(fā)板 Android系統(tǒng)版本為Android10,SELinux默認(rèn)開啟,即使獲得了該系統(tǒng)的root權(quán)限,也只能向相關(guān)策略中指定的設(shè)備寫入數(shù)據(jù),從而更好地保護(hù)和限制系統(tǒng)服務(wù),保障系統(tǒng)和數(shù)據(jù)的安全。
標(biāo)簽、規(guī)則和域
SELinux 依靠標(biāo)簽來匹配操作和策略。標(biāo)簽用于決定允許的事項(xiàng)。套接字、文件和進(jìn)程在 SELinux 中都有標(biāo)簽。SELinux 在做決定時(shí)需參照兩點(diǎn):一是為這些對(duì)象分配的標(biāo)簽,二是定義這些對(duì)象如何交互的策略。
在 SELinux 中,標(biāo)簽采用以下形式:usertype:mls_level,其中 type 是訪問決定的主要組成部分,可通過構(gòu)成標(biāo)簽的其他組成部分進(jìn)行修改。對(duì)象會(huì)映射到類,對(duì)每個(gè)類的不同訪問類型由權(quán)限表示。
策略規(guī)則采用以下形式:allow domains types:classes permissions;,其中:
-
Domain - 一個(gè)進(jìn)程或一組進(jìn)程的標(biāo)簽。也稱為域類型,因?yàn)樗皇侵高M(jìn)程的類型。
-
Type - 一個(gè)對(duì)象(例如,文件、套接字)或一組對(duì)象的標(biāo)簽。
-
Class - 要訪問的對(duì)象(例如,文件、套接字)的類型。
-
Permission - 要執(zhí)行的操作(例如,讀取、寫入)。
策略配置源文件
1、external/sepolicy這是獨(dú)立于設(shè)備的配置,一般不能針對(duì)設(shè)備進(jìn)行修改2、device///sepolicy這是特定于設(shè)備的配置,基于 BOARDSEPOLICY* 變量來選擇對(duì)應(yīng)平臺(tái)的策略配置。
以O(shè)KT507-C開發(fā)板為例,OKT507-C開發(fā)板策略文件的路徑如下:
-
OKT507-android-source/android$ ls device/softwinner/common/sepolicy/
-
private vendor
Type Enforcement (TE) 配置文件
.te 文件中保存了對(duì)應(yīng)對(duì)象的域和類型定義、規(guī)則。通常每個(gè)域一個(gè) .te 文件,例如installd.te。在 device.te、file.te 中聲明了設(shè)備和文件類型。在某些文件(例如domain.te、app.te)中則存儲(chǔ)著共享規(guī)則。
以O(shè)KT507-C開發(fā)板為例,T507 system_app的TE文件的路徑如下:
-
OKT507-android-source/android$ ls device/softwinner/common/sepolicy/vendor/system_app.te
-
device/softwinner/common/sepolicy/vendor/system_app.te
標(biāo)簽配置文件
1、filecontexts:文件安全上下文
2、propertycontexts:屬性安全上下文
SEAndroid app分類
SELinux(或SEAndroid)將app劃分為主要三種類型(根據(jù)user不同,也有其他的domain類型):
1)untrustedapp 第三方app,沒有Android平臺(tái)簽名,沒有system權(quán)限2)platformapp 有android平臺(tái)簽名,沒有system權(quán)限3)system_app 有android平臺(tái)簽名和system權(quán)限
從上面劃分,權(quán)限等級(jí),理論上:untrustedapp < platformapp < system_app
以O(shè)KT507-C開發(fā)板為例,查看當(dāng)前運(yùn)行的應(yīng)用信息:-
console:/ # ps -Z
-
usystem_app:s0 system 15712 1861 1050628 110868 SyS_epoll_wait 0 S forlinx.example.app
-
uuntrusted_app_27c512,c768 u0_a62 30259 1861 1052120 114132 SyS_epoll_wait 0 S com.forlinx.changelogo
當(dāng)前運(yùn)行的兩個(gè)APP,forlinx.example.app的type就是systemapp,com.forlinx.changelogo的type就是untrustedapp。
OKT507-C開發(fā)板自定義system_app的安全策略
以O(shè)KT507-C開發(fā)板中的Systemmix服務(wù)為例,我們?yōu)槠涮砑訄?zhí)行腳本的權(quán)限:
-
OKT507-android-source/android$ vi device/softwinner/common/sepolicy/vendor/systemmix.te
-
...
-
allow systemmix vendor_shell_exec:file { getattr open read execute execute_no_trans };
-
allow systemmix shell_exec:file { getattr open read execute execute_no_trans };
-
allow systemmix shell:file { getattr open read execute execute_no_trans };
-
...
-
Android
+關(guān)注
關(guān)注
12文章
3947瀏覽量
128461 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5210瀏覽量
99120
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
【國(guó)產(chǎn)FPGA入學(xué)必備】刀劍在鞘,兵器先藏 | 盤古676系列國(guó)產(chǎn)FPGA開發(fā)板
瑞芯微平臺(tái)Android系統(tǒng)串口測(cè)試方法,觸覺智能RK3562開發(fā)板演示

[迅為RK3568開發(fā)板]非科班也能玩轉(zhuǎn)Android應(yīng)用,體驗(yàn)QT跨平臺(tái)能力
![[迅為RK3568<b class='flag-5'>開發(fā)板</b>]非科班也能玩轉(zhuǎn)<b class='flag-5'>Android</b>應(yīng)用,體驗(yàn)QT跨<b class='flag-5'>平臺(tái)</b>能力](https://file1.elecfans.com/web3/M00/02/F1/wKgZO2diirGAPoENAACpt0CV3xc346.png)
基于迅為RK3568開發(fā)板全國(guó)產(chǎn)平臺(tái),快速實(shí)現(xiàn)APP開機(jī)自啟動(dòng)技術(shù)分享

全志T507-H國(guó)產(chǎn)平臺(tái)Ubuntu系統(tǒng)正式發(fā)布,讓您的應(yīng)用開發(fā)更便捷!
在TI開發(fā)板上啟用Android Automotive

國(guó)產(chǎn)!全志科技T507-H工業(yè)開發(fā)板( 4核ARM Cortex-A5)規(guī)格書
Android案例分享,基于瑞芯微RK3568國(guó)產(chǎn)平臺(tái)!

ARM Cortex-A53嵌入式開發(fā)平臺(tái)FETT507-C OKT507-C用戶編譯手冊(cè)
實(shí)測(cè)14us,Linux-RT實(shí)時(shí)性能及開發(fā)案例分享—基于全志T507-H國(guó)產(chǎn)平臺(tái)

評(píng)論