SELinux与SEAndroid

0. 概述

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

1. SELinux

  • DAC和MAClinux

    • 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 带来下面影响:spa

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