摘要:近年来, 基于深度学习的漏洞检测模型展示了令人印象深刻的漏洞检测能力. 通过对源代码的变量重命名实现扰动从而逃逸漏洞检测模型的对抗攻击已被广泛研究, 然而, 能否通过对源代码进行更多的扰动以提升对漏洞检测模型对抗攻击的效果并未被充分调研. 采用针对源代码的多种同义转换算子对其进行扰动, 并提出一种基于遗传算法的组合优化策略, 选择一组适应度最高的源代码同义转换算子, 以指导生成可以逃脱漏洞检测的对抗代码段. 在一个名为NonVulGen (无漏洞代码生成器, non vulnerability generator)的框架中实现了上述方法, 采用生成的对抗代码段对基于深度学习的漏洞检测模型进行评估. 考虑了最新提出的多种深度学习漏洞检测模型, 在攻击基于CodeBERT的漏洞检测模型时所提方法可以实现91.38%的平均攻击成功率, 在攻击基于GraphCodeBERT的漏洞检测模型时可以实现93.65%的平均攻击成功率, 以上结果相较于最先进的基线模型平均提升了28.94%和15.52%. 为了检验所提攻击方法的泛化能力, 攻击Devign、ReGVD和LineVul等常见漏洞检测模型, 平均攻击成功率分别为98.88%、97.85%和92.57%. 实验结果表明, 基于深度学习的漏洞检测模型无法有效区分由NonVulGen生成的对抗代码段. 进一步地, 基于训练数据生成的对抗代码段重训练漏洞检测模型, 在CodeBERT, GraphCodeBERT, Devign, ReGVD以及LineVul模型上攻击成功率均大幅度下降, 分别下降96.83%, 97.12%, 98.79%, 98.57%, 以及97.94%. 因此, 研究揭示基于深度学习漏洞检测模型存在亟待关注的对抗攻击问题并呼吁在发布漏洞检测模型之前做好模型加固工作.