CN116628707A - 一种可解释性的基于多任务的源代码漏洞检测的方法 - Google Patents

一种可解释性的基于多任务的源代码漏洞检测的方法 Download PDF

Info

Publication number
CN116628707A
CN116628707A CN202310886074.9A CN202310886074A CN116628707A CN 116628707 A CN116628707 A CN 116628707A CN 202310886074 A CN202310886074 A CN 202310886074A CN 116628707 A CN116628707 A CN 116628707A
Authority
CN
China
Prior art keywords
source code
layer
characteristic data
syntax tree
abstract syntax
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.)
Pending
Application number
CN202310886074.9A
Other languages
English (en)
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.)
Qilu University of Technology
Shandong Computer Science Center National Super Computing Center in Jinan
Original Assignee
Qilu University of Technology
Shandong Computer Science Center National Super Computing Center in Jinan
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 Qilu University of Technology, Shandong Computer Science Center National Super Computing Center in Jinan filed Critical Qilu University of Technology
Priority to CN202310886074.9A priority Critical patent/CN116628707A/zh
Publication of CN116628707A publication Critical patent/CN116628707A/zh
Pending legal-status Critical Current

Links

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/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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/35Clustering; Classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2415Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/25Fusion techniques
    • G06F18/253Fusion techniques of extracted features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • 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
    • G06N3/0442Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
    • 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
    • G06N3/0455Auto-encoder networks; Encoder-decoder 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/0464Convolutional networks [CNN, ConvNet]
    • 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/047Probabilistic or stochastic 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/048Activation functions
    • 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
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Databases & Information Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

一种可解释性的基于多任务的源代码漏洞检测的方法,涉及计算机程序分析及网络安全技术领域,构建了一个源代码及其语义描述的数据集,并对其进行了数据清洗以达到高质量数据集的标准。使用静态分析工具将高级编程语言源代码生成抽象语法树,运行卷积神经网络从源代码和抽象语法树中提取语法特征和语义特征。利用交叉注意力机制和长短记忆网络对语法特征和语义特征进行特征融合。模型对输入的高级编程语言代码进行自动漏洞检测,并输出相应的机理解释,以实现对源代码的可解释性分析。

Description

