0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

飛凌嵌入式 OKT507-C開發(fā)板:安全策略漫談

敏敏子呦 ? 來源:敏敏子呦 ? 作者:敏敏子呦 ? 2022-06-10 17:18 ? 次閱讀

硬件平臺:飛凌嵌入式 OKT507-C開發(fā)板

操作系統(tǒng)Android10.0

飛凌嵌入式 T507 開發(fā)板 Android系統(tǒng)版本為Android10.0,默認開啟了SELinux。基于MAC訪問控制模型的SElinux,可以更好地保護我們的Android系統(tǒng), 比如限制系統(tǒng)服務的訪問權(quán)限、控制應用對數(shù)據(jù)和系統(tǒng)日志的訪問等措施,這樣就降低了惡意軟件的影響,并且可以防止因代碼存在的缺陷而產(chǎn)生的對系統(tǒng)安全的影響。

從系統(tǒng)安全方面考慮,SELinux是保護神,但是從軟件開發(fā)方面,SELinux就是一道牽絆,這是一把雙刃劍。

比如我們開發(fā)應用或者增加系統(tǒng)服務的某些權(quán)限的時候,我們必須遵循SELinux的規(guī)則,給我們的應用設置對應的安全策略,否則我們的應用就不具備訪問數(shù)據(jù)或者設備的權(quán)限。下面我們MAC訪問控制模型開始,簡單的梳理一下飛凌嵌入式 T507 開發(fā)板 Android的安全策略,以及自定義飛凌嵌入式 T507 開發(fā)板Android安全策略的方法。

訪問控制模型DAC,MAC

訪問控制是指控制對計算機或者網(wǎng)絡中某個資源的訪問。沒有它,所有人都可以訪問任何資源。有了訪問控制,用戶在獲取實際訪問資源或進行操作之前,必須通過識別、驗證、授權(quán)。

自主訪問控制(DAC: Discretionary Access Control)系統(tǒng)識別用戶,根據(jù)被操作對象的權(quán)限的設置,來決定該用戶對其擁有的操作權(quán)限,read、write、exec。擁有這個對象權(quán)限的用戶,又可以將該權(quán)限分配給其他用戶,此謂之“Discretionary”。缺陷就是對權(quán)限控制比較分散,不便于管理,比如無法簡單地將一組文件設置統(tǒng)一的權(quán)限開放給指定的一群用戶。

強制訪問控制(MAC: Mandatory Access Control)MAC是為了彌補DAC權(quán)限控制過于分散的問題而誕生的。在MAC這種模型里,管理員管理訪問控制。管理員制定策略,用戶不能改變它。策略定義了哪個主體能訪問哪個對象。這種訪問控制模型可以增加安全級別,因為它基于策略,任何沒有被顯式授權(quán)的操作都不能執(zhí)行。MAC被開發(fā)和實現(xiàn)在最重視保密的系統(tǒng)中,如軍事系統(tǒng)。主體獲得清楚的標記,對象得到分類標記,或稱安全級別。

基于MAC的SElinux

參考鏈接:https://source.android.google.cn/security/selinux

軟件通常情況下必須以 Root 用戶帳號的身份運行,才能向原始塊設備寫入數(shù)據(jù)。在基于 DAC 的傳統(tǒng) Linux 環(huán)境中,如果 Root 用戶遭到入侵,攻擊者便可以利用該用戶身份向每個原始塊設備寫入數(shù)據(jù)。從 Android 4.3 起,SELinux 開始為傳統(tǒng)的自主訪問控制 (DAC) 環(huán)境提供強制訪問控制 (MAC) 保護功能。作為 Android 安全模型的一部分,Android 使用安全增強型 Linux (SELinux) 對所有進程強制執(zhí)行強制訪問控制 (MAC),甚至包括以 Root/超級用戶權(quán)限運行的進程(Linux 功能)。例如,可以使用 SELinux 為這些設備添加標簽,以便被分配了 Root 權(quán)限的進程只能向相關政策中指定的設備寫入數(shù)據(jù)。這樣一來,該進程便無法重寫特定原始塊設備之外的數(shù)據(jù)和系統(tǒng)設置。借助 SELinux,Android 可以更好地保護和限制系統(tǒng)服務、控制對應用數(shù)據(jù)和系統(tǒng)日志的訪問、降低惡意軟件的影響,并保護用戶免遭移動設備上的代碼可能存在的缺陷的影響。

