當前位置:首頁 » 安卓系統 » androidselinux關閉

androidselinux關閉

發布時間: 2023-09-28 02:30:04

① android之SElinux小記

SELinux是安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux。它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。

SELinux 主要由美國國家安全局開發。2.6 及以上版本的 Linux 內核都已經集成了 SELinux 模塊。

SELinux 的結構及配置非常復雜,而且有大量概念性的東西,要學精難度較大。很多 Linux 系統管理員嫌麻煩都把 SELinux 關閉了。

SELinux目的在於明確的指明某個進程可以訪問哪些資源(文件、網路埠等)。強制訪問控制系統的用途在於增強系統抵禦 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。

在目前的大多數發行版中,已經默認在內核集成了SELinux。

舉例來說,系統上的 Apache 被發現存在一個漏洞,使得某遠程用戶可以訪問系統上的敏感文件(比如 /etc/passwd 來獲得系統已存在用戶) ,而修復該安全漏洞的 Apache 更新補丁尚未釋出。此時 SELinux 可以起到彌補該漏洞的緩和方案。因為 /etc/passwd 不具有 Apache 的 訪問標簽,所以 Apache 對於 /etc/passwd 的訪問會被 SELinux 阻止。

相比其他強制性訪問控制系統,SELinux 有如下優勢:

SELinux for Android在架構和機制上與SELinux完全一樣,考慮到移動設備的特點,所以移植到Android上的只是SELinux的一個子集。SELinux for Android的安全檢查幾乎覆蓋了所有重要的系統資源,包括 域轉換,類型轉換,進程、內核、文件、目錄、設備,App,網路及IPC相關的操作

Android分為 寬容模式 (僅記錄但不強制執行 SELinux 安全政策 )和 強制模式 (強制執行並記錄安全政策。如果失敗,則顯示為 EPERM 錯誤。 );在選擇強制執行級別時只能二擇其一。

您的選擇將決定您的政策是採取操作,還是僅允許您收集潛在的失敗事件。寬容模式在實現過程中尤其有用。

DAC是傳統的Linux的訪問控制方式,DAC可以對文件、文件夾、共享資源等進行訪問控制。

在DAC這種模型中,文件客體的所有者(或者管理員)負責管理訪問控制。

DAC使用了ACL(Access Control List,訪問控制列表)來給非管理者用戶提供不同的許可權,而root用戶對文件系統有完全自由的控制權。

MAC是任何進程想在SELinux系統中干任何事情,都必須先在安全策略配置文件中賦予許可權。

凡是沒有出現在安全策略配置文件中的許可權,進程就沒有該許可權。

這個機制相當於一個白名單,這個白名單上配置了所有進程的許可權,進程只能做白名單上許可權內的事情,一旦它想做一個不屬於它許可權的操作就會被拒絕。

這就需要使用到配置文件和其對應的te語法。

語法解析:

指定一個「域」(domain),一般用於描述進程,該域內的的進程,受該條TE語句的限制。

用 type 關鍵字,把一個自定義的域與原有的域相關聯,最簡單地定義一個新域的方式為:

意思為賦予shell給domain屬性,同時,shell與屬於domain這個集合里。

例如:有一個allow domain xxxxx 的語句,同樣地也給了shell xxxxx的屬性。

進程需要操作的客體(文件,文件夾等)類型(安全上下文),同樣是用type與一些已有的類型,屬性相關聯。

type有兩個作用,定義(聲明)並關聯某個屬性。

可以把這兩個作用分開,type定義,typeattribute進行關聯。

class定義在文件 system/sepolicy/private/security_classes 中.

定義在 system/sepolicy/private/access_vectors 。有兩種定義方法。

SELinux中,每種東西都會被賦予一個安全屬性,它就是SecurityContext(Security Context以下簡稱SContext,安全上下文或安全屬性)是一個字元串,主要由三部分組成。

例如在 SELinux for Android中,進程的SContext可以通過PS-Z命令查看,如下:

其中:

1. kernel/msm-3.18/security/selinux/
2. external/selinux/
3. 用BOARD_SEPOLICY_DIRS添加的各te文件和安全配置文件,主要包括device/<oem_name>/sepolicy/<proct_name>/和system/sepolicy/,以及其他功能模塊添加的配置文件。

一文徹底明白linux中的selinux到底是什麼
SELinux之一:SELinux基本概念及基本配置
Android selinux配置和用法
詳解 SEAndroid 以及 Hack 其規則(sepolicy)
SELinux/SEAndroid 實例簡述(二) TE語言規則

② 小米關閉selinux好處

作用:最大限度地減小系統中服務進程可訪問的資源(最小許可權原則)。

工作模式 :

enforcing:強制模式。違反 SELinux 規則的行為將被阻止並記錄到日誌中。

permissive:寬容模式。違反 SELinux 規則的行為只會記錄到日誌中。一般為調試用。

