最近在研究图算法在漏洞检测中的应用,于是看到了这篇文章,就顺手总结了一下!
DeepWukong: Statically Detecting Software Vulnerabilities using Deep Graph Neural Network
这篇论文介绍了一种新的静态检测软件漏洞的方法——DeepWukong。传统的静态分析方法只能检测一些已知的内存错误,而现代软件系统中存在各种复杂的漏洞。因此,开发精确且高效的静态分析解决方案是非常困难和费力的。DeepWukong利用先进的图神经网络技术将代码片段嵌入到紧凑、低维的表示中,并产生一种新的代码表示方式,保留了高级编程逻辑(如控制流和数据流)以及程序的自然语言信息。作者在实验中使用了105,428个真实世界的程序,与四种传统静态漏洞探测器和三种最先进的基于深度学习的方法进行了比较。结果表明,DeepWukong比其他方法更有效,为结合程序分析和深度学习技术解决静态代码分析挑战提供了有希望的方向。
- 方法概述:该论文提出了一种基于程序依赖关系图和代码符号化嵌入的漏洞预测方法。首先通过程序依赖关系图(Program Dependence Graph)获取控制和数据依赖信息,并利用割集算法提取子程序;然后将每个节点视为一个程序点,使用系统API调用、算术运算等作为程序点的候选集合;接着通过深度学习模型对这些候选集合进行分类,以识别潜在的漏洞。 具体来说,该方法分为三个步骤:程序片断选取、代码符号化与嵌入以及漏洞预测。在第一步中,通过对程序依赖关系图进行割集算法处理,得到程序中的所有可能子程序,然后将每个子程序看作一个节点,并将其加入到程序片断选取阶段的候选集合中。在第二步中,对于每个节点,先对其进行符号化,即将其变量名和函数名替换为统一的标识符,再通过Doc2Vec模型将其转换为向量表示。最后,在第三步中,将每个节点的向量表示输入到深度学习模型中,用于漏洞预测。
- 方法改进:相比于传统的静态源码分析方法,该方法采用了程序依赖关系图来获取更准确的控制和数据依赖信息,从而提高了漏洞检测的准确性。此外,该方法还引入了深度学习模型来进行漏洞预测,能够自动学习特征并提高预测性能。
- 解决问题:该方法主要解决了传统静态源码分析方法中存在的控制和数据依赖信息不准确、特征工程繁琐等问题,能够在一定程度上提高漏洞检测的准确性和效率。同时,该方法也具有一定的局限性,例如需要大量的训练数据和计算资源,且无法处理动态执行过程中的漏洞。
- 实验:本文主要介绍了深度学习方法DEEPWUKoNG在检测软件漏洞方面的实验结果,并与其他传统静态分析工具和现有深度学习方法进行了比较。具体来说,该研究使用了基于XFG的图神经网络模型对软件代码中的漏洞进行检测,并对其性能进行了评估。实验结果表明,DEEPWUKoNG在各种类型的漏洞检测中都表现出了非常良好的效果,准确率高达97.4%,F1 Score达到95.6%。此外,该研究还与四种传统的静态分析工具进行了比较,发现这些工具难以检测复杂的高阶软件漏洞,而DEEPWUKoNG则能够有效地捕捉到漏洞特征并进行检测。最后,该研究还将DEEPWUKoNG与现有的三种深度学习方法进行了比较,结果表明DEEPWUKoNG的表现优于其他方法。具体来说,在RQ1中,作者对不同类型的漏洞进行了检测,并发现在各种类型的漏洞检测中,DEEPWUKoNG都能够表现出很好的效果,并且相对于其他深度学习方法具有更好的性能。在RQ2中,作者将DEEPWUKoNG与四个传统的静态分析工具进行了比较,并发现这些工具难以检测复杂的高阶软件漏洞,而DEEPWUKoNG则能够有效地捕捉到漏洞特征并进行检测。在RQ3中,作者将DEEPWUKoNG与现有的三种深度学习方法进行了比较,并发现DEEPWUKoNG的表现优于其他方法。总的来说,该研究证明了DEEPWUKoNG是一种有效的软件漏洞检测方法,可以为软件安全提供有力的支持。
- 最终他们将其代码开源在github上,供大家学习参考;
- 该项目的环境搭建上有些困难,希望广大网友有成功搭建的可以与我联系!!!