Page 210 - 《软件学报》2025年第10期
P. 210
郑炜 等: 基于抽象语法树变异的漏洞样本生成方法 4607
1.00 1.00
1.0 优化算法变异执行
随机变异执行
0.9 0.88
0.83 0.74
目标样本出现时的无效样本比例 0.7 0.39 0.61 0.67 0.47 0.46 0.61
0.8
0.6
0.5
0.4
0.3
0.2 0.34 0.31 0.19 0.22 0.19 0.29 0.24 0.33
0.15
0.1
usb mlxsw btrfs resctrl netsocket netdevsim Btrfs1 net ruc isdnhisax
图 10 两种变异方式的无效样本占比
基准数据为这两个来源的代码直接使用算法 2 所得的权重来执行的结果, 执行结果会展示每一组代码切片在
检测到对应目标漏洞样本切片首次出现时的累计样本量. 选择用样本数量来作为基准是因为不同代码切片数量差
异较大, 且部分切片并不受到子树截断算法的影响. 算法 2 在得到变异算子序列的最终权重后, 依然是随机选择算
子来执行, 所以即使重复执行两次也可能会得到不同的结果.
对比数据为子树截断算法介入变异执行过程后的结果. 截断算法会根据抽象语法树中的相关节点 Id 和节点
值进行匹配. 一旦在变异过程中出现新的样本不含有关键词, 则会标注该文件以终止其后续更高阶的变异.
图 11 所示 CWE 中 10 个关于 CUAF 漏洞代码经过部分子树截断算法与不经过该算法直接变异的对比结果.
CWE 漏洞代码切片较为简洁, 其中函数调用关系清晰且均含有 free 操作相关函数与函数调用语句. 因此, 在 CWE
代码集上进行同样的实验时, 对照数据与基准数据对比明显. 在 CWE 中 10 个关于 CUAF 漏洞代码切片中, 经过
部分子树截断启发式算法的变异平均会减少 30.1% 无效样本.
×10 4
9 不执行算法
执行剪裁算法
8
74 986 63 494 62 222 60 577 65 006 72 577 67 305 68 343
是否执行剪裁算法时样本规模 6 57 565 53 353 55 076 45 320 37 559 49 631 40 949 44 685 54 155 43 354
7
63 330
5
4
34 289
2 3
1
102291bad 240373bad 240387bad 240266bad 240398bad 240347bad 240357bad 240277bad 240291bad 240306bad
图 11 CWE 漏洞代码两种变异方式结果对比
实验的时间取决于代码片段与漏洞语句的行数之间的跨度. 因此, 排除比较时间后, 完成所有样本突变的平均
时间为 3.2 h. 与此同时, 作为基线的突变方法的平均完成时间为 4.9 h (这包括了对超过阈值的代码片段强制结束