disabled:關閉 SELinux

關閉方法 :

  1. 臨時關閉:關機重啟都會失效

2.永久關閉:關機重啟都會有效(檢查selinux系統是否被成功關閉)

③ 安卓代碼能不能實現關閉SElinux許可權

不可以
1.3 方法1:adb在線修改

關閉 seLinux:

打開seLinux:

Enforcing:seLinux已經打開;
Permissive:seLinux已經關閉;

1.4 方法2: 從kernel中徹底關閉 (用於開機初始化時的seLinux許可權問題,要重編bootimage)

修改LINUX/android/kernel/arch/arm64/configs/XXXdefconfig文件(找相應config文件)
去掉CONFIG_SECURITY_SELINUX=y 的配置項

2. 在sepolicy中添加相應許可權

2.1 修改依據:
log 信息:
avc: denied { 操作許可權 } for pid=7201 comm=「進程名」 scontext=u:r:源類型:s0 tcontext=u:r:目標類型:s0 tclass=訪問類別 permissive=0

2.2 修改步驟:
找相應的「源類型.te 」文件

有兩個位置可能存在相應的te文件:

位置一:LINUX/android/external/sepolicy
位置二:LINUX/android/device/qcom/sepolicy/common

2.3 按如下格式在該文件中添加:

allow 源類型 目標類型:訪問類別 {許可權};

2.4 舉例
Kernel Log:
avc: denied { execheap } for pid=7201 comm="com..input" scontext=u:r:untrusted_app:s0tcontext=u:r:untrusted_app:s0tclass=processpermissive=0

修改:
在LINUX/android/external/sepolicy/untrusted_app.te 中添加:

[java] view plain
<span style="font-size:24px;color:#009900;">allow untrusted_app untrusted_app:process { execheap };</span>

備注:
在這個例子中,由於源類型和目標類型都是untreated_app, 所以也可以寫成:

[java] view plain
<span style="font-size:24px;color:#009900;">allow untrusted_app self:process { execheap };</span>

3. 添加許可權後的neverallowed沖突

3.1 編譯報錯:
libsepol.check_assertion_helper: neverallow on line xxx ofexternal/sepolicy/domain.te ……

3.2 原因:
新添加的sepolicy項目違反了domain.te 中規定的的總策略原則。所以該條許可權策略不能添加,如果強行添加的話有CTS測試失敗的風險。

3.3 解決方法:
1.從運行log中找到要訪問的目標名稱,一般是name欄位後的名稱
avc: denied { read write } for pid=303 comm="mediaserver"name="tfa9890"dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0tcontext=u:object_r:device:s0tclass=chr_file permissive=0

2.找到相應的*_contexts文件。

一般有file_contexts, genfs_contexts, property_contexts, service_contexts 等文件

3.在contexts文件中指定要訪問的目標為一個「源類型 」有許可權訪問的「目標類型」
如:在file_contexts中添加: /dev/tfa9890 u:object_r:audio_device:s0

3.4 舉例
添加許可權:
在mediaserver.te中添加allow mediaserver device:chr_file { read write open};

編譯報錯:
libsepol.check_assertion_helper: neverallow on line 258 ofexternal/sepolicy/domain.te (or line 5252 of policy.conf) violated byallow mediaserver device:chr_file { read write open};

違反了domain.te 258的:
neverallow {domain –unconfineddomain –ueventd } device:chr_file { open read write}

運行Log:
avc: denied { read write } for pid=303 comm="mediaserver"name="tfa9890" dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0 tcontext=u:object_r:device:s0tclass=chr_file permissive=0

修改步驟:

1.目標名稱是: tfa9890, 其在系統中的路徑是: /dev/tfa9890, 是audio相關的設備文件
2.源類型是mediaserver, 在mediaserver.te 文件中發現其具有 audio_device 目標類型的許可權
3.所以在file_contexts 中添加 「/dev/tfa9890 u:object_r:audio_device:s0」 可以解決問題

④ 安卓關閉selinux好處

你好朋友
1. 禁止selinux

1.1 在內核中關閉selinux編譯選項CONFIG_SECURITY_SELINUX
1.2 還可以在system.prop中定義ro.boot.selinux=disable
這兩種方法都可以禁用selinux,也可以設置成ro.boot.selinux=permissive
寬容模式
1.3 可以通過setenforce1開啟enforce模式,setenforce 0為permissive模式
getenforce獲取當前模式

2. 所有安全策略最終編譯成sepolicy文件放在root目錄下,init進程啟動後會讀取/sepolicy策略文件,並通過/sys/fs/selinux/load節點
把策略文件內容寫入內核

3 安全上下文存放root目錄
/etc/security/mac_permissions.xml
/file_contexts //系統中所有file_contexts安全上下文
/seapp_contexts //app安全上下文
/property_contexts //屬性的安全上下文
/service_contexts //service文件安全上下文

