SELinux/SEAndroid 实例简述(一) 基础概念

 
   
  1. /***********************************
  2. * Author:刘江明
  3. * Environment:MTK Android 6.0
  4. * Date:2016年11月04日
  5. ***********************************/
   
一. 前述    
        在Android5.0之前SEAndroid并没有真正地被启用。真正比较关注SELinux与SEAndroid是从着手Android6.0开始。网上关于SELinux与SEAndroid的与不算多。概念又新又多,而且没有一个统一的中文翻译。刚开始一头扎下去看了一头雾水。在这里,希望能用自己微薄的知识做一下通俗的总结,最关键的问题想通过实例如了解,这东西怎么运用到实例里面去。
        在这里看了很多文章,下面很多知道都是引用了很多大神的博客,也相当于稍做总结 。感谢这些大神的默默奉献。
        希望自己在后面能对Android的安全体系有一个完整的了解。目前,第一篇文章,先了解一下SELinux/SEAndroid的基础概念,然后通过实例去分析。然后了解一下在Android系统源码中,SELinux源码中的简单分布,与如何在源码打开Root权限和如果完全不编译SEAndroid。最后是希望能进一步深入到源码里面去了解SEAndroid机制。这里面涉及很广,包括Zygote,packagemanagerservice,dalvik等等等。希望这些愿景都能被实现

二. 关于SELinux与SEAndroid的基本概念
        先简述一下相关概念   
       1. 两种安全机制DAC(Discretionary Access Control)和MAC(Mandatory Access Control)。通俗地讲,这两个机制的区别是。在DAC里,如果一个应用获取了一个用户权限,如Root,那他的所有操作操作都是基于这个用户权限。而MAC就简单霸道好多,无论你是谁,甚至是有Root用户权限,文件权限为777,但每个动作都是需要被允许之后可以被执行。这里可以是在安全策略文件中被允许,与可以是用户手动允许
       2. MAC机制基于 LSM(Linux Security Module) 标准实现。
               3 . SELinux全称Security-Enhanced Linux。SELinux在MAC上实现的,所以SELinux也是基于LSM标准。在Linux kernel 2.6后正式直接整合进Linux里面
              4. 第一条中提到MAC的安全策略文件的作用就是表明了允许干什么。学名是TEAC(Type Enforcement Access Control)。简称TE。里面的语言被称为强制类型语言。我们的目标就是学会如何何用这个文件
             5. Security Context,安全上下文。Security Context的作用就是相当于这些文件和进程的“身份证”。 
       6. SELinux Mode,SELinux有两种模块Permissve Mode(宽容模式)和Enforcing Mode(强制模式)。区别在于Permissive只会打印SELinux Log。而强制模式会进行真正拦截。如果被拦截,kernel log中的关键字是"avc:denied"。可以在下面的文件节点查看SELinux是什么模式,这里返回了一个1,表示在enforce模式
 
             上述1,2,3,4,5它们的关系是这样的
              SELinux/SEAndroid 实例简述(一) 基础概念_第1张图片
       上面这个图没有提到TE文件的关系。TE文件的规则和一些用户主动允许的动作等等会存储在图中的database里。
       当有一个进程执行read动作(Event)被Security Server 监测到地时候,DAC会作初步的检查。然后把动作的传进LSM,同时,LSM会找到该进程和文件的上下文 
       前面说了SELinux基于LSM实现。 SELinux在初始化的时候会实现一些由LSM提供的抽象函数(abstract)和把一些LSM回调(Hook)注册进LSM。LSM会读取SELinux里database的TE规则,或者在AVC(AccessVector cache)里寻找相应的规则。AVC相当于一个规则的缓存,加快读取的速度。找到相应的规则后又把它传回LSM,在LSM里做出最后的判断

关于SEAndroid
Android在SELinux的基础上扩展了SEAndroid,其实两者在原理上差不多,但是SEAndroid面向的对象就是更丰富了,后面会介绍。需要了解的是google到了Android 5.0之后才完全深度整合了SELinux和SEAndroid。具体进程如下:
 
三. SELinux与SEAndroid的基础知识
1. SELinux两个最基本的对象是主体(Subject)和客体(Object)。主体和客体分别对应的是“进程”和“文件”。这里的文件并不单指的是实际存在的文件,而是指Linux里“一切皆文件”里指的文件。如Socket,系统属性等。
        2. 在SEAndroid,对主体和客体进行了进一步形式上的封装和扩展,其实差不多。SEAndroid里细分为:系统文件,服务,系统属性,Bindert和Socket。这里的系统属性指的是build.prop里的属性,也是getprop命令查询出来的属性。我们后面就是针对这几个对象进行实例分析

        3. 在adb里执行下面的命令可以查看主体和客体的安全上下文。
        查看客休(文件)的安全上下文 ls -Z
        SELinux/SEAndroid 实例简述(一) 基础概念_第2张图片
             查看主体(进程)的安全上下文ps -Z
             SELinux/SEAndroid 实例简述(一) 基础概念_第3张图片
            其中文件的安全上下文 “u:object_r:rootfs:s0”具体表示如下
U:一个名为U的SELinux用户
        object_r:这个标志位在进程里表示的是一个用户角色(role)但是文件无扮演任何角色,这仅是一个文件的标识
        rootfs:这是一个type的标志位,也是TE里最重要的一个标示位。不然怎么称为TE(Type Enforcement)
        s0:LSM的级别
        进程的安全上下文“u:r:init:s0”。就第二位与文件的不同,r 全称role,表示的是一个用户角色。第三位同样表示类型(type)也是最重要的
        
         从上面可以看出,Linux用于安全机制的元素有好几种,用户,角色,类型,安全等级。这几种元素在某些场合,还是会被用到,但对于LSM和SELinux最重要的还是type。所以后面的关注点在于主体和客体的type。

    关于角色的一点介绍
  1. //通过external/sepolicy/users和external/sepolicy/roles文件的内容,我们就可以看到SEAndroid所定义的SELinux用户和SELinux角色。
  2. //文件external/sepolicy/users的内容如下所示:
  3. user u roles{ r} level s0 range s0- mls_systemhigh;
  4. //上述语句声明了一个SELinux用户u,它可用的SELinux角色为r,它的默认安全级别为s0,可用的安全级别范围为s0~mls_systemhigh,其中,mls_systemhigh为系统定义的最高安全级别。
  5. //文件external/sepolicy/roles的内容如下所示:
  6. role r;
  7. role r types domain;
  8. //第一个语句声明了一个SELinux角色r;第二个语句允许SELinux角色r与类型domain关联。

                                                                                                  ---------摘自《SEAndroid安全机制框架分析》
        关于安全等级,只要知道两个原则“read down”和"write up"。即低安全级可以往高安全级的写东西,高安全级的可以往低安全级的读东西,反过来则不可以,同级的可以相互读写。《深入理解SELinux SEAndroid之二》一文中对安全级有很详细的介绍。

以下的荐书摘自“阿拉丁神农”和“罗升阳”大神的博客
 
      
  1. 1 SELinux NSAs Open Source Security Enhanced Linux
  2. 下载地址:http://download.csdn.Net/detail/innost/6947063
  3. 评价:讲得SELinux版本比较老,不包括MLS相关内容。但是它是极好的入门资料。如果你完全没看懂本文,则建议读本文。
  4. 2 SELinux by Example Using Security Enhanced Linux
  5. 下载地址:http://download.csdn.net/detail/innost/6947093
  6. 评价:这本书比第1本书讲得SELinux版本新,包括MLS等很多内容,几乎涵盖了目前SELinux相关的所有知识。读者可跳过1直接看这本书。
  7. 3 The_SELinux_Notebook_The_Foundations_3rd_Edition
  8. 下载地址:http://download.csdn.net/detail/innost/6947077
  9. 评价:这是官方网站上下的文档,但它却是最不适合初学者读的。该书更像一个汇总,解释,手册文档。所以,请务必看完12的基础上再来看它。
  10. 4 Security Enhanced (SE) Android: Bringing Flexible MAC to Android




 参考文章:
http://blog.csdn.net/Innost/article/details/19299937?locationNum=2   系列文章
http://www.2cto.com/kf/201504/390742.html
http://blog.csdn.net/luoshengyang/article/details/35392905  系列文章
http://blog.csdn.net/myarrow/article/details/10105961

你可能感兴趣的:(Android系统编程)