SELinux处于“许可”模式有多危险?我应该注意什么?


14

我已经以“许可”模式安装了SELinux随附的特定ROM。这是唯一适合我的设备的(好)ROM,无法更改SELinux的状态。

现在,我不确定这个决定的后果是什么,如果有人可以向我解释这个决定,我会很高兴的。所说的ROM的根源是“已禁用”,因此该设备据说是无根的,但是我不确定它如何与SELinux相适应。


您是否肯定“没有办法改变SELinux的状态”?您是否尝试setenforce 1从终端仿真器(以root用户身份)发行?
Marc.2377'7

好吧,我将对此进行更多研究,但是是的,我非常确定,这要归功于ROM创建者的指示。我有点新手,所以我不是100%知道为什么(仍然需要研究),但是陈述的原因是引导加载程序被锁定了…… forum.xda-developers.com/amazon-fire/orig-development /
j.d'oh

Answers:


12

TL; DR:如果愿意,请随意直接跳至底部的结论:)!

SELinux的目标是通过执行强制性策略来防止特权升级,该策略限制了非特权用户和特权用户的可能操作。

此处的“用户”一词还包括设备上运行的任何进程,无论它是否与实际的用户操作(人类,您;)直接相关,因为每个进程都使用某个系统的“用户”帐户运行。

过去,基于Unix的系统上的权限是使用所谓的自由访问控制(DAC)系统处理的。在此模型中:

  • 文件之类的资源具有所有者,所有者可以定义对其拥有的资源的访问权限:这使他们可以决定特定资源应为私有资源(只有所有者可以访问它)还是应与其他用户共享。
  • 最重要的是,您具有超级用户(root在基于Unix的系统上称为),该超级用户是管理用户,可以访问系统上的所有内容。可以由人员(通常是系统管理员)以交互方式使用此帐户来维护或维修设备,但是通常,此帐户通常将由需要此类特权级别的后台或低级服务使用:设备驱动程序,网络配置服务,服务需要访问每个用户的文件或处理内部用户间的通信。

这非常好,并且已经提供了良好的安全性。但是,诸如此类的情况呢?

  1. 如果root发现运行中的服务存在错误,该错误会使攻击者诱使该服务运行某些任意代码,将会发生什么情况?这样的攻击者将获得对设备的完全访问权限。举一些具体的例子,可以通过向电话发送特制的网络配置信息(DHCP)或MMS来触发此类错误。
  2. 如果某些用户不能正确保护私有资源会怎样?然后,其他无特权的用户可能会恶意访问(读取,甚至修改或删除)这些资源。这通常是您的手机上运行恶意应用程序时的情况(无论您是被诱骗安装它,还是通过使用另一个非特权应用程序,浏览器或邮件客户端中的错误而自发来到这里)实例),并且该恶意应用程序尝试直接访问其他应用程序的数据或存储位置(可以这样做以访问通常无法访问的数据或将其自身安装在多个位置,以使其难以移除)。

SELinux来了。

SELinux是强制性访问控制(MAC)系统。在先前描述的DAC系统中,用户负责对自己的资源设置适当的权限,而对于MAC系统,特权和非特权用户都将执行系统范围的策略(由操作系统提供)。

这样可以通过以下方式解决上述两个问题:

  1. 如我所说,该策略也适用于特权用户。这意味着,如果使用正确设计的策略,旨在处理设备的网络配置的服务将无法执行任何其他操作:例如,它将无法访问SMS,而处理SMS的服务将无法访问网络配置,尽管它们都使用超级用户帐户运行,但它们都无法访问用户的数据。
  2. Android最近包含了SELinux强制执行的多用户功能,可防止任何用户访问其他用户的数据。但是除此之外,SELinux策略还负责描述允许的应用程序行为,并且即使使用DAC系统未能适当保护某些资源,最有可能的是SELinux可以挽救并仍然阻止恶意应用程序直接访问它们。

DAC和MAC系统不是互斥的,相反,MAC系统(SELinux)充当DAC系统之后的第二层防御(传统的类Unix许可)。SELinux的工作是阻止任何违反该政策的活动,而该政策仅在给定DAC系统的情况下才会被接受。

棘手的是,这种策略的编写可能非常复杂:实际上,它必须涵盖每种设备的组件,以便在各种情况下都可以使用。实际上,无论采取哪种行动在您所处的情况下都是合法的:如果政策中没有采取该措施,则禁止这样做。因此,设计不当的策略可能会带来随机后果,例如应用程序崩溃,无法使用的功能等。

这就是为什么默认情况下,发布SELinux的第一个Android版本将其包含在“ Permissive”模式下的原因。在这种模式下,SELinux将记录违反策略的情况,但不会尝试阻止关联的活动。通过分析生成的日志文件,可以纠正和增强策略,直到仅剩下的违反策略确实是恶意或不良行为的时候。此时,SELinux可以变成“强制”模式:它现在不仅会记录日志,而且还会阻止所有有问题的操作。

结论

SELinux是一种缓解技术。它不会阻止攻击者进入您的手机,但可以确保一旦攻击者能够做的事越少越好,理想情况下没有任何用处,因此首先消除了攻击手机的兴趣。

ROM越旧,打开这种访问权限的安全漏洞数量就越大。尽管存在这些已知的漏洞,但SELinux将是保持最低安全性的有效方法,但是要使其正常运行,SELinux依赖于复杂的策略。

如果您的ROM默认情况下随SELinux一起以“允许”模式提供,则可能意味着它包含的策略不够可靠,无法安全地切换到“强制”模式。

如果您具有足够的技术水平并且可以访问电话日志(dmesg至少,但通常它们也被复制到logcat:有一些应用程序可以查看后者,但是取决于您的Android版本,它们可能需要root访问权限),您可以检查是否您会找到“ avc”条目:这些消息告诉您SELinux刚刚检测到违反该策略的操作。

这是从CyanogenMod的网站获取的此类示例:

type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" 
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t 
tcontext=system_u:object_r:sysfs_t tclass=file

如果没有,则只有少数几个,或者由于某些原因您认为它们可能无法使您无法使用手机,则可以尝试将SELinux切换到“ Enforcecing”模式。在较旧的CyanogenMod ROM中,这很容易,并且可以通过在GUI中使用隐藏选项(无需root手机或安装任何特定应用程序)来实现,我不知道其他ROM是否提供相同的功能,但是由于您使用了CyanogenMod标签我想你可能很幸运;)。


@ j.d'oh:评论不能用于扩展讨论,我创建了一个新的聊天室来尝试解决您的问题。
WhiteWinterWolf'8
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.