Bootstrap

【论文阅读004】:V-Fuzz: Vulnerability Prediction-Assisted Evolutionary Fuzzing for Binary Programs

论文基本情况:

论文名: V-Fuzz: Vulnerability Prediction-Assisted Evolutionary Fuzzing for Binary Programs

作者:Yuwei Li , Shouling Ji, Chenyang Lyu, Yuan Chen , Jianhai Chen, Qinchen Gu, Member, IEEE, Chunming Wu , and Raheem Beyah, Senior Member, IEEE

单位:浙大

来源:2022 IEEE TRANSACTIONS ON CYBERNETICS

论文主题:结合深度学习预测的模糊测试方法

一句话论文:

设计并实现了一种基于图神经网络的脆弱性预测模型,给出预测目标二进制程序各函数块的脆弱概率,从而能够衡量不同测试用例的质量,从而能够选择更有针对性的Seed。这是第一篇将二者结合的论文。

重点与思考:

论文大致说明

本文提出了V-Fuzz,将深度学习的程序脆弱性预测与深度学习结合起来,这也是符合直观认识的,如果能知道程序中哪一部分更“脆弱”,针对该部分重点分析,更容易发现漏洞。
首先,对整体的流程进行介绍。
在这里插入图片描述
针对给定的目标程序,利用图神经网络给出各部分的VP(Vulnerable Probability),整理计算得到静态脆弱性得分SVS,作为测试用例的评价指标。之后是正常的模糊测试过程,在每一轮结束,选择Seed时,根据执行路径,将途径的各部分SVS相加,选择最高的测试用例作为Seed参与下一轮测试过程。
这篇文章的核心工作集中在脆弱性预测和基于脆弱性的模糊测试方法两部分,即使用图神经神经网络给出VP和计算SVS选择Seed。

脆弱性预测部分

重点描述了数据的预处理步骤和模型结构设计。将程序转化成了属性控制流程图(ACFG),其是一个有向图 g = < V , E , ϕ > g=<V, E, \phi> g=<V,E,ϕ>,V, E, ϕ \phi ϕ分别是顶点,边和映射关系,在ACFG中表示基本块,基本块间的连接,以及基本块到属性的映射。对二进制程序进行反汇编,得到逻辑函数。然后,提取基本块的属性,并将每个基本块转换为一个数值向量。包含统计、语义和结构属性,本方案中只使用统计属性,主要有两方面原因,语义属性提取的开销过大,对结构属性,模型可以学习,而不需要提前提取。而图神经网络部分,结构设计如下:在这里插入图片描述
每次对一个函数块进行预测,输出该基本块的VP,用于之后的操作。对于图神经网络,不是特别了解,就不在这里多做详细介绍了。

基于脆弱性的模糊测试方法

V-Fuzz方案并没有对生成测试用例的方法做出过多的创新,整体仍沿用AFL的突变方法,在两方面进行了研究,选择种子以及突变策略部分。

选择种子

需要先根据上述计算出的VP,计算Static Vulnerable Score(SVS), S V S ( b i ) = κ ∗ p v + ω SVS(b_i)=\kappa*p_v+\omega SVS(bi)=κpv+ω p v p_v pv是函数块的VP, ω \omega ω的作用是避免 S V S ( b i ) SVS(b_i) SVS(bi)为0,得到不同基本块的SVS。每个测试用例,将所有达到的基本块的SVS值相加,得到fitness,选择值最高的作为下一轮的种子。

突变策略

突变分为两类,slight和heavy,论文中并没有详细说明这两类具体方案上的差别,只是描述为轻微和重突变。选择依据则是设计了一个崩溃窗口(Crash Window, CW)、假设其输入没有找到任何新的路径或崩溃的代的数量用 ζ \zeta ζ表示,当 ζ > C W \zeta>CW ζ>CW时,选择重策略。
CW初试设置为 i n i _ c w ini\_cw ini_cw,存在上下限 m a x _ c w max\_cw max_cw m i n _ c w min\_cw min_cw,发现路径或崩溃时,设置 ζ = 0 \zeta=0 ζ=0,在选择重突变以及 ζ = 0 \zeta=0 ζ=0时, c w cw cw都会翻倍。

问题

一方面,对比方案三个中有两个都是已经比较久的成熟方案,说服力不是很强,另一方面,没有具体说明轻和重突变策略具体的差别在哪里。
此外,考虑除了图神经网络外,是否其他的模型效果会更好?而且,本文的方法貌似没有考虑到基本块间的联系,存在改进空间。

;