genfs_contexts //虛擬文件系統安全上下文

4. app在/data/data/文件的安全上下文設置過程
1. 根據uid,pkgname,seinfo在seapp_contexts中匹配.
2. 根據匹配到的contexts,重新設置給相對應文件

5. 系統中所有的object class 定義在external/sepolicy/security_classes中.
object class使用在allow語句中,object class所具有的操作定義在external/sepolicy/access_vectors
文件中

6 allow語句
allow語句用來許可權設置
rule_name source_type target_type : class perm_set

rule_name : 有allow,neverallow
source_type : 許可權主體,表示source_type對target_type有perm_set描述的許可權
如:
allow zygote init:process sigchld
允許zygote域裡面的進程可對init域的進程發送sigchld信號

typeattribute表示把屬性和type關聯起來

7 role定義
Android系統中的role定義在external/sepolicy/roles中,
目前只定義了r

8 socket使用
以/data/misc/wifi/sockets/wlan0 socket來說明使用方法
1. 定義socket type
type wpa_socket ,file_type
2. 指定安全上下文
/data/misc/wifi/sockets(/.*)? u:object_r:wpa_socket:s0
給/data/misc/wifi/sockets目錄下所有的文件統一指定安全上下文為wpa_socket
3.聲明socket使用許可權
在進程te中使用unix_socket_send(clientdomain, wpa, serverdomain)即可建立socket連接

9binder使用
在使用binder進程的te中根據情況使用如下宏:
binder_use(domain)//允許domain域中的進程使用binder通信
binder_call(clientdomain, serverdomain)//允許clientdomain和serverdomain域中的進程通信
binder_service(domain)//標志domain為service端

10 文件的使用
以/dev/wmtWifi來說明:
1.定義type
type wmtWifi_device dev_type //dev_type用來標志/dev/下的文件
2.給/dev/wmtWifi指定完全上下文
/dev/wmtWifi(/.*)? u:object_r:wmtWifi_device:s0

3.進程許可權設置
在進程te文件中allow許可權
allow netd wmtWifi_device:chr_file { write open };

11 property 屬性設置
以藍牙的各種屬性來說明
1.定義type
type bluetooth_prop, property_type;
2設置安全上下文
bluetooth. u:object_r:bluetooth_prop:s0
3進程許可權設置
allow bluetooth bluetooth_prop:property_service set;

5 專業詞彙
MLS :Multi-Level Security
RBAC :Role Based Access Control
DAC :Discretionary Access Control
MAC :Mandatory Access Control
TEAC :Type Enforcement Accesc Control
望採納祝你好運

⑤ Android 中怎樣查找SELinux導致的許可權受限有關問題

在Android KK 4.4 版本後,Google 有正式有限制的啟用SELinux, 來增強android 的安全保護。
SELinux 分成enforcing mode 和 permissive mode, enforcing mode 會強制性限制訪問; 而permissve mode 只審查許可權, 但不限制, 即不會產生實質性影響.

KK 版本, Google 只有限制的啟用SELinux, 即只有針對netd, installd, zygote, vold 以及它們直接fork 出的child process 使用enforcing mode, 但不包括zygote fork的普通app.

L 版本, Google 全面開啟SELinux, 幾乎所有的process 都使enforcing mode, 影響面非常廣.

另外為了限制user 版本root 許可權,針對su 有做特別的處理,可以參考FAQ android KK 4.4 版本後,user 版本su 許可權嚴重被限制問題說明

目前所有的SELinux check 失敗,在kernel log 或者android log(L版本後)中都有對應的"avc: denied" 或者 "avc: denied"的LOG 與之對應。反過來,有此LOG,並非就會直接失敗,還需要確認當時SELinux 的模式, 是enforcing mode 還是 permissve mode.

如果問題容易復現,可以先將SELinux 模式調整到Permissive mode,然後再測試確認是否與SELinux 約束相關.

熱點內容
c語言輸出txt文件 發布:2024-09-18 13:12:33 瀏覽:198
mssql資料庫結構 發布:2024-09-18 12:53:29 瀏覽:453
蘋果和安卓哪個好打 發布:2024-09-18 12:40:31 瀏覽:377
安卓4個攝像頭是什麼手機 發布:2024-09-18 12:39:01 瀏覽:586
linux設置dns命令 發布:2024-09-18 12:38:57 瀏覽:80
圖靈加密機 發布:2024-09-18 12:34:34 瀏覽:546
資料庫好難學 發布:2024-09-18 12:33:07 瀏覽:487
linux才能 發布:2024-09-18 12:32:19 瀏覽:184
執行存儲過程dataset 發布:2024-09-18 12:16:54 瀏覽:471
記憶重組腳本 發布:2024-09-18 12:14:28 瀏覽:181