SEAndroid策略分析(一):概述SEAndroid

本系列乃本猿当年刚学习SEAndroid时,学到的知识和得到的经验,一己之见,不敢保证完全正确,如果在学习中发现错误,再回来修改。

SEAndroid继承于SELinux将原本运用在Linux操作系统上的MAC强制存取控管套件SELinux,移植到Android平台上。可以用来强化Android操作系统对App的存取控管,建立类似沙箱的执行隔离效果,来确保每一个App之间的独立运作,也因此可以阻止恶意App对系统或其它应用程序的攻击。

SEAndroid的中心理念是,即使root权限被篡夺,只求阻止应用的恶意行为。

SEAndroid策略分析(一):概述SEAndroid_第1张图片

SEAndroid策略分析(一):概述SEAndroid_第2张图片

SEAndroid策略分析(一):概述SEAndroid_第3张图片

SEAndroid在很大程度上继承了SELinux的策略和运行方式,可以通过学习SELinux来理解SEAndroid

SEAndroid的策略policy是整个SEAndroid安全机制的核心之一,除了有好的安全架构外还必须有好的安全策略以确保让访问主体只拥有最小权限,使程序既能顺利执行基本功能又能防止被恶意使用。

在SEAndroid中,有关策略的相关源文件都在源码目录external/sepolicy中。

 

在SELinux中,为内核构造一个策略文件的主要方法是从一个源策略文件使用checkpolicy程序编译它,这个源文件本身也是经过多个步骤构造的,它的名字通常是policy.conf,checkpolicy检查源策略文件的语法和语义的准确性,并将结果以某种格式存储起来(叫做为二进制策略文件),由内核策略载入器(load_policy)进行读取,。

下图说明了策略源文件的主要部分。

SEAndroid策略分析(一):概述SEAndroid_第4张图片 
图3-5.策略源文件(policy.conf)的组织

SEAndroid的策略源文件的构造与此图非常吻合,这一部分,应该是直接沿用了SELinux。

策略源文件的第一部分定义了安全服务器的客体类别,同时,这一部分也定义了每个客体类别的许可,对于内核而言,这些类别直接关系到内核源文件,通常,作为一名SELinux策略编写者,你可能永远不会修改客体类别和许可定义,我们将在本系列第二篇中讨论特定的客体类别和与之关联的许可。

第二部分包括类型强制声明,它是一个SELinux策略中最大的一部分,也是策略编写者花费时间最多的一部分,它包括所有的类型声明和所有的TE规则(包括所有的allow,type_transition和其他TE规则),我们将在本系列第三篇中详细讨论类型和核心TE规则,TE部分通常包括众多的类型声明和TE规则,这一部分还包括规则和角色及用户的声明。角色和用户是类型强制支持的概念,我们将在第6章"角色和用户"中详细讨论。此外,TE策略部分做了一些增强,特别是有条件的策略,将在第9章"条件策略"中讨论。

策略源文件接下来的一部分是约束,约束在TE规则许可范围之外对TE策略提供了更多的限制,例如:多级安全(MLS)策略就是约束的一种实现,将在第7章"约束"和第8章"多级安全"章讨论约束。

策略源文件的最后一部分包括标记说明,所有客体都必须用一个安全上下文标记SELinux以实施访问控制,这部分告诉SELinux如何处理文件系统标记以及标记运行时创建的临时客体规则,另一个独立有关的机制叫做文件上下文文件,它用于在永久文件系统上初始化文件、目录和其他客体的安全上下文标记,这些以及另外的与客体标记有关的内容将在第10章"客体标记"中讨论。


 

参考文献: SELinux实例:使用安全增强的Linux:http://book.51cto.com/art/200810/94193.htm

你可能感兴趣的:(SEAndroid)