本文介绍SEAndroid(Security Enhancements (SE) for Android),这里的SE全称是Security Enhanced,SEAndroid是Google在Android4.4上正式推出的一套以SELinux为核心的系统安全机制。而SELinux则是由NSA(美国国安局)在Linux社区的帮助下设计的一个针对Linux的安全强化系统。
SEAndroid是在SELinux基础上发展起来的。SELinux是linux系统中对MAC(强制性访问控制)的实现。由于Android系统有着独特的用户空间运行时,因此SELinux不能完全适用于Android系统。为此,NSA(美国国家安全局)同Google一起针对Android系统。
Android 使用SEAndroid对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。
SEAndroid安全机制框架
SEAndroid在架构和机制上与SELinux完全一样,考虑到移动设备的特点,所以移植到Android上的只是SELinux的一个子集。SEAndroid的安全检查几乎覆盖了所有重要的系统资源,包括域转换,类型转换,进程、内核、文件、目录、设备,App,网络及IPC相关的操作。
接下来,我们就来看一下SEAndroid安全机制的整体框架,如下所示:
从上面的架构图可以看出来,SEAndroid安全机制包含用户空间和内核空间两部分,
- 内核空间主要涉及LSM内核安全模块
- 用户空间包括SecurityContext,Security Policy等模块
这些模块的作用和交互如下:
- LSM提供了一种通用的安全框架,允许将安全模型以模块方式载入内核,除了selinux外,linux还支持tomoyo,yama等安全模型
- AVC是一个策略缓存,当进程试图访问系统资源的时候,kernel中的安全策略服务将会先在AVC中查找策略,如果没有命中,则会到安全服务器中查找,找到了,则权限被缓存,允许访问,如果没找到,则拒绝访问
- SecurityPolicy描述系统资源的安全访问策略,系统启动时init进程负责把策略文件加载到内核的LSM模块中
- SecurityContext描述系统资源的安全上下文,SELinux的安全访问策略就是在安全上下文的基础上实现的
- libselinux为用户空间提供了SELinux文件系统访问接口