android 8.1 安全機制 — SEAndroid & SELinux

来源:https://www.cnblogs.com/linhaostudy/archive/2020/05/19/12915103.html
-Advertisement-
Play Games

1. SELinux 背景知識 1.1 DAC 與 MAC 在 SELinux 出現之前,Linux 上的安全模型叫 DAC,全稱是 Discretionary Access Control,翻譯為自主訪問控制。 DAC 的核心思想很簡單,就是:進程理論上所擁有的許可權與執行它的用戶的許可權相同。比如, ...


1. SELinux 背景知識

1.1 DAC 與 MAC

在 SELinux 出現之前,Linux 上的安全模型叫 DAC,全稱是 Discretionary Access Control,翻譯為自主訪問控制。

DAC 的核心思想很簡單,就是:進程理論上所擁有的許可權與執行它的用戶的許可權相同。比如,以 root 用戶啟動 Browser,那麼 Browser 就有 root 用戶的許可權,在 Linux 系統上能幹任何事情。

顯然,DAD 管理太過寬鬆,只要想辦法在 Android 系統上獲取到 root 許可權就可以了。那麼 SELinux 是怎麼解決這個問題呢?在 DAC 之外,它設計了一種新的安全模型,叫 MAC(Mandatory Access Control),翻譯為強制訪問控制。

MAC 的理論也很簡單,任何進程想在 SELinux 系統上乾任何事情,都必須在《安全策略文件》中賦予許可權,凡是沒有出現在安全策略文件中的許可權,就不行。

關於 DAC 和 MAC,可以總結幾個知識點:

  1. Linux 系統先做 DAC 檢查。如果沒有通過 DAC 許可權檢查,則操作直接失敗。通過 DAC 檢查之後,再做 MAC 許可權檢查
  2. SELinux 有自己的一套規則來編寫安全策略文件,這套規則被稱之為 SELinux Policy 語言。

1.2 SEPolicy 語言

Linux中有兩種東西,一種死的(Inactive),一種活的(Active)。死的東西就是文件(Linux哲學,萬物皆文件。註意,萬不可狹義解釋為File),而活的東西就是進程。此處的 死 和 活 是一種比喻,映射到軟體層面的意思是:進程能發起動作,例如它能打開文件並操作它。而文件只能被進程操作。

根據 SELinux 規範,完整的 Secure Context 字元串為:user:role:type[:range]

1.2.1 進程的 Secure Context

在 SELinux 中,每種東西都會被賦予一個安全屬性,官方說法叫做 Security Context,Security Context 是一個字元串,主要由三個部分組成,例如 SEAndroid 中,進程的 Security Context 可通過 ps -Z 命令查看:

rk3288:/ $ ps -AZ
u:r:hal_wifi_supplicant_default:s0 wifi      1816     1   11388   6972 0                   0 S wpa_supplicant
u:r:platform_app:s0:c512,c768  u0_a14        1388   228 1612844  57396 0                   0 S android.ext.services
u:r:system_app:s0              system        1531   228 1669680 119364 0                   0 S com.android.gallery3d
u:r:kernel:s0                  root           582     2       0      0 0                   0 S [kworker/1:2]
u:r:radio:s0                   radio          594   228 1634876  89296 0                   0 S com.android.phone
u:r:system_app:s0              system         672   228 1686204 141716 0                   0 S com.android.settings
u:r:platform_app:s0:c512,c768  u0_a18         522   223 1721656 152116 0                   0 S com.android.systemui

上面的最左邊的一列就是進程的 Security Context,以第一個進程 wpa_supplicant 為例

u:r:hal_wifi_supplicant_default:s0

其中:

  • u 為 user 的意思,SEAndroid 中定義了一個 SELinux 用戶,值為 u
  • r 為 role 的意思,role 是角色之意,它是 SELinux 中一個比較高層次,更方便的許可權管理思路。簡單點說,一個 u 可以屬於多個 role,不同的 role 具有不同的許可權。
  • hal_wifi_supplicant_default 代表該進程所屬的 Domain 為 hal_wifi_supplicant_default。MAC(Mandatory Access Control)強制訪問控制 的基礎管理思路其實是 Type Enforcement Access Control(簡稱TEAC,一般用TE表示),對進程來說,Type 就是 Domain,比如 hal_wifi_supplicant_default 需要什麼許可權,都需要通過 allow 語句在 te 文件中進行說明。
  • s0 是 SELinux 為了滿足軍用和教育行業而設計的 Multi-Level Security(MLS)機制有關。簡單點說,MLS 將系統的進程和文件進行了分級,不同級別的資源需要對應級別的進程才能訪問

1.2.2 文件的 Secure Context

文件的 Secure Context 可以通過 ls -Z 來查看,如下

rk3288:/vendor/lib $ ls libOMX_Core.so -Z
u:object_r:vendor_file:s0 libOMX_Core.so
  • u:同樣是 user 之意,它代表創建這個文件的 SELinux user
  • object_r:文件是死的東西,它沒法扮演角色,所以在 SELinux 中,死的東西都用 object_r 來表示它的 role
  • vendor_file:type,和進程的 Domain 是一個意思,它表示 libOMX_Core.so 文件所屬的 Type 是 vendor_file
  • s0:MLS 的等級

