格拉茨技术大学的研究人员发现了一种具有突破性的基于软件的旁道攻击方式 ——KernelSnitch,它利用的是 Linux 内核数据结构中的时间差异。
根据研究人员在 Github 上发布的报告,与依赖硬件的攻击不同,KernelSnitch 主要针对哈希表、基数树和红黑树。这使得非特权攻击者能够跨越隔离进程泄露敏感数据。
漏洞:内核数据结构是静默泄漏者
操作系统依靠哈希表和树等动态数据结构来管理用户空间锁、计时器和进程间通信 (IPC) 的元数据。
KernelSnitch 利用了一个关键的架构疏忽:访问这些结构所需的时间取决于它们的占用情况(元素的数量)。
通过测量系统调用执行时间,攻击者可以推断占用率并提取秘密。
KernelSnitch 的工作原理
1、时间测量:攻击者触发与内核结构交互的系统调用(例如,futex、msgget)。
2、占用率推断:系统调用持续时间越长,表示由于迭代搜索(例如,遍历哈希桶中的链接列表)导致的占用率越高。
3、放大:哪怕是极其微小的时间差异(低至 8 个 CPU 周期),也会通过缓存抖动(刷新 CPU 缓存以加剧内存延迟)或者结构操作(人为增加占用率)被放大。
KernelSnitch 利用哈希表中的可变访问时间。每个存储桶的链接列表长度会影响系统调用持续时间,通过时间戳比较泄露。
分析
1、隐蔽通道(580 kbit/s 传输):恶意进程通过调节哈希桶占用率来进行通信。在 Intel i7 - 1260P 上,KernelSnitch 利用 futex 子系统实现了 580 kbit/s 的传输速度,错误率为 2.8%。
2、内核堆指针泄漏:攻击者通过强制哈希碰撞,可以推断出哈希函数中使用的秘密内核地址(例如 mm_struct)。这能够实现精确的堆操作以提升特权,并且在 65 秒内就能泄露指针。
3、网站指纹识别(准确率 89%):在网页加载期间,监控 Firefox 的 futex 活动可以创建独特的时间指纹。卷积神经网络(CNN)能够从 Ahrefs Top 100 列表中识别出网站,F1 得分为 89.5%。
为什么 KernelSnitch 很重要
·
与硬件无关:和 Spectre 或 Meltdown 不同,KernelSnitch 利用的是软件设计缺陷,能够绕过硬件缓解措施。
·
广泛影响:所有使用动态内核结构的主流操作系统都存在这个漏洞。该漏洞已在 Linux 5.15 - 6.8 版本上进行了测试。
·
隐身性:它不需要特权或共享内存,能够逃避现有的沙箱。
缓解与挑战
修复 KernelSnitch 需要进行根本性的变革:
· 恒定时间结构:消除与占用情况相关的操作(例如预先计算最坏情况下的遍历步骤)。