【论文分享】?AFL

IoT 11个月前 admin
264 0 0

今天要分享的这篇论文是发表在ICSE’22的?AFL,利用ARM ETM和DWT对MCU进行模糊测试。

【论文分享】?AFL

Design

如下图所示,主机和目标开发板通过调试接口(JTAG或SWD)连接,1)主机将测试用例通过调试接口传输到开发板上一块预留的内存,2)一旦到达目标开发板,3)主机发送命令开启ETM,4)当程序执行的时候,追踪到的指令执行信息传回给主机。5)一轮执行结束后,主机发送命令停用ETM,6)收集到的追踪信息被用于重建执行路径,7)映射到bitmap是否产生了新的执行路径,用于指导AFL产生新的测试用例。

【论文分享】?AFL
【论文分享】?AFL

测试用例的大小可能有几MB,为了保证足够的带宽,论文使用SEGGER RTT协议(AHB-AP端口)访问开发板上的内存。为了过滤无关的追踪信息,可以指定追踪一段连续的代码区域,或者追踪某个特定内存范围内的指令,譬如,如下图所示的代码,第4-7行是设备启动的代码,和测试用例无关。此外,作者观察到在RTOS里,每个任务的TCB在固定位置。因此,通过配置DWT在指向当前任务的TCB的全局指针是目标任务的TCB地址时开启ETM,以过滤其他任务和内核的执行信息。

【论文分享】?AFL

论文的另一个创新点是利用原始的ETM数据包直接计算覆盖率。为了避免昂贵的ETM数据包解码带来的开销,论文直接使用每个ETM分支数据包的目标地址作为每个基本块的开始。通过设置ETMCR寄存器的第8位,下图中的路径?→?→?对应的ETM数据包序列为(0?8000546,????????,0?8000584),而?→ ?对应的ETM数据包序列为(0?8000546,????,0?8000584),其中E表示一条指令是否被执行,从而区分两条不同的路径。

【论文分享】?AFL

尽管?AFL生成的bitmap和AFL不同,但具有相同的路径敏感度。下图是AFL QEMU计算覆盖率的方法,论文使用MurMurHash算法生成一个随机的整数值??_??来代替原有的AFL中的cur_location。

【论文分享】?AFL
【论文分享】?AFL

Implementation and Evaluation

?AFL在AFL2.56的基础上增加了大约2000行的C代码。如下图所示,论文首先评估了相较于解码ETM数据包恢复控制流的方法,直接利用原始的ETM数据包直接计算覆盖率带来多大的性能提升。实验结果显示,测试一小时观察到了平均1.03x-4.81x的性能提升。

【论文分享】?AFL

如下图所示,论文还评估了?AFL在每个阶段引入的性能,以及和相关工作的对比。其中,Avatar在QEMU上模拟固件,然后将外设操作转发到真实的开发板,P2IM和?Emu都是纯基于模拟的解决方案。

【论文分享】?AFL
【论文分享】?AFL

?AFL在供应商SDK附带的USB栈中发现了13个0-day漏洞,并分配了8个CVE号。

论文原文链接:

https://dl.acm.org/doi/pdf/10.1145/3510003.3510208

原文始发于微信公众号(COMPASS Lab):【论文分享】?AFL

版权声明:admin 发表于 2023年4月28日 上午9:58。
转载请注明:【论文分享】?AFL | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...