论文部分内容阅读
软件系统的数量和种类不断增多,而软件漏洞无法完全避免。软件漏洞的数量也逐年提升,及时检测出软件存在的缺陷以免被不法分子利用也变得越来越重要。大多数情况下,研究人员无法获取软件程序的源代码,只能获取对应的二进制程序文件。因此,研究二进制程序的漏洞检测具有重要的实际意义。目前应用较广、效果最好的二进制漏洞检测技术为模糊测试,但是模糊测试技术需要对程序进行多次运行,消耗资源多,效率低。近年来,随着大数据以及人工智能等技术的发展,基于传统机器学习方法的漏洞检测技术取得了一定的进展。本文基于相关工作,同时参考深度学习在文本分类上的研究成果,提出了一种利用深度学习技术进行二进制漏洞检测的方法。与此同时,本文设计构建了卷积神经网络模型、长短期记忆网络模型、双向长短期记忆网络模型和卷积神经网络—长短期记忆网络模型四个漏洞检测模型。为了测试深度学习漏洞检测模型的性能,利用了 VDiscover工具提取的数据,即32位Linux系统中的二进制程序运行过程中的函数调用序列及其最终运行状态,并以模糊测试工具zuff的测试结果作为标签,对深度学习漏洞检测模型进行训练。在实验中,本文首先通过使用word2vec方法将文本数据转化为高效的向量表示,有效提高了数据的稠密性和结构性。通过选择合适的网络结构和超参数,本文训练和优化了深度学习漏洞检测模型,并在测试数据集上进行了相关实验,来预测二进制程序模糊测试工具zuff的结果。实验结果表明,本文提出的深度学习漏洞检测模型的预测准确度最高可达92.28%。相比于传统的多层感知机模型,预测精度提高了 28.72%。在时间性能方面,模糊测试需要对每个测试用例进行上万次的运行,而基于深度学习的方法只需运行一次,预测效率也得到了较大提高。通过比较不同模型在测试集上的真正率、假正率和F值,可知卷积神经网络模型的F值最高。同时,本文也发现基于卷积神经网络漏洞检测模型的参数普遍要少,并且训练速度要显著快于基于长短时记忆网络的深度学习模型。通过对各个模型的最终性能比较可知,卷积神经网络模型在本文的漏洞检测任务中综合表现最好。