SELinux on Android(一)

Wesly大发神威,连夜翻译了一些文档,加上他本人的知识和理解,呕心沥血写出这部作品。不过需要润色,先放前面一些概述了。


  • 引言

作为安卓安全模型的一部分,安卓使用了SELinux的访 问控制策略。SELinux的出现大幅度增强了安卓的安全性。此外,还有许多公司和组织也为增强安卓的安全性做出了不懈的努力。你可以在 android.googlesource.com站点看到所有安卓源代码及其贡献者。

在SELinux的强力保护下,安卓可以更好的对应用程序数据和系统日志进行访问控制。这不仅减轻了恶意程序对系统的影响力,而且保护了用户不受移动设备上隐藏的恶意代码所攻击。

在安卓的最新版本中,SELinux是以“enforcing mode”形式存在的,并且具有一套相应的默认的安全策略,该策略遍布于整个安卓开源工程。

在“enforcingmode”中,非法的操作是被禁止 的,并且所有的攻击行为会被Linux内核记录下来,保存在dmesg里面。针对SELinux在安卓中的应用,安卓设备生产商应该做的是:在将 SELinux的状态置为enforcing mode之前,不断收集SELinux所报出的系统错误信息,并依此改善自己的软件,更新安卓系统的SELinux策略。


  • 背景


注意,安卓可以更新自己的SELinux策略版本,并允许SELinux基于domain来设置到底处于那一种模式(disable、permissive、enforcing)。

例如,如果你让自己开发的所有应用程序运行在一个单一的domain中,你可以设置该domain为permissive,然后设置其他其他功能和他们的domains为enforcing状态。

Domains通过密钥(用于对应用进行签名)和应用程序建立关联。这是在SELinux策略源文件*.te的顶部进行设置的。

安卓遵循此模型: 即将各个不同应用程序分别孤立在一个单一的domain中。基于此,只有root domain和 root级别的进程(例如initd、installd和vold)现在被设置为enforcing模式。

普通应用程序的domain仍然保持在permissive模式,这一举动允许对应用程序的SELinux策略做进一步的评估,阻止没必要的系统错误。但是,恶意程序仍可以在root domain激发一个行为(该行为是不被允许的),随之而来的便是导致应用程序的崩溃。

因此,设备生产商应该保留安卓默认的设置,并且只让root domain 保持enforcing状态,直到完全解决了dmesg中报告的问题。

也就是说,设备生产商可能需要不断改善他们的SELinux的策略实现来满足对操作系统的诸多添加和修改所带来的问题。参见:客制化段落。


  • 强制访问控制


与安卓的其他安全措施协同工作,安卓的访问控制策略很大程 度上限制了目前脆弱的设备和账户受到潜在的破坏。安卓的DAC(自主访问控制)和MAC(强制访问控制)可以提供一个强有力的方法,确保你的软件运行在最 低权限级别。这不仅削弱了攻击行为对系统的影响,而且减小了恶意进程重写系统数据,甚至偷窃数据的可能性。

从安卓4.3版本开始,在传统DAC的基础 上,SELinux为安卓提供了MAC保护伞。举例说明:有些进程必须以root身份运行来向原始块设备写入数据。我们知道,在传统的基于DAC的 Linux环境中,如果root用户被攻陷,那么拥有root权限的进程则可以向任何原始快设备中写入数据。然而,现在安卓有了SELinux的帮 助,SELinux可以用来标记这些设备,以实现即使获取到root权限,该进程也仅可以向策略中指定的设备写入数据,其他的设备想都别想。

参见“用例段落”中更多地例子,来理解SELinux是如何抵御威胁的。


(待续,后面还在润色。)


本文由Hack Blog原创,如需转载注明原文链接

作者:wesly 分类:Android 浏览:2488 评论:2
留言列表
发表评论
来宾的头像