Android 4.3新特性——SElinux简介

http://liuyix.org/blog/2013/android-4-dot-3-selinux/


New Jelly Bean — Android 4.3于7月底发布,这次整体上变化不是很大,所以还是叫Jelly Bean。不过在底层,Android在安全上实际增强了不少,Android 4.3开始集成SELinux, 系统的安全性(潜力)提高了一个档次。

New Jelly Bean, New JB,Android 4.3指的都是Google新发布的Android 4.3系统,代号依旧是Jelly Bean

The End of Root?

Absolutely NO!!

  1. SELinux 目前(从长远看也很可能)是 permissive 模式,即不会拒绝而只是记录违规事件;而不是最严格的 enforce 模式——只要违反规则就会denial,因为普通消费者能遇到的应用和情形会非常复杂,如果使用该模式会出现更多的问题,同时也会给用户束缚自由的感觉(如同厂商卖给你手机的同时给你规定好了“你只可以xxxx而不能xxxx”,不管你是不是这样觉得,我反正是这么觉得)。这也就意味着使用漏洞提权的方法获得root权限依旧可行,只要SELinux使用的是permissive模式。
  2. 即使SELinux设置为enforce模式,也不会是root的末日。我们还可以通过线刷的方法刷入修改的或者其他的定制ROM方法获取Root权限。这样做的前提是手机厂商不锁bootloader(从而给用户自由刷机的权利)。谷歌的Nexus系列就是不锁bootloader——可以使用fastboot oem unlock 解锁,之后就可以用fastboot随意的修改定制手机ROM。 而三星手机没有强硬的采取严格的手段锁bootloader,可以用Samsung的官方刷机工具Odin1刷机,一样可以实现不锁bootloader的效果——随意修改定制手机。其他厂商就不太了解了。
New challenge for Root

New Jelly Bean给root确实增加一些阻碍,这其中包括:增加了nosuid选项的system分区以及root用户的capabilities的限制。所以两位手机root的大神chainfire和koush在New JB上都采用了新的daemon 模式。

SELinux带来了什么?

极大的增强了Android系统的安全性潜力,SELinux机制实际效用依赖于selinux policy等SELinux的设定。SELinux的加入为Android进入更高安全性和保密性的团体和企业中提供了很大的便利,Android在企业市场有了更多的想象空间。
试举一栗子:涉密企业项目的成员移动设备定制化安全服务——可以由Android安全服务公司负责定制ROM,根据项目或者企业需求加入定制化的SELinux策略。好吧,Android移动安全领域的门槛又矮了一截子。

Android SELinux一窥

Google写的SELinux Guide(here)对部署和设置SELinux提出了指导性的概括。 
SELinux模块包含了内核空间和用户空间两部分,配置SELinux需要使用相应的Android内核。

SELinux 编译和部署

  1. 下载源代码至<root>/device/manufacturer/device-name/sepolicy

  2. 修改BoardConfig.mk

1
2
3
4
5
6
7
BOARD_SEPOLICY_DIRS := \
        <root>/device/manufacturer/device-name/sepolicy

BOARD_SEPOLICY_UNION := \
        genfs_contexts \ 
        file_contexts \ 
        sepolicy.te
  1. 重新编译内核

SELinux定制流程(via Google)

  • SELinux uses a whitelist approach, meaning it grants special privileges based upon role. Because the default policy provided by Android is so permissive, OEMs have great leeway in strengthening it. Here is how we recommend proceeding:

  • Use the latest Android kernel.

  • Adopt the principle of least privilege.
  • Address only your own additions to Android. The default policy works with the Android Open Source Project codebase automatically.
  • Compartmentalize software components into modules that conduct singular tasks.
  • Create SELinux policies that isolate those tasks from unrelated functions.
  • Put those policies in *.te files (the extension for SELinux policy source files) within the /device/manufacturer/device-name/sepolicy directory.
  • Release your SELinux implementation in permissive mode first.
  • Analyze results and refine policy settings.

More about SELinux for Android

