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

来源:互联网 发布:300533冰川网络 编辑:程序博客网 时间:2024/05/22 04:44
  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它们的关系是这样的
             
       上面这个图没有提到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
        
             查看主体(进程)的安全上下文ps -Z
            
            其中文件的安全上下文 “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
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电视户户通位置信息模块异常怎么办 苹果手机wi-fi模块坏了怎么办 xp本地连接受限制或无连接怎么办 公司没帮二级建造师延续注册怎么办 考造价师考过了年限不够怎么办? 上海众非称重不显示数字怎么办 宝骏630防火墙隔热棉掉了怎么办 冷车启动水温报警灯亮了怎么办 租铺位面积比合同面积小怎么办 农村村民建房领居不肯签名怎么办 车祸死者家属不来协商赔偿怎么办 26岁想回去当老师了怎么办 面包车排量小空调带不凉快怎么办 科三包过不给退钱人跑了怎么办 护师职称考试成绩单丢了怎么办 河南二级建造师报名地址填错怎么办 山东以前的企业没有消防备案怎么办 重庆渝北初级审核时间过了怎么办 初级职称复核毕业证弄丢了怎么办 杭州公租房选房后变更单位的怎么办 契税交了贷款办不下来怎么办 天津公租房住满5年后怎么办 大江里钓鱼水流太急立不住漂怎么办 房子定金交了不想要了怎么办 房子付了首付不想要了怎么办 三国大时代4王越死了任务怎么办 红米2卡顿反应慢怎么办 国税和地税合并新进的公务员怎么办 买车合格证不给我们要怎么办 初级会计报名信息表填写错误怎么办 跨国快递需要收件人自行清关怎么办 腋下有异味怎么办邀约成都真愛 腋下有异味怎么办犀利成都真愛 腋下有异味怎么办有信成都真愛 成都车牌网上选号次数用完了怎么办 在志愿服务中遇到突发状况怎么办 商铺没有房产证不能办理消防怎么办 亳州办事大厅登录密码忘记了怎么办 户口已迁出结婚证丢了怎么办 户口已迁出多年结婚证丢了怎么办 芜湖长信正式工没转正怎么办辞职