1.3 TE 介紹

MAC 基本管理單位是 TEAC(Type Enforcement Accesc Control),然後是高一級別的 Role Based Accesc Control。RBAC 是基於 TE 的,而 TE 也是 SELinux 中最主要的部分。上面說的 allow 語句就是 TE 的範疇。

根據 SELinux 規範,完整的 SELinux 策略規則語句格式為:

allow domains types:classes permissions;

- Domain - 一個進程或一組進程的標簽。也稱為域類型,因為它只是指進程的類型。
- Type - 一個對象(例如,文件、套接字)或一組對象的標簽。
- Class - 要訪問的對象(例如,文件、套接字)的類型。
- Permission - 要執行的操作(例如,讀取、寫入)。

= allow : 允許主體對客體進行操作
= neverallow :拒絕主體對客體進行操作
= dontaudit : 表示不記錄某條違反規則的決策信息
= auditallow :記錄某項決策信息,通常 SElinux 只記錄失敗的信息,應用這條規則後會記錄成功的決策信息。

使用政策規則時將遵循的結構示例:

語句:
allow appdomain app_data_file:file rw_file_perms;

這表示所有應用域都可以讀取和寫入帶有 app_data_file 標簽的文件

—> 相關實例

1. SEAndroid 中的安全策略文件 policy.conf
# 允許 zygote 域中的進程向 init 域中的進程(Object Class 為 process)發送 sigchld 信號
allow zygote init:process sigchld;
2. # 允許 zygote 域中的進程 search 或 getattr 類型為 appdomain 的目錄。
# 註意,多個 perm_set 可用 {} 括起來
allow zygote appdomain:dir { getattr search };

3. # perm_set 語法比較奇特,前面有一個 ~ 號。
   # 它表示除了{entrypoint relabelto}之外,{chr_file #file}這兩個object_class所擁有的其他操作 
  allow unconfineddomain {fs_type dev_type file_type}:{ chr_file file }   \
  ~{entrypoint relabelto};

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • --ORACLE表被鎖原因:具體操作某一個FORM界面,或者後臺資料庫操作某一個表時發現一直出於"假死"狀態, --可能是該表被某一用戶鎖定,導致其他用戶無法繼續操作 --查詢被鎖的表 select b.owner, b.object_name, a.session_id, a.locked_mod ...
  • 資料庫索引: 索引有單列索引複合索引之說 如何某表的某個欄位有主鍵約束和唯一性約束,則Oracle 則會自動在相應的約束列上建議唯一索引。資料庫索引主要進行提高訪問速度。 建設原則: 1、索引應該經常建在Where 子句經常用到的列上。如果某個大表經常使用某個欄位進行查詢,並且檢索行數小於總表行數的 ...
  • 前言 數據科學部為想從事大數據方向學習的小伙伴總結了一下大數據的學習路線,供大家學習參考。由於大數據是一個基礎門檻較高就業前景較好的學習方向。所以打算學習大數據的小伙伴要加油啦! 大數據學習路線: 首先我要瞭解大數據處理流程: 第一步:數據收集 第二部:數據存儲 第三步:數據分析 第四步:數據應用 ... ...
  • 問題 經常在PG群里看到有人在問“為什麼我對錶賦予了許可權;但是還是不能訪問表” 解析 若你看懂德哥這篇文章PostgreSQL邏輯結構和許可權體系介紹;上面對你就不是困擾你的問題 解決這個問題很簡單;在解決之前;我們要先瞭解PostgreSQL的邏輯結構、以及與用戶之間的關係。盜用德哥的圖;來詮釋下邏 ...
  • #獲取會員的上二級 drop view if exists vwMemberL2Parent; create view vwMemberL2Parent as select m.id, m.parent_id, m.nickname, m.realname, m.avatar, m.mobile, ...
  • 這是大數據入門常識第二篇,主要討論大數據工作的方向問題。第一篇沒看的同學可以補一下: "3000字長文教你大數據該怎麼學!" 有不少剛入門的同學在後臺會問類似這樣的問題 看招聘網站上,大數據相關的方向好多,不知道自己適合哪個怎麼辦? 關註我公眾號的同學應該有不少是剛入門的,所以我把內容好好地整理總結 ...
  • IsEqual與Hash個人理解 isEqual NSObject類的實例方法: 主要是根據對象的記憶體地址來判斷兩個對象是否相等,這裡與 效果相同。 isEqualToString (BOOL)isEqualToString:(NSString )aString 是NSString類的實例方法,它主 ...
  • 希望通過這篇文章從頭到尾梳理一下 iOS 中涉及到渲染原理相關的內容,會先從電腦渲染原理講起,慢慢說道 iOS 的渲染原理和框架,最後再深入探討一下離屏渲染。 希望能對大家有點幫助~ 1. 電腦渲染原理 CPU 與 GPU 的架構 對於現代電腦系統,簡單來說可以大概視作三層架構:硬體、操作系統 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...