基于AI智能的软件漏洞检测的安全研究


网站漏洞检测是软件工程中的一个重要课题。为了提高漏洞检测的有效性和效率,提出了许

多基于机器学习和深度学习的传统漏洞检测方法。然而,不同因素对漏洞检测的影响是未知

的。比如分类模型和矢量化方法会直接影响检测结果,代码替换会影响漏洞检测的特性。我

们进行了比较研究,以评估不同分类算法、矢量化方法以及用户定义变量和函数名替换的影

响。在本文中,我们收集了三个不同的漏洞代码数据集。这些数据集对应于不同类型的漏洞

,并且具有不同比例的源代码。此外,我们提取并分析了漏洞代码数据集的特征来解释一些

实验结果。从实验结果来看,我们的发现可以总结如下。(1)深度学习的性能优于传统的机器

学习,BLSTM可以达到最好的性能。

 
 
(2)countvectorzer可以提高传统机器学习的性能。(3)不同的漏洞类型和不同的代码来源会产

生不同的特征。我们使用随机森林算法来生成漏洞代码数据集的特征。这些生成的特性包括

系统相关函数、语法关键字和用户定义的名称。(4)没有用户自定义变量和函数名替换的数据

集会获得更好的漏洞检测结果。
 
 
软件安全一直是软件工程领域的重要组成部分。许多网络攻击根源于软件漏洞,造成了巨大

的损失。尽管已经提出了许多检测软件漏洞的方法,但在常见漏洞和暴露(CVE)中报告的漏洞

数量仍在增加。看来人类专家和项目管理技术的作用是有限的。它促进了结合机器学习的代

码分析技术的发展。
 
 
代码分析技术主要有两种类型:动态代码分析和静态代码分析。动态代码分析需要实时监控各

种指标。因此,很难使用机器学习算法来提高分析效率。动态分析工具更多用于性能测试和

功能测试。可是,静态分析工具如Clang、Caqqheck和Flawessender通常用于检测潜在的漏

洞。然而,现有的漏洞检测方案会产生较高的误报率。因此,现有的漏洞检测研究大多基于

静态代码分析和机器学习(即传统的机器学习或深度学习)的结合。静态代码分析和漏洞检测有

两个不同的层次:功能层和代码层。在功能层面进行分析时,Tommy等人关注的是文件依赖

性和项目复杂性。在代码层面进行分析时,注意代码中的变量和逻辑。经验表明,与功能级

分析相比,代码级分析具有更细的检查粒度和更好的漏洞检测效果。
 
 
Zhen等人提出了一种漏洞检测工具VulDikyPaulcker。VulDikyPaulcker包括一组基于数据流

的处理程序,用于生成代码小工具。Codegadget是一种代码片,包含了几乎所有的函数调

用、变量和少量的噪声。它保留了源代码的信息。所以问题从如何分析代码变成了如何更好

的对代码进行预处理。在VulDikyPaulcker中,在训练深度学习模型的数据之前,需要执行两

个步骤。第一步是替换用户定义的变量和函数。在这一步中,用户定义的变量和函数的名称

将被替换为通用名称。第二步是矢量化。VulDikyPaulcker使用Word2vec工具将行转换为向

量。然后VulDikyPaulcker使用双向长短期记忆(BLSTM)神经网络训练分类模型。因此,有四

个要点值得研究:
分享: