0. 概述

  • SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。
  • 由于Linux有多种发行版本,所以各家的SELinux表现形式也略有区别。具体到Android平台,Google对其进行了一定得修改,从而得到SEAndroid。

1. SELinux

  • DAC和MAC

    • SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。
      核心思想:
      进程理论上所拥有的权限与执行它的用户的权限相同。比如,以root用户启动Browser,那么Browser就有root用户的权限,在Linux系统上能干任何事情。
    • SELinux在DAC之外,设计了一个新的安全模型,叫MAC(Mandatory Access Control),翻译为强制访问控制。
      MAC核心思想:
      任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。
    • DAC和MAC:

      • Linux系统先做DAC检查。如果没有通过DAC权限检查,则操作直接失败。通过DAC检查之后,再做MAC权限检查。
      • SELinux中也有用户的概念,但它和Linux中原有的user概念不是同一个东西。什么意思呢?比如,Linux中的超级用户root在SELinux中可能就是一个没权限,没地位,打打酱油的”路人甲“。当然,这一切都由SELinux安全策略的制定者来决定。
在SELinux中,安全策略文件是最重要的。SELinux有自己的一套规则来编写安全策略文件,这套规则被称之为SELinux Policy语言.
  • SELinux是典型的MAC实现,对系统中每个对象都生成一个安全上下文(Security Context),每一个对象访问系统的资源都要进行安全上下文审查。审查的规则包括类型强制检测(type enforcement),多层安全审查(Multi-LevelSecurity),及基于角色的访问控制(RBAC: Role Based Access Control)。
  • SELinux的整体结构如下图所示


2. SEAndroid

  • 由于Android系 统有着独特的用户空间运行时,因此SELinux不能完全适用于Android系统。为此,NSA同Google一起针对Android系统,在SELinux基础上开发了 SEAndroid。整体框架:

  • SEAndroid安全机制包含有内核空间和用户空间两部分

    • 内核空间的selinux lsm module模块负责内核资源的安全访问控制.
    • sepolicy描述的是资源安全访问策略。系统在启动的时候,init进程会将内核空间安全访问策略加载内核空间的selinux lsm模块中去,而用户空间的安全访问策略则直接保存到普通文件中.
    • 用户空间的SecurityServer一方面需要检索用户空间的安全策略,另一方面也需要检索内核空间的安全策略.
    • 用户空间的libselinux库封装了对SELinux文件系统接口的读写操作。用户空间的SecurityServer访问内核空间的selinux lsm模块时,都是间接地通过libselinux进行的。用户空间的SecurityServer检索用户空间的安全策略时,同样也是通过 libselinux库来进行的.
  • SELinux 给Android 带来下面影响:

    • 严格限制了ROOT权限,以往ROOT“无法无天”的情况将得到极大的改善。
    • 通过SELinux 保护,降低系统关键进程受攻击的风险,普通进程将没有权限直接连接到系统关键进程。
    • 进一步强化APP的沙箱机制,确保APP难以做出异常行为或者攻击行为。
    • 将改变APP 一旦安装,权限就已经顶死的历史,APP权限动态调整将成为可能

wydong
40 声望5 粉丝

wyd