一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于对偶学习的shellcode代码和注释生成方法

2022-06-01 00:06:35 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种基于对偶学习的shellcode代码和注释生成方法。


背景技术:

2.sellcode是由汇编语言编写的一小段代码,恶意的shellcode可以执行ddos攻击、数据盗窃,或针对目标系统运行恶意软件。但是,具有良好意图的shellcode可以用来识别漏洞,然后通过修复这些漏洞来修复系统。因此,研究人员希望使用shellcode发现软件中的安全漏洞,而shellcode代码生成技术已经成为一个活跃的研究课题。
3.然而,自动生成shellcode是一项具有挑战性的任务,因为它们通常是用汇编语言编写的。此外,总结shellcode的功能描述(即为shellcode生成注释)也是一个挑战,因为识别这些shellcode的攻击意图对于不熟悉shellcode和网络信息安全的用户来说是困难的。并且,由于shellcode语料库的规模较小,可以将shellcode的自动生成和摘要视为低资源任务,这使得解决这两个任务更具挑战性。
4.代码生成和注释生成任务的自动化方法对于软件开发和维护非常重要。生成的高质量注释和代码可以帮助提高开发人员的工作效率,进而提高软件质量。然而,生成高质量的代码或注释既耗时又容易出错。先前关于代码自动生成和注释生成的研究主要集中于特定编程语言(如java、python、c#)的代码片段。最近,也有一些研究,旨在研究特定软件构件(如bash、sql和智能合约)的代码生成和注释生成方法。据调研发现,目前只有一项关于shellcode代码生成的研究,其首次尝试使用神经机器翻译来解决该生成任务,此外,还没有一项为shellcode生成注释的研究。
5.如何解决上述挑战成为本发明面临的课题。


技术实现要素:

6.本发明的目的在于提供一种基于对偶学习的shellcode代码和注释生成方法,该方法可以根据自然语言描述自动生成shellcode,以及为shellcode生成对应的自然语言描述,即代码注释。
7.本发明的思想为:本发明提出基于对偶学习的shellcode代码和注释生成方法,利用原始任务,即从域x映射到域y和对偶任务,即从域y映射到域x,之间的对偶性来提高两个任务的性能,即将shellcode代码生成和shellcode注释生成形式化为对偶任务,使用一个浅层的transformer进行模型构建,并设计了一种归一化方法adjust_qknorm来适应这类低资源任务,最后,为了缓解词汇表之外的问题,提出了一个基于规则的修复组件来提高代码自动生成的性能,本发明的方法在相同的语料库中取得了比基准方法更好的性能。
8.本发明是通过如下措施实现的:一种基于对偶学习的shellcode代码和注释生成方法,其中,包括以下步骤:
9.(1)搜集shellstorm和exploit database上从2000年到2020年的shellcode语料
库,设定其格式为《代码,注释》,由于本发明方法只使用一个模型来学习对偶任务,因此直接通过交换输入和输出来转换语料库,并通过添加前缀来区分两个任务。具体包括如下步骤:
10.(1-1)对于shellcode代码生成任务,为其输入数据添加前缀“shellcodegen:”;
11.(1-2)对于shellcode注释生成任务,为其输入数据添加前缀“shellcodesum:”;
12.(2)考虑到shellcode代码生成和注释生成任务的特点,将它们形式化为对偶任务。使用浅层的transformer进行同步学习,实现知识共享,提高训练模型的性能和泛化能力。具体包括如下步骤:
13.(2-1)通过嵌入层和位置编码,transformer可以将输入序列x
input
=(prefix,x1,x2,

,xn)转换为向量x
emb
,并将该向量反馈给编码器层;
14.(2-2)将向量x
emb
输入到多头注意层;
15.(2-3)注意力函数是基于三个矩阵同时计算出的:q(查询),k(键)和v(值)。考虑到余弦相似度对值的不敏感性可能导致最终结果的误差,提出具有零均值自适应的adjust_qknorm来改进自注意力计算,以使transformer适应低资源任务,既考虑矩阵的数值差异信息,又考虑矩阵的方向。
16.(2-4)利用残差连接和层归一化使矩阵x
emb
和x
atten
运算维度一致,并将网络中的隐藏层归一化为标准正态分布,加快了模型的训练和收敛速度;
17.(2-5)接着,通过前馈层和两个线性映射层,使用激活函数生成向量x
hidden
,通过残差连接和层归一化得到隐藏语义向量;
18.(2-6)在解码器部分,transformer使用了自回归机制,根据编码器部分的输出推断它的下一个输出。每一解码器层对最终的隐藏状态(即编码器的输出)进行一次注意操作,该操作的其余部分与编码器部分相同。最后,解码器的输出被发送到一个全连接的神经网络,该网络可以通过softmax层来预测下一个词元出现的概率;
19.(3)为了缓解词汇表之外的问题,提出了一个基于规则的修复组件,以提高本发明方法自动生成shellcode的准确性。具体包括如下步骤:
20.shellcode中的汇编语句由标签、指令和操作数组成,出现在操作数位置上的值分为三类(即,寄存器、地址和值)。如果根据自然语言描述生成shellcode时发现地址存在不一致,就从注释中提取正确的地址,并使用这个地址更新生成的shellcode。
21.作为本发明提供的一种基于对偶学习的shellcode代码和注释生成方法进一步优化方案,所述步骤(2-3)中使用adjust_qknorm来改进自注意力计算。已有的qknorm方法将自注意计算从点积转换为余弦相似度,以使transformer适应低资源任务。而余弦相似度主要是基于方向的相似度(即两个向量之间的方向越近,余弦相似度值越高)。因此,qknorm对两个向量之间的数值差异不敏感。为了在自注意力计算中考虑数值差异信息,本发明设计了调整qknorm的方法。具体包括如下步骤:
22.(1)从矩阵q和k的对应平均值(即和)中减去最后一个维的值,使得这个维上所有元素的和等于零;
23.(2)接着对q和k进行l2归一化处理;
24.(3)点积得到的结果表示为q和k的余弦相似度计算,并且不需要除以
25.(4)通过与一个可学习参数g相乘来训练模型;
26.作为本发明提供的一种基于对偶学习的shellcode代码和注释生成方法进一步优化方案,所述步骤(3)中使用一种基于规则的修复组件来提高自动生成shellcode任务的性能,即当生成的shellcode与注释存在操作数位置上值的不一致时,就从注释中提取正确的值,并使用这个值更新生成的shellcode,以此提高了自动生成shellcode的准确性。
27.该基于对偶学习的shellcode代码和注释生成方法的参数设置如下:
[0028][0029]
与现有技术相比,本发明的有益效果为:
[0030]
1、本发明提出了一种基于对偶学习的shellcode代码和注释生成方法,该方法可以根据自然语言描述自动生成shellcode,以及为shellcode生成对应的自然语言描述,即代码注释,这是一个完全数据驱动的方法,考虑到shellcode代码生成和shellcode注释生成任务的特点,将它们形式化为对偶任务,然后使用一个浅层的transformer进行同步学习。
[0031]
2、本发明还提出了一种改进自注意力计算的归一化方法adjust_qknorm,以适应低资源场景下的该任务。
[0032]
3、为了缓解词汇表之外的问题,本发明提出了一个基于规则的修复组件,以提高本发明方法自动生成shellcode的准确性,与代码自动生成和代码注释生成领域的先进基准方法相比,该方法在两种任务上都能获得更好的性能,这有利于软件的开发和维护,生成的高质量注释和代码可以帮助提高开发人员的工作效率,进而提高软件质量。
附图说明
[0033]
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0034]
图1为本发明提供的一种基于对偶学习的shellcode代码和注释生成方法的系统框架图。
具体实施方式
[0035]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0036]
实施例1
[0037]
参见图1所示,本发明提供了一种基于对偶学习的shellcode代码和注释生成方法,具体包括以下内容:
[0038]
(1)搜集shellstorm和exploit database上从2000年到2020年的shellcode语料库,设定其格式为《代码,注释》,由于本发明方法只使用一个模型来学习对偶任务,因此直接通过交换输入和输出来转换语料库,并通过添加前缀来区分两个任务:对于shellcode代码生成任务,为其输入数据添加前缀“shellcodegen:”;对于shellcode注释生成任务,为其输入数据添加前缀“shellcodesum:”。表1显示了语料库的统计信息。
[0039]
表1
[0040][0041][0042]
注释长度统计信息
[0043][0044]
(2)考虑到shellcode代码生成和注释生成任务的特点,将它们形式化为对偶任务。使用浅层的transformer进行同步学习,实现知识共享,提高训练模型的性能和泛化能力。具体包括如下步骤:
[0045]
(2-1)通过嵌入层和位置编码,transformer可以将输入序列x
input
=(prefix,x1,x2,

,xn)转换为向量x
emb
,并将该向量反馈给编码器层;
[0046]
(2-2)将向量x
emb
输入到多头注意层;
[0047]
(2-3)注意力函数是基于三个矩阵同时计算出的:q(查询),k(键)和v(值)。考虑到余弦相似度对值的不敏感性可能导致最终结果的误差,提出具有零均值自适应的adjust_qknorm来改进自注意力计算,以使transformer适应低资源任务,既考虑矩阵的数值差异信息,又考虑矩阵的方向。具体包括如下步骤:
[0048]
(2-3-1)从矩阵q和k的对应平均值(即和)中减去最后一个维的值,使得这个维上所有元素的和等于零;
[0049]
(2-3-2)接着对q和k进行l2归一化处理;
[0050]
(2-3-3)点积得到的结果表示为q和k的余弦相似度计算,并且不需要除以
[0051]
(2-3-4)通过与一个可学习参数g相乘来训练模型;
[0052]
(2-4)利用残差连接和层归一化使矩阵x
emb
和x
atten
运算维度一致,并将网络中的隐藏层归一化为标准正态分布,加快了模型的训练和收敛速度;
[0053]
(2-5)接着,通过前馈层和两个线性映射层,使用激活函数生成向量x
hidden
,通过残差连接和层归一化得到隐藏语义向量;
[0054]
(2-6)在解码器部分,transformer使用了自回归机制,根据编码器部分的输出推断它的下一个输出。每一解码器层对最终的隐藏状态(即编码器的输出)进行一次注意操
作,该操作的其余部分与编码器部分相同。最后,解码器的输出被发送到一个全连接的神经网络,该网络可以通过softmax层来预测下一个词元出现的概率;
[0055]
(3)为了缓解词汇表之外的问题,提出了一个基于规则的修复组件,以提高本发明方法自动生成shellcode的准确性。具体包括如下步骤:
[0056]
shellcode中的汇编语句由标签、指令和操作数组成,出现在操作数位置上的值分为三类(即,寄存器、地址和值)。如果根据自然语言描述生成shellcode时发现地址存在不一致,就从注释中提取正确的地址,并使用这个地址更新生成的shellcode。
[0057]
(4)该基于对偶学习的shellcode代码和注释生成方法的参数设置如表2所示:
[0058]
表2
[0059][0060]
(5)在相同的语料库上对本发明方法和已有的基于信息检索和深度学习的六个基准方法进行评估,使用神经机器翻译和代码生成研究中被广泛使用的四个评测指标(即bleu、rouge-l、meteor和acc)来自动评估上述两个任务。表3显示了本发明所提方法在两种不同的任务中与基准方法的比较结果。
[0061]
表3
[0062][0063]
shellcode代码生成
[0064]
[0065][0066]
经实验表明,本发明提出的基于对偶学习的shellcode代码和注释生成方法相较于先进的基于信息检索和深度学习的基准方法而言,在所有指标上都取得了更好的性能,也就是说本发明所提方法在shellcode注释生成以及shellcode代码生成两个任务上都优于基准方法。具体来看,对于shellcode注释生成任务,在bleu方面,本发明方法可以提高3.913%到12.380%的性能;对于rouge-l,本发明方法可以将性能提高1.998%至13.438%;在meteor方面,本发明方法可以提高2.188%到6.102%的性能。对于shellcode代码生成任务,在bleu方面,本发明方法可以将性能提高8.013%到28.240%;对于rouge-l,本发明方法可以将性能提高3.132%至15.472%;在acc方面,本发明方法可将性能提高9.0625%至35.625%。两个任务显著的性能改进表明了本发明所提方法具有较强的竞争力。
[0067]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献