http://blog.csdn.net/l173864930/article/details/17194899
MLS(Multi-Level Security)
什么是MLS,为何要引入MLS
MLS称为多级别安全是另一种强制访问控制方法,特别适合于政府机密数据的访问控制,早期对计算机安全的研究大多数都是以在操作系统内实现MLS访问控制为驱动的。所有MLS的使用都是建立在TE安全的基础之上。
在SELinux中MLS是一个可选访问控制方式,而在SEAndroid中则是被作为安全访问方式的其中之一。
MLS中的相关参量
在SEAndroid中mls的相关参量就是安全上下文的第四列称为security level,在安全上下文第四列中可以有一个或者两个security level,第一个表示低安全级别,第二个表示高安全级别。
每个security level由两个字段组成:
sensitivity
sensitivity有着严格的分级,它反应了一个有序的数据灵敏度模型,如政府分类控制中的绝密,机密和无密级。
category
category是无序的,它反应的是数据划分的需要。
基本思路是对于要访问的数据你同时需要足够的sensivity和正确的category。
SEAndroid中的安全上下文
SEAndroid的安全上下文与SELinux基本一致(除了MLS检测在SEAndroid中被强制执行),共有4个部分组成分别为user、role、type、sensitivity,以u:object_r:system_data_file:s0为例:
user:安全上下文的第一列为user,在SEAndroid中的user只有一个就是u。
role:第二列表示role,在SEAndroid中的role有两个,分别为r和object_r。
type:第三列为type,SEAndroid中共定义了139种不同的type。
security level:第四列是专为MLS访问机制所添加的安全上下文的扩展部分,
格式为sensitivity[:category list][- sensitivity[:category list]],例如s0 - s15:c0.c1023,其中s0之后的内容可以不需要,
冒号后面的内容是category,sensitivity和category组合一起声明了当前的安全级别(security level),“-”号左右分别标识了安全级别的最低和最高,
这一列的参数将在MLS约束检查时用到,“15”、“1023”表示了sensitivity和category的最大值,这一参数可在Android.mk中定义。
在SEAndroid中sensitivity只有一个级别即s0,category共有1024个,因此最低安全级别就是s0,最高安全级别就是s0:c0.c1023。
security level之间的三种运算关系:
dom
需要主体sensitiviety大于客体,同时客体的category是主体的一个子集。
domby
与dom完全相反
eq
主体客体的sensitivity和category分别相同。
高的security level对低的security level拥有dom,低的security level对高的security level关系为domby(与dom相反),同级的security关系是eq,这三种关系运算符是SEAndroid中特有的。
无限权限
在SEAndroid中共定义了三个拥有巨大权限的attribute分别是mlstrustedsubject、mlstrustedobject、unconfineddomain,被分类到mlstrustedsubject的type在充当主体domain是可以越过MLS检查,被分类到mlstrustedobject的type在充当客体时可以越过MLS检查,被分到unconfineddomain的type则拥有所有权限可对客体进行任意操作。
在SEAndroid中被分在mlstrustedsubject attribute中的type有adbd、debuggerd、drmserver、init、installd、kernel、mediaserver、netd、surfaceflinger、su、system、vold、zygote。
被分在mlstrustedobject attribute中的type有alarm_device、ashmem_device、binder_device、log_device、mtp_device、nv_device、powervr_device、ptmx_device、null_device、cgroup、sysfs、sysfs_writable、sysfs_writable、sysfs_writable、debugfs、apk_data_file、cache_file、dnsproxyd_socket。
被分在unconfineddomain的type有init、kernel、su。
MLS对进程的约束
限制进程的domain转换
对于从一个domain转换到另一个domain的操作要求两个domain的高级别security level和低级别security level同时相等才能许可转换,除非是待转换的domain属于对mls无限权限的type。
限制进程读操作
只有当主体domain的低级别security level对客体domain的低级别security level具有dom关系时,或者主体domian是属于对mls无限权限的type,主体才能对客体具有读操作的许可。
这一读操作具体是指:
能获取进程优先权
能获取另一进程的session id
能获取到进程的group id
能获取到系统的capabilities
能获取文件的属性信息
能追踪父程序或子程序的执行
允许通过clone或fork进程实现状态信息共享
总结一下就是MLS限制了低级别进程向高级别进程进行读的操作,即不能上读。
限制进程写操作
只有当主体domain的低级别security level对客体domain的低级别security level具有domby关系时,或者主体domain是属于对mls无限权限的type,主体才能对客体具有写操作的许可。
写操作具体是指:
能发送SIGKILL信号
能发送SIGSTOP信号
能发送一个非SIGKILL、SIGSTOP、SIGCHLD的信号
能设置进程优先级
能设置进程group id
能设置系统的capabilities
能改变进程hard limits
能追踪父程序或子程序的执行
允许通过clone或fork进程实现状态信息共享
总结一下就是MLS限制了高级别进程对低级别进程写的操作,即不能下写。
MLS对socket的约束
进程对local socket的访问限制
只有当主体进程的domain的高级别security level和低级别security level分别与客体local socket的type的security level相同时即满足eq关系时,或者主体客体任何一个具有对mls无限权限的type时,主体进程才对local socket拥有了某些访问权限。
这些访问权限是指:
读操作
写操作
新建操作
能获取对象属性信息
能设置对象的属性信息
能对对象重新标记安全上下文
能进行bind操作
能发起一个连接请求
能监听连接事件
能接受一个连接请求
能获取到socket options
能关闭socket连接
对socket的datagram发送的限制
只有当发送方的低级别security level与接受方的低级别security level满足domby关系时,或者主体客体任何一个具有对mls无限权限的type时,发送方才对接受方拥有了发送权限。
对客户端socket和服务端socket建立连接的限制
只有当客户端的低级别security level与服务端的低级别security level满足eq关系时,或者主体客体任何一个具有对mls无限权限的type时,客户端就能获得连接服务端的权限。
MLS对文件和目录的约束
对文件的创建和重新标记的限制
对文件操作时,要求客体的文件安全上下文只有一个security level即没有低级别和高级别security level或者说是这两个级别相同。 当主体domain的低级别security level对客体文件的低级别security level相同时,或者主体具有对mls有无限权限的type时,主体对客体文件拥有创建、和重新标记安全上下文的权限。
对目录的读操作的限制
只有当主体的低级别security level对客体目录的低级别security level满足dom关系时,或者主体客体任何一个具有对mls无限权限的type时,主体能对目录拥有如下权限:
能读目录
能获得目录的属性信息
能获得某个正在被访问文件的所有上层目录访问权(search权限)
总结一下就是对目录的访问不能上读。
对文件的读操作的限制
只有当主体的低级别security level对客体文件的低级别security level满足dom关系时,或者主体客体任何一个具有对mls无限权限的type时,主体能对文件拥有如下权限:
能读文件
能获得文件的属性信息
能执行该文件
总结一下就是对文件的访问不能上读。
对目录的写操作的限制
只有当主体的低级别security level对客体目录的低级别security level满足domby关系时,或者主体客体任何一个具有对mls无限权限的type时,主体能对目录拥有如下权限:
能对目录写操作
能设置属性信息
能重命名目录
能添加一个文件到目录中
能从目录中删除一个文件
能改变父目录
能删除一个空目录
总结一下就是对目录访问不能下写。
对文件的写操作的限制
只有当主体的低级别security level对客体文件的低级别security level满足domby关系时,或者主体客体任何一个具有对mls无限权限的type时,主体能对文件拥有如下权限:
能对文件进行写操作
能设置文件属性信息
能对文件内容作append操作
能对文件创建链接
能删除一个文件的链接
能对文件重命名
总结一下就是对文件访问不能下写。
MLS对IPC的约束
对IPC创建和销毁的限制
要求客体的IPC对象只有一个security level。
只有当主体的低级别security level与客体的低级别security level满足eq关系时,或者主体具有对mls无限权限的type时,主体能对客体IPC拥有创建和销毁的权限。
对IPC读操作的限制
只有当主体的低级别security level对客体IPC的低级别security level满足dom关系时,或者主体具有对mls无限权限的type时,主体能对客体IPC拥有如下权限:
获取文件属性信息
能对IPC文件执行读操作
能关联一个key
能执行由IPC操作要求的读操作
总结一下就是对IPC访问不能上读。
对IPC写操作的限制
只有当主体的低级别security level对客体IPC的低级别security level满足domby关系时,或者主体具有对mls无限权限的type时,主体能对客体IPC拥有如下权限:
能对文件执行write和append操作
能执行由IPC操作要求的write和append操作
总结一下就是对IPC访问不能下写。