首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

基于seq2seq代码表示学习的细粒度漏洞检测方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:哈尔滨工业大学

摘要:本发明公开了一种基于seq2seq代码表示学习的细粒度漏洞检测方法,首先,提取漏洞候选关键节点作为切片准则,再使用程序切片技术提取程序中的切片代码段。然后,使用基于seq2seq深度学习模型,对切片代码段进行表示学习,生成包含语句间长依赖关系的语句向量表示序列,将序列中每条语句的向量表示送入检测器中,检测其是否为漏洞语句。该方法能够充分利用代码中的全局和局部语义信息,学习语句内和语句间的漏洞相关的特征,避免传统的基于深度学习分类模型对代码表示学习时难以捕获漏洞语句及其上下文之间的长依赖信息的问题,利用seq2seq模型对代码进行表示学习生成的语句向量表示序列,更适合语句级的细粒度漏洞检测。

主权项:1.一种基于seq2seq代码表示学习的细粒度漏洞检测方法,其特征在于所述方法包括如下步骤:步骤1:利用静态解析工具解析源代码,生成抽象语法树和程序依赖图;步骤2:利用抽象语法树提取源代码的漏洞候选关键节点作为切片准则,生成源代码的切片代码段,并对其进行标准化处理,得到命名标准化后的切片代码段;步骤3:使用seq2seq深度学习模型编码器中的语句编码网络对切片代码段语句内的token序列进行表示学习,生成包含局部语义信息的语句初级向量表示,具体步骤如下:步骤31:将切片代码段中的语句拆分成token,使用预训练好的word2vec词嵌入模型得到每个token的向量表示,组成token向量矩阵;步骤32:将步骤31生成的token向量矩阵送入由GRU实现的语句编码网络,学习得到每个token的隐藏向量表示,通过可学习的权重对所有token的隐藏向量表示进行加权求和,得到语句的初级向量表示,具体计算公式如下:z=σWz·wt+Uz·ht-1+bzr=σWr·wt+Ur·ht-1+br 其中,z和r分别代表更新门和重置门,σ为激活函数,wt表示语句中第t个token的初始向量表示,ht和分别代表第t个token的隐藏状态和中间的暂时状态,Wz、Wr、Wh、Uz、Ur、Uh、Ut是可学习的权重参数,bz、br、bh为偏置项,x为语句向量表示,n为语句中token的总数;步骤4:以步骤3中得到的每条语句的初级向量表示构成的语句序列作为输入,使用seq2seq深度学习模型编码器中的程序编码网络对语句序列进行表示学习,生成包含语句上下文信息的语句高级向量表示,具体步骤如下:步骤41:对切片代码段中语句的向量表示进行padding,得到由语句向量组成的初始化语句向量矩阵;步骤42:将步骤41生成的初始化语句向量矩阵,送入由BiGRU实现的程序编码网络,学习得到程序中语句的隐藏向量表示,具体计算公式如下: 其中,xi表示切片代码段中第i个语句的向量表示,L为切片代码段中语句的总数,是通过正向GRU单元得到的语句正向隐藏状态,则是反向隐藏状态,ei为语句高级向量表示;步骤5:将步骤4中得到的语句高级向量表示构成的语句序列送入基于自注意力和文本注意力的双重注意力模块中,通过自注意力学习语句间的依赖关系,再通过文本注意力学习漏洞相关的全局语义信息,具体步骤如下:步骤51:通过自注意力机制学习语句之间的依赖关系,得到语句的隐藏向量矩阵,具体计算公式如下: MutiHeadQ,K,V=head1||head2||…||heada Xse=MutiHeadE,E,E其中,E=[e1,e2,…,eL]为语句高级向量表示组成的矩阵;MutiHead是多头自注意力方法,headp是其中多头注意力方法中的第p个头函数,a为总头数;是经过自注意力提取后得到的切片代码段语句向量矩阵;Q、K、V分别表示自注意力函数Attention中的查询向量、目标向量和值向量;c为向量维数;是可学习的权重矩阵;步骤52:利用文本注意力机制和步骤51得到的语句向量矩阵计算全局语义信息,具体计算公式如下:utxt=ωurand+b 其中,urand为随机初始化的向量,经过线性层处理后得到utxt,为步骤51得到的语句向量,结合utxt用来计算文本注意力值αi,g为本全局语义信息,ω为可学习的权重参数,b为偏置项;步骤6:将步骤5得到的漏洞相关的全局语义信息和步骤4中得到的语句高级向量表示构成的语句序列作为输入,送入seq2seq深度学习模型的解码器网络中学习语句间的长依赖信息,生成语句的最终向量表示,具体步骤如下:步骤61:在解码器网络中,使用BiGRU作为主要模型,其网络单元的具体计算公式如下:z'=σW'Z·ei+U'Z·h'i-1+Czg+b'zr′=σW′r·ei+U′r·h′i-1+Crg+b′r z'和r'分别代表更新门和重置门,ei表示切片代码段中第i个语句的高级向量表示,g为全局语义信息向量,h'i和分别代表生成的第i个语句的隐藏状态和中间的暂时状态,σ为激活函数,W'Z、W'r、W'h、U'Z、U'r、U'h、Cz、Cr、Ch是可学习的权重参数,b'z、b'r、b'h为偏置项;步骤62:将步骤61更改的GRU单元记为GRUD,则解码器网络的公式如下: 其中,是通过正向解码器GRU单元得到的语句正向隐藏状态,则是反向隐藏状态,di为本步骤最后得到的语句最终向量表示;步骤7:将步骤6得到的每条语句最终向量表示送入由多层感知器MLP和softmax层构成的检测器网络得到该语句有无漏洞的预测结果,利用该语句的标签信息计算交叉熵损失函数,根据误差反向传播调整网络参数,直到损失值不再下降为止,训练结束;步骤8:用训练好的模型对代码进行语句级的细粒度漏洞检测。

全文数据:

权利要求:

百度查询: 哈尔滨工业大学 基于seq2seq代码表示学习的细粒度漏洞检测方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。