SELinux for Android

飛凌嵌入式 T507 開發(fā)板Android系統(tǒng)版本為Android10,SELinux默認開啟,即使獲得了該系統(tǒng)的root權(quán)限,也只能向相關策略中指定的設備寫入數(shù)據(jù),從而更好地保護和限制系統(tǒng)服務,保障系統(tǒng)和數(shù)據(jù)的安全。

標簽、規(guī)則和域

SELinux 依靠標簽來匹配操作和策略。標簽用于決定允許的事項。套接字、文件和進程在 SELinux 中都有標簽。SELinux 在做決定時需參照兩點:一是為這些對象分配的標簽,二是定義這些對象如何交互的策略。

在 SELinux 中,標簽采用以下形式:user:role:type:mls_level,其中 type 是訪問決定的主要組成部分,可通過構(gòu)成標簽的其他組成部分進行修改。對象會映射到類,對每個類的不同訪問類型由權(quán)限表示。

策略規(guī)則采用以下形式:allow domains types:classes permissions;,其中:

Domain - 一個進程或一組進程的標簽。也稱為域類型,因為它只是指進程的類型。

Type - 一個對象(例如,文件、套接字)或一組對象的標簽。

Class - 要訪問的對象(例如,文件、套接字)的類型。Permission - 要執(zhí)行的操作(例如,讀取、寫入)。

策略配置源文件

1、external/sepolicy

這是獨立于設備的配置,一般不能針對設備進行修改

2、device///sepolicy

這是特定于設備的配置,基于 BOARD_SEPOLICY_* 變量來選擇對應平臺的策略配置。

以飛凌嵌入式 T507 開發(fā)板為例,T507策略文件的路徑如下:

OKT507-android-source/android$ ls device/softwinner/common/sepolicy/private vendor

Type Enforcement (TE) 配置文件

.te 文件中保存了對應對象的域和類型定義、規(guī)則。通常每個域一個 .te 文件,例如installd.te。在 device.te、file.te 中聲明了設備和文件類型。在某些文件(例如domain.te、app.te)中則存儲著共享規(guī)則。

以飛凌嵌入式 T507 開發(fā)板為例,T507 system_app的TE文件的路徑如下:

device/softwinner/common/sepolicy/vendor/system_app.te

標簽配置文件

1、file_contexts:文件安全上下文

2、property_contexts:屬性安全上下文

以飛凌嵌入式 T507 開發(fā)板為例,T507 安全上下文文件路徑如下:

device/softwinner/common/sepolicy/vendor/property_contexts

device/softwinner/common/sepolicy/vendor/file_contexts

SEAndroid app分類

SELinux(或SEAndroid)將app劃分為主要三種類型(根據(jù)user不同,也有其他的domain類型):

1)untrusted_app 第三方app,沒有Android平臺簽名,沒有system權(quán)限

2)platform_app 有android平臺簽名,沒有system權(quán)限

3)system_app 有android平臺簽名和system權(quán)限

從上面劃分,權(quán)限等級,理論上:untrusted_app < platform_app < system_app

APP的domain和type

查看seapp_contexts文件,APP的domain和type由user和seinfo兩個參數(shù)決定

system/sepolicy/private/seapp_contexts

isSystemServer=true domain=system_server_startup

user=_app seinfo=platform name=com.android.traceur domain=traceur_app type=app_data_file levelFrom=all

