一种基于汇编语言与深度学习的漏洞定位方法技术

技术编号:35900883 阅读:21 留言:0更新日期:2022-12-10 10:36
本发明专利技术提出了一个基于汇编语言和深度学习的高精度漏洞定位方法,它可以实现漏洞检测的高检测能力和高定位精度。首先对C语言程序进行编译和反汇编,获得含有地址信息的汇编代码。然后,使用addr2line生成汇编代码和源代码行号之间的映射,并将汇编代码切成函数单元,得到代码块,将其编码为向量,作为神经网络模型的输入。最后,提出BILSTM

【技术实现步骤摘要】
一种基于汇编语言与深度学习的漏洞定位方法


[0001]本专利技术涉及网络安全领域,更详细地,为一种C语言源代码漏洞定位方法。

技术介绍

[0002]随着计算机技术的发展,网络安全已经成为互联网中一个不可避免的话题。漏洞属于网络安全中无法绕开的点,所谓漏洞指的是计算机应用或系统中的一些缺陷,一旦被黑客利用,会造成无法挽回的损失和后果。现如今随着开发的程序应用数量的增多,人们吃喝玩乐得到满足的同时,其背后可能隐藏着巨大的安全隐患。比如在软件开发的早期,工程师/开发人员由于源代码编写工作上的失误、疏忽、导致产生严重的漏洞,而该漏洞一旦被利用会造成巨大的经济损失,此时软件已经发布,如果重新发布软件则会消耗巨大的人力、物力。因此,为杜绝此类现象出现,在软件开发早期(即源代码的基础上)进行漏洞检测是十分重要的。据统计,2021年,美国国家漏洞数据库(National Vulnerability Database,NVD)总共公布了超过19537个漏洞。尽管有许多专家学者在努力研究并搜寻这些漏洞,但随着软件的需求和代码复杂度成倍增加,形势依旧不够乐观。因此,专利技术一个具有低漏报率,高定位精度的漏洞检测方法是十分有必要的。
[0003]目前主流的漏洞检测方法分为静态分析、动态分析和基于机器学习的漏洞检测。静态分析方法在分析代码的过程中不需要执行程序,但存在较高的漏报率。动态分析方法可以分为模糊测试和污点分析,在检测精度上有所提高相对于静态分析方法,但需消耗更多的资源,效率相对较低。为了解决上述问题,人们逐渐将机器学习(尤其是深度学习)运用到漏洞检测中,其自动学习漏洞特征的能力简化了漏洞检测过程,且大幅度提升了漏洞检测精度和速度。如Liu等人将代码编码为二进制文件,通过IDAPro提取二进制函数,然后利用双向长短时记忆模型来学习并预测漏洞。Li等人将源代码转换为最小中间表示,通过对生成的语料库的预训练,将中间表征转化为向量并送入三个卷积神经网络中学习脆弱性特征来进行漏洞分类。Laura等人通过Word2Vec模型将代码编码为向量,然后构建LSTM网络对易受攻击的token序列进行细粒度的分类,预测源代码中可能包含漏洞的特定区域。Li等人提出SySeVR,首先定义4种漏洞语法特征,并通过控制流和数据流生成与漏洞语句相关的代码切片,再使用BGRU模型来检测切片级别的漏洞。Yan等人提出了一种用于二进制软件漏洞检测的层次注意力网络HAN

BSVD,利用统一跳转地址和规范化指令的预处理器丰富上下文信息,然后用Bi

GRU和word attention模块组成的指令嵌入网络保存上下文信息,最后由Text

CNN和空间注意力模块组成的特征提取网络捕获局部特征。传统的漏洞检测方法依赖专家制定相应的漏洞规则,不仅耗时耗力,而且有较大的误差,且由于其专业性,存在较大的学习成本与使用难度,不利于扩大其使用范围,让其平民化。上述讨论的方法或多或少都存在一些致命的缺陷,如无法实现漏洞精准定位;拥有较高的漏报率与误报率;存在较高的学习成本不便于他人使用等。

技术实现思路

[0004]软件漏洞的自动检测是网络安全的一个重要课题。尽管目前提出的基于深度学习的方法在检测漏洞方面是有效的,但其准确性不够和无法准确定位漏洞的位置,导致在实际使用中受到很大限制,为了解决上述问题,本专利技术提出了一个基于汇编语言和深度学习的高精度漏洞定位方法。
[0005]本专利技术所采用的技术方案是:
[0006]一种基于汇编语言与深度学习的漏洞定位方法,主要包含以下步骤:
[0007]步骤A,编译源代码为目标代码,利用GDB反汇编目标代码,得到包含地址信息的汇编代码,并进一步得到包含源代码行号的汇编代码,然后获取目标代码中的所有可调试函数,以函数为单位对每一个完整的汇编代码切片,得到多个代码块,其中源代码包括所有的训练样本和测试样本;
[0008]步骤B,对代码块进行标记:查询训练样本数据集提供的描述文件,如果代码块中包含已知漏洞,将其标记为1,反之则将其标记为0;
[0009]步骤C,将训练样本代码块编码为向量并输入至搭建好的神经网络模型中训练,所述神经网络模型为BILSTM

LOC模型,该模型包括输入层、标准BILSTM层、和定位层;
[0010]步骤D,在测试阶段使用训练好的BILSTM

