0. 概述
- SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。
- 由于Linux有多种发行版本,所以各家的SELinux表现形式也略有区别。具体到Android平台,Google对其进行了一定得修改,从而得到SEAndroid。
1. SELinux
-
DAC和MAC
- SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。
核心思想:
进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。 - SELinux在DAC之外,设计了一个新的安全模型,叫MAC(Mandatory Access Control),翻译为强制访问控制。
MAC核心思想:
任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。 -
DAC和MAC:
- Linux系统先做DAC检查。如果没有通过DAC权限检查,则操作直接失败。通过DAC检查之后,再做MAC权限检查。
- SELinux中也有用户的概念,但它和Linux中原有的user概念不是同一个东西。什么意思呢?比如,Linux中的超级用户root在SELinux中可能就是一个没权限,没地位,打打酱油的”路人甲“。当然,这一切都由SELinux安全策略的制定者来决定。
- SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。
在SELinux中,安全策略文件是最重要的。SELinux有自己的一套规则来编写安全策略文件,这套规则被称之为SELinux Policy语言.
- SELinux是典型的MAC实现,对系统中每个对象都生成一个安全上下文(Security Context),每一个对象访问系统的资源都要进行安全上下文审查。审查的规则包括类型强制检测(type enforcement),多层安全审查(Multi-LevelSecurity),及基于角色的访问控制(RBAC: Role Based Access Control)。
- SELinux的整体结构如下图所示
2. SEAndroid
- 由于Android系 统有着独特的用户空间运行时,因此SELinux不能完全适用于Android系统。为此,NSA同Google一起针对Android系统,在SELinux基础上开发了 SEAndroid。整体框架:
-
SEAndroid安全机制包含有内核空间和用户空间两部分
- 内核空间的selinux lsm module模块负责内核资源的安全访问控制.
- sepolicy描述的是资源安全访问策略。系统在启动的时候,init进程会将内核空间安全访问策略加载内核空间的selinux lsm模块中去,而用户空间的安全访问策略则直接保存到普通文件中.
- 用户空间的SecurityServer一方面需要检索用户空间的安全策略,另一方面也需要检索内核空间的安全策略.
- 用户空间的libselinux库封装了对SELinux文件系统接口的读写操作。用户空间的SecurityServer访问内核空间的selinux lsm模块时,都是间接地通过libselinux进行的。用户空间的SecurityServer检索用户空间的安全策略时,同样也是通过 libselinux库来进行的.
-
SELinux 给Android 带来下面影响:
- 严格限制了ROOT权限,以往ROOT“无法无天”的情况将得到极大的改善。
- 通过SELinux 保护,降低系统关键进程受攻击的风险,普通进程将没有权限直接连接到系统关键进程。
- 进一步强化APP的沙箱机制,确保APP难以做出异常行为或者攻击行为。
- 将改变APP 一旦安装,权限就已经顶死的历史,APP权限动态调整将成为可能
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。