首页 > 编程知识 正文

探索性实验报告,渗透检测技术论文

时间:2023-05-04 23:58:22 阅读:16391 作者:3687

一.摘要首先从源代码中提取方法主体,建立方法集; 为方法集中的每个方法构建抽象语法树,通过抽象语法树提取方法中的语句,形成语句集; 替换语句集中程序员自定义的变量名称、方法名称和字符串,并为每个语句分配独立的节点号,从而形成节点集。 接着,使用数据流和控制流分析提取节点之间的数据依赖和控制依赖关系。 然后,将从方法主体提取出的节点集合、节点间的数据依赖关系以及控制依赖关系组合为方法对应的特征表示,使用one-hot码进一步作为特征矩阵进行处理。 最后,贴上各矩阵是否存在漏洞的标签生成训练样本,利用神经网络训练相应的漏洞分类模型。 为了更好地了解序列的上下文信息,可以选择BiLSTM神经网络,并在其上添加附加层,以进一步提高模型的性能。 脆弱性检测结果的准确率和召回率分别达到95.3%和93.5%。

二.结合主要贡献抽象语法树分析、数据流分析和控制流分析技术,提出了融合代码结构、数据依赖和控制依赖信息的源代码特征提取方法。 结合深度神经网络技术和程序静态分析技术,提出了一种基于BiLSTM模型的漏洞检测方法。 三.方法介绍

整体架构

从源代码中提取方法体,创建方法集; 为方法集中的每个方法构建抽象语法树,通过抽象语法树提取方法中的语句,形成语句集; 替换语句集中程序员自定义的变量名称、方法名称和字符串,并为每个语句分配独立的节点号,从而形成节点集。 接着,使用数据流和控制流分析提取节点之间的数据依赖和控制依赖关系。 然后,将从方法主体提取出的节点集合、节点间的数据依赖关系以及控制依赖关系组合为方法对应的特征表示,使用one-hot码进一步作为特征矩阵进行处理。 最后,贴上各矩阵是否存在漏洞的标签生成训练样本,增设Attention机制支持BiLSTM神经网络训练,建立更好的漏洞分类模型。

生成节点集

根据抽象语法树中的节点类型,筛选用户自定义的变量名称、方法名称和字符串,并统一替换它们以在将文本表示转换为向量时压缩词汇表的大小。 例如,即使是同一bool类型的变量,数以万计的程序员也可能生成成千上万的变量名称,其中程序员a为isTrue,程序员b为isRight,程序员c为exist。 将这些自定义变量名称统一替换为cid等某个标识符,可以有效减少词汇量,在将token展开为one-hot向量时可以降低向量。同一法律体系中的不同变量用cid_1和cid_2进行区分最后,将每个处理的语句视为方法的节点,并分配独立的节点编号。

缓冲区漏洞示例源:

生成语句集:

生成节点集:

生成特征矩阵

以分号为分隔,将节点集、节点间的数据依存关系、节点间的控制依存关系的所有语句组合而成的文本是与方法主体对应的特征表示。 通过使用空格作为分隔符对文本进行分词处理,可以将每个方法的特征表示形式转换为单个token序列。 token序列固定长度400 (长度超过400的约占总数量的1.77%,可以忽略舍弃这一小部分样品对实验结果的影响)。 使用one-hot码将代码token映射到向量空间,得到特征矩阵。 为了防止特征矩阵的向量维太大、信息太稀疏不利于学习,引入嵌入式层压缩原始向量。 四.实验结果

实验结果表明,该方法的准确率和召回率最高可达95.3%和93.5%,召回率比VulDeePecker高11个百分点。 VulDeePecker在数据预处理时,主要提取源代码中的API和库方法调用,生成代码门。 但是,该过程只对API和库方法调用提取,丢失了一些代码信息,在召回率方面稍差。

与AEGKNN相比,本方法在精度和召回率方面分别高出约2和6个百分点。 将AEGKNN提取方法的API序列量化为特征向量后,对特征向量进行聚类,每类提取异常值排序高的样本函数与漏洞库匹配。 因此,该方法的表达很大程度上依赖于其建立的漏洞库,没有完全释放人力。 相比之下,本方法不需要领域专家的参与,可以自动从漏洞样本中提取隐式漏洞模式,省时省力,具有很好的可扩展性。

五.为了检测软件中隐藏的大量漏洞,本文将代码语句之间的数据流和控制流依赖抽象为一个特征表示,并利用基于Attention的BiLSTM神经网络学习和训练了相应的漏洞分类模型。 实验在CWE-120、CWE-121和CWE-122三种漏洞小数据集上获得了95.3%的准确率和93.5%的召回率,优于现有的基于机器学习的漏洞检测方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。