Android R(11)HIDL服务的sepolicy(五)

本文介绍了Android从4.4版本开始引入的强制访问控制(MAC)框架——SELinux,它与传统的自主访问控制(DAC)结合,提升了系统文件和程序的安全性。SELinux通过严格的策略规则限制进程访问,支持调试和产品两种模式。文章详细阐述了SELinux的基本概念,如DAC与MAC的区别、标签系统和域类型,并展示了如何在Android中添加自定义的sepolicy规则。此外,还提供了查看系统标签的工具和示例,帮助理解SELinux在实际操作中的应用。

  在Android安全组件中,除了使用传统DAC(Discretionary Access Control)的方式来保护系统文件。但在版本4.4及以后还引入并开启了MAC(Mandatory Access Control)安全框架,使用DAC+MAC组合的方式来保护系统文件及可执行程序的安全。其中被Android所采用的MAC保护框架为SELinux(Security-Enhanced Linux)。

1.Security-Enhanced Linux in Android

  开启了MAC框架后,即使是Root用户或具备super权限的进程也会需要完全遵照sepolicy的规则来访问文件。SELinux可以为Android带来如下好处
  a).更好地保护和限制系统服务。
  b).控制对应用数据和系统日志的访问、降低恶意软件的影。
  c).保护用户免遭移动设备上的代码可能存在的缺陷的影响。

  SELinux设计时的控制原则为:任何没有被规则允许的操作都会被禁止。但是SELinux框架是支持两种控制模式的
  1.Permissive mode, 在不被允许的操作发生后,只是log方式提示,但不禁止。这种模式也只用于调试阶段。
  2.Enforcing mode, 在不被允许的操作发生后,除了log方式提示,并且禁止该操作。这种模式则是产品阶段。

2.SELinux 的基本概念

2.1 DAC和MAC的区别

  DAC方式,存在所有权的概念,即特定资源的所有者可以控制与该资源关联的访问权限。这种系统通常比较粗放,并且容易出现无意中提权的问题。MAC框架方式则会严格按照预先定义好的sepolicy来允许/拒绝操作。受DAC和MAC同时保护的系统中不会出现获取root的进程能为所欲为的场景。例如,软件通常情况下必须以Root用户帐号的身份运行,才能向原始块设备写入数据。但在基于DAC的传统系统中,如果Root用户遭到入侵,攻击者便可以利用该用户身份向每个原始块设备写入数据。但是在MAC系统中可以使用sepolicy为这些设备添加标签,即使被分配了 Root权限的进程也只可以向相关政策中指定的设备写入数据。这样一来,该进程便无法重写特定原始块设备之外的数据和系统设置。

2.2 Labels, rules, and domains

  SELinux依靠标签(Labels)来匹配操作和政策。标签用于决定允许的事项。套接字(socket)、文件(file)和进程(process)在SELinux中都有标签。SELinux在做决定时需参照以下两点:
  a)为对象(socket/file/process/etc…)分配正确的标签。
  b)定义对象的交互政策。

  在 SELinux 中,标签采用以下形式
user:role:type:mls_level,主要注意下type就行了。一个基本的规则如下

allow domains types:classes permissions;

其中:
  Domain: 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型。
  Type: 一个对象(例如,文件、套接字)或一组对象的标签。
  Class: 要访问的对象(例如,文件、套接字)的类型。
  Permission: 要执行的操作(例如,读取、写入)。
下面则是一个具体的使用实例

allow appdomain app_data_file:file rw_file_perms;

这表示所有appdomain都可以读取和写入带有 app_data_file 标签的文件。一个 domain 通常对应一个进程,而且具有与其关联的标签。至此sepolicy的基本规则也说的差不多了,下面进入正题。

3.添加sepolicy规则到Android

  sepolicy的添加也需要使用到Android的编译系统,下面则是添加自定义sepolicy的写法

//test/flagstaffTest/BoardConfig.mk 
BOARD_VENDOR_SEPOLICY_DIRS += \
    test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值