本节大部分信息都是从SEAndroid Wiki上获取.

Android 4.3 采用的是SEAndroid2,但是做了相当的精简和改变,其中没有以下部分3

  • SELinux管理API以及附带的示例程序 (The new device admin APIs for managing the SELinux functionality and the SEAdmin sample device admin app for using those APIs.)
  • 除了 a restricted form of its sefinfo support for labeling apps 以外,没有任何MAC机制的中间件。
  • 没有 auditd ,也就是说Android 4.3并没有一个收集SELinux审计log的daemon程序 (The audit daemon (auditd) for collecting SELinux audit denials and writing them to /data/misc/audit/audit.log. )
  • 采用和SEAndroid不同的策略,fully permissive and unconfined (Our sample policy configuration (Android 4.3 and AOSP master have diverged from our policy, replacing it with a policy that is fully permissive and unconfined). )
  • 没有重载SELinux策略上的优化,重载策略还需要重启daemon(Some improvements to how policy reloading is handled, particularly avoiding the need to restart daemons.)
  • 对于多用户目录没有合适的安全标签(security label)

所以如果想使用完整版的SEAndroid需要去下载使用独立的SEAndroid


未完待续…


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
课程简述  Android是目前最为流行的移动操作系统之一,它的开发涉及到多个知识领域。本课程将深入介绍Android系统启动过程中的重要组成部分——init进程,并探讨与之相关的多项关键技术。我们还将提供实际的开发案例,以RK3399开发板为例,通过演示Android产品配置、init启动流程、selinux权限管理、init.rc启动脚本定制等实际案例,让学员深入理解这些技术在实际产品开发中的应用场景和实现方法,提高学员的实际开发能力和经验,从而更好地应对实际产品开发中遇到的问题和挑战。知识运用方向学习Android启动方面的知识,可以参与如下实际开发工作项:启动流程定制: 根据产品需求调整Android启动流程,包括修改init.rc脚本、修改启动顺序和等待时间、加入自定义服务等。属性系统定制: 通过Android属性系统定制化启动流程,例如增加产品版本信息、定制开机音量等。日志系统分析: 掌握日志的捕捉、分析和排错技术,在启动过程中,需要加入调试信息来方便开发人员进行调试,同时需要进行日志的优化,避免日志输出过多占用过多的系统资源。selinux安全策略定制:在Android系统中,selinux是一种安全机制,用于保护系统的敏感资源和数据。在实际开发中,可能需要对selinux策略进行定制,以确保系统的安全性和稳定性。课程内容主要内容简述1, RK3399 开发板操作这部分内容重点介绍如何在FIreFly开发板上将Android 10系统运行起来, 包含编译FireFly的Android源码下载和编译, 镜像烧录运行,内核和模块编译,以及RK3399内核启动init进程的过程。2, 产品定制这部分讲解获取到方案商或者原厂提供的源码后, 如何定制一个新的产品,产品配置文件和模型, 原始代码中的配置文件和定制化东西3, Android日志代码编写之前讲过Android的日志系统, 并没涉及到代码编写, 这个部分重点讲解C/C++, java代码编写日志的API和代码4, 属性系统在Android中,属性使用的非常频繁的,可以用来作为进程间通信,也可以用于一些行为控制, 这个部分会重点介绍属性系统框架, API接口, 属性文件等知识点5,selinux进程对文件进行访问时,Android 4.3就开始集成了selinux权限管控, 如果需要启动某个脚本或者服务, selinux的配置就避免不了,并且Android8之后, Android系统对进程访问的权限管控的非常严格。6, init.rc脚本Android定义的一种脚本, 改脚本是有init进程启动, 是非常重要的一个脚本, 会包含系统中的其他很多脚本, 在我们系统开发时, 我们经常通过这个脚本进行一些定制化动作。7, init进程代码分析想要了解一个系统,就必须对源码进行分析和理解, 这个章节,带大家去跟读init进程代码, 这样,换了另外一个Android版本,完全就可以去读代码, 知道有什么变化。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值