一种可解释性的基于多任务的源代码漏洞检测的方法
技术领域
本发明涉及计算机程序分析及网络安全技术领域,具体涉及一种可解释性的基于多任务的源代码漏洞检测的方法。
背景技术
在当今的网络环境中,软件漏洞已经成为各种网络攻击的主要诱因。随着软件的不断发展和功能的日益复杂化,软件中隐藏的漏洞数量也随之增加,这将导致系统被攻击者利用并造成严重的安全问题。尽管研究人员从不同的漏洞数据中构建了各种工具和方法来帮助检测和消除漏洞,但每年在Common Vulnerabilities and Exposures (CVE)中所披露的漏洞数量仍然在不断上升。
鉴于漏洞是不可避免的,尽早地发现它们是很重要的。作为软件的最基本组件,代码中存在的安全漏洞可能直接导致软件漏洞的产生。因此,对源代码特征进行深入分析对于发现软件漏洞具有至关重要的作用。传统的早期源代码审查技术依赖于审查人员对安全问题的理解和积累的长期经验来进行判别。显然,依靠手工检测源代码中的漏洞的方式过于主观,并且随着代码规模和复杂性不断增大,这种技术已经无法满足当前的需求。之后,在大数据的驱动下,基于机器学习的自动化漏洞检测方案逐渐成为学术界和产业界关注的焦点。基于机器学习的漏洞检测技术避免了依赖专家人工识别问题,但是仍需要由专家定义一个漏洞的特征集合,然后采用机器学习模型按相应标签自动对源代码进行自动分类。
随着近年来深度学习技术在各个领域的成功应用以及开源代码量的增加,基于深度学习模型和海量源代码构建的端到端代码分析方法成为了研究的新焦点。目前,已有多种深度学习模型应用于源代码漏洞预测,这极大提高了漏洞预测的精度和效率。深度学习通过迭代训练模型并不断调整权重,以学习漏洞代码中的关键特征。这种端到端的学习方法使得模型能够逐步优化,准确地捕捉漏洞代码中的关键模式和异常行为,从而提高漏洞检测的准确性和效果。然而,深度学习模型的一个挑战在于其黑盒特性,导致其输出结果通常缺乏可解释性。这种缺乏可解释性的问题在漏洞检测领域尤为显著。当深度学习模型用于漏洞检测时,虽然可以获得高度准确的预测结果,但很难理解模型是如何基于输入的源代码特征来进行决策的。因此,为了更好地检测和分析源代码漏洞,针对不同的编程语言开发统一的静态分析技术和工具是非常有必要的。
发明内容
本发明为了克服以上技术的不足,提供了一种不仅能对源代码中的漏洞进行检测,而且具有漏洞语义解释生成机制,生成代码语义描述使得检测结果具有可解释性的方法。
本发明克服其技术问题所采用的技术方案是:
一种可解释性的基于多任务的源代码漏洞检测的方法,包括如下步骤:
(a)获取个不同软件项目的源代码,构建基于函数级别的高级编程语言代码数据集/>,/>,其中/>为第/>个源代码,/>,/>为第/>个源代码的语义文本描述,/>为源代码的文本的标签,/>,/>为0时表示第/>个源代码/>为无漏洞代码,/>为1时表示第/>个源代码/>为真实漏洞代码,对第/>个源代码/>进行数据清洗;
(b)抽取数据清洗后的第个源代码/>的抽象语法树,将抽取得到的抽象语法树依次经过标准化和序列化操作后得到第一token序列;
(c)将数据清洗后的第个源代码/>转换得到第二token序列;
(d)构建由跨模态编码器、解码器、分类器构成的多任务学习模型IMVD,跨模态编码器由语义特征编码器、语法特征编码器、复合特征编码器构成;
(e)对第一token序列进行词嵌入,得到抽象语法树的初始向量表示,将抽象语法树的初始向量表示/>输入到语义特征编码器中,输出得到抽象语法树的特征数据/>
(f)对第二token序列进行词嵌入,得到源代码的初始向量表示,将源代码的初始向量表示/>输入到语法特征编码器中,输出得到抽象语法树的特征数据/>
(g)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到复合特征编码器中进行特征融合,得到融合后的特征数据/>
(h)多任务学习模型IMVD的分类器依次由全连接层、sigmoid函数构成,将融合后的特征数据输入到分类器中,输出结果为0时表示第/>个源代码为正常代码,输出结果为1时表示第/>个源代码为漏洞代码;
(i)多任务学习模型IMVD的解码器由N层transformer构成,将融合后的特征数据输入到多任务学习模型IMVD的解码器中,当第/>个源代码为正常代码时,解码器输出生成代码功能文本描述,当第/>个源代码为漏洞代码时,解码器输出生成漏洞产生原因的文本描述。
进一步的,步骤(a)包括如下步骤:
(a-1)从github中获取个不同软件项目的源代码;
(a-2)将第个源代码/>中的注释部分、多余空格、空行信息去除,完成数据清洗。
进一步的,步骤(b)包括如下步骤:
(b-1)中利用静态分析工具Joern抽取第个源代码/>的抽象语法树;
(b-2)将抽取的抽象语法树中定义的函数名替换为,将抽取的抽象语法树中向量替换成/>,抽取的抽象语法树中为循环结构的各个节点分别使用/>标记,抽取的抽象语法树中为条件语句的各个节点分别使用/>和/>标记,抽取的抽象语法树中为函数调用的各个节点分别使用/>标记,完成对抽取得到的抽象语法树的标准化处理;
(b-3)使用深度优先算法遍历标准化后的抽象语法树,进行序列化操作,保存得到由个token构成的第一token序列。
进一步的,步骤(c)中把清洗后的第个源代码/>输入到CodeBERT的tokenizer中根据编程语言的语法和语义将清洗后的第/>个源代码/>分解为/>个token,各个token构成代码标准化表示的第二token序列。
进一步的,步骤(e)包括如下步骤:
(e-1)使用word2vec将第一token序列进行词嵌入,得到抽象语法树的初始向量表示,/>,/>为第/>个源代码/>的第/>个token的向量表示,,/>为始向量/>的token的数量;
(e-2)语义特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成;
(e-3)语义特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将抽象语法树的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将抽象语法树的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-4)将特征数据输入到语义特征编码器的第一最大池化层中,输出得到特征数据/>
(e-5)语义特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-6)将特征数据输入到语义特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
进一步的,步骤(e-3)中第二卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0,步骤(e-5)中第一卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0。
进一步的,步骤(f)包括如下步骤:
(f-1)使用word2vec将第二token序列进行词嵌入,得到源代码的初始向量表示,/>为第/>个源代码/>的第/>个token的向量表示,,/>为初始向量/>的token的数量;
(f-2)语法特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成;
(f-3)语法特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将源代码的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将源代码的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(f-4)将特征数据输入到语法特征编码器的第一最大池化层中,输出得到特征数据/>
(f-5)语法特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(f-6)将特征数据输入到语法特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
进一步的,步骤(g)包括如下步骤:
(g-1)复合特征编码器由改进的交叉注意力机制、BiLSTM网络构成;
(g-2)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到改进的交叉注意力机制中,通过公式/>计算得到注意力权重/>,通过公式/>计算得到注意力权重/>,式中/>为交叉注意力机制的查询向量,/>,/>为可学习的权重,/>为交叉注意力机制的键向量,,/>为可学习的权重,/>为交叉注意力机制的值向量,,/>为可学习的权重,/>,/>为可学习的权重,/>为交叉注意力机制的键向量,/>,/>为可学习的权重,/>为交叉注意力机制的值向量,/>,/>为可学习的权重,/>为转置;
(g-3)使用python中的numpy库将注意力权重和注意力权重/>按位置匹配成数据对,得到新的注意力权重矩阵/>,通过python中的max函数对注意力权重矩阵/>进行取最大值操作处理,得到融合后的注意力权重/>
(g-4)通过公式计算得到第/>个源代码/>特征增强后的代码向量表示/>,得到/>个源代码特征增强后的向量表示/>,/>
(g-5)通过公式计算得到第/>个源代码/>抽象语法树特征增强后的向量表示/>,得到/>个抽象语法树特征增强后的向量表示/>
(g-6)将第个源代码/>特征增强后的代码向量表示/>和第/>个源代码/>抽象语法树特征增强后的向量表示/>通过concatenate函数进行拼接操作,得到拼接后的向量/>,将拼接后的向量/>输入到BiLSTM网络中进行复合特征提取,得到第/>个源代码/>的融合后的特征数据/>,得到融合后的特征数据/>,/>
进一步的,还包括在步骤(j)后执行如下步骤:
(j-1)通过交叉熵损失计算多任务学习模型IMVD的分类器的损失函数
(j-2)通过交叉熵损失计算多任务学习模型IMVD的解码器的损失函数
(j-3)通过公式计算得到总损失函数/>,式中/>为超参数,/>
(j-4)使用Adam优化器利用总损失函数训练多任务学习模型IMVD,得到优化后的多任务学习模型IMVD。
本发明的有益效果是:设计了一种端到端的漏洞检测模型,能够有效的融合代码的结构信息和语义信息, 使得对代码的分析和检测更加全面和准确。采用多任务学习策略,能够综合考虑漏洞检测和代码语义分析的信息。模型不仅能对源代码中的漏洞进行检测,而且具有漏洞语义解释生成机制,生成代码语义描述使得检测结果具有可解释性。
附图说明
图1为本发明的多任务学习模型IMVD的结构图;
图2为本发明的复合特征编码器的结构图;
图3为本发明的代码漏洞检测的流程图;
图4为本发明的代码语义生成的流程图。
具体实施方式
下面结合附图1至附图4对本发明做进一步说明。
一种可解释性的基于多任务的源代码漏洞检测的方法,包括如下步骤:
(a)获取个不同软件项目的源代码,构建基于函数级别的高级编程语言代码数据集/>,/>,其中/>为第/>个源代码,/>,/>为第/>个源代码的语义文本描述,/>为源代码的文本的标签,/>,/>为0时表示第/>个源代码/>为无漏洞代码,/>为1时表示第/>个源代码/>为真实漏洞代码,对第/>个源代码/>进行数据清洗。
(b)抽取数据清洗后的第个源代码/>的抽象语法树,将抽取得到的抽象语法树依次经过标准化和序列化操作后得到第一token序列。对抽象语法树进行标准化的流程为:首先,统一不同函数和变量的表示,便于后续处理。然后,使用特殊的标记来表示抽象语法树中的特定节点类型,例如循环结构、条件语句、函数调用三种特定的节点类型。对抽象语法树进行序列化的流程为:使用深度优先算法遍历标准化后的抽象语法树,并保存成token序列。token的含义为文本中的最小单位,可以是一个单词,也可以是一个标点符号。在自然语言处理中,通常会将句子切分成一小块一小块的单元,这些小块单元就被称为"token",具体的,在2008年由剑桥大学出版社出版的《Introduction to Information Retrieval》一书中进行了定义。token的定义为现有技术,因此不再赘述。
(c)将数据清洗后的第个源代码/>转换得到第二token序列。
(d)构建由跨模态编码器、解码器、分类器构成的多任务学习模型IMVD,跨模态编码器由语义特征编码器(code特征编码器)、语法特征编码器(AST特征编码器)、复合特征编码器构成。
(e)对第一token序列进行词嵌入,得到抽象语法树的初始向量表示,将抽象语法树的初始向量表示/>输入到语义特征编码器中,输出得到抽象语法树的特征数据/>
(f)对第二token序列进行词嵌入,得到源代码的初始向量表示,将源代码的初始向量表示/>输入到语法特征编码器中,输出得到抽象语法树的特征数据/>
(g)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到复合特征编码器中进行特征融合,得到融合后的特征数据/>
(h)多任务学习模型IMVD的分类器依次由全连接层、sigmoid函数构成,将融合后的特征数据输入到分类器中,输出结果为0时表示第/>个源代码为正常代码,输出结果为1时表示第/>个源代码为漏洞代码。
(i)多任务学习模型IMVD的解码器由N层transformer构成,将融合后的特征数据输入到多任务学习模型IMVD的解码器中,当第/>个源代码为正常代码时,解码器输出生成代码功能文本描述,当第/>个源代码为漏洞代码时,解码器输出生成漏洞产生原因的文本描述。
构建了一个源代码及其语义描述的数据集,并对其进行了数据清洗以达到高质量数据集的标准。接着,使用静态分析工具将高级编程语言源代码生成抽象语法树,运行卷积神经网络从源代码和抽象语法树中提取语法特征和语义特征。然后,利用交叉注意力机制和长短记忆网络对语法特征和语义特征进行特征融合,将融合后的特征向量用于模型训练和优化,直至模型收敛。最终,训练好的模型可以对输入的高级编程语言代码进行自动漏洞检测,并输出相应的机理解释,以实现对源代码的可解释性分析。实现高效地检测源代码漏洞并对检测结果进行可解释性分析。
表一,函数级别的高级编程语言代码数据集在不同模型中的实验结果
根据表一的实验结果,使用本发明提供的可解释性的基于多任务的源代码漏洞检测的方法,识别准确度达到了97.6%,精确度达到了98.2%,F1-分数达到了95.3%召回率达到了92.5%。相比于其他传统的实验方法,精度有较大的提升,具有良好的漏洞识别效果。
在本发明的一个具体实施例中,步骤(a)包括如下步骤:
(a-1)从github中获取个不同软件项目的源代码;
(a-2)将第个源代码/>中的注释部分、多余空格、空行信息去除,完成数据清洗。
在本发明的一个具体实施例中,步骤(b)包括如下步骤:
(b-1)中利用静态分析工具Joern抽取第个源代码/>的抽象语法树。此处所用的提取工具也可用其他工具代替,如JavaParser、Clang、Pylint等
(b-2)将抽取的抽象语法树中定义的函数名替换为,将抽取的抽象语法树中向量替换成/>,抽取的抽象语法树中为循环结构的各个节点分别使用/>标记,抽取的抽象语法树中为条件语句的各个节点分别使用/>和/>标记,抽取的抽象语法树中为函数调用的各个节点分别使用/>标记,完成对抽取得到的抽象语法树的标准化处理。
(b-3)使用深度优先算法遍历标准化后的抽象语法树,进行序列化操作,保存得到由个token构成的第一token序列。
在本发明的一个具体实施例中,步骤(c)中把清洗后的第个源代码/>输入到CodeBERT的tokenizer中根据编程语言的语法和语义将清洗后的第/>个源代码/>分解为/>个token,各个token构成代码标准化表示的第二token序列。
在本发明的一个具体实施例中,步骤(e)包括如下步骤:
(e-1)使用word2vec将第一token序列进行词嵌入,得到抽象语法树的初始向量表示,/>,/>为第/>个源代码/>的第/>个token的向量表示,,/>为始向量/>的token的数量。
(e-2)语义特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成。
(e-3)语义特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将抽象语法树的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将抽象语法树的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-4)将特征数据输入到语义特征编码器的第一最大池化层中,输出得到特征数据/>
(e-5)语义特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-6)将特征数据输入到语义特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
在该实施例中,优选的,步骤(e-3)中第二卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0,步骤(e-5)中第一卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0。
在本发明的一个具体实施例中,步骤(f)包括如下步骤:
(f-1)使用word2vec将第二token序列进行词嵌入,得到源代码的初始向量表示,/>为第/>个源代码/>的第/>个token的向量表示,,/>为初始向量/>的token的数量。
(f-2)语法特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成。
(f-3)语法特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将源代码的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将源代码的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(f-4)将特征数据输入到语法特征编码器的第一最大池化层中,输出得到特征数据/>
(f-5)语法特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(f-6)将特征数据输入到语法特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
在本发明的一个具体实施例中,步骤(g)包括如下步骤:
(g-1)复合特征编码器由改进的交叉注意力机制、BiLSTM网络构成。
(g-2)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到改进的交叉注意力机制中,通过公式/>计算得到注意力权重/>,通过公式计算得到注意力权重/>,式中/>为交叉注意力机制的查询向量,,/>为可学习的权重,/>为交叉注意力机制的键向量,,/>为可学习的权重,/>为交叉注意力机制的值向量,,/>为可学习的权重,/>,/>为可学习的权重,/>为交叉注意力机制的键向量,/>,/>为可学习的权重,/>为交叉注意力机制的值向量,/>,/>为可学习的权重,/>为转置。
(g-3)使用python中的numpy库将注意力权重和注意力权重/>按位置匹配成数据对,得到新的注意力权重矩阵/>,通过python中的max函数对注意力权重矩阵/>进行取最大值操作处理,得到融合后的注意力权重/>
(g-4)通过公式计算得到第/>个源代码/>特征增强后的代码向量表示/>,得到/>个源代码特征增强后的向量表示/>,/>
(g-5)通过公式计算得到第/>个源代码/>抽象语法树特征增强后的向量表示/>,得到/>个抽象语法树特征增强后的向量表示/>
(g-6)将第个源代码/>特征增强后的代码向量表示/>和第/>个源代码/>抽象语法树特征增强后的向量表示/>通过concatenate函数进行拼接操作,得到拼接后的向量/>,将拼接后的向量/>输入到BiLSTM网络中进行复合特征提取,得到第/>个源代码/>的融合后的特征数据/>,得到融合后的特征数据/>,/>。BiLSTM网络也可用其他神经网络替代,如长短期记忆网络(Long Short-Term Memory)、循环神经网络(Recurrent Neural Network)等。
在本发明的一个具体实施例中,还包括在步骤(j)后执行如下步骤:
(j-1)通过交叉熵损失计算多任务学习模型IMVD的分类器的损失函数
(j-2)通过交叉熵损失计算多任务学习模型IMVD的解码器的损失函数
(j-3)通过公式计算得到总损失函数/>,式中/>为超参数,/>
(j-4)使用Adam优化器利用总损失函数训练多任务学习模型IMVD,得到优化后的多任务学习模型IMVD。训练时,在每个epoch中,通过向后传播计算梯度,并使用梯度下降算法根据优化器的规则更新模型的参数。对模型进行多个epoch的训练,直至模型收敛为止。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,包括如下步骤:
(a)获取个不同软件项目的源代码,构建基于函数级别的高级编程语言代码数据集/>,其中/>为第/>个源代码,/>,/>为第/>个源代码/>的语义文本描述,/>为源代码的文本的标签,/>,/>为0时表示第/>个源代码/>为无漏洞代码,/>为1时表示第/>个源代码/>为真实漏洞代码,对第/>个源代码/>进行数据清洗;
(b)抽取数据清洗后的第个源代码/>的抽象语法树,将抽取得到的抽象语法树依次经过标准化和序列化操作后得到第一token序列;
(c)将数据清洗后的第个源代码/>转换得到第二token序列;
(d)构建由跨模态编码器、解码器、分类器构成的多任务学习模型IMVD,跨模态编码器由语义特征编码器、语法特征编码器、复合特征编码器构成;
(e)对第一token序列进行词嵌入,得到抽象语法树的初始向量表示,将抽象语法树的初始向量表示/>输入到语义特征编码器中,输出得到抽象语法树的特征数据/>
(f)对第二token序列进行词嵌入,得到源代码的初始向量表示,将源代码的初始向量表示/>输入到语法特征编码器中,输出得到抽象语法树的特征数据/>
(g)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到复合特征编码器中进行特征融合,得到融合后的特征数据/>
(h)多任务学习模型IMVD的分类器依次由全连接层、sigmoid函数构成,将融合后的特征数据输入到分类器中,输出结果为0时表示第/>个源代码为正常代码,输出结果为1时表示第/>个源代码为漏洞代码;
(i)多任务学习模型IMVD的解码器由N层transformer构成,将融合后的特征数据输入到多任务学习模型IMVD的解码器中,当第/>个源代码为正常代码时,解码器输出生成代码功能文本描述,当第/>个源代码为漏洞代码时,解码器输出生成漏洞产生原因的文本描述。
2.根据权利要求1所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,步骤(a)包括如下步骤:
(a-1)从github中获取个不同软件项目的源代码;
(a-2)将第个源代码/>中的注释部分、多余空格、空行信息去除,完成数据清洗。
3.根据权利要求1所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,步骤(b)包括如下步骤:
(b-1)中利用静态分析工具Joern抽取第个源代码/>的抽象语法树;
(b-2)将抽取的抽象语法树中定义的函数名替换为,将抽取的抽象语法树中向量替换成/>,抽取的抽象语法树中为循环结构的各个节点分别使用/>标记,抽取的抽象语法树中为条件语句的各个节点分别使用/>和/>标记,抽取的抽象语法树中为函数调用的各个节点分别使用/>标记,完成对抽取得到的抽象语法树的标准化处理;
(b-3)使用深度优先算法遍历标准化后的抽象语法树,进行序列化操作,保存得到由个token构成的第一token序列。
4.根据权利要求3所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于:步骤(c)中把清洗后的第个源代码/>输入到CodeBERT的tokenizer中根据编程语言的语法和语义将清洗后的第/>个源代码/>分解为/>个token,各个token构成代码标准化表示的第二token序列。
5.根据权利要求3所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,步骤(e)包括如下步骤:
(e-1)使用word2vec将第一token序列进行词嵌入,得到抽象语法树的初始向量表示,/>为第/>个源代码/>的第/>个token的向量表示,,/>为始向量/>的token的数量;
(e-2)语义特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成;
(e-3)语义特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将抽象语法树的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将抽象语法树的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-4)将特征数据输入到语义特征编码器的第一最大池化层中,输出得到特征数据
(e-5)语义特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的LayerNormalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(e-6)将特征数据输入到语义特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
6.根据权利要求5所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于:步骤(e-3)中第二卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0,步骤(e-5)中第一卷积单元的卷积层的卷积核大小为3×3,步长为1,padding为0。
7.根据权利要求5所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,步骤(f)包括如下步骤:
(f-1)使用word2vec将第二token序列进行词嵌入,得到源代码的初始向量表示,/>为第/>个源代码/>的第/>个token的向量表示,,/>为初始向量/>的token的数量;
(f-2)语法特征编码器由第一卷积单元、第一最大池化层、第二卷积单元、第二最大池化层构成;
(f-3)语法特征编码器的第一卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将源代码的初始向量表示输入到第一卷积单元的卷积层中,输出得到特征数据/>,将源代码的初始向量表示/>与特征数据/>进行残差连接后输入到第一卷积单元的Layer Normalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第一卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据
(f-4)将特征数据输入到语法特征编码器的第一最大池化层中,输出得到特征数据
(f-5)语法特征编码器的第二卷积单元由卷积层、Layer Normalization层、Dropout层、Relu激活函数层构成,将特征数据输入到第二卷积单元的卷积层中,输出得到特征数据/>,将特征数据/>与特征数据/>进行残差连接后输入到第二卷积单元的LayerNormalization层中进行归一化处理,输出得到特征数据/>,将特征数据/>依次输入到第二卷积单元的Dropout层、Relu激活函数层中,输出得到特征数据/>
(f-6)将特征数据输入到语法特征编码器的第二最大池化层中,输出得到抽象语法树的特征数据/>
8.根据权利要求1所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,步骤(g)包括如下步骤:
(g-1)复合特征编码器由改进的交叉注意力机制、BiLSTM网络构成;
(g-2)将抽象语法树的特征数据和抽象语法树的特征数据/>输入到改进的交叉注意力机制中,通过公式/>计算得到注意力权重/>,通过公式计算得到注意力权重/>,式中/>为交叉注意力机制的查询向量,/>,/>为可学习的权重,/>为交叉注意力机制的键向量,,/>为可学习的权重,/>为交叉注意力机制的值向量,,/>为可学习的权重,/>,/>为可学习的权重,/>为交叉注意力机制的键向量,/>,/>为可学习的权重,/>为交叉注意力机制的值向量,/>,/>为可学习的权重,/>为转置;
(g-3)使用python中的numpy库将注意力权重和注意力权重/>按位置匹配成数据对,得到新的注意力权重矩阵/>,通过python中的max函数对注意力权重矩阵/>进行取最大值操作处理,得到融合后的注意力权重/>
(g-4)通过公式计算得到第/>个源代码/>特征增强后的代码向量表示/>,得到/>个源代码特征增强后的向量表示/>,/>
(g-5)通过公式计算得到第/>个源代码/>抽象语法树特征增强后的向量表示/>,得到/>个抽象语法树特征增强后的向量表示/>,/>
(g-6)将第个源代码/>特征增强后的代码向量表示/>和第/>个源代码/>抽象语法树特征增强后的向量表示/>通过concatenate函数进行拼接操作,得到拼接后的向量/>,将拼接后的向量/>输入到BiLSTM网络中进行复合特征提取,得到第/>个源代码/>的融合后的特征数据/>,得到融合后的特征数据/>,/>
9.根据权利要求1所述的可解释性的基于多任务的源代码漏洞检测的方法,其特征在于,还包括在步骤(j)后执行如下步骤:
(j-1)通过交叉熵损失计算多任务学习模型IMVD的分类器的损失函数
(j-2)通过交叉熵损失计算多任务学习模型IMVD的解码器的损失函数
(j-3)通过公式计算得到总损失函数/>,式中/>为超参数,
(j-4)使用Adam优化器利用总损失函数训练多任务学习模型IMVD,得到优化后的多任务学习模型IMVD。
CN202310886074.9A 2023-07-19 2023-07-19 一种可解释性的基于多任务的源代码漏洞检测的方法 Pending CN116628707A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310886074.9A CN116628707A (zh) 2023-07-19 2023-07-19 一种可解释性的基于多任务的源代码漏洞检测的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310886074.9A CN116628707A (zh) 2023-07-19 2023-07-19 一种可解释性的基于多任务的源代码漏洞检测的方法