user=system seinfo=platform domain=system_app type=system_app_data_file

user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file

user=network_stack seinfo=network_stack domain=network_stack levelFrom=all

type=radio_data_file

user=nfc seinfo=platform domain=nfc type=nfc_data_file

user=secure_element seinfo=platform domain=secure_element levelFrom=all

user=radio seinfo=platform domain=radio type=radio_data_file

user=shared_relro domain=shared_relro

user=shell seinfo=platform domain=shell name=com.android.shell type=shell_data_file

user=webview_zygote seinfo=webview_zygote domain=webview_zygote

user=_isolated domain=isolated_app levelFrom=al

luser=_app seinfo=app_zygote domain=app_zygote levelFrom=all

user=_app seinfo=media domain=mediaprovider name=android.process.media type=app_data_file

levelFrom=user

user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user

user=_app isEphemeralApp=true domain=ephemeral_app type=app_data_file levelFrom=all

user=_app isPrivApp=true domain=priv_app type=privapp_data_file levelFrom=user

user=_app minTargetSdkVersion=29 domain=untrusted_app type=app_data_file levelFrom=all

user=_app minTargetSdkVersion=28 domain=untrusted_app_27 type=app_data_file levelFrom=all

user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file

levelFrom=user

user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user

user=_app minTargetSdkVersion=28 fromRunAs=true domain=runas_app levelFrom=all

user=_app fromRunAs=true domain=runas_app levelFrom=user

user

參考鏈接:https://blog.csdn.net/huilin9960/article/details/81530568

user可以理解為UID。android的UID和linux的UID根本是兩回事,Linux的UID是用于針對多用戶操作系統(tǒng)中用于區(qū)分用戶的,而Android中的UID是用于系統(tǒng)進行權(quán)限管理的。參考鏈接中的文章對于uid的產(chǎn)生講的很清楚。

seinfo

不同簽名會創(chuàng)建對應的selinux上下文。

Android.mk

LOCAL_CERTIFICATE := platform

有platform簽名,所以seinfo是platform。

LOCAL_CERTIFICATE作用

參考文檔https://blog.csdn.net/hnlgzb/article/details/107823874

可以查看Android源碼build/target/product/security/ 目錄下提供的默認簽名文件,不同平臺可能會有差異:飛凌嵌入式 T507 開發(fā)板提供了media、networkstack、platform、shared、testkey、verity六種不同權(quán)限的簽名文件。

T507提供簽名文件

以飛凌嵌入式 T507 開發(fā)板為例,查看當前運行的應用信息

console:/ # ps -Z

u:r:system_app:s0 system 15712 1861 1050628 110868 SyS_epoll_wait

0 S forlinx.example.app

u:r:untrusted_app_27:s0:c512,c768 u0_a62 30259 1861 1052120 114132 SyS_epoll_wait

0 S com.forlinx.changelogo

當前運行的兩個APP,forlinx.example.app的UID(user)是system,擁有platform簽名,它的domain和type就是system_app。

domain和type就是system_app

T507 安卓策略安全操作步驟

com.forlinx.changelogo沒有設置UID使用的默認設置,其UID為u0_a62,并且沒有設置簽名文件,它的domain和type就是untrusted_app。

T507自定義安全策略

以上面兩個運行的app來說,我們?yōu)檫@兩個APP添加額外的權(quán)限,對應的TE配置文件分別就是system_app.te、untrusted_app.te,對應路徑為:

device/softwinner/common/sepolicy/vendor/system_app.te

device/softwinner/common/sepolicy/vendor/untrusted_app.te

以forlinx.example.app為例,我們?yōu)槠涮砑?a target="_blank">can設備的執(zhí)行權(quán)限:

OKT507-android-source/android$ vi device/softwinner/common/sepolicy/vendor/system_app.te

...

allow system_app vendor_shell_exec:file { getattr open read execute execute_no_trans };