LOC模型进行测试样本的漏洞检测和定位。
[0011]进一步的,步骤A中得到包含源代码行号的汇编代码的具体实现方式如下;
[0012]步骤A1,编译,所有的源代码,即所有的训练样本和测试样本通过GCC编译为目标代码,筛选出所有编译成功的程序;
[0013]步骤A2,反汇编,使用GDB工具调试目标代码得到带有地址的汇编代码,同时利用Addr2line工具将地址转化为源代码的行号,从而得到包含源代码行号的汇编代码。
[0014]进一步的,步骤A中每一个代码块由两部分组成:汇编指令以及每一行汇编指令对应的源代码行号,每一行汇编指令由多个token组成。
[0015]进一步的,步骤C中BILSTM

LOC模型的具体结构如下;
[0016]步骤C1,输入层:在输入到神经网络模型之前,每一个被标记过的代码块被编码为向量,然后统一向量长度;设置输入到神经网络的向量长度为δ,其中δ为代码块的长度;如果向量长度小于δ,则在其末尾补0,如果向量长度大于δ,则从末尾裁剪长度大于δ的部分;每一个token被编码为长度为θ的向量并且每一个代码块被编码为长度为“δ
×
θ
×
β”的向量,其中,θ为每一个token编码后得到的向量长度,β表示每一行汇编指令的最大数目;
[0017]步骤C2,标准BILSTM层:经过编码得到固定长度的向量被输入到标准BILSTM层用于学习漏洞特征,标准BILSTM层由两个标准的BILSTM层、失活层、全连接层和激活层组成,其中失活层用于防止神经网络过拟合,而全连接层和激活层用于得到预测结果;
[0018]步骤C3,定位层:将输入的一个批次大小的代码块对应的BILSTM的输出表示为:
[0019]y=[γ1β2…
γ
μ
‑1γ
μ
]T
(1)
[0020]μ的取值范围为1≤μ≤batchsize,batchsize表示批次大小;γ
μ
表示为:
[0021][0022]指的是一个代码块中每一行汇编指令对应的输出,δ代表代码块的长度;为了让存在漏洞的节点受到更多关注,在BILSTM的输出上乘以01Matrix,表示为M,用于保留存
在漏洞的节点信息同时去除与漏洞无关的节点信息,M可以表示为:
[0023][0024]其中m
μ,δ
按照以下原则计算:已知代码块对应的源代码行号表示为集合Cb
μ
={l1,l2…
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于汇编语言与深度学习的漏洞定位方法,其特征在于,包含以下步骤:步骤A,编译源代码为目标代码,利用GDB反汇编目标代码,得到包含地址信息的汇编代码,并进一步得到包含源代码行号的汇编代码,然后获取目标代码中的所有可调试函数,以函数为单位对每一个完整的汇编代码切片,得到多个代码块,其中源代码包括所有的训练样本和测试样本;步骤B,对代码块进行标记:查询训练样本数据集提供的描述文件,如果代码块中包含已知漏洞,将其标记为1,反之则将其标记为0;步骤C,将训练样本代码块编码为向量并输入至搭建好的神经网络模型中训练,所述神经网络模型为BILSTM

LOC模型,该模型包括输入层、标准BILSTM层、和定位层;步骤D,在测试阶段使用训练好的BILSTM

LOC模型进行测试样本的漏洞检测和定位。2.根据权利要求1所述的一种基于汇编语言与深度学习的漏洞定位方法,其特征在于:步骤A中得到包含源代码行号的汇编代码的具体实现方式如下;步骤A1,编译,所有的源代码,即所有的训练样本和测试样本通过GCC编译为目标代码,筛选出所有编译成功的程序;步骤A2,反汇编,使用GDB工具调试目标代码得到带有地址的汇编代码,同时利用Addr2line工具将地址转化为源代码的行号,从而得到包含源代码行号的汇编代码。3.根据权利要求1所述的一种基于汇编语言与深度学习的漏洞定位方法,其特征在于:步骤A中每一个代码块由两部分组成:汇编指令以及每一行汇编指令对应的源代码行号,每一行汇编指令由多个token组成。4.根据权利要求3所述的一种基于汇编语言与深度学习的漏洞定位方法,其特征在于:步骤C中BILSTM

LOC模型的具体结构如下;步骤C1,输入层:在输入到神经网络模型之前,每一个被标记过的代码块被编码为向量,然后统一向量长度;设置输入到神经网络的向量长度为δ,其中δ为代码块的长度;如果向量长度小于δ,则在其末尾补0,如果向量长度大于δ,则从末尾裁剪长度大于δ的部分;每一个token被编码为长度为θ的向量并且每一个代码块被编码为长度为“δ
×
θ
×
β”的向量,其中,θ为每一个token编码后得到的向量长度,β表示每一行汇编指令的最大数目;步骤C2,标准BILSTM层:经过编码得到固定长度的向量被输入到标准BILSTM层用于学习漏洞特征,标准BILSTM层由两个标准的BILSTM层、失活层、全连接层和激活层组成,其中失活层用于防止神经网络过拟合,而全连接层和激活层用于得到预测结果;步骤C3,定位层:将输入的一个批次大小的代码块对应的BILSTM的输出...

【专利技术属性】
技术研发人员:彭涛吕星航曹文丽胡新荣何儒汉汤俊伟刘军平张自力
申请(专利权)人:武汉纺织大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1