本文针对 Linux 内核中由引用计数使用不当引发的释放后使用(UAF)漏洞提出了一种新的模糊测试方法。作者首先统计发现,近期内核 UAF 漏洞中约有 36.1% 与引用计数操作错误相关,此类漏洞根因复杂且可利用性高,对系统安全构成严重威胁。现有的基于代码覆盖率的模糊测试工具虽然能发现部分常见内存错误,但均未考虑引用计数这一根因,因此只能被动、偶然地触发这类 UAF 漏洞,容易遗漏深层隐藏缺陷。为主动触发引用计数相关的 UAF 漏洞,本文设计了 CountDown——一个新颖的引用计数引导的内核模糊测试器。CountDown 从内核执行过程中收集多样化的引用计数操作信息,并基于被共同访问的引用计数重构系统调用之间的关系;在生成用户态程序时,优先组合那些访问过相同引用计数的系统调用,以触发复杂的引用计数行为。同时,CountDown 会主动注入递减引用计数和访问引用计数对象的系统调用,刻意释放被引用计数的对象,并通过悬垂指针触发非法访问。作者在主流 Linux 内核上对 CountDown 进行了测试,并与当前流行的模糊测试器进行了对比。实验结果表明,CountDown 平均能够比现有最先进工具多检测出 66.1% 的 UAF 漏洞,并多产生 32.9% 的 KASAN 报告。此外,CountDown 还发现了 9 个新的内核内存错误,其中 2 个已被修复,1 个已确认。该研究为内核内存漏洞挖掘提供了新的思路,尤其适用于对引用计数生命周期敏感的 UAF 漏洞发现场景。
💡 推荐理由: 内核 UAF 漏洞是最高危的漏洞类型之一,而引用计数相关 UAF 占比超三分之一。CountDown 首次将引用计数作为模糊测试引导信号,显著提升 UAF 发现效率,对蓝队而言意味着更早发现潜在可利用内核漏洞的机会,也启发防御者关注引用计数生命周期审计。
🎯 建议动作: 研究跟进