IT之家11月23日消息 稍早之前,Magisk的开发者topjohnwu宣布推出了新版的Magisk工具,绕过一些安卓的SafetyNet Attestation API,让手机在获取Root的情况下也能玩具有该API的手游(如《FGO》)。
但是在这之后他发现,这一解决方案对自己的一加6手机无效。之后,他在一则Medium帖子中表示发现了一个安全漏洞,《Fate/Grand Order》(通常称《FGO》)似乎在滥用这一漏洞,用来监测他一加手机上的Root访问权。
XDA发布了一篇文章,根据他的发现梳理了这一漏洞的信息。以下为该文主要内容翻译。
Procfs和安卓
在基于Unix的操作系统上,有一个名为“procfs”的特殊文件系统,其中包含有关进程(试想“应用程序”)的信息,例如内存使用情况(试想“RAM”)、状态(进程是否正在运行或休眠等)。在大多数基于Unix的操作系统上,用户和应用程序可以轻松访问procfs,来查看系统上正在运行的应用程序和服务类型(参考Windows的任务管理器)。然而从安卓7.0“牛轧糖”系统开始,谷歌锁定了对procfs的访问权限。在Android Nougat(安卓7.x)系统之前,像SystemPanel这样的应用程序能够收集有关正在运行的应用程序的数据,而无需任何特殊权限。安卓7.x系统之后,应用程序需要通过UsageStats或AccessibilityService等API才可以做到这一点,这两个API都由必须通过用户授予的权限来把关。
谷歌通过使用“hidepid = 2”标志挂载/proc,来阻止应用程序通过procfs读取其他应用程序的状态。通过这一手段,应用程序只能看到自己进程的状态。因此,应用程序需要通过可被接受的API(如UsageStats或AccessibilityService)来获取当前设备上正在运行的应用程序和服务的信息。
漏洞
如果procfs没有用“hidepid = 2”挂载怎么办?那么,应用程序可以自由地读取系统上运行的其他应用程序(和挂载点)的状态,而无需任何额外的权限(注)。谷歌在自家的设备上通过“hidepid = 2”挂载了的procfs,但并未强制其他OEM对设备强制执行此要求。来自LG、一加、华为/荣耀、小米等公司的几款设备尚未通过“hidepid = 2”挂载procfs。由此,《Fate/Grand Order》等应用程序就能利用它来检测设备上是否存在Magisk(或是否Root)。
注:安卓9 Pie中的一个安全性改动会阻止应用程序在自己的“SELinux上下文(context,可大致理解为“环境”)”之外读取信息,因为每个应用程序现在都是单独隔离的。SELinux是一个内核模块,充当各种“守卫”,阻止应用程序和服务访问它们不应该访问的文件。SELinux上下文如同一个文件的标签,其中包含用户和角色等信息。如果没有为procfs启用“hidepid = 2”标志,则处于相同SELinux上下文的应用程序可以读取同一上下文中有关其他应用程序的信息。在运行安卓9 Pie的设备上,只有针对安卓9 Pie构建的应用才会将这一新的SELinux更改应用在它们身上。只要安装时没有通过“hidepid = 2”挂载procfs,针对Android 8.1 Oreo或更低版本的应用程序将仍使用旧的SELinux规则,也就可以访问相同SELinux上下文中的进程信息。应Google Play的新要求,你的设备上运行多数应用程序目标API应对应安卓8.0“奥利奥”,但是,很多应用程序尚未针对安卓Pie进行更新。
procfs漏洞演示:
▲左为通过“hidepid = 2”挂载了procfs的Google Pixel 3 XL,右为未通过“hidepid = 2”挂载procfs的华为Mate 20 X
▲在Google Pixel 3 XL上,“Material Terminal”应用程序只能看到自己的进程;在华为Mate 20 X上,“Material Terminal”应用程序可以看到其他进程。
我的设备是否受影响?
以下是XDA发现的未使用“hidepid = 2”挂载procfs的设备(项目从左至右对应为:OEM厂商、设备、安卓版本、是否存在procfs泄密)。
后果有多糟糕?
如果与FuséeGelée、Blueborne、KRACK、Meltdown(熔断)Spectre(幽灵)等漏洞进行比较,这个bug就相形见绌了。应用无法通过这一漏洞获取root权限,或窃取你的密码。你的银行账户、信用卡都是安全的。最坏的情况是,应用程序可以判断你的设备上是否有另一个应用程序正在运行,因此用途非常有限。话虽如此,以上只是许多GNU/Linux发行版采取的规范行为,谷歌也是直到最近才开始通过安卓7.x系统阻止procfs访问。这一bug能让应用程序绕过所需的某些权限来监视其他进程,但无法破坏安卓系统的沙箱并从其他应用程序中窃取数据。可无论如何,这是非预期的行为,且已经打破了安卓的隐私功能,因此bug必须得到修复。
如何检测设备是否受影响
若要检查设备是否会向其他应用程序泄漏进程信息(即procfs未使用“hidepid = 2”挂载),你可以使用shell命令(参考上文对比图),也可以使用topjohnwu开发的应用程序(点此从GitHub获取)进行检查。如果你的手机已经获取Root权限,topjohnwu的应用还能让你使用“hidepid = 2”重新挂载procfs。
会有修复吗?
是的,这一定会得到修复。谷歌现在会要求所有设备使用“hidepid = 2”挂载procfs。谷歌将通过更新兼容性测试套件(CTS)来强制执行。这里的CTS是一组测试,所有设备必须通过测试,才能使用Google Play应用和服务。想要销售预装了Google Play商店的所有OEM,最后都必须推出更新,以便在不久的将来使用“hidepid = 2”重新挂载procfs。这一问题最先在一加设备上发现,一加方面已经知悉此问题并正在进行修复。如果其他OEM对此错误发表评论,我们将就在此文进行更新。但是,你大可不必怀疑所使用的设备的OEM是否会发布更新,如果他们希望更新通过CTS测试,就必须修复此bug。
XDA原文地址:点此前往(英文)
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。