为什么我不看好 KernelSU
说起KernelSU,也不算是什么新鲜玩意,早在2018年就有开发者提出这个想法(kernel-assisted-superuser)。
先简单介绍一下KernelSU:通过修改Android内核的源码,实现在操作系统中允许程序调用su来获取root权限(传统的root方式是直接提供一个su可执行文件,放在/system/bin)。
由于现在很多新设备都用上了号称任何Android设备都通刷的GKI(通用内核镜像),所以KernelSU也搭上了这趟顺风车:只要你的设备支持GKI,那你只需要刷个新的内核,就能获取root权限,是不是很方便?
KernelSU听起来很不错,但为什么我不看好它呢?
1. 老用户与🐶不得使用
虽然GKI已经可以用在一些比较新的设备上了,但是距离普及还需要很长一段时间。在此期间,那些坚持使用老旧设备的钉子户怎么办?厂商不开源内核源码怎么办?普通用户不会编译内核怎么办?支持KernelSU的第三方内核不兼容某某rom怎么办(普通用户绝对会把锅甩给第三方内核,内核维护者表示压力山大)?
2. 号称效果更好的root隐藏效果?
KernelSU官网宣称“只有得到了root授权的app才可以访问su,其他app无法感知su”,看起来很高大上,其实,Magisk的“遵守排除列表”可以实现同样的效果,不需要借助任何Zygisk模块或Xposed模块,区别就是一个属于白名单策略,一个属于黑名单策略。
而且,现阶段某些app检测设备环境可不仅仅是检测root这么简单了,比如美(chou)名远(zhao)扬(zhu)的momo,它会检测挂载参数、检测Bootloader锁状态、检测被模块修改过的系统文件、检测当前运行的是否是原厂系统、检测是否存在可疑的文件和app。
试问,KernelSU在不借助任何外力的情况下如何应对?
有隐藏就会有检测,就好比有矛就会有盾,现阶段某些app难以检测KernelSU,只是因为整个业界还没有做好准备。
3. 安全是最重要的
能力越大,责任也就越大。KernelSU在内核层面工作,安全问题也不能忽视。根据KernelSU官方的介绍:
我们可以在内核层面对任意进程上加硬断点;我们可以在任何人不知情的情况下访问任意进程的物理内存;我们可以拦截内核空间中的任何系统调用;等等。
很显然,这很危险,这不是拥有root权限后该做的事。
4. “KernelSU的目标不是取代Magisk”
对呀,有Magisk了我有什么理由抛弃Magisk来选择你呢?Magisk劫持了init能做的事已经有很多了。
总结
kernel属于很接近硬件底层的东西,kernel已经很累了,请善待它。
当然,KernelSU也并非没有任何亮眼之处,比如KernelSU可以从内核层面修改SELinux规则(Magisk则是通过magiskpolicy在运行时修补),而且根据官方介绍,KernelSU还能为用户提供内核接口(也有可能是我的误解,因为KernelSU为用户提供的内核态su也可以算是接口(笑))。
等KernelSU推出稳定版之后,我们再来看看它的表现吧!
5. KernelSU的现状?
2024年6月2日,KernelSU发布了v1.0.0版本。从正式公布到现在已经过去了将近一年半的时间,现在让我们重新审视它。
从该版本起,KernelSU不再提供对非GKI内核的支持,非GKI设备仍然可以使用最后一个支持的版本(v0.9.5)。当下,那些老旧的非GKI的设备都已基本上淘汰,因此这一决定并非有很大的影响。
然后,时间证明了KernelSU的隐藏效果确实优于Magisk,这一点毫无争议。但是!这是建立在不使用Zygisk的前提下。
就目前来说,不论是国内用户还是国外用户,不论是用的官方rom还是用的AOSP rom,Zygisk都是刚需:有些app会检测bootloader解锁状态,需要使用Zygisk模块隐藏;为了使用完整的Google服务,需要使用Zygisk模块通过Play Integrity认证;为了使用Xposed模块,需要安装依赖Zygisk的LSPosed模块;最后,为了隐藏Zygisk,还得再装上Shamiko模块…
那么,KernelSU + ZygiskNext
的搭配,跟Magisk + Zygisk
有什么区别呢?
因此可以认为,如果Zygisk是必要条件,那么KernelSU相比Magisk并没有突出的优势。
当然,KernelSU也整了点Magisk没有的花活:
一个是 App Profile,可以对获取了root权限的app进一步限制权限。但是依据我的观察,普通用户基本上不会去配置也不懂得如何配置,因此这项功能沦为了极客的玩具。
另一个是 模块 WebUI,这项功能确实整得我这个Magisk用户很心动,让我回想起了大名鼎鼎的 Aroma Installer,即使我从来没有开发过利用WebUI的模块,我也已经在脑海中酝酿出了很多应用场景。但是冷静下来后再想想,kernel和浏览器的奇妙组合,那就不得不考虑安全问题。同时,不排除会有恶意模块通过互联网从远程服务器下载并执行恶意代码,或者向远程服务器发送设备的私密信息和数据(虽然这两种情况并不是一定需要依赖WebUI)。
最后,总结时间,介于Magisk的开发已基本上陷入停滞,因此尽管我对KernelSU的新特性有一些异见,但我仍然要对此给予肯定。就目前来说,我还是会坚定地做一位Magisk用户。