Page 212 - 《软件学报》2025年第10期
P. 212
郑炜 等: 基于抽象语法树变异的漏洞样本生成方法 4609
如 Go 语言在多线程漏洞触发上与 C/C++存在差异.
内部有效性与代码测试静态模糊变异相关. 通过分析 Linux 贡献者的提交记录, 研究涉及多个函数间的代码
接口. 然而, 正则匹配和人工观察在判断变异样本的有效性时确实存在一定的误差风险. 正则匹配可能无法覆盖所
有漏洞特征, 而人工观察则可能受到主观判断的影响. 为了减少这些误差, 我们在实验中引入了多重验证机制, 包
括交叉验证和重复实验, 以确保结果的可靠性. 尽管如此, 我们承认在实际应用中, 仍可能存在少量误报和漏报的
情况.
结构有效性涉及验证方法和确定的优化变异操作符序列. 尽管尝试在 Linux 代码的变异验证中再次引入算法
来优化变异操作符集合, 但由于真实漏洞代码片段的大小限制, 可能存在过度拟合的风险.
4 总 结
本文主要研究了通过抽象语法树变异来生成相关漏洞变异样本的方法. 首先, 对 4 种抽象语法树生成技术进
行了研究和分析, 发现它们的生成方式和结果不便于静态分析和变异操作. 然后, 重点研究了 Eclipse CDT 抽象语
法树生成技术, 并提出了一种针对其节点存储结构的优化算法, 可以提高变异效率. 本文根据 UAF 漏洞和 CUAF
漏洞之间的演化关系, 设计了 5 种符合漏洞特征的变异算子, 并将其与模糊测试中的 5 种普通变异算子组成变异
算子序列, 分别制定了不同的语法树变异方式, 并对每一种方式进行了算法实现. 本文提出了一种基于变异算子关
联度引导的次序变异方法 MOPSG, 通过调整变异算子执行的顺序和次数, 得到一个最优的变异算子权重序列来
执行变异操作. 通过实验验证了该算法的有效性, 并与传统的模糊变异测试方法进行对比测试, 结果表明通过优化
后的变异算子序列来进行变异, 得到的包含漏洞特征有效变异体样本效率更高. 最后, 本文使用部分子树截断算法
对基于 MOPSG 算法的变异策略进行了优化, 提高了变异效率.
References:
[1] Liu J, Su PR, Yang M, He L, Zhang Y, Zhu XY, Lin HM. Software and cyber security—A survey. Ruan Jian Xue Bao/Journal of Software,
2018, 29(1): 42–68 (in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5320.htm [doi: 10.13328/j.cnki.jos.005320]
[2] You W, Wang XQ, Ma SQ, Huang JJ, Zhang XY, Wang XF, Liang B. Profuzzer: On-the-fly input type probing for better zero-day
vulnerability discovery. In: Proc. of the 2019 IEEE Symp. on Security and Privacy (SP). San Francisco: IEEE, 2019. 769–786. [doi: 10.
1109/SP.2019.00057]
[3] Wen C, Wang HJ, Li YK, Qin SC, Liu Y, Xu ZW, Chen HX, Xie XF, Pu GG, Liu T. MemLock: Memory usage guided fuzzing. In: Proc.
of the 42nd Int’l Conf. on Software Engineering. Seoul: IEEE, 2020. 765–777. [doi: 10.1145/3377811.3380396]
[4] Wang HJ, Xie XF, Li Y, Wen C, Li YK, Liu Y, Qin SC, Chen HX, Sui YL. Typestate-guided fuzzer for discovering use-after-free
vulnerabilities. In: Proc. of the 42nd Int’l Conf. on Software Engineering. Seoul South: ACM, 2020. 999–1010. [doi: 10.1145/3377811.
3380386]
[5] Gan ST, Zhang C, Qin XJ, Tu XW, Li K, Pei ZY, Chen ZN. CollAFL: Path sensitive fuzzing. In: Proc. of the 2018 IEEE Symp. on
Security and Privacy (SP). San Francisco: IEEE, 2018. 679–696. [doi: 10.1109/SP.2018.00040]
[6] Li YK, Xue YX, Chen HX, Wu XH, Zhang C, Xie XF, Wang HJ, Liu Y. Cerebro: Context-aware adaptive fuzzing for effective
vulnerability detection. In: Proc. of the 27th ACM Joint Meeting on European Software Engineering Conf. and Symp. on the Foundations
of Software Engineering. Tallinn: ACM, 2019. 533–544. [doi: 10.1145/3338906.3338975]
[7] Liang HL, Wang L, Wu DY, Xu JY. MLSA: A static bugs analysis tool based on LLVM IR. In: Proc. of the 17th IEEE/ACIS Int’l Conf.
on Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing (SNPD). Shanghai: IEEE, 2016.
407–412. [doi: 10.1109/SNPD.2016.7515932]
[8] Cassez F, Sloane AM, Roberts M, Pigram M, Suvanpong P, de Aledo PG. Skink: Static analysis of programs in LLVM intermediate
representation: (Competition Contribution). In: Proc. of the 23rd Int’l Conf. on Tools and Algorithms for the Construction and Analysis of
Systems. Uppsala: Springer, 2017. 380–384. [doi: 10.1007/978-3-662-54580-5_27]
[9] Thomé J, Shar LK, Bianculli D, Briand L. Search-driven string constraint solving for vulnerability detection. In: Proc. of the 39th Int’l
Conf. on Software Engineering (ICSE). Buenos Aires: IEEE, 2017. 198–208. [doi: 10.1109/ICSE.2017.26]
[10] Shen WJ, Tang EY, Chen ZY, Chen X, Li B, Zhai J. Method for automated detection of suspicious vulnerability related to numerical
stability. Ruan Jian Xue Bao/Journal of Software, 2018, 29(5): 1230–1243 (in Chinese with English abstract). http://www.jos.org.cn/1000-
9825/5503.htm [doi: 10.13328/j.cnki.jos.005503]

