Android Nougat中的文件系统更改

自从Android N开发人员预览的第一个版本以来,在尝试列出根目录或其他系统目录时,出现“权限被拒绝”的错误。 这些目录的权限似乎没有改变(据我所知)。

题:

Android N中的哪些更改导致了这些权限被拒绝的错误?


如何复制:

在ADB shell中,运行以下命令:

run-as com.debuggable.packagename ls / 

这使Android N上的权限被拒绝


为什么列出系统目录:

我注意到了Android N上的几个文件pipe理器的行为。 他们不能再列出根目录或其他系统文件。 这也限制了在shell中运行ps的输出。 这些更改也导致此库停止在Android N上工作。

Solutions Collecting From Web of "Android Nougat中的文件系统更改"

有两组变更减less了对/ proc的访问。

procfs文件系统现在使用hidepid = 2挂载,消除了对其他用户的/ proc / PID目录的访问。 这个变化是在CopperheadOS中实现的,然后在此基础上采用上游。 有一个小组作为例外,但不作为许可暴露。 它仅用于为基本系统中的某些进程制定例外。 它可能会被暴露为“危险的”许可,这是我期望Google最终会做的,但他们认为用户不会理解它的含义。

https://android-review.googlesource.com/#/c/181345/

SELinux政策也变得更加严格。 对于应用程序,根本不存在对/ proc的基本访问权限,尽pipe这仅适用于/ proc / PID目录以外的文件。 仍然可以访问一些标签不属于一般proc政策的文件,但大部分都没有了。 这是渐进的,有很多相关的提交。 其中一个大的:

https://android-review.googlesource.com/#/c/105337/

这不仅消除了大量明显的信息,而且还closures了一些涉及侧通道的公然安全漏洞,从而允许logging键盘input等事情:

随着时间的推移,SELinux策略也变得越来越严格。 您可以在platform / system / sepolicy存储库中看到其余部分。 请注意,这是在平台/外部/ sepolicy很长一段时间,但最近移动。

这是出于安全和隐私的原因 。 从错误报告:

在根(/)和/ sys文件系统的情况下,目录列表是不可能的。

Google的正式答复:

你所描述的行为是按照预期工作的。 Android提供了应用程序必须运行的严格沙箱。这些沙箱可以保护应用程序数据免受其他应用程序的攻击,包括应用程序元数据(如进程状态)。

/ sys和/ proc以泄露关于进程的旁道信息而闻名,可以用来推断关于进程的状态的信息。 例如,多年来一直logging/ proc访问可用于监视应用程序启动,从而实现networking钓鱼攻击。