提升龙蜥内核测试能力!探究持续性模糊测试优化实践

简介: 清华大学软件学院对Anolis OS使用靶向模糊测试方法将测试工作引向修改的代码,进而提高对业务代码的测试能力。

编者按:高校是开源社区参与的重要力量。在 2023 龙蜥操作系统大会全面繁荣开发者生态分论坛上,清华大学软件工程博士沈煜恒从模糊测试的角度解释了如何将操作系统内核质量提升一个新高度,也分享了面向龙蜥操作系统的内核所提出的模糊测试。以下为分享原文:

(图/清华大学软件工程博士沈煜恒)


内核模糊测试

什么是模糊测试?模糊测试是一种常用的漏洞性方法,使用随机生成 input 来测试程序中的异常行为,常见 Linux、Windows 等部署了模糊测试,并且将模糊测试集中在 CI 流程中。


对于 Linux 操作系统,使用 kcov 工具来对 Linux 做覆盖率插装,使用系统调用描述 Syscall SPEC 作为系统调用描述的输入。在执行测试过程中,将 SPEC 实例化为待测的程序。根据反馈情况,如覆盖率和崩溃率对 SPEC 做编译操作,进一步测试内核,相对应的内核会在测试过程中不断的执行生成的程序,对覆盖率和崩溃情况进行收集。


基于任务的OS模糊测试


传统的内核模糊测试在测龙蜥操作系统时会遇到很多问题,现在广泛采用的系统调用描述的方法不足以充分表达业务系统的逻辑,且无法传达执行时的状态信息。同时,目前的执行方式也存在一些问题,如目前的模糊测试器每次只能启动一个执行器,每次只能执行一个测试用例,无法充分传达执行时的逻辑,导致一些深层漏洞难以暴露。



针对以上问题,清华大学软件学院做了相关工作,提出了相关业务代码的感知、以任务作为测试输入,同时做到进程间的任务状态感知和维护,最后提出了使用多线程的执行方式



首先在测试时,使用任务格式输入,定义一个任务,任务中包括多个待执行的程序,程序中包括对应的优先级。我们提出任务间的状态感知和修复,通过字典查询的方式去维护每个任务的状态。其次构造一个字典,在执行时遍历每个任务中程序的系统调用来维护每个任务的执行状态,保证在测试中不会出现挂起等情况。同时,对可能导致挂起行为的程序做提前修复,保证在执行时的稳定情况。最后引入一个并行的 fuzz,尽可能多触发实时操作、相关业务逻辑等,对业务逻辑进行多并发的执行,在执行时会启动多个执行器,根据任务中定义的优先级,为每个执行器分配一个优先级,将任务分配执行器。在执行后异步收集执行的数据,同步到本地的模糊测试器中。



测试结果表示在 6 个版本的 Linux 上取得了大约 20% 覆盖率的提升,说明可以测到 Linux 内部更深的代码逻辑。同时,修复策略可以极大降低任务挂起的数量,也在 6 个版本的 Linux 上发现了 50 个 bug,其中 25 个为 prevision unknown 的 bug 被开发者所确认。


基于靶向的OS模糊测试


我们发现,虽然内核主线 Linux 经过了大量测试,但由于龙蜥操作系统自己维护的版本可能会对业务逻辑做经常修改,这些代码通常缺乏与上游内核相同级别的测试。同时在工业环境中,测试会受到严格的时间和计算资源限制。因此我们提出,可以使用靶向模糊测试方法(定向模糊测试方法)将测试工作引向修改的代码,即特定的目标代码段,进而提高对业务代码的测试能力。

上述工作基于两方面展开:第一静态调用图的抽取第二基于调用图的模糊测试。调用图的抽取通过 Clang 抽取出整个内核的调用流图,基于调用流图生成加权的调用流图,进一步将生成的调用流图传给 Syzkaller 内核模糊测试器,通过距离计算、函数抽取等方式来增强 Syzkaller 的靶向模糊测试能力。该工作目前已经集成到阿里云的 ABACI 机器人中,能够实现业务模块的持续性模糊测试。对应的该工具目前在 Linux 内核发现了 11 个未知的漏洞,龙蜥社区也已经对其进行了修复,覆盖率对比于 Syzkaller,实现了 24.7% 左右的提升。


精彩视频回放、课件获取:

2023 龙蜥操作系统大会直播回放及技术 PPT上线啦,欢迎点击下方链接或文末”阅读原文“观看~

回放链接:https://openanolis.cn/openanolisconference

技术 PPT :关注龙蜥公众号【OpenAnolis 龙蜥】,回复“龙蜥课件”获取。


—— 完 ——

目录
打赏
0
2
2
0
1188
分享
相关文章
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
302 11
优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言
REST Assured 是一个强大的 Java 库,用于简化 RESTful API 测试。本文详解了其核心功能:设置默认主机和端口以减少代码重复、发起 GET 请求并验证响应结果,以及通过断言确保接口行为符合预期。同时推荐 Apipost 工具,助力开发者提升 API 测试效率,实现更高效的接口管理与团队协作。掌握这些技巧,可显著优化测试流程与代码质量。
RESTful接口设计与测试实践
通过理解和实践上述原则和步骤,你就可以设计和测试你的RESTful接口了。最后,它可能会变成你为优化系统性能和用户体验所使用的重要工具,因为好的接口设计可以使得从服务器端到客户端的通信更加直接和有效,同时提升产品的使用体验和满意度。如此一来,写一个好的RESTful接口就变成一种享受。
127 18
利用 RunnerGo 深度探索 API 性能测试:从理论到实践
API性能测试是保障应用稳定性和用户体验的关键环节。本文详细探讨了如何使用RunnerGo全栈测试平台进行高效API性能测试,涵盖测试计划创建、场景设计、参数配置到执行与分析全过程。通过电商平台促销活动案例,展示了高并发下的测试策略与优化措施,如代码与数据库查询优化、数据库连接池扩容、服务器资源配置调整及缓存策略实施等。最终显著提升系统性能,满足高并发需求。API性能测试需持续关注与优化,以适应业务发展和用户需求变化。
142 33
如何测试中间件优化后的 Pinia 状态管理?
如何测试中间件优化后的 Pinia 状态管理?
147 64
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
188 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
利用Postman和Apipost进行API测试的实践与优化-动态参数
在API测试中,Postman和Apipost是常用的工具。Postman内置变量功能有限,面对复杂场景时需编写JavaScript脚本,增加了维护成本。而Apipost提供丰富的内置变量、可视化动态值配置和低代码操作,支持生成真实随机数据,如邮箱、手机号等,显著提升测试效率和灵活性。对于复杂测试场景,Apipost是更好的选择,能有效降低开发与维护成本,提高测试工作的便捷性和可维护性。
Intel Linux 内核测试套件-LKVS介绍 | 龙蜥大讲堂104期
《Intel Linux内核测试套件-LKVS介绍》(龙蜥大讲堂104期)主要介绍了LKVS的定义、使用方法、测试范围、典型案例及其优势。LKVS是轻量级、低耦合且高代码覆盖率的测试工具,涵盖20多个硬件和内核属性,已开源并集成到多个社区CICD系统中。课程详细讲解了如何使用LKVS进行CPU、电源管理和安全特性(如TDX、CET)的测试,并展示了其在实际应用中的价值。
139 4
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
298 23
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问