杨克(1989-), 男, 博士, 主要研究领域为软件安全分析, 操作系统安全
贺也平(1962-), 男, 博士, 研究员, 博士生导师, 主要研究领域为系统安全, 隐私保护
马恒太(1970-), 男, 博士, 副研究员, 主要研究领域为软件安全分析、操作系统安全
董柯(1996-), 男, 硕士, 主要研究领域为软件安全分析, 操作系统安全
谢异(1995-), 男, 硕士, 主要研究领域为软件安全分析、操作系统安全
蔡春芳(1996-)女, 硕士, 主要研究领域为软件安全分析, 操作系统安全
大量访问越界、内存耗尽、性能故障等缺陷是输入中有效数据的规模过大, 超过临界值引起的. 而现有灰盒模糊测试技术中的数据依赖识别和变异优化技术大都针对固定规模输入数据格式, 对规模递增输入数据的构造效率不高. 为此, 针对这类累积型缺陷模糊测试对应的状态特征值最优化问题, 提出一种对特征值依赖的输入数据的格式判别和差分变异方法. 根据引发特征值最值更新的有效变异的位置分布和发现频次特征, 判别待发现缺陷状态优化是否依赖于输入中相关数据规模的增长, 将引发最值更新的有效变异内容应用于规模递增输入数据生成, 提升该类累积型缺陷的复现和定向测试效率. 依据该思想, 实现了模糊测试工具Jigsaw, 在测评实验数据集上的实验结果表明提出的判别方法能够高效地区分特征值依赖的输入数据组织形式, 且提出的差分变异方法显著提升了需要大量输入才能触发累积型缺陷的复现效率.
Many quantifiable state-out-of-bound software defects, such as access violations, memory exhaustion, and performance failures, are caused by a large quantity of input data. However, existing dependent data identification and mutation optimization technologies for grey-box fuzzing mainly focus on fixed-length data formats. They are not efficient in increasing the amount of cumulated data required by the accumulated buggy states. This study proposes a differential mutation method to accelerate feature state optimization during the directed fuzzing. By monitoring the seed that updates the maximum or minimum state value of the cumulative defects, the effective mutate offset and content are determined. The frequency is leveraged and the distribution of the effective mutation is offset to distinguish whether the feature value of the defect depends on a fixed field or cumulative data in the input. The effective mutation content is reused as a material in the cumulative input mutation to accelerate the bug reproduction or directed testing. Based on this idea, this study implements the fuzzing tool Jigsaw. The evaluation results on the experimental data set show that the proposed dependency detection method can efficiently detect the input data type that drives the feature value of cumulative defects and the mutation method significantly shorten the reproduction time of the cumulative defect that requires a large amount of special input data.
近几年, 基于变异的模糊测试技术AFL、HongFuzz和LibFuzzer[
相比传统模糊测试, 该类应用仅关注于目标缺陷或代码相关的部分程序逻辑切面, 因此利用目标相关特征缩小分析和测试范围, 提高测试效率, 是该类应用问题特有的研究内容. 缺陷特征导向的灰盒模糊测试将目标缺陷检测问题转化为种子的最优化问题. 其通过刻画目标缺陷相关特征, 构造关于种子的最优化函数, 并改进种子度量, 优化种子生成, 从而提升目标缺陷的检测效率.
许多研究[
进一步分析发现, 复现时间的长短与缺陷状态所依赖的输入数据形式密切相关. 一些缺陷状态由输入中的个别字节直接决定, 表征缺陷状态逼近程度的目标函数值会因这些字节内容的改变而大幅变化. 传统的随机变异生成每个种子时通常会进行大量的变异操作, 缺陷依赖的字节很容易在该过程中发生改变, 从而较快地实现对目标函数值的搜索优化. 而另一些缺陷在输入中有效数据超过一定规模时才触发, 每个有效数据元素对累积效应(目标函数值)的增幅有限. 此时, 需要在更大的输入空间内搜索缺陷依赖的有效输入内容, 而且基于大量随机变异生成新种子的传统策略很容易破坏既有的有效数据, 由于搜索空间非常大, 对输入内容要求更苛刻, 传统随机变异方法很难触发这类依赖有效数据规模增长的累积型缺陷.
现有的面向访问越界、内存耗尽、性能故障等缺陷的模糊测试工作, 主要利用反映缺陷状态逼近度的数值特征作为待优化的目标函数, 通过改进遗传算法中的种子生成策略, 促进缺陷状态向临界值逼近从而触发缺陷. 这些数值状态特征包含内存占用[
现有对变异策略的优化研究主要关注筛选有效变异位置[
现有关注输入内容构造的模糊测试工作的研究问题主要是分支比较条件中苛刻字段内容识别, 其目的是增加覆盖率. 由于研究问题不同, 这些工作所提出的方法应用到对规模增长驱动的累积型缺陷的检测上还存在一定困难. 例如, 关注苛刻分支测试的工作[
由于有效输入数据规模决定了搜索空间的大小, 也决定了随机搜索难易, 本文将累积型缺陷按照其状态的累积效应是否依赖于实际有效数据规模增长进行分类, 将累积型缺陷分为输入规模递增累积型(递增累积型)和输入规模固定累积型(固定累积型)两类. 由于二者的数据组织形式和搜索空间差异巨大, 因此需要分别设计变异策略.
本文将反映种子与累积型缺陷状态逼近程度的度量值称为特征值, 累积型缺陷的检测问题可以视为是种子特征值的最大化问题. 本文分析了访问越界、内存耗尽、性能缺陷中固定累积型缺陷和递增累积型缺陷的差异, 发现固定累积型缺陷的特征值依赖于个别字节, 同一个字节取值变更可能导致特征值的多次最值更新, 反映递增累积型缺陷的特征值依赖于内容出现的频次, 同一个字节的内容变化通常仅带来一次最值更新. 因此有效变异位置被检测到的频次越少、分布越分散, 越表明该最优化问题是由规模递增输入驱动的. 在此基础上利用有效变更的位置分布和频次特征, 提出了一种区分待检测累积型缺陷依赖于固定的输入规模(固定累积型特征值)还是依赖于有效输入规模的增长(递增累积型特征值)的判定方法. 针对递增累积型缺陷, 提出了一种基于种子差分的有效变异策略.
首先, 根据待复现或待检测累积型缺陷的代码特征确定其特征值和其对应的变量或表达式, 以该表达式为参数在相应位置插入IJON最优化原语. 其次, 在测试时根据IJON原语捕获的特征值更新反馈, 收集随机交叉变异的过程有效种子的修改规则, 包含修改位置以及修改后的内容. 并对修改规则进行清洗, 去掉无关修改. 结合同一字节引发的目标函数最值更新次数以及引发最值更新的字节分布情况来区分待检测缺陷的特征值类型(固定累积型特征值还是递增累积型特征值). 最后, 根据最优化问题依赖的输入形式, 应用不同的变异策略. 特别地, 对递增累积型特征值的最优化, 本文根据引起最值更新种子的差分内容获得递增累积型特征值依赖的输入素材. 借助规则清洗, 将有效变化内容作为字典值以较大的概率应用到后续的交叉变异中, 并贪心地应用成功率高的变异内容, 从而加速递增累积型缺陷依赖的输入数据的生成. 为了避免种子生成时变异次数过多破坏既有的累积输入内容, 对递增累积型缺陷采用较低的变异次数来生成后代. 最后, 通过实验表明本文提出的变异优化策略提高了递增累积型缺陷检测效率. 主要贡献如下.
(1) 提出了规模递增输入数据导致的缺陷问题. 根据有效变异位置和频次特征, 给出了一种对该类输入依赖形式判别的方法, 能够快速有效地区分其依赖于规模递增还是规模固定的输入数据.
(2) 提出了一种基于差分进化的变异策略, 比随机变异更加高效地生成特征值最优化所需的规模递增输入数据, 从而加速递增累积型缺陷的复现和检测.
(3) 实现了基于上述识别方法和变异策略的原型系统Jigsaw. 实验显示本文提出方法的识别开销小于5%, 且够准确地区分出待优化特征值依赖的输入数据格式. Jigsaw在复现临界值越界类缺陷中的递增累积型缺陷时能够比传统随机变异策略有3倍以上的效率提升.
本节通过一个案例来说明引发最优值更新的差异数据有助于提升递增累积型缺陷的发现效率.
例1: Liblouis UTF解码时边界检查与操作顺序不当引发的越界访问缺陷CVE-2018-11683.
CVE-2018-11683的补丁
为了验证导致最值函数更新的种子增量的内容是否可复用, 将输出目录中ijon_max子目录中引起最值更新的相邻种子差异(radiff2 -O的输出)加入AFL的字典中(对应
CVE-2018-11683 初始种子构造时删除POC的字节数以及复现时间
初始种子通过删除POC上与缺陷有关的字节来构造, 删去POC上与缺陷相关的那个token (总长1328)偏移0x55a处的连续
得到的平均复现时间如
该案例表明, 检测或复现依赖输入数据规模递增的累积型缺陷时, 降低灰盒模糊测试变异频率, 复用引发缺陷特征值更新的增量数据片段有助于提高缺陷检测效率. 由于IJON不能有效地感知到待优化目标函数是否依赖于有效输入数据的规模, 导致其对递增累积型缺陷构造输入内容时较为盲目, 触发效率较低.
与临界值有关的缺陷, 如访问越界、内存耗尽和性能缺陷等, 可以转化为数值状态的最值问题. 如果该度量的粒度够细, 就可以监控最值更新确定有效的累积素材. 这些有价值的输入素材不仅可以应用于构造连续形式的累积输入, 对递归等复杂的累积输入格式内容的构造同样有效.
累积型缺陷时因为某个内部状态超过阈值引起的. 因此此该类问题通常可以转化为该数值特征的最优化问题. 该问题较适合在灰盒模糊测试框架下借助一定的反馈信息来求解. IJON[
在这种最优化模型下, 依赖输入规模固定的目标函数(例如, 依赖于个别整数字段), 输入中影响目标函数变化的字节比较集中, 同一个字节取值变更通常会引起目标函数值的多次更新; 而依赖输入规模递增的目标函数, 输入中目标函数变化的字节比较分散, 且大量字节的取值变化仅能影响到目标函数值的1次更新. 通过该特点可以区分目标函数对输入的依赖, 从而对不同类型特征值的优化问题分别采用不同的变异策略.
针对递增累积型特征值的优化问题, 本文根据其依赖的增量数据大都存在一定重复性的特点, 提取引起特征值更新的种子与更新前最值种子的差异内容, 并进行复用. 在后续种子的变异中, 提升插入以及替换这些复用内容的变异算子应用概率, 从而加速种子的进化, 提高优化效率.
本文假设可以提前获得累积型缺陷对应的特征值最优化函数表达式E (例如, 通过静态分析报告或者缺陷报告和补丁信息获得). 目标函数IJON_MAX(E)或IJON_MIN(E)两个最值原语公式来指派. 具体地, 最值原语的选取以及表达式E构造主要在待检测累积型缺陷相关的累积计算中, 主要根据累积计算中的状态累积方向确定最值函数.
例如, 对于访问越界缺陷, 最值表达式通常是潜在或已经在错误报告中确定的引发访问越界的指针或整数索引. 不断变大的指针或索引用IJON_MAX指派优化方向, 反之用IJON_MIN指派优化方向. 递归过深导致的栈内存耗尽型缺陷则通过为递归函数加入递归层次变量来构造E. 即, 构造静态整数变量, 在进入函数时自增, 退出函数时自减. 使用IJON_MAX指派其向层次更深的方向优化. 对于与循环或迭代次数有关的性能缺陷, 则引入多个计数变量进行衡量重复计算次数, 然后分别借助IJON_MAX指派其向更大值优化.
为了识别出目标函数依赖的输入驱动形式, 本文监控引发目标函数最值更新的有效变化的输入和频次. 每当目标函数最值更新时就通过文件比较识别出从之前的最值种子到新的最值种子的修改规则: (O, C1, C2). 其中O为修改位置, C1为被替换的内容, C2为替换后的内容. 通常C1和C2的字节长度相同. 在实现时本文借助二进制分析工具radare2提供的“radiff2 -O <file1> <file2>”命令来获取修改规则.
radiff2的输出修改规则
设发现了
(1) 固定累积型:
(2) 递增累积型:
(3) 未知: 其他.
其中,
在该模型下, 本文在训练集上根据对固定累积型和递增累积型特征值的识别准确率和识别时间对
递增累积型缺陷的特征值依赖于有效输入数据规模的增长. 带来规模差异的数据内容往往是一些特殊取值的数据片段, 其内容的修改至多仅影响一次状态特征值最值更新, 因此有效的变异位置不具备复用性. 但是, 增量输入的数据内容为相同类型的数据, 因此可以复用. 本文利用了目标函数最值更新的相关种子变化特征, 对比带来目标函数最值更新的新种子与父亲种子的差异来获得有效的变异内容, 从而应用到其他后代的变异中.
由于识别到的修改规则集合中可能包含与目标函数无关的冗余规则, 需要进一步进行清洗. 本文采用逐个恢复并验证目标函数值是否退化的方式来识别与目标函数相关的修改. 即以引发最值更新的种子为基础, 进行规则还原, 将固定偏移O开始的C2替换为C1. 如果修改后的种子所触发的目标函数值退化, 则说明该变异内容有效. 为了对变异内容进行精简, 本文在算法变异规则有效性判定的基础上进行了规则约简, 如算法1所示.
算法
输入: 规则
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
输出: 约简后的规则
在具体实现时, 最小化问题也可以通过取负值转化为最大化问题, 因此算法1中统一以最大值变化来判定变异有效性. 算法1接受输入规则
由于AFL默认Havoc阶段的变异策略在产生一个种子时会随机变异多次, 该次数平均值通常在10次以上. 对于递增累积型缺陷, 这很容易破坏已经形成的促进状态累积效应的大规模格式化数据. 因此本文在检测到递增累积型特征值后, 降低Havoc阶段的变异次数至1–4次, 从而避免破坏触发缺陷所需的已有格式化数据. 当检测到输入类型为递增累积型时禁用种子的约简操作(trim), 以促进数据累积. 特别地, 为了加速依赖重复数据的特征值优化, 在Havoc阶段贪心地使用克隆变异算子(13、14号), 以扩大特征值的平均增幅.
本文主要关注于如何识别累积型缺陷特征值的输入依赖类型, 以及构造变异方法提升累积型缺陷的检测效率. 为验证本文方法的有效性, 并保证实验时间可控, 选择错误复现应用场景对提出的方法进行评估. 本文的实验关注如下3个问题.
RQ1: 目标函数的输入依赖形式识别方法是否准确?
RQ2: 目标函数的依赖格式识别的性能以及对正常模糊测试的影响如何?
RQ3: 本文的变异策略对是否提升了累积型缺陷的检测效率?
本文主要关心的是加速递增累积型缺陷复现或定向测试. 为了验证本文提出的目标函数输入驱动形式识别方法的有效性. 本文构造了8个递增累积型缺陷和5个固定累积型缺陷构成的CVE-缺陷复现集(如
用于比较IJON使用和不使用Jigsaw的测试集
缺陷类型 | 缺陷标识 | 软件名 | 被测程序名 | 插入语句和位置 |
递增累积型 | CVE-2018-11683 | Liblouis | lou_checktable | IJON_MAX(out); |
compileTranslationTable.c:1157 | ||||
CVE-2018-11440 | Liblouis | lou_checktable | IJON_MAX(out); | |
compileTranslationTable.c:1140 | ||||
CVE-2018-12085 | Liblouis | lou_checktable | IJON_MAX(out); | |
compileTranslationTable.c:1130 | ||||
CVE-2018-20460 | Radare2 | rasm | IJON_MAX(operand); | |
armass64.c:739 | ||||
CVE-2017-9048 | Libxml2 | xmllint | IJON_MAX(strlen(buf)+xmlStrlen(content->name)); | |
(BUG 781333) valid.c:1271 | ||||
CVE-2018-17985 | Binutils | cxxfilt | IJON_MAX( |
|
cp-demangle.c:2565 | ||||
CVE-2019-6293 | Flex | Flex | IJON_MAX( |
|
nfa.c:351 | ||||
Wf-hash-collison | wf-0.41 | wf | ||
freq.c:103 | ||||
固定累积型 | CVE-2018-14550 | Libpng | pnm2png | IJON_MAX(i); |
pnm2png.c:546 | ||||
CVE-2017-7864 | Freetype2 | ftfuzzer | IJON_MAX(new_max); | |
f tgloadr.c:226 | ||||
CVE-2018-20552 | Tcpreplay | tcpprep | IJON_MAX(vlan_hdr->vlan_len); | |
get.c:183 | ||||
CVE-2018-4868 | Exiv2 | exiv2 | IJON_MAX(subBox.length) | |
jp2image.cpp:271 | ||||
Ngiflib-issue#3 | Ngiflib | SDLaffgif | IJON_MAX(2000000+(int)act_code-(int)free); | |
ngiflib.c:534 |
在实验评估中, 本文关心特征值依赖的判别方法是否高效、准确, 以及加入有针对性的变异策略后是否比原始随机变异方法效率更高. 为了保证验证结果的一般性, 本文在IJON这个通用的优化框架上进行评估. 在错误复现实验集合上, 以对比提出的变异策略与IJON用的传统随机变异策略(AFL的变异策略)对累积型缺陷的复现性能差异. 通过划分训练集和测试集, 验证基于有效变异位置数和频次的特征值依赖判别方法的准确性和效率. 本文在IJON的基础上实现了对累积型缺陷识别和变异策略, 下文用Jigsaw来指代本文实现的模糊测试器. 由于固定累积型缺陷的变异优化不是本文关心的主要问题, 用于实验评估的Jigsaw版本并未加入固定累积型的变异优化策略.
(1) 测试程序、参数训练集和测试集
待复现的目标缺陷有13个, 其中8个递增累积型缺陷5个固定累积型缺陷. 详细信息如
(2) 评估指标
为了进行性能比对, 采用多次实验的方式获得其某一性能指标(这里主要是首次复现时间)的数据. 对于每一个CVE缺陷根据20次重复实验中首次错误复现时间进行记录. 对同一个性能指标
(3) 实验环境和实验参数
Ubuntu 16.04 3 GB内存的虚拟机, 物理CPU AMD Ryzen 7 Pro 3700U. 实验均采用触发了目标IJON_MAX语句的初始种子. 在对比Jigsaw和AFL性能时插入的IJON_MAX语句相同, 使用的初始种子也相同. 对递增累积型缺陷, 以这种缺失了部分或全部缺失相关重复数据的输入作为初始种子. 其他固定累积型缺陷的初始种子是将POC上的目标字段修改为非缺陷值构造的. 为了保证评估实验在有限的时间内完成, 递增累积型缺陷的初始种子是从POC的基础上删去一定量相关数据构造的. 对阈值(宏)可调的缺陷, 调节软件中阈值设定来缩短复现时间.
对缺陷特征值依赖类型的检测结果和时间
缺陷类型 | 缺陷标识 | 特征值类型检测结果 | 检测时间 (s) |
递增累积型 | CVE-2018-11683 | 递增累积型 | 10 |
CVE-2018-11440 | 递增累积型 | 8 | |
CVE-2018-12085 | 递增累积型 | 9 | |
CVE-2018-20460 | 递增累积型 | 25 | |
CVE-2017-9048 | 递增累积型 | 36 | |
CVE-2018-17985 | 递增累积型 | 53 | |
CVE-2019-6293 | 递增累积型 | 27 | |
Wf-hash-collison | 递增累积型 | 17 | |
固定累积型 | CVE-2018-14550 | 固定累积型 | 21 |
CVE-2018-4868 | 固定累积型 | 52 | |
CVE-2017-7864 | 未知 | 124 | |
CVE-2018-20522 | 固定累积型 | 64 | |
Ngiflib-issue#3 | 固定累积型 | 1 |
Jigsaw和AFL的变异策略在固定累积型缺陷测试集上首次触发时间的统计对比
缺陷标识 | 模糊测试器 | 运行次数 | 加速倍数 | ||
CVE-2018-11683 | Jigsaw | 20 | 41 | - | - |
IJON | 20 | 182 | 6.12 | ||
CVE-2017-11440 | Jigsaw | 20 | 6 | - | - |
IJON | 20 | 27 | 4.50 | ||
CVE-2018-12085 | Jigsaw | 20 | 39 | - | - |
IJON | 20 | 179 | 4.59 | ||
CVE-2017-20460 | Jigsaw | 20 | 61 | - | - |
IJON | 20 | 282 | 4.62 | ||
CVE-2017-9048 | Jigsaw | 20 | 74 | - | - |
IJON | 20 | 365 | 4.93 | ||
CVE-2018-17985 | Jigsaw | 20 | 93 | - | - |
IJON | 20 | 383 | 3.39 | ||
CVE-2019-6293 | Jigsaw | 20 | 53 | - | - |
IJON | 20 | 603 | 11.38 |
Jigsaw和AFL的变异策略在固定累积型缺陷测试集上首次触发时间的统计对比
缺陷标识 | 模糊测试器 | 运行次数 | 加速倍数 | ||
CVE-2018-14550 | Jigsaw | 20 | 62 | - | - |
IJON | 20 | 63 | 0.98 | 0.50 | |
CVE-2018-11460 | Jigsaw | 20 | 103 | - | - |
IJON | 20 | 100 | 0.97 | 0.48 | |
CVE-2016-7864 | Jigsaw | 20 | 124 | - | - |
IJON | 20 | 125 | 1.01 | 0.50 | |
CVE-2016-20522 | Jigsaw | 20 | 331 | - | - |
IJON | 20 | 328 | 0.99 | 0.50 | |
Ngiflib-issue#3 | Jigsaw | 20 | 1 | - | - |
IJON | 20 | 1 | 1.00 | 0.50 |
本文为wf-0.41的addword函数(freq.c)增加了哈希冲突次数统计的静态变量, 并插入IJON_MAX原语通知IJON将该统计变量最大化(
wf-0.41程序freq.c中插入IJON_MAX原语的代码上下文
将超过不同阈值平均时间绘制如
wf-0.41词频统计程序中查找哈希冲突次数和平均触发时间
进一步分析发现, 对wf词频统计程序, 检测出不同单词的哈希冲突较为困难. 但是, 一旦已经检测到某个哈希冲突, 重复增加相关词汇可以线性增加词频统计中哈希冲突次数. Jigsaw在该案例上平均在17 s检测出目标函数取值是递增累积型, 说明平均情况下在此前已经发现存在哈希冲突的单词, 后续Jigsaw通过重复添加这些词汇使得查找冲突次数快速增加, 因此能够促进存放特征值的变量cnt更快地突破设定的阈值. 该实验说明了本文的方法对重复内容导致的性能缺陷的触发输入构造有明显的加速作用.
综上, 对RQ1, 本文提出的基于位置和频次的累积型缺陷依赖格式识别方法具有一般性. 对RQ2, 本文提出对累积计算的依赖格式识别大都能在1分钟内完成, 且对依赖特殊字段的固定累积型缺陷模糊测试性能影响并不明显. 对RQ3本文的差分变异方法确实提升了访问越界和内存耗尽缺陷中的递增累积型缺陷的复现效率, 当特征值依赖的输入依赖因素单一时, 相比随机测试有3倍以上的性能提升. 但是, 本文的方法对高复杂度的执行路径的检测并无帮助, 甚至可能产生性能降低等副作用.
缺陷特征导向的灰盒模糊测试通过刻画目标缺陷的相关特征, 改善种子度量和种子生成, 提高所关注缺陷的检测效率. 通过度量种子生成触发缺陷后代的潜力, 从而间接定位潜在缺陷, 捕获相关状态的优质种子; 通过调节种子生成(种子调度和变异)策略, 提高逼近潜在缺陷状态的优质后代的产生概率, 加速对潜在缺陷的验证. 种子度量影响定位潜在缺陷的全面性和准确性, 而种子生成策略决定潜在缺陷的验证效率. 二者都有助于提升目标缺陷检测效率.
现有研究主要利用缺陷相关的代码访问特征和状态演化特征度量种子优劣. 例如, 使用的内存读写功能越多, 越容易触发内存破坏相关的缺陷. TortoiseFuzz[
针对内存耗尽型缺陷的检测的模糊测试研究MemLock[
针对性能缺陷检测的模糊测试研究SlowFuzz[
上述研究并未对缺陷依赖的输入形式进行区分, 大都采用传统的随机变异策略, 导致对递增累积型缺陷检测较低. SlowFuzz虽然使用历史上的有效变异加速缺陷检测, 但是其仅关注于变异算子和变异位置, 缺乏对有效输入内容的分析, 对递增累积型缺陷所依赖输入内容的构造效率仍然较低. 本文按照依赖的输入组织形式对累积型缺陷进行区分, 并提出了针对规模递增累积型缺陷的识别和变异优化策略, 有针对性地提升了该类缺陷的检测效率.
一些识别输入内容和格式的灰盒模糊测试研究关注于提升代码覆盖率, 主要围绕深层次执行路径搜索以及苛刻的内容比较条件的求解开展. 由于研究问题不同, 它们无法直接应用于累积型缺陷的检测. 例如, VUzzer[
ProFuzzer[
现有的针对累积型缺陷如访问越界、内存耗尽和性能故障的定向灰盒模糊测试方法缺乏对最优化问题所依赖的输入格式的分类分析. 当缺陷依赖于有效输入数据规模时, 传统的随机变异策略的构造效率较低. 而现有的格式识别和有针对性的数据内容识别方法大都针对输入规模固定的数据格式, 缺乏对可变规模数据的识别和有效变异方法. 本文对依赖这两种形式的输入格式的累积计算进行了区分(递增累积型特征值和固定累积型特征值), 提出了一种基于有效变异位置和频次区分递增和固定累积型缺陷特征值的方法. 针对递增累积型缺陷检测, 本文提出了一种基于种子差分内容的变异策略. 在测评实验数据集上的实验结果表明我们的方法检测能够准确区分目标函数依赖的输入形式, 并显著提升了递增累积型缺陷的复现效率, 且对缺陷类型的判别开销并不影响固定累积型缺陷的复现.
邹燕燕, 邹维, 尹嘉伟, 霍玮, 杨梅芳, 孙丹丹, 史记. 变异策略感知的并行模糊测试研究. 信息安全学报, 2020, 5(5): 1–16. [doi: 10.19363/J.cnki.cn10-1380/tn.2020.09.01]
Zou YY, Zou W, Yin JW, Huo W, Yang MF, Sun DD, Shi J. Research on mutator strategy-aware parallel fuzzing. Journal of Cyber Security, 2020, 5(5): 1–16 (in Chinese with English Abstract). [doi: 10.19363/J.cnki.cn10-1380/tn.2020.09.01]
许朴, 舒辉, 于颖超. 程序敏感的模糊测试样本生成方法. 计算机工程与设计, 2020, 41(12): 3368–3375. [doi: 10.16208/j.issn1000-7024.2020.12.011]
Xu P, Shu H, Yu YC. Program sensitive method for generating fuzzing samples. Computer Engineering and Design, 2020, 41(12): 3368–3375 (in Chinese with English Abstract). [doi: 10.16208/j.issn1000-7024.2020.12.011]
Myers EW. An
Vargha A, Delaney HD. A critique and improvement of the
Mann HB, Whitney DR. On a test of whether one of two random variables is stochastically larger than the other. Annals of Mathematical Statistics, 1947, 18(1): 50–60. [doi: 10.1214/aoms/1177730491]