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