一句话:提出用字符串约束求解生成可增长的种子输入,并结合回归与梯度下降,显著提升路径覆盖。
基于变异的模糊测试高度依赖种子输入,而现有符号执行与梯度下降方法不适合输入增长:前者建模底层定长约束,后者仅处理算术路径条件。本文观察到增长输入需处理长度、偏移与计数关系,即某字段是另一字段的长度、偏移或模式计数。为此提出 TensileFuzz:将输入划分为字符串变量,在字段间插入填充变量,逆向这些关系形成字符串约束,求解后实例化填充变量以增长输入;再结合线性回归与梯度下降使增长后的输入满足路径约束以探索新路径。与 AFL、Qsym、Angora、SLF 等对比,路径覆盖率提升 39%–98%。
Seed inputs are critical to the performance of mutation based fuzzers. Existing techniques make use of symbolic execution and gradient descent to generate seed inputs. However, these techniques are not particular suitable for input growth (i.e., making input longer and longer), a key step in seed input generation. Symbolic execution models very low level constraints and prefer fix-sized inputs whereas gradient descent only handles cases where path conditions are arithmetic functions of inputs. We observe that growing an input requires considering a number of relations: length, offset, and count, in which a field is the length of another field, the offset of another field, and the count of some pattern in another field, respective. String solver theory is particularly suitable for addressing these relations. We hence propose a novel technique called TensileFuzz, in which we identify input fields and denote them as string variables such that a seed input is the concatenation of these string variables. Additional padding string variables are inserted in between field variables. The aforementioned relations are reverse-engineered and lead to string constraints, solving which instantiates the padding variables and hence grows the input. Our technique also integrates linear regression and gradient descent to ensure the grown inputs satisfy path constraints that lead to path exploration. Our comparison with AFL, and a number of state-of-the-art fuzzers that have similar target applications, including Qsym, Angora, and SLF, shows that TensileFuzz substantially outperforms the others, by 39% - 98% in terms of path coverage.