毕业设计-基于机器学习的软件漏洞挖掘方法

目录

前言

课题背景和意义

实现技术思路

一、基于机器学习的软件漏洞挖掘流程

二、代码的表征形式

实现效果图样例

最后


前言


    大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

基于机器学习的软件漏洞挖掘方法

课题背景和意义

软件复杂性的增加,给软件安全性带来极大的挑战.随着软件规模的不断增大以及漏洞形态多样化,传统漏洞挖掘方法由于存在高误报率和高漏报率的问题,已无法满足复杂软件的安全性分析需求.近年来,随着人工智能产业的兴起,大量机器学习方法被尝试用于解决软件漏洞挖掘问题。目前,对于软件漏洞的定义尚未形成广泛的共识,本文参照吴世忠等人对软件漏洞的定义,即软件漏洞是指在软件系统或产品的软件生命周期中,由于操作实体有意或无意的疏忽而产生的设计错误、编码缺陷、运行故障,它们以不同形式存在于软件系统的各个层次与环节之中.一旦被恶意主体利用,比如获得更高级别权限、泄露软件中用户隐私数据等,将危害软件系统安全,并可能影响构建于软件系统之上的服务的正常运行.由于安全漏洞具有隐蔽性和可利用性,因此软件提供方通常需要在软件生命周期的各个阶段,利用各种技术手段尽早发现软件漏洞,降低漏洞的可利用性,从而降低软件系统被恶意损害的风险。

实现技术思路

一、基于机器学习的软件漏洞挖掘流程

不同应用场景的机器学习训练和检测模型都具有相似的流程.具体应用于漏洞挖掘场景时,基于机器学习的软件漏洞挖掘工作流程如图 2 所示.

毕业设计-基于机器学习的软件漏洞挖掘方法_第1张图片

检测阶段中,首先将目标代码数据集按照同样的方法进行数据表征;接着,将表征得到的向量送入到由训练阶段得到的分类器模型,得到目标代码的分类或者预测结果;最后,结合测试标签集计算模型算法的精确率(precision)和召回率(recall)等,进行模型评估和调优.

二、代码的表征形式

向量表示是机器学习模型的实际输入,所以需要将源数据转换为能够表现漏洞特性的向量形式.由于需要保留源数据的语义信息(例如数据依赖和控制依赖),通常引入中间表示作为源数据与其对应的向量表示之间的“桥梁”

 本节将具体介绍每种表征形式,并阐述每种表征形式中具有代表性的研究工作,最后将本节所有提及的研究工作进行可视化汇总:

毕业设计-基于机器学习的软件漏洞挖掘方法_第2张图片

基于软件代码的度量

 代码度量是一组用于衡量软件质量的软件度量值,可供开发者确定项目的潜在风险、当前状态以及跟踪开发进度,也可以作为表示代码特性的度量指标,常用的代码度量指标有代码行数、圈复杂度、继承深度和类耦合等。

基于Token的表征
基于 Token 的表征形式通过对源代码进行词法分析得到,即:在编译过程中扫描源代码的字符流,依据程序语言的词法规则标记源代码的标识符、关键字、函数名和运算符等重要信。息,从而将源代码的字符流转换成等价 Token 序列,映射到向量空间作为机器学习模型的输入
基于深度神经网络的轻量级漏洞发现方法 LAVDNN.首先对每个函数提取其函数名,并将其分为脆弱函数数据集和良性函数数据集

毕业设计-基于机器学习的软件漏洞挖掘方法_第3张图片

实验结果表明,LAVDNN 作为一个轻量级辅助工具,可以帮助研究人员把分析重点放在脆弱概率较高的函数上,从而降低假阳性率。

由于实际编程中,函数的命名是一项主观性任务,当函数名倒过来也可能是相同的含义,因此该研究利用BLSTM 神经网络对函数进行分类,对每个函数的脆弱概率进行预测

毕业设计-基于机器学习的软件漏洞挖掘方法_第4张图片

基于抽象语法树的表征

抽象语法树(abstract syntax tree,简称 AST)是编译过程中的一种中间表示形式,树节点上存储的是代码的语法结构信息。
根据相似的代码片段其句法结构也相似这一特点,利用基于树的方法,将源代码片段解析成一棵抽象语法树,通过比对子树之间的相似性找到某个代码片段的相似代码片段集合。具体方法如图:

