Android SELinux 系列(一) 背景,作用,原理

Android SELinux

android seolicy 官方文档

sepolicy.te 文件使用的是M4语言

SELinux 简析与修改

是什么

  • SELinux, 是为了加强系统安全

强制控制访问(MAC), 强制使用管理员定义的安全策略,基于安全上下文或标签, 鉴权所有的进程,对象和操作。用来校验服务和应用的权限。

  • SEAndroid

SELinux for Android
所有的进程,对象和操作,都得强制控制访问。

为什么

  • 所有的进程,对象,操作,如何统一强制控制访问的?

user:role:type:level, 定义此类标签,linux下一切皆文件操作

  • 为何要编译成二进制文件?

省空间吗? 字符串使用ascii编码不是一样吗?
不仅仅是字符串,是可执行指令? 使用m4宏解释器执行?

二进制文件空间占用小, 解析速度快。主要是二进制文件必须得设计格式(协议),然后只保留有用信息,然后直接按格式(协议)解析即可
编译成二进制的过程类似于网络通信的协议, 将接口数据序列化成二进制流,反序列化就是再还原协议数据的过程。

R.java文件id格式0XPPTTEEEE, PP为package_id, 即ResTable_package数据结构中的id, TT为type_id, 即ResTable_typeSpec数据结构中的id, EEEE 为entry_id, 按先后顺序自动排列。

  • 宏命令/方法在哪里找?

m4宏一般用作文本替换工具。

GNU M4 官方文档
将宏编译成二进制文件也是与资源文件类似的思想, 省空间, 便于解析。

怎么做

  • 如何新增一个进程的权限访问

根据avc报错日志,在对应的te文件中添加相应的规则

  • Android又是如何检测到api调用的

修改了te文件, 再编译,如果系统对某些api做了限制,同样会有avc报错, 再根据日志去到相应的文件去掉限制即可。

所以无论是系统移植, 还是开发,日志很有用,耐下心看日志, 可以解决大部分的问题

术语

术语 描述
Access Vector (AV) 权限集字典(如 open, write, read)
Access Vector Cache (AVC) SELinux Security Server 创建的一个存储访问判定的组件, 后续由 Object Manager 使用, 此组件允许以前的决定可以重新恢复而不必重新计算, 在SELinux services 中有两种AVC: 1. 内核AVC缓存基于Security Server 由内核Object managers 创建的判定 2. 编译到libselinux的用户空间AVC 缓存由SELinux-aware 调用avc_open, avc_has_perm, avc_has_perm_noaudit 方法创建的判定
Domain 由一个或多个关联类型组件Security Context 的进程组成。Type Enforcement 规则声明domain 如何与对象交互(查看Object Class)
Linux Security Module (LSM) 此框架提供了hook到内核组件(如disk, network services), 由安全模块用来执行访问控制检测。 现在只有一个LSM模块可被加载, 然而工作中需要入栈多个模块
Mandatory Access Control 系统加强的访问控制机制
Multi-Level Security (MLS) 基于Bell-La & Padula(BLP)模型加强机密性。如一个运行在’机密’级的程序可以在其当前级别读/写,但只能读其更低层级别,可以写更高层级别(越低权限越大?)
Object Class 描述一个资源, 如files,sockets, services. 每一个’class’ 都有合适的权限去读、写、导出这些资源. 这可以强制通过Object Manager 访问它们的实例对象
Object Manager 用户空间和内核组件, 负责打标签,管理(如创建,访问,销毁)和强制控制class对象的访问
Policy 决定访问权限的规则集合. 在SELinux中, 这些规则通常使用支持m4宏的内核策略语言或新的CIL语言编写。然后这些策略被编译成二进制格式加载到Security Server
Role Based Access Control SELinux 用户关联着一个或多个角色, 每个角色又可能关联着一个或多个Domain类型
Security Server 一个Linux内核子系统, 代表SELinux-aware的应用和Object Managers 基于Policy制定访问决策和计算安全上下文, 安全中心不强制决策,它仅仅根据Policy标记一个操作是否被允许. 强制决策是SELinux-aware应用或Object Manager的责任。
Security Context SELinux 安全上下文是一个变长的字符串,由以下命令组件组成: user:role:type[:range], 其中range是可选的. 安全上下文一般简称上下文,有时也叫标签
Security Identifier(SID) SID 是由内核安全中心和用户空间AVC映射的代表一个安全上下文的唯一不透明整数值
Type Enforcement 安全策略配置文件, SELinux 利用一种特定风格的TE强制实施强制访问控制
DAC Discretionary Access Control, 自主访问控制

安全策略配置文件

file_context: 记载了不同目录初始化的SContext, 和object_r有关
seapp_context: 和应用程序打标签有关
property_contexts: 和属性服务(property_service)有关, 为不同的属性打标签

编译流程是怎么样的,为何要打标签?

作用范围

文件操作,接口调用, 功能特性

文档

Object Class 和 Permissions

版权声明:除特殊说明,博客文章均为Sophimp原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