allow system_app shell_exec:file { getattr open read execute execute_no_trans };

allow system_app shell:file { getattr open read execute execute_no_trans };

...

以策略規(guī)則配置形式(allow domains types:classes permissions)

分析:domains:system_app

types:vendor_shell_exec

classes:file

permissions:getattr open read execute execute_no_trans

neverallow failures

有時我們增加的權(quán)限,系統(tǒng)默認的配置是不允許的,比如我們上面給forlinx.example.app增加的執(zhí)行腳本的權(quán)限,報錯如下:

libsepol.report_failure: neverallow on line 9 of system/sepolicy/private/system_app.te

(or line 41463 of policy.conf) violated by allow system_app shell:file { read open };

libsepol.report_failure: neverallow on line 22 of system/sepolicy/private/shell.te

(or line 40025 of policy.conf) violated by allow system_app shell:file { read open };

libsepol.check_assertions: 2 neverallow failures occurred

系統(tǒng)默認的安全策略的路徑為system/sepolicy/,根據(jù)報錯的提示,我們可以修改默認的配置,修改system/sepolicy/private/system_app.te和system/sepolicy/private/shell.te,從而完成權(quán)限的賦予。

以上就是Android 安全策略的脈絡,以及飛凌嵌入式 T507 開發(fā)板Android系統(tǒng)下自定義安全策略的方法了。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5060

    文章

    18979

    瀏覽量

    302237
  • 開發(fā)板
    +關注

    關注

    25

    文章

    4910

    瀏覽量

    97084