毕业设计-基于机器学习的软件漏洞挖掘方法_第5张图片

1)抽象语法树

抽象语法树(abstract syntax tree,AST),或语法树(syntaxtree)是源代码的拍象语法结构的一种树状表现形式。之所以说抽象语法树是抽象的,是因为抽象语法树只保留了程序源代码中的关键内容,而省略掉空格、注释、换行以及嵌套括号等一些对源代码语法真实细节的描述。比如,源代码中的“{”、“}”等符号就会被省略而不会以结点的形式表现出来。

如解析语句“(1+2)*3”后得到的抽象语法树如图所示。

毕业设计-基于机器学习的软件漏洞挖掘方法_第6张图片

 其对应的树形结构示意图如图: 

毕业设计-基于机器学习的软件漏洞挖掘方法_第7张图片

2)特征矢量法

特征矢量法是用一个多维矢单表示拍象语法树中每个结点的结构信息,每一维都表示源代码程序语言的某个基本成分在该代码片段中出现的个数。使用一个9维的特征向量表示c或 Java源代码。统计每个结点自身本身各个基本成分出现的次数后,通过后续遍历的方法可以每个结点的特征矢里值。
基干以上的探究与分析,对代码模块对应的抽象语法树中的每个结点计算其特征向量。图为语句“(1+2)*3”对应的抽象语法树结构中每个结点的特征向重示意图。

毕业设计-基于机器学习的软件漏洞挖掘方法_第8张图片

基于图的表征

图是一种比树更为抽象复杂的表示形式,图的顶点之间是多对多的关系,并且不具有树结构中明确的父子节点层次划分.因此,基于图的表征形式能够反映代码中更丰富的语法和语义特征,有很好的检测能力.

1)核方法

近期的研究进展突出了神经网络和核方法之间的关系。例如,Cho 和 Saul 构建了模仿神经网络的核方法.

深度图核(Deep graph kernels):是将图核与深度学习技术相结合的重要方法之一。结构袋方法存在子结构依赖、子结构稀疏和对角优势的问题。通过引入维度为 |S| × |S| 的半正定的编码矩阵 M 对子结构之间的关系进行编码来缓解这些问题,其中 |S| 为从训练数据中提取出的子结构字典的尺寸。这项工作是通过设计 M 来实现的,它考虑到了子结构空间的相似度

计算 M 的方式为:首先计算子结构之间关系的「编辑距离」,接着使用概率化的自然语言模型学习子结构的潜在表征。核的定义如下:

2)图神经网络

将基于图的神经网络(GNN)定义为一种连接遵循个g(v,e)结构的框架。图神经网络(GNN):这最早提出由图结构驱动的神经网络架构的方法之一。给定其邻居所包含的信息,每个顶点附有一个状态向量Xv,其中每个顶点包含顶点层次上的标签信息。

图门控序列神经网络和门控图变换网络:图门控序列神经网络(GGSNN)是一种 GNN 的变体,可以得到非序列输出。该模型的一个典型的示例是:输出逻辑公式。通过使用门控循环单元(GRU),GGSNN 展开了一个固定数目步骤的递归式。基于时间的反向传播算法(BPTT)被用来基于梯度。传播模型与 GNN 思路相当,每个顶点的表征都是遵循一种递归关系更新的。输出模型是针对每个顶点定义的可谓函数,它映射到一个输出上。

毕业设计-基于机器学习的软件漏洞挖掘方法_第9张图片

3)图嵌入方法

将图嵌入到一个低维空间中涉及到一系列技术,这些技术将输入图变换到其分别的向量表征中,并通过一个应设函数将它映射到空间中的一点。

各种各样的图嵌入技术已经被用于可视化、社区发现、无线设备定位、电网路由等任务中。图嵌入技术重点关注保持邻近性,从而使相同邻域中的顶点在欧氏空间中邻近。

实现效果图样例

对漏洞进行扫描利用:

毕业设计-基于机器学习的软件漏洞挖掘方法_第10张图片

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

你可能感兴趣的:(python毕设选题,机器学习毕业设计,深度学习,课程设计,深度学习,人工智能,python)