CN110222512B - 一种基于中间语言的软件漏洞智能检测与定位方法与系统 - Google Patents

一种基于中间语言的软件漏洞智能检测与定位方法与系统 Download PDF

Info

Publication number
CN110222512B
CN110222512B CN201910423893.3A CN201910423893A CN110222512B CN 110222512 B CN110222512 B CN 110222512B CN 201910423893 A CN201910423893 A CN 201910423893A CN 110222512 B CN110222512 B CN 110222512B
Authority
CN
China
Prior art keywords
intermediate language
vulnerability
slice
program
neural network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910423893.3A
Other languages
English (en)
Other versions
CN110222512A (zh
Inventor
邹德清
朱亚威
李珍
金海�
李道祥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Shenzhen Huazhong University of Science and Technology Research Institute
Original Assignee
Huazhong University of Science and Technology
Shenzhen Huazhong University of Science and Technology Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology, Shenzhen Huazhong University of Science and Technology Research Institute filed Critical Huazhong University of Science and Technology
Priority to CN201910423893.3A priority Critical patent/CN110222512B/zh
Publication of CN110222512A publication Critical patent/CN110222512A/zh
Application granted granted Critical
Publication of CN110222512B publication Critical patent/CN110222512B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于中间语言的软件漏洞智能检测与定位方法与系统,属于漏洞检测领域。包括:分别将训练程序源码和目标源码转化为中间语言程序切片,其包含与可疑漏洞元素相关的代码;若训练程序源码对应的中间语言程序切片包含已知漏洞代码,为其添加“有漏洞”标签并记录其在切片中的位置;否则,为其添加“无漏洞”标签;训练基于样本差异性的循环神经网络;使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位。本发明使用中间语言切片作为漏洞检测的单位,提高检测准确率。循环神经网络的输出序列中只选取已知漏洞行对应数据参与正向传播,从而使训练好的模型能够识别出漏洞行。

Description

一种基于中间语言的软件漏洞智能检测与定位方法与系统
技术领域
本发明属于漏洞检测领域,更具体地,涉及一种基于中间语言的软件漏洞智能检测与定位方法与系统。
背景技术
软件漏洞是网络安全的罪魁祸首,然而尽管人们使用各种手段消除漏洞,从公共漏洞与暴露库(Common Vulnerabilities and Exposures,CVE)的报告来看仍然有大量的漏洞存在。检测漏洞并及时为它们打上补丁是消除漏洞的关键手段,理想情况下漏洞检测工具应当能够具备高准确率、低漏报率、低误报率,并且能够精确判定漏洞位置,但现有的漏洞检测工具无法达到令人满意的效果。静态漏洞检测由于具有检测速度快、较全面地考虑执行路径的信息等优点,被代码审计人员广泛用来发现软件源码中潜在的漏洞。
漏洞检测方法中较流行的静态检测方法大致可分为四类:一是基于代码相似度的方法,能够检测由于代码克隆导致的漏洞,但难以发现由于其他原因导致的漏洞且无法获悉漏洞的位置;二是基于符号执行的方法,通过结合符号执行和约束求解检测漏洞,但不适用于处理大规模软件,也无法精确定位漏洞;三是基于规则的方法,例如现有的软件工具Checkmarx、ITS4等均使用专家知识来定义用于漏洞检测的规则,可以报告出检测为漏洞的代码,但碍于人工处理很难将各类漏洞的特征考虑全面,这些漏洞检测工具通常具有较高的误报率或漏报率,因此漏洞定位能力并不理想;四是基于机器学习的方法,传统机器学习依赖于专家定义刻画漏洞的特征来检测漏洞的方法,易出错、耗费大量人力且难以确定漏洞的位置,应用神经网络的方法能够减少漏洞分析者定义的漏洞特征工作,但现有的基于神经网络的方法在文件级、构件级、函数级、切片级等较粗粒度进行漏洞检测,仍然需要耗费人力来分析确定更精准的漏洞位置。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有技术漏洞检测漏报率和误报率高、且无法实现对漏洞的定位的技术问题。
为实现上述目的,第一方面,本发明实施例提供了一种基于中间语言的软件漏洞智能检测与定位方法,该方法包括以下步骤:
S1.分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码;
S2.若训练程序源码对应的中间语言程序切片包含已知漏洞代码,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签;
S3.基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络;
S4.使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位。
具体地,步骤S1包括以下子步骤:
S101.根据语法特征,从程序源码中提取可疑漏洞元素;
S102.根据所述可疑漏洞元素,从程序源码编译得到的中间语言文件中提取与所述可疑漏洞元素对应的中间语言程序切片;
S103.根据函数执行顺序调整中间语言程序切片中的代码顺序。
具体地,可疑漏洞元素是指API调用类型元素和指针类型元素。
具体地,所述依赖关系包括控制依赖关系和数据依赖关系。
具体地,步骤S3包括以下子步骤:S301.对各中间语言程序切片进行预处理,将单词序列编码为向量;S302.将该向量输入循环神经网络,读取该循环神经网络顶层输出序列;S303.基于该向量的标签类型和漏洞位置,生成掩码对角矩阵;S304.掩码对角矩阵和顶层输出序列相乘,得到基于样本差异性的循环神经网络的输出序列,输出序列中预设数量的最大值的均值即为预测结果。
具体地,所述预处理包括:将中间语言程序切片分词并除去非ASCII字符;将每个用户自定义变量名、自定义函数名分别映射为变量符号名称和函数符号名称。
具体地,所述基于该向量的标签类型和漏洞位置,生成掩码对角矩阵,具体如下:对于有漏洞切片而言,掩码对角矩阵Mn*n在对应漏洞行位置的对角元素λm为1,其他元素为0;对于无漏洞切片而言,掩码对角矩阵Mn*n为单位矩阵,n为切片的长度。
具体地,步骤S4具体为:将目标源码对应的中间语言程序切片预处理后转成向量,输入训练好的基于样本差异性的循环神经网络,得到循环神经网络顶层的输出序列之后,对序列中的各个维度的值按照其对应的切片语句行进行划分,再从每一行对应的数值集合中提取限定数目的最大值后取平均,若该平均值超出阈值,则判定该行为漏洞行,否则判定为非漏洞行。
第二方面,本发明实施例提供了一种基于中间语言的软件漏洞智能检测与定位系统,包括:
中间语言程序切片提取模块,用于分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码;
标记模块,用于在训练程序源码对应的中间语言程序切片包含已知漏洞代码时,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签;
训练模块,用于基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络;
检测模块,用于使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位。
第三方面,本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面所述的基于中间语言的软件漏洞智能检测与定位方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
1.本发明通过将源码程序编译为中间语言文件后,提取可疑漏洞元素对应的中间语言程序切片作为漏洞检测的基本单位,从大量中间语言切片中学习潜在的漏洞特征,相对源代码,经过编译后的中间语言具有更清晰明确的结构,从而提高漏洞检测的准确程度,同时支持转为中间语言的C、C++、Object-C等多种程序语言,具有高可扩展性。
2.本发明利用基于样本差异性的循环神经网络模型自动学习漏洞特征,引入了样本差异性机制,在训练阶段限制循环神经网络的序列输出,即在该序列中根据样本标签和漏洞位置选取对应数据参与正向传播,在模型测试阶段读取循环神经网络的序列输出,并以滑动窗口扫描的形式根据序列输出对应的数值判定样本中可能触发漏洞的代码行,从而能够在行一级确定漏洞的细粒度位置,且不依赖于人工定义的特征。
附图说明
图1为本发明实施例提供的一种基于中间语言的软件漏洞智能检测与定位方法流程图;
图2为本发明实施例提供的源码转化为向量的过程示意图;
图3为本发明实施例提供的基于样本差异性的循环神经网络结构示意图;
图4为本发明实施例提供的一种基于中间语言的软件漏洞智能检测与定位系统结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明提供一种基于中间语言的软件漏洞智能检测与定位方法,该方法包括以下步骤:
S1.分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码;
S2.若训练程序源码对应的中间语言程序切片包含已知漏洞代码,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签;
S3.基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络;
S4.使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位。
步骤S1.分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码。
S101.根据语法特征,从程序源码中提取可疑漏洞元素。
根据程序源码生成抽象语法树,从该抽象语法树中提取可能和漏洞相关的元素。具体地,使用clang生成程序源码的抽象语法树,从抽象语法树中选取可能和漏洞有关的元素。由于API调用和指针这两种类型的元素与漏洞关联较大,如图2所示,可以选择源代码的库API调用memset、指针data等作为可疑漏洞元素。
S102.根据所述可疑漏洞元素,从程序源码编译得到的中间语言文件中提取与所述可疑漏洞元素对应的中间语言程序切片。
将源码程序编译产生中间语言文件,例如,LLVM位码文件(Low Level VirtualMachine,底层虚拟机)。根据文件间依赖关系对位码文件进行链接,从链接完成的LLVM位码文件中计算控制依赖和数据依赖生成程序依赖图,再对每个可疑漏洞元素根据依赖图进行切片。如图2所示,根据库API调用memset得到LLVM中间语言程序切片。所述中间语言程序切片是与该可疑漏洞元素之间存在依赖关系的程序语句集合,例如,受可疑漏洞元素数据流影响的程序语句和能够影响可疑漏洞元素数据流的程序语句。
S103.根据函数执行顺序调整中间语言程序切片中的代码顺序。
编译得到的中间语言文件中的语句并非按真正的程序执行顺序排列,因此,需要对于切片中的程序语句按照函数间调用顺序进行语句位置调整,从而使中间语言文件代码切片中的程序代码顺序与程序执行顺序保持一致。如图2所示,对得到的中间语言程序切片中的printLine函数代码按照程序执行顺序进行调整,将该函数的代码放在调用该函数的代码之后。
中间语言相对源代码,具有更清晰明确的结构和对宏定义等语句,从而提高漏洞检测的准确程度。
步骤S2.若训练程序源码对应的中间语言程序切片包含已知漏洞代码,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签。
给每个训练程序源码对应的中间语言程序切片添加标签,具体地:若中间语言程序切片中包含已知的漏洞代码源码转成的中间语言,则对该中间语言程序切片添加有漏洞标签并记录切片中漏洞代码所在行的行号,否则对该中间语言程序切片添加无漏洞标签。
如图2所示,“memmove(data,source,100*sizeof(char));”为已知的漏洞代码,其转成的中间语言为“call void@llvm.memset.p0i8.i64(i8*%7,i8 65,i64 99,i32 1,i1false)”,故对该包含该中间语言的中间语言程序切片添加有漏洞标签“1”,同时记录漏洞行在切片中的位置是第31行(行号)。
步骤S3.基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络。
S301.对各中间语言程序切片进行预处理,将单词序列编码为向量。
利用词法分析将程序中间语言切片分词为单词序列,将单词序列中的每一个词转换为对应向量,编码方式可以是word2vec、doc2vec、one-hot方法中的任意一种。
由于非ASCII字符有可能对分类效果产生影响,优选地,本发明从中间语言程序切片中除去非ASCII字符。为了排除函数名和变量名对结果的干扰,即减少和漏洞无关的信息,优选地,本发明将每个用户自定义变量名、自定义函数名分别映射为变量符号名称和函数符号名称,并通过对中间语言切片进行词法分析将切片转化为单词序列。将每个程序切片用户自定义变量名或函数名进行映射,具体地,映射每个用户自定义变量名为变量符号名称(如“vairable_0”,“variable_1”),映射每个用户自定义函数名为函数符号名称(如“function_0”,“function_1”)。
如图2所示,将切片中的函数名“main”映射为“function_0”,并分词得到单词序列“′define′,′i32′,′function_0()′,′#0′,′{′,′%4′,′=′,′getelementptr′,′inbounds′,′[′,′100′,...”等。
由于部分循环神经网络的某些隐藏层不支持变长样本,需要将各个切片统一为固定长度。优选地,本发明首先对整个训练数据的切片长度分布进行统计,假定98%的切片长度在L以内,将L确定为切片的固定长度。然后,通过在每个切片后面填充0或截取固定长度,来保证每个切片都是固定长度L。
将单词编码为向量可采用word2vec、doc2vec、one-hot等工具或方法中的任意一种,通过调整参数得到较好的将词映射到向量空间的方式,并将单词序列中的每一个词转换为对应向量。例如,采用word2vec,图2中将词“define”转换为“[0.02314,0.04250,0.66934]”向量,“i32”转换为“[0.47532,0.03221,0.97511]”,直至整个单词序列中的每个词都转为对应的向量。
S302.将该向量输入循环神经网络,读取该循环神经网络顶层输出序列。
中间语言切片转成的向量输入标准的循环神经网络之后读取循环神经网络的顶层输出序列Rn×1=[r1,r2,…,rn]。循环神经网络可采用循环神经网络(LSTM,GRU)、双向循环神经网络(BLSTM,BGRU)等中的任意一种,优选双向门限循环单元神经网络(BGRU)。
S303.基于该向量的标签类型和漏洞位置,生成掩码对角矩阵。
基于该向量的标签类型和漏洞位置,生成掩码对角矩阵Mn×n。如图3所示,将程序切片中的漏洞位置信息转为掩码对角矩阵Mn*n=diag(λ1,λ2,...,λn),其中,n为切片的长度。
对于有漏洞切片而言,该对角矩阵在对应漏洞行位置的对角元素上为1,其他元素为0。即
Figure BDA0002066868180000081
对于无漏洞切片而言,该对角矩阵为单位矩阵。
S304.掩码对角矩阵和顶层输出序列相乘,得到基于样本差异性的循环神经网络的输出序列,输出序列中预设数量的最大值的均值即为预测结果。
R′n×1=Mn×n×Rn×1=[r′1,r′2,…,r′n],
Figure BDA0002066868180000091
其中,rm是循环神经网络输出序列第m维的数值。
对于有漏洞切片,过滤出标准循环神经网络输出序列中对应漏洞行位置的数据,再从这些数据中选取限定数量的最大值后,计算平均值作为该样本的预测结果进行训练。通过激活函数将预测结果限定在[0,1]区间,表示有漏洞切片中有漏洞的概率。
对于无漏洞切片,从标准循环神经网络输出序列中直接取限定数目的最大值后,计算平均值作为该样本的预测结果进行训练。例如,在限定数量取值为3的情况下,可以从Mn×n×Rn×1计算得到的向量中选取三个最大值,再对这三个最大值取平均值作为该样本的模型输出。通过激活函数将预测结果限定在[0,1]区间,表示无漏洞切片中有漏洞的概率。
根据预测结果和漏洞标签,进行循环神经网络的反向调参。限定数量为可调参数,用测试集数据的准确率判断哪种取值结果效果好,就使用该数值。优选地,限定数量的取值范围[1,5]。
步骤S4.使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位。
采用训练好的漏洞检测与定位模型对程序切片进行有无漏洞分类和漏洞行的位置确定,具体地,将目标程序中间语言切片转成的向量,输入训练好的漏洞检测与定位模型,得到标准循环神经网络顶层的输出序列,之后对序列中的各个维度的值按照其对应的切片语句行进行划分,再从每一行对应的数值集合中提取限定数目的最大值后取平均,若该平均值超出一定阈值则判定该行为漏洞行,否则判定为非漏洞行。例如,某一语句对应的序列为“[3.16926198×10-5,1.39549174×10-5,9.78860589×10-6,6.91199739×10-6,1.25314054×10-5,1.35613664×10-6,5.82588382×10-6,5.04301624×10-6]”,在限定数量取值为3的情况下,计算得到最大的三个数的平均值1.939×10-5小于阈值0.5,则认为该行不是漏洞行。
如图4所示,本发明提供一种基于中间语言的软件漏洞智能检测与定位系统,包括:
漏洞特征学习模块,用于针对训练程序基于语法特征从源码中提取可疑漏洞元素,将源码进行编译后生成可疑漏洞元素的中间语言切片,给程序中间语言切片添加有无漏洞标签、记录漏洞位置信息,并将程序中间语言切片转换为向量,这些向量输入到基于样本差异性的循环神经网络中进行训练,最后得到训练好的能够检测出行级漏洞位置的漏洞检测与定位模型;
漏洞检测模块,用于针对目标程序基于语法特征提取可疑漏洞元素,将源码编译为中间语言后提取可疑漏洞元素的中间语言切片,并将程序中间语言切片转换为向量,然后采用训练好的漏洞检测与定位模型来对程序切片有无漏洞进行分类并确定漏洞行的位置,最后输出包含漏洞行源码。
所述漏洞特征学习模块包括:
训练程序可疑漏洞元素提取模块,从训练程序的抽象语法树中选取可能和漏洞有关的元素;
训练程序中间语言切片提取模块,用于将训练程序编译产生中间语言文件,从中间语言文件中提取可疑漏洞元素的中间语言切片,并根据函数执行顺序调整代码切片中的语句顺序;
训练程序中间语言切片标记模块,用于对训练程序的每个中间语言切片,若包含已知的漏洞代码源码对应的中间语言,添加有漏洞标签并记录漏洞行在切片当中的位置,否则添加无漏洞标签;
训练程序中间语言切片向量生成模块,用于对于每个中间语言切片除去非ASCII字符,并将用户自定义变量名和自定义函数名映射为符号名称,再利用词法分析将中间语言切片分词为单词序列,输入嵌入模型中学习单词或句子的空间向量表示,最后将单词序列转换为向量;
基于样本差异性的循环神经网络训练模块,用于将中间语言切片的向量、中间语言切片的类型标签以及切片中漏洞行位置信息转成的掩码对角矩阵,输入到基于样本差异性的循环神经网络中训练,通过调节各参数,得到训练好的能够检测漏洞并能给出预测漏洞行位置的循环神经网络模型。
输出漏洞行源码,具体地,将被判定为漏洞行的中间语言代码映射到目标程序的源码中,找出目标程序中对应的源码位置并输出漏洞行源码。
以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。

Claims (9)

1.一种基于中间语言的软件漏洞智能检测与定位方法,其特征在于,该方法包括以下步骤:
S1.分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码;
S2.若训练程序源码对应的中间语言程序切片包含已知漏洞代码,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签;
S3.基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络;
S4.使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位;
步骤S3包括以下子步骤:
S301.对各中间语言程序切片进行预处理,将单词序列编码为向量;
S302.将该向量输入循环神经网络,读取该循环神经网络顶层输出序列;
S303.基于该向量的标签类型和漏洞位置,生成掩码对角矩阵;
S304.掩码对角矩阵和顶层输出序列相乘,得到基于样本差异性的循环神经网络的输出序列,输出序列中预设数量的最大值的均值即为预测结果。
2.如权利要求1所述的智能检测与定位方法,其特征在于,步骤S1包括以下子步骤:
S101.根据语法特征,从程序源码中提取可疑漏洞元素;
S102.根据所述可疑漏洞元素,从程序源码编译得到的中间语言文件中提取与所述可疑漏洞元素对应的中间语言程序切片;
S103.根据函数执行顺序调整中间语言程序切片中的代码顺序。
3.如权利要求1或2所述的智能检测与定位方法,其特征在于,可疑漏洞元素是指API调用类型元素和指针类型元素。
4.如权利要求1或2所述的智能检测与定位方法,其特征在于,所述依赖关系包括控制依赖关系和数据依赖关系。
5.如权利要求1所述的智能检测与定位方法,其特征在于,所述预处理包括:将中间语言程序切片分词并除去非ASCII字符;将每个用户自定义变量名、自定义函数名分别映射为变量符号名称和函数符号名称。
6.如权利要求1所述的智能检测与定位方法,其特征在于,所述基于该向量的标签类型和漏洞位置,生成掩码对角矩阵,具体如下:
对于有漏洞切片而言,掩码对角矩阵Mn*n在对应漏洞行位置的对角元素λm为1,其他元素为0;对于无漏洞切片而言,掩码对角矩阵Mn*n为单位矩阵,n为切片的长度。
7.如权利要求1所述的智能检测与定位方法,其特征在于,步骤S4具体为:
将目标源码对应的中间语言程序切片预处理后转成向量,输入训练好的基于样本差异性的循环神经网络,得到循环神经网络顶层的输出序列之后,对序列中的各个维度的值按照其对应的切片语句行进行划分,再从每一行对应的数值集合中提取限定数目的最大值后计算平均值,若该平均值超出阈值,则判定该行为漏洞行,否则判定为非漏洞行。
8.一种基于中间语言的软件漏洞智能检测与定位系统,其特征在于,包括:
中间语言程序切片提取模块,用于分别将训练程序源码和目标源码转化为与各可疑漏洞元素对应的中间语言程序切片,所述中间语言程序切片包含与该可疑漏洞元素之间存在依赖关系的代码;
标记模块,用于在训练程序源码对应的中间语言程序切片包含已知漏洞代码时,为其添加“有漏洞”标签并记录已知漏洞代码在该切片中的位置;否则,为其添加“无漏洞”标签;
训练模块,用于基于训练程序源码对应的中间语言程序切片集合,训练基于样本差异性的循环神经网络;
检测模块,用于使用训练好的基于样本差异性的循环神经网络,对目标程序源码对应的中间语言程序切片进行漏洞智能检测与定位;
所述训练模块通过以下方式实现:
(1)对各中间语言程序切片进行预处理,将单词序列编码为向量;
(2)将该向量输入循环神经网络,读取该循环神经网络顶层输出序列;
(3)基于该向量的标签类型和漏洞位置,生成掩码对角矩阵;
(4)掩码对角矩阵和顶层输出序列相乘,得到基于样本差异性的循环神经网络的输出序列,输出序列中预设数量的最大值的均值即为预测结果。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的基于中间语言的软件漏洞智能检测与定位方法。
CN201910423893.3A 2019-05-21 2019-05-21 一种基于中间语言的软件漏洞智能检测与定位方法与系统 Active CN110222512B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910423893.3A CN110222512B (zh) 2019-05-21 2019-05-21 一种基于中间语言的软件漏洞智能检测与定位方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910423893.3A CN110222512B (zh) 2019-05-21 2019-05-21 一种基于中间语言的软件漏洞智能检测与定位方法与系统

Publications (2)

Publication Number Publication Date
CN110222512A CN110222512A (zh) 2019-09-10
CN110222512B true CN110222512B (zh) 2021-04-20

Family

ID=67821425

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910423893.3A Active CN110222512B (zh) 2019-05-21 2019-05-21 一种基于中间语言的软件漏洞智能检测与定位方法与系统

Country Status (1)

Country Link
CN (1) CN110222512B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110866258B (zh) * 2019-10-12 2023-11-21 平安科技(深圳)有限公司 快速定位漏洞方法、电子装置及存储介质
CN112783755B (zh) * 2019-11-07 2024-03-22 上海蜚语信息科技有限公司 一种基于自然语言理解函数原型发现内存破坏漏洞的方法
CN111475820B (zh) * 2020-04-28 2023-08-01 张皓天 基于可执行程序的二进制漏洞检测方法、系统及存储介质
US11573785B2 (en) 2020-05-14 2023-02-07 International Business Machines Corporation Predicting code vulnerabilities using machine learning classifier models trained on internal analysis states
CN111723375A (zh) * 2020-06-09 2020-09-29 杭州孝道科技有限公司 一种基于运行时非执行态模式的软件安全漏洞检测方法
CN111737131B (zh) * 2020-06-23 2023-08-08 南京大学 一种基于概率对齐的代码错误定位方法
CN111753303B (zh) * 2020-07-29 2023-02-07 哈尔滨工业大学 一种基于深度学习和强化学习的多粒度代码漏洞检测方法
CN112100626B (zh) * 2020-09-24 2023-06-09 成都信息工程大学 一种提高源代码审计漏洞命中率开发方法
CN112379923B (zh) * 2020-12-08 2022-06-21 中国科学院信息工程研究所 漏洞代码克隆检测方法、装置、电子设备和存储介质
CN112541180B (zh) * 2020-12-16 2022-09-13 北京理工大学 一种基于语法特征和语义特征的软件安全漏洞检测方法
CN112632563B (zh) * 2020-12-29 2023-11-21 北京梆梆安全科技有限公司 一种漏洞检测方法、装置、存储介质及电子设备
CN112989358B (zh) 2021-03-10 2022-07-01 华中科技大学 提高基于深度学习的源代码漏洞检测健壮性的方法及装置
CN113641361B (zh) * 2021-06-28 2024-01-26 武汉极意网络科技有限公司 一种基于Clang的代码隐藏方法及装置
CN113672931B (zh) * 2021-07-13 2022-11-15 中国人民解放军军事科学院国防科技创新研究院 一种基于预训练的软件漏洞自动检测方法及装置
CN114676437B (zh) * 2022-04-08 2023-01-20 中国人民解放军战略支援部队信息工程大学 基于量子神经网络的软件漏洞检测方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106022297A (zh) * 2016-06-01 2016-10-12 苏州大学 一种手势识别方法及装置
CN108763931A (zh) * 2018-05-28 2018-11-06 上海交通大学 基于Bi-LSTM和文本相似性的漏洞检测方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814053B (zh) * 2010-03-29 2013-03-13 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN103164331B (zh) * 2011-12-15 2016-03-30 阿里巴巴集团控股有限公司 一种应用程序的漏洞检测方法和装置
US20150161385A1 (en) * 2012-08-10 2015-06-11 Concurix Corporation Memory Management Parameters Derived from System Modeling
CN105045715B (zh) * 2015-07-27 2018-01-12 电子科技大学 基于编程模式和模式匹配的漏洞聚类方法
CN105095769A (zh) * 2015-08-28 2015-11-25 中国航天科工集团第二研究院七〇六所 一种信息服务软件漏洞检测方法
CN105912381B (zh) * 2016-04-27 2019-08-30 华中科技大学 一种基于规则库的编译期代码安全检测方法
WO2017223294A1 (en) * 2016-06-22 2017-12-28 Invincea, Inc. Methods and apparatus for detecting whether a string of characters represents malicious activity using machine learning
US10713535B2 (en) * 2017-09-15 2020-07-14 NovuMind Limited Methods and processes of encrypted deep learning services
CN107885999B (zh) * 2017-11-08 2019-12-24 华中科技大学 一种基于深度学习的漏洞检测方法及系统
CN109324971B (zh) * 2018-09-30 2021-06-25 中国人民解放军国防科技大学 一种基于中间语言和污点分析的软件数据流分析方法
CN109657473B (zh) * 2018-11-12 2020-09-18 华中科技大学 一种基于深度特征的细粒度漏洞检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106022297A (zh) * 2016-06-01 2016-10-12 苏州大学 一种手势识别方法及装置
CN108763931A (zh) * 2018-05-28 2018-11-06 上海交通大学 基于Bi-LSTM和文本相似性的漏洞检测方法

Also Published As

Publication number Publication date
CN110222512A (zh) 2019-09-10

Similar Documents

Publication Publication Date Title
CN110222512B (zh) 一种基于中间语言的软件漏洞智能检测与定位方法与系统
CN108304720B (zh) 一种基于机器学习的安卓恶意程序检测方法
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
CN107392025B (zh) 基于深度学习的恶意安卓应用程序检测方法
She et al. Neutaint: Efficient dynamic taint analysis with neural networks
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
Tian et al. BVDetector: A program slice-based binary code vulnerability intelligent detection system
CN106295338B (zh) 一种基于人工神经元网络的sql漏洞检测方法
CN113672931B (zh) 一种基于预训练的软件漏洞自动检测方法及装置
CN108763931A (zh) 基于Bi-LSTM和文本相似性的漏洞检测方法
CN111930903A (zh) 基于深度日志序列分析的系统异常检测方法及系统
CN113900923B (zh) 一种跨指令集架构的二进制函数相似性检查系统及方法
CN104766015B (zh) 一种基于函数调用的缓冲区溢出漏洞动态检测方法
CN108959474B (zh) 实体关系提取方法
CN107862327B (zh) 一种基于多特征的安全缺陷识别系统和方法
CN111177731A (zh) 一种基于人工神经网络的软件源代码漏洞检测方法
Voje Assessing adequacy of models of phyletic evolution in the fossil record
CN115168865A (zh) 基于领域自适应的跨项目漏洞检测模型
Khaliq et al. A deep learning-based automated framework for functional User Interface testing
CN114064487A (zh) 一种代码缺陷检测方法
CN111191238A (zh) 一种webshell检测方法、终端设备及存储介质
CN114494999B (zh) 一种双分支联合型目标密集预测方法及系统
CN115661542A (zh) 一种基于特征关系迁移的小样本目标检测方法
Zhu et al. Duwak: Dual Watermarks in Large Language Models
Tian et al. Bbreglocator: A vulnerability detection system based on bounding box regression

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant