KernelSU 解决方案:提升系统安全性的新方法

问题背景

KernelSU 目前暴露了一些可能被用户空间监控的侧信道漏洞,现实中已经存在利用这些漏洞的攻击。为了提高隐蔽性和安全性,我建议重新设计super call和sucompat机制,以完全消除侧信道检测向量。

问题1:super call可以被检测

当前行为

Super call使用prctl,这可以通过基于时间的侧信道测试来检测。我们已经实现了很多功能来防止这种检测,比如LSM钩子、调用黑名单等。

提出解决方案

实现一种新的super call机制,从用户空间无法检测到:

重用ksu_task_fix_setuid LSM钩子

拦截任务设置用户ID的转换。

如果目标UID在根允许列表中或与管理员的UID匹配,清除应用程序的seccomp过滤器。

将super call切换到setgroups系统调用

setgroups允许传递多个参数,比prctl更灵活。

当seccomp安装时,系统调用对用户空间监控变得不可见。

问题2:sucompat系统调用可以被检测

当前行为

sucompat仍然发出像access、stat、execve这样的系统调用,这些系统调用可以被普通应用程序测试。

我相信,仅仅为了反检测而减慢整个系统是不被接受的。就像这个提交所做的那样。

提出解决方案

增强ksu_task_fix_setuid来设置一个特殊的seccomp-bpf沙盒:

将一个小型shellcode区域映射到高虚拟地址空间(类似于vdso)。我们可以将一个迷你elf嵌入内核来解析处理程序符号。

然后,内核在这个区域安装一个SIGSYS处理程序。

配置seccomp-bpf以允许这些系统调用(access、stat、execve)仅当从映射的shellcode区域执行时。

将原始sucompat系统调用通过这个安全的跳板重定向,使它们对外部监控不可见。