摘要

近年来,软件漏洞引发的安全事件层出不穷,及早发现并修补漏洞能够有效降低损失。传统的基于规则的漏洞检测方法依赖于专家定义规则,存在较高的漏报率,基于深度学习的方法能够自动学习漏洞程序的潜在特征,然而随着软件复杂程度的提升,该类方法在面对真实软件时存在精度下降的问题。一方面,现有方法执行漏洞检测时大多在函数级工作,无法处理跨函数的漏洞样例;另一方面,BGRU和BLSTM等模型在输入序列过长时性能下降,不善于捕捉程序语句间的长期依赖关系。针对上述问题,优化了现有的程序切片方法,结合过程内和过程间切片对跨函数的漏洞进行全面的上下文分析以捕获漏洞触发的完整因果关系;应用了包含多头注意力机制的Transformer神经网络模型执行漏洞检测任务,共同关注来自不同表示子空间的信息来提取节点的深层特征,相较于循环神经网络解决了信息衰减的问题,能够更有效地学习源程序的语法和语义信息。实验结果表明,该方法在真实软件数据集上的F1分数达到了73.4%,相较于对比方法提升了13.6%~40.8%,并成功检测出多个开源软件漏洞,证明了其有效性与实用性。