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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...