DIFUZZRTL: Differential Fuzz Testing to Find CPU Bugs
基本信息
会议:S&P ’21
关键字:Fuzzing,ISA,Hardware,CPU
介绍
在进行系统安全的研究时,我们经常会遇到在 QEMU 等模拟器上运行的好好的,但一到板子上跑就挂了的情况。 很多时候,这类问题都是由于模拟器未能很好地 “仿真” 处理器的实际运行状态导致的。极少数的情况下,是 CPU 自身的实现有问题。
今天介绍的这篇文章,就是讨论如何模糊测试 CPU 的 RTL 级别描述,来寻找 CPU 硬件级别的 Bug。
之前也有类似的,对 RTL 进行测试的文章,但作者声称之前的文章所利用的 Mux-based Coverage 存在下面两个问题。
-
Clock-insensitive, 无法精确的捕捉到电路所代表的有限自动机(FSM)的状态转变。 -
Heavy Instrumentation Cost, 一个 CPU 中有太多的 Mux,对它们全部进行插桩会带来高昂的性能开销。
啥是 Mux 啊? (选择器电路)
为此,作者提出了一种新的衡量 Coverage 的方法,Control Register Converage。 作者不再对每个 Mux 进行插桩, 而是对每个 Mux 的 Control Register ( 可以决定 Mux 的输出结果 )
技术细节
Control Register 识别
作者将 RTL 转换成图,再利用数据流分析的方法,分析出每个 Mux 对应的 Control Register。
检查结果
那么在有了一个合适的 Coverage 之后,作者如何知道某一个 CPU 的实现是错误的呢? 这里作者采用了两种差分测试的方法,
-
比较 CPU 与 ISA 模拟器的结果区别 -
比较同一 ISA 下不同 CPU 的结果区别
结果
最后作者找到了 RISC-V 开源实现的各类 CPU 中的一堆 Bug。随着 RISC-V CPU 的发展,感觉此类的文章也会越来越多。
– END –
原文始发于微信公众号(COMPASS Lab):DIFUZZRTL: Differential Fuzz Testing to Find CPU Bugs