1. Basic Information
Conference: EMSOFT’22
Author: Yuheng Shen, Yiru Xu, Hao Sun, Jianzhong Liu, Zichen Xu, Aiguo Cui, Heyuan Shi, Yu Jiang
Affiliation: Tsinghua University
2. Introduction
本文设计了Tardis,它能够对嵌入式内核进行覆盖率导向模糊测试。
3. Problem
与通用操作系统内核相比,嵌入式操作系统内核具特殊的属性,导致现有的基于覆盖率导向内核模糊测试工具很难被直接应用到嵌入式中。对嵌入式内核进行覆盖率导向的模糊测试存在如下挑战:
- 存在大量的架构和开发板(多种指令级架构,每种架构在不同的开发板上又具有不同的特征)
- 通常不提供与内核交互的统一接口标准
- 系统资源受限,对其进行插桩会影响其自身的执行效率
4. Design
4.1 Tardis’s Architecture

为了完成对目标嵌入式系统的覆盖率导向的模糊测试,本文作者设计了Tardis,其架构如上图所示。首先,主机端负责测试用例的生成、变异、序列化、反馈分析、操作记录和虚拟机控制。然后,主机和客户机通过共享内存进行通信,传递覆盖和测试用例等数据。最后,客户端负责操作系统初始化、测试用例反序列化和执行。一般情况下,每个模糊测试进程都有多个QEMU实例,每个实例都有一个由QEMU公开的共享内存区域。
4.2 Tardis’s Workflow

上图为Tardis的完整工作流程:
- 使用clang对源码进行交叉编译。
- Dynamic Initialization:用于进行覆盖信息收集的回调函数主要被设计用于用户空间程序,而被测试嵌入式系统的资源是有限的,因此需要设计一种用于高效收集覆盖率信息的动态初始化机制。即,在系统初始化时,通过间接指针唤醒初始化函数。而间接调用需要获取到函数的地址,而在链接阶段之前,无法获取到该地址。所以先将内核编译为elf格式的启动文件,然后通过反汇编方式获取该函数的地址。

- Os-Agnostic Collection:使用基本块地址计算覆盖率情况,即,当前基本块地址^之前基本块,之前基本块地址右移1位(类似于AFL)。使用密集位图统计覆盖率信息,并使用共享内存传递覆盖率信息并传输测试用例。
5. Evaluation
5.1 Is Tardis able to uncover new bug in different Embedded OSs?
共发现17个缺陷。
5.2 Is Tardis’s coverage guided mechanism effective in term of achieve higher code coverage, comparing with the black box fuzzing?

注: Tardis-是Tardis关闭覆盖率统计后的版本



5.3 What is the overhead that the instrumentation brings to Tardis during fuzz testing?


6. Conclusion or Limitations
- 进行插桩的开销相对而言还是比较大的,并且需要人工
- 只能检测那些会触发会导致内核挂起的特殊漏洞,对于那些静默漏洞(不利于观察)无法检测
7. Related Work
| 方法或工具或研究人员 | 描述 |
|---|---|
| Syzkaller(GPOS) | 由谷歌开发的用于对通用操作系统内核进行覆盖率导向的模糊测试工具。它提出使用系统调用描述作为输入,将丰富的语义信息编码到测试用例中,最大化模糊测试效率 |
| Healer(GPOS) | 通过揭示两个相邻系统调用之间的隐藏关系来生成高质量的测试用例 |
| HFL(GPOS) | 使用符号执行生成测试输入来绕过内核中难以绕过的检查点 |
| Gustave | 一种嵌入式操作系统模糊器,实现了一个定制的QEMU板来模拟目标嵌入式操作系统。然后使用QEMU TCG实现覆盖指导和内存相关的漏洞检 |
| KAFL | 仅支持X86架构下的模糊测试 |
| Rtkaller | 基于Syzkaller设计,提出将任务作为模糊测试的输入,并通过并行执行触发内核的调度行为,实现高效的实时操作系统模糊测试。仅可用于Rt-Linux内核 |
8. Comments
基于覆盖率导向的嵌入式内核模糊测试中存在各种挑战:架构多样、接口标准不统一,以及系统资源有限。为此,本文设计了Tardis,有效地增加了嵌入式内核模糊分析的覆盖率。
注:解读如有错误或不当之处,麻烦在评论区批评指正。