Publications (1)

Publication Number Publication Date
CN116628707A true CN116628707A (zh) 2023-08-22

Family

ID=87610159

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310886074.9A Pending CN116628707A (zh) 2023-07-19 2023-07-19 一种可解释性的基于多任务的源代码漏洞检测的方法

Country Status (1)

Country Link
CN (1) CN116628707A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117113359A (zh) * 2023-09-05 2023-11-24 四川大学 一种基于对抗迁移学习的预训练漏洞修复方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109960506A (zh) * 2018-12-03 2019-07-02 复旦大学 一种基于结构感知的代码注释生成方法
US20210056211A1 (en) * 2019-08-23 2021-02-25 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model
WO2021037196A1 (zh) * 2019-08-28 2021-03-04 杭州趣链科技有限公司 智能合约代码漏洞检测方法、装置、计算机设备和存储介质
CN112541180A (zh) * 2020-12-16 2021-03-23 北京理工大学 一种基于语法特征和语义特征的软件安全漏洞检测方法
CN115048141A (zh) * 2022-07-01 2022-09-13 南京工业大学 一种基于图引导的Transformer模型代码注释自动生成方法
US20220392637A1 (en) * 2021-06-02 2022-12-08 Neumora Therapeutics, Inc. Multimodal dynamic attention fusion
CN115577362A (zh) * 2022-09-09 2023-01-06 哈尔滨工业大学 基于源代码和汇编代码跨模态特征增强的漏洞检测方法
CN116089957A (zh) * 2022-12-29 2023-05-09 河南大学 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置
US20230154170A1 (en) * 2021-11-15 2023-05-18 Samsung Electronics Co., Ltd. Method and apparatus with multi-modal feature fusion

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109960506A (zh) * 2018-12-03 2019-07-02 复旦大学 一种基于结构感知的代码注释生成方法
US20210056211A1 (en) * 2019-08-23 2021-02-25 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model
WO2021037196A1 (zh) * 2019-08-28 2021-03-04 杭州趣链科技有限公司 智能合约代码漏洞检测方法、装置、计算机设备和存储介质
CN112541180A (zh) * 2020-12-16 2021-03-23 北京理工大学 一种基于语法特征和语义特征的软件安全漏洞检测方法
US20220392637A1 (en) * 2021-06-02 2022-12-08 Neumora Therapeutics, Inc. Multimodal dynamic attention fusion
US20230154170A1 (en) * 2021-11-15 2023-05-18 Samsung Electronics Co., Ltd. Method and apparatus with multi-modal feature fusion
CN115048141A (zh) * 2022-07-01 2022-09-13 南京工业大学 一种基于图引导的Transformer模型代码注释自动生成方法
CN115577362A (zh) * 2022-09-09 2023-01-06 哈尔滨工业大学 基于源代码和汇编代码跨模态特征增强的漏洞检测方法
CN116089957A (zh) * 2022-12-29 2023-05-09 河南大学 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
孙鸿宇;何远;王基策;董颖;朱立鹏;王鹤;张玉清;: "人工智能技术在安全漏洞领域的应用", 通信学报, no. 08 *
徐少峰等: "基于结构感知双编码器的代码注释自动生成", 计算机工程, vol. 46, no. 2, pages 304 - 308 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117113359A (zh) * 2023-09-05 2023-11-24 四川大学 一种基于对抗迁移学习的预训练漏洞修复方法
CN117113359B (zh) * 2023-09-05 2024-03-19 四川大学 一种基于对抗迁移学习的预训练漏洞修复方法

