赞
踩
SEAndroid是Google在Android4.4上正式推出的一套以SELinux为核心的系统安全机制。而SELinux则是由NSA(美国国安局)在Linux社区的帮助下设计的一个针对Linux的安全强化系统。
NSA最初设计的安全模型叫FLASK,全称为FluxAdvanced Security Kernel(由Uta大学和美国国防部开发,后来由NSA将其开源),当时这套模型针对DTOS系统。后来NSA觉得Linux更具发展和普及前景,所以就在Linux系统上重新实现了FLASK,并称之为SELinux。
SELinux是一种基于域-类型(domain-type)模型的强制访问控制(MAC)安全系统,在LinuxKernel中,SELinux通过LSM(LinuxSecurity Modules)实现。在2.6以前的版本,SELinux通过patch方式发布。从2.6开始,SELinux正式进入内核,成为标配。
由于Linux有多种发行版本,所以各家的SELinux表现形式也略有区别,具体到Android平台,Google对其进行了一定的修改,从而得到SEAndroid。
SEAndroid在架构和机制上与SELinux完全一样,考虑到移动设备的特点,所以移植到Android上的只是SELinux的一个子集。SEAndroid的安全检查几乎覆盖了所有重要的系统资源,包括域转换,类型转换,进程、内核、文件、目录、设备,App,网络及IPC相关的操作。
接下来,我们就来看一下SEAndroid安全机制的整体框架,如下所示:图1.SEAndroid安全机制框架
从上面的架构图可以看出来,SEAndroid安全机制包含用户空间和内核空间两部分,内核空间主要涉及LSM内核安全模块,用户空间包括SecurityContext,Security Policy等模块。这些模块的作用和交互如下:
1)LSM提供了一种通用的安全框架,允许将安全模型以模块方式载入内核,除了selinux外,linux还支持tomoyo,yama等安全模型;
2)AVC是一个策略缓存,当进程试图访问系统资源的时候,kernel中的安全策略服务将会先在AVC中查找策略,如果没有命中,则会到安全服务器中查找,找到了,则权限被缓存,允许访问,如果没找到,则拒绝访问;
3)SecurityPolicy描述系统资源的安全访问策略,系统启动时init进程负责把策略文件加载到内核的LSM模块中;
4)SecurityContext描述系统资源的安全上下文,SELinux的安全访问策略就是在安全上下文的基础上实现的;
5)libselinux为用户空间提供了SELinux文件系统访问接口;
SELinux出现之前,Linux的安全模型叫DAC,全称是DiscretionaryAccess Control,翻译为自主访问控制。DAC的核心思想很简单,就是:
进程理论上所拥有的权限与运行它的用户权限相同。比如,以root用户启动shell,那么shell就有root用户的权限,在Linux系统上能干任何事。
显然DAC的管理太宽松了,所以各路高手都想方设法要在Android上搞到root权限。事实上su就是通过修改uid(0)和gid(0)的方式来取得root权限的。那么SELinux又是如何解决这个问题的呢?原来,它在DAC之外,设计了一个新的安全模型,叫做MAC(MandatoryAccess Control),翻译为强制访问控制。MAC的处世哲学非常简单,即:
任何进程想在SELinux系统中干任何事,都必须先在安全策略的配置文件中赋予权限。凡是没有在安全策略中配置的权限,进程就没有该项操作的权限。来看一个SEAndroid中设置权限的例子:
[external/sepolicy/netd.te]
allow netd sysfs:file write;
如果没有在netd.te中使用上例中的权限配置语句,那么netd就无法往sys目录下的任何文件中写入数据,即使netd具有root权限。 上面这条表示允许(Allow)netd域(Domain)中的进程写(Write)sysfs类型(Type)的文件;
显然,MAC比DAC在权限管理方面要复杂,严格和细致得多。
那么,关于DAC和MAC,两者是什么关系呢?
1)Linux系统先做DAC检查。如果没有通过DAC权限检查,则操作直接失败。通过DAC检查之后,再做MAC权限检查;
2)SELinux中也有用户的概念,但它和Linux中原有的user概念不是同一个东西。什么意思呢?比如,Linux中的超级用户root在SELinux中可能就是一个没权限,没地位,打打酱油的“路人甲”。当然,这一切都是由SELinux安全策略来决定的。
通过上面内容的学习,各位应该能够感觉到,在SELinux中,安全策略文件是最重要的,确实如此,学习SELinux的终极目标应该是:
1)看懂现有的安全策略文件;
2)编写符合项目需求的安全策略文件;
SELinux有自己的一套规则来编写安全策略文件,这套规则被称为SELinux安全策略语言,它是掌握SELinux的重点;
Linux中有两种东西,一种死的(Inactive),一种活的(Active)。死的东西就是指文件(Linux哲学,万物皆文件),而活的东西就是进程。此处的“死”和“活”是一种比喻,映射到软件层面的意思就是:进程能发起动作,例如它能打开并操作文件,而文件只能被进程操作。
SELinux中,每种东西都会被赋予一个安全属性,它就是SecurityContext,Security Context(以下简称SContext,安全上下文或安全属性)是一个字符串,主要由三部分组成。例如在SEAndroid中,进程的SContext可以通过PS-Z命令查看,如下:
u:r:init:s0 root 464 1 /system/bin/sh
u:r:healthd:s0 root 240 1 /sbin/healthd
u:r:lmkd:s0 root 241 1 /system/bin/lmkd
u:r:servicemanager:s0 system 242 1 /system/bin/servicemanager
u:r:vold:s0 root 243 1 /system/bin/vold
u:r:surfaceflinger:s0 system 244 1 /system/bin/surfaceflinger
1)u为user的意思:SEAndroid中定义了一个SELinux用户,值为u; 最左边那一列就是进程的SContext,以第一个进程/system/bin/sh的SContex为例,其值为u:r:init:s0:
2)r为role的意思:role是角色之意,它是SELinux中一种比较高层次,更方便的权限管理思路,即RoleBased Access Control(基于角色的访问控制,简称RBAC)。简单点说,一个user可以属于多个role,不同的role具有不同的权限。
3)init代表进程在init域(Doamin)中。MAC的基础管理思路其实不是上面的RBAC,而是所谓的TypeEnforcement Access Control(简称TEAC,一般用TE表示)。对进程来说Type就是Domain,比如init这个Domain有什么权限,都需要在策略文件(init.te)中定义。
4)s0和SELinux为了满足军用和教育行业而设计的Multi-LevelSecurity(MLS)机制有关。简单点说,MLS将系统的进程和文件进行了分级,不同级别的资源需要对应级别的进程才能访问。
再来看看文件的SContext,这里我们用ls -Z来查看,如下:
drwx------ root root u:object_r:rootfs:s0 root
-rw-r--r-- root root u:object_r:rootfs:s0 service_contexts
drwxr-x--x root sdcard_r u:object_r:rootfs:s0 storage
dr-xr-xr-x root root u:object_r:sysfs:s0 sys
drwxr-xr-x root root u:object_r:system_file:s0 system
倒数第二列就是文件和目录的SContext信息,以第一行root目录为例,其值为u:object_r:rootfs:s0: 再来看看文件的SContext,这里我们用ls-Z来查看,如下:
1)u还是user的意思;
2)object_r:文件是死的东西,它没办法扮演任何角色,所以在SELinux中,所有死的东西都用object_r来表示它的role;
3)rootfs代表文件的类型(Type),和进程的Domain其实是一个意思。它表示root目录对应的Type是rootfs;
4)s0:MLS的级别;
根据SELinux规范,完整的SContext字符串为:
user:role:type[:range]
注意:方括号中的内容表示可选项。S0属于range中的一部分。
SContext的核心其实是前三个部分:user:role:type
前面说了,MAC的管理核心是TEAC,然后是高一级的RBAC。RBAC是基于TE的,而TE也是SELinux中最主要的部分,下面我们就来看看TE。
我们再来看看前面提到的权限设置语句:
allow netd sysfs:file write;
1)allow:表示授权。除了allow之外,还有allowaudit、dontaudit、neverallow等; 这条语句的语法为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。