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

简介: 清华大学软件学院对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 龙蜥】,回复“龙蜥课件”获取。


—— 完 ——

相关文章
|
5天前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
12 1
|
1天前
|
敏捷开发 设计模式 Devops
深入探索自动化测试框架的设计原则与实践
【4月更文挑战第29天】在追求软件开发效率和质量的当下,自动化测试成为确保软件可靠性的关键步骤。本文旨在剖析构建高效自动化测试框架的设计原则,并通过具体实例展示如何在实际项目中应用这些原则以提高测试效率和准确性。文章首先介绍了自动化测试的重要性及其对持续集成/持续部署(CI/CD)流程的贡献,随后详细探讨了模块化、可扩展性、易用性和可维护性四个核心设计原则。最后,通过一个案例研究,演示了如何将这些原则融入到自动化测试框架的构建中,以及实施后的效果评估。
10 1
|
3天前
|
测试技术
【测试】优化软件测试:有效测试用例设计的关键
【测试】优化软件测试:有效测试用例设计的关键
|
3天前
|
jenkins 测试技术 持续交付
深入探索软件测试中的持续集成与自动化测试实践
【4月更文挑战第27天】 在当今软件开发的快速迭代过程中,持续集成(CI)和自动化测试已成为确保代码质量和加快交付速度的关键因素。本文将探讨如何通过实施持续集成流程,并结合自动化测试策略来优化软件测试工作。我们将分析持续集成的原理、自动化测试的最佳实践以及如何将这些方法应用于实际项目中,旨在为读者提供一套完整的解决方案,以提高软件项目的效率和质量。
11 3
|
3天前
|
Web App开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计与实践
【4月更文挑战第27天】在软件开发周期中,确保代码质量和功能正确性至关重要。随着敏捷开发的普及和持续集成/持续部署(CI/CD)的实践,自动化测试已成为现代开发工作流程的核心部分。本文将探讨一个广泛使用的开源自动化测试工具——Selenium,并剖析其设计原理、架构以及在实际中的应用。我们将通过具体案例分析,展示如何有效利用Selenium进行跨浏览器测试,并讨论在真实环境中可能遇到的挑战及解决方案。
|
5天前
|
敏捷开发 Devops 测试技术
深入理解自动化测试框架设计原则与实践
【4月更文挑战第25天】在快速演变的软件行业中,自动化测试已成为持续集成和交付过程中不可或缺的一环。本文旨在探讨构建高效自动化测试框架的设计原则,并通过实际案例分析如何在实践中应用这些原则以提高测试效率和可靠性。通过深入剖析自动化测试框架的核心组件、架构设计和最佳实践,读者将获得构建和维护健壮自动化测试系统的深刻见解。
3 0
|
14天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
|
15天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
23天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。
|
26天前
|
测试技术 持续交付 API
深入理解自动化测试框架的设计原则与实践
【4月更文挑战第4天】 在软件开发的快速迭代中,自动化测试成为确保产品质量和加速交付过程的关键因素。本文将探讨自动化测试框架的设计原则及其在实际项目中的应用。通过分析不同测试场景下的需求,我们提出了一系列设计原则,旨在提高测试框架的灵活性、可维护性和扩展性。同时,文中还将分享几个成功案例,展示如何根据这些原则构建高效且可靠的自动化测试框架。

热门文章

最新文章