1.SELinux 基本架构与原理
SELinux 是典型的MAC-Mandatory Access Controls实现,对系统中每个对象都生成一个安全上下文(Security Context),每一个对象访问系统的资源都要进行安全上下文审查。审查的规则包括类型强制检测(type enforcement),多层安全审查(Multi-Level Security),以及基于角色的访问控制(RBAC: Role Based Access Control)。
SELinux 包含五个基本组成:
- 用于处理文件系统的辅助模块,即SELinuxFS。
- 集成Linux Security Modules 的hooks sets。
- Security Policy Database。
- Security Label 验证模块。
- Access Vector Cache (AVC),访问向量缓存,以便提高验证速度。
流程如下:
- 进程通过系统调用(System Call) 访问某个资源,进入Kernel 后,会先做基本的检测,如果异常则直接返回。
- Linux Kernel DAC 审查,如果异常则直接返回。
- 调用Linux Kernel Modules 的相关hooks,对接到SELinux 的hooks,进而进行MAC 验证,如果异常则直接返回。
- 访问真正的系统资源。
- 返回用户态,将结果反馈。
2.SELinux and SEAndroid
2.1 SELinux and SEAndroid
Android 是建立在标准的Linux Kernel 基础上的,自然也可以开启SELinux。在通用移动平台上,通常很少开启这样的安全服务,Google 为了进一步增强Android 的安全性,经过长期的准备,目前已经在Android 5.0(L) 上有完整地开启SELinux,并对SELinux 进行深入整合形成了SEAndroid。
2.2 SELinux 给Android 带来的影响
- 严格限制了ROOT 权限,以往ROOT “无法无天” 的情况将得到极大的改善。
- 通过SELinux保护,降低系统关键进程受攻击的风险,普通进程将没有权限直接连接到系统关键进程。
- 进一步强化APP的沙箱机制,确保APP难以做出异常行为或者攻击行为。
- 将改变APP一旦安装权限就已经定死的历史,APP权限动态调整将成为可能。