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系统调用通过这个安全的跳板重定向,使它们对外部监控不可见。
评论已关闭