Similar Documents

Publication Publication Date Title
Mani et al. Deeptriage: Exploring the effectiveness of deep learning for bug triaging
Chen et al. End-to-end emotion-cause pair extraction with graph convolutional network
CN114169330B (zh) 融合时序卷积与Transformer编码器的中文命名实体识别方法
CN110580292A (zh) 一种文本标签生成方法、装置和计算机可读存储介质
CN113065358B (zh) 面向银行咨询服务基于多粒度对齐的文本对语义匹配方法
KR20220091676A (ko) 비정형 사이버 위협 정보 빅데이터 구축 장치, 사이버 위협 정보 빅데이터 구축 및 연관성 분석 방법
CN110633467B (zh) 一种基于改进特征融合的语义关系抽取方法
CN116628707A (zh) 一种可解释性的基于多任务的源代码漏洞检测的方法
CN111866004A (zh) 安全评估方法、装置、计算机系统和介质
Pal et al. Future lens: Anticipating subsequent tokens from a single hidden state
CN116775473A (zh) 一种基于编解码框架的核电软件测试用例生成方法
Chen et al. Learning a general clause-to-clause relationships for enhancing emotion-cause pair extraction
CN117521066A (zh) 面向工业互联网的语义增强型恶意软件检测方法
CN117390189A (zh) 基于前置分类器的中立文本生成方法
CN116956289A (zh) 动态调整潜在黑名单和黑名单的方法
CN116627487A (zh) 基于词级别检索的源代码注释自动化生成方法和系统
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN116483314A (zh) 一种自动化智能活动图生成方法
CN114969347A (zh) 缺陷查重实现方法、装置、终端设备及存储介质
CN111562943B (zh) 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置
CN111581339B (zh) 基于树状lstm对生物医学文献的基因事件的抽取方法
Gomes et al. Bert-based feature extraction for long-lived bug prediction in floss: A comparative study
CN112800435A (zh) 基于深度学习的sql注入检测方法
CN110990385A (zh) 一套基于Sequence2Sequence的自动生成新闻标题的软件
Yang et al. Detection of Malicious URL Based on BERT-CNN

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20230822