收藏 人收藏

    評論

    相關推薦

    嵌入式FET527N-C核心現(xiàn)已適配Android 13

    嵌入式FET527N-C核心與Android13系統(tǒng)的結(jié)合,為嵌入式設備領域帶來了新的發(fā)展
    的頭像 發(fā)表于 11-08 11:25 ?201次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>FET527N-<b class='flag-5'>C</b>核心<b class='flag-5'>板</b>現(xiàn)已適配Android 13

    嵌入式作為首個嵌入式板卡合作伙伴入駐「恩智浦云實驗室」

    嵌入式作為恩智浦云實驗室的首個嵌入式板卡合作伙伴,已經(jīng)攜OK-MX95xx-C和OK-MX8MPQ-SMARC兩款
    的頭像 發(fā)表于 10-15 08:01 ?324次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>作為首個<b class='flag-5'>嵌入式</b>板卡合作伙伴入駐「恩智浦云實驗室」

    嵌入式linux開發(fā)板芯片的工作原理

    嵌入式Linux開發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式系統(tǒng)開發(fā)平臺,它廣泛應用于工業(yè)控制、智能家居、智能交通、醫(yī)療設備等領域。 嵌入式L
    的頭像 發(fā)表于 09-02 09:07 ?306次閱讀

    嵌入式OK3576-C開發(fā)板體驗】開箱報告

    簡介 很榮幸參與到本次由嵌入式和電子發(fā)燒友提供的OK3576-C開發(fā)板的試用機會。
    發(fā)表于 08-22 02:13

    嵌入式RK3576核心的四大優(yōu)勢詳解

    為了充分滿足AIoT市場對高性能、高算力和低功耗主控日益增長的需求,嵌入式近期推出了基于Rockchip RK3576處理器開發(fā)設計的FET3576-
    的頭像 發(fā)表于 06-28 09:34 ?1832次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3576核心<b class='flag-5'>板</b>的四大優(yōu)勢詳解

    嵌入式FET3576-C核心四大優(yōu)勢詳解

    為了充分滿足AIoT市場對高性能、高算力和低功耗主控日益增長的需求 ,嵌入式近期推出了基于Rockchip RK3576處理器開發(fā)設計的FET3576-
    的頭像 發(fā)表于 06-28 09:17 ?474次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>FET3576-<b class='flag-5'>C</b>核心<b class='flag-5'>板</b>四大優(yōu)勢詳解

    現(xiàn)場直擊 | 嵌入式亮相2024上海國際嵌入式

    6月12日,2024上海國際嵌入式展(embedded world China 2024)在上海世博展覽館開幕。嵌入式不僅展出了基于NXP、TI和瑞薩等國際廠商芯片打造的
    的頭像 發(fā)表于 06-13 14:13 ?950次閱讀
    現(xiàn)場直擊 | <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>亮相2024上海國際<b class='flag-5'>嵌入式</b>展

    嵌入式FET3568/3568J-C核心現(xiàn)已適配OpenHarmony4.1

    近日,嵌入式為FET3568/3568J-C核心適配了OpenHarmony4.1系統(tǒng),新系統(tǒng)的加持使核心
    的頭像 發(fā)表于 05-31 14:17 ?626次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>FET3568/3568J-<b class='flag-5'>C</b>核心<b class='flag-5'>板</b>現(xiàn)已適配OpenHarmony4.1

    ARM Cortex-A53嵌入式開發(fā)平臺FETT507-C OKT507-C用戶編譯手冊

    電子發(fā)燒友網(wǎng)站提供《ARM Cortex-A53嵌入式開發(fā)平臺FETT507-C OKT507-C用戶編譯手冊.pdf》資料免費下載
    發(fā)表于 04-28 15:20 ?0次下載

    嵌入式RK3568開發(fā)板藍牙收、發(fā)文件測試

    本文由電子發(fā)燒友論壇用戶fsdzdzy提供,感謝分享。嵌入式每月定期開展新的開發(fā)板體驗活動,歡迎更多工程師朋友的關注和參與。
    的頭像 發(fā)表于 02-02 16:31 ?1792次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3568<b class='flag-5'>開發(fā)板</b>藍牙收、發(fā)文件測試

    嵌入式T113-i開發(fā)板的調(diào)屏方法

    對于飛嵌入式T113-i開發(fā)板的調(diào)屏問題,需要按照以下步驟進行操作
    的頭像 發(fā)表于 01-29 16:25 ?868次閱讀

    AMP“雙系統(tǒng)”加持,嵌入式RK3568核心強實時性再升級

    嵌入式FET3568-C系列核心再度迎來新升級——支持“AMP”雙系統(tǒng)。
    的頭像 發(fā)表于 01-17 11:30 ?908次閱讀
    AMP“雙系統(tǒng)”加持,<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3568核心<b class='flag-5'>板</b>強實時性再升級

    嵌入式T113-i開發(fā)板的調(diào)屏方法,就是這樣簡單

    的配備為客戶提供了更加多樣的選擇。今天小編就與大家分享一下為嵌入式OK113i-S開發(fā)板適配LVDS屏幕的過程。
    的頭像 發(fā)表于 01-12 11:50 ?2146次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T113-i<b class='flag-5'>開發(fā)板</b>的調(diào)屏方法,就是這樣簡單

    技術(shù)帖 | 嵌入式T113-i開發(fā)板的休眠及喚醒操作

    嵌入式OK113i-S開發(fā)板支持兩種休眠方式:freeze和mem。本篇內(nèi)容小編會為大家介紹如何讓
    的頭像 發(fā)表于 12-29 08:02 ?1173次閱讀
    技術(shù)帖 | <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T113-i<b class='flag-5'>開發(fā)板</b>的休眠及喚醒操作

    新版本!嵌入式RK3568系列開發(fā)板全面支持Debian 11系統(tǒng)

    嵌入式OK3568-C/OK3568J-C開發(fā)板現(xiàn)已全面支持Debian 11系統(tǒng),新系統(tǒng)的
    的頭像 發(fā)表于 11-14 08:01 ?637次閱讀
    新版本!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3568系列<b class='flag-5'>開發(fā)板</b>全面支持Debian 11系統(tǒng)