System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于区块链安全中智能合约漏洞自动修复领域,涉及一种基于ast-t5预训练模型的智能合约自动修复方法。
技术介绍
1、由于智能合约一旦部署就不可修改的特性,确保智能合约自身的安全就十分重要。目前已经有大量智能合约漏洞检测方面的研究,而漏洞修复相关的工作却进展缓慢。现有的智能合约漏洞修复技术大致可以分为三类:
2、基于搜索的修复技术,该技术通常利用启发式策略从先前的补丁构建补丁空间,通过搜索补丁空间来生成有效补丁。2020年,yu等人提出了screpair,一种基于启发式搜索的修复技术,其使用遗传算法中种群的适应度作为启发式来促进有效补丁的生成,该技术可以看做是传统apr中的genprog算法在智能合约漏洞修复上的应用,并且创新性地考虑了补丁的gas消耗问题。但是该方法的修复率较低,并且存在搜索空间爆炸的问题,效率较低。
3、基于模式的修复技术,该技术主要通过人为分析不同漏洞的特征来制定相应的修复模板,在根据模板对漏洞代码进行修改,实现漏洞修复。2024年,gao等人在提出了sguard+,它是对sguard工具的一个改进,同时也是一种基于模式的修复方法。除了设计了一个考虑了漏洞预防措施的漏洞检测模块,他们还对sguard中的修复模板进行了改进,使其能够对整数溢出漏洞和重入漏洞进行更好的修复。虽然sguard+在整数溢出漏洞,重入漏洞等漏洞的修复上表现较好,但是它依赖于固定的修复模板,无法实现需要进行复杂代码变更的修复操作,例如它对重入漏洞的cei(checks-effects-interactio
4、基于深度学习的修复技术,该技术主要将漏洞的修复看做是一个神经机器翻译(nmt)任务,即将漏洞代码“翻译”成正确代码。其模型结构通常是一个编码器-解码器结构,编码器将变长漏洞代码转化成定长的上下文向量,解码器则根据编码器输出的上下文向量来生成预测结果。2023年,zhou等人提出了smartrep,他们训练了一个编码器-解码器模型来修复智能合约中的单行漏洞,其模型的编码器是一个双编码器结构,分别用于处理一个三行上下文以及从漏洞函数的ast获取的语法信息,最终smartrep能够修复超过12种典型漏洞。虽然smartrep支持多种漏洞类型,但是它局限于单行漏洞的修复,许多漏洞的修复是无法仅仅依靠单行代码的修改实现的,就比如它对于重入漏洞的修复就不是十分恰当;此外,该工具的自动化程度不高,修复漏洞前需要精确定位到漏洞代码行,这对漏洞检测粒度的要求较高;最后,该工具对几种常见漏洞的修复率较低。
5、本专利技术采用的是基于深度学习的修复技术,通过对ast-t5预训练模型进行微调,训练出一个函数级的solidity源代码修复模型。相较于基于模式的修复方法,本专利技术使用深度学习模型可以实现更加复杂的代码修改;相较于现有的深度学习方法(从github上拉取的训练数据的质量无法保障),本专利技术使用预训练模型微调,对训练数据的需求更少,仅需要手动标准少量数据,缓解了智能合约漏洞-修复数据集缺失的问题;此外,本专利技术不再局限于单行漏洞的修复,ast-t5预训练模型结构感知的特性能够更好地生成多行代码结构。
技术实现思路
1、本专利技术的目的是提供一种基于ast-t5预训练模型的智能合约自动修复方法。要实现智能合约漏洞修复的自动化,通常需要包含漏洞检测、补丁生成、补丁验证这三个过程。本专利技术通过调度现有的检测工具实现漏洞函数的定位;通过手动标注漏洞-修复函数对作为训练数据来微调ast-t5预训练模型,以修复需要进行复杂的多行代码修改的漏洞,其中,使用bpe分词技术解决超出词汇表的问题,使用束搜索算法来提高模型生成序列的质量;最后,对候选修复函数进行验证并输出gas消耗最低的有效修复函数。
2、为了实现上述目的,本专利技术的技术方案如下,基于ast-t5预训练模型的智能合约自动修复方法,所述方法包括以下步骤:
3、用于修复漏洞函数的模型的训练过程,
4、整个智能合约自动修复方法的执行过程。
5、其中,用于修复漏洞函数的模型的训练过程,具体如下:
6、(1)数据集构建,
7、本专利技术使用的数据集主要有三个来源,其一是开源网站上的数据集,包括github上的smartbugs-curated数据集以及huggingface上的reentrancy_solidity_function数据集,其中smartbugs-curated是完整的漏洞合约,reentrancy-solidity-function是漏洞函数;其二是现有的智能合约修复论文中的数据集,包括smartfix论文中的smartfix-benchmarks以及sguard+论文中的pvd数据集,这两个数据集都是完整的漏洞合约;最后是一个包含47000+现实世界真实智能合约的数据集,其中既包含漏洞合约也包含安全合约,首先使用slither静态分析工具对47000+个真实合约进行检测,由于slither是基于静态分析的检测工具,可以较快完成对大量合约的检测。由于该工具存在较多的误报,还需要人为对检测结果进行检查,从中筛选出真正的漏洞函数,其他几个完整漏洞合约的数据集都标记了漏洞位置,可以很轻易地找到漏洞函数。在获得了漏洞函数数据集后,需要对漏洞函数进行人为修复,构建出漏洞-修复函数对,作为模型的训练数据,以下是人为修复的几个修复准则:尽可能少地改变代码,尽可能选择gas消耗少的修复行为,尽可能符合智能合约开发的主流规范。
8、(2)数据预处理,
9、在得到漏洞-修复函数数据集之后,需要进行数据预处理,首先将excel格式的漏洞-修复函数对数据集转换成csv格式,漏洞函数和修复函数分别置于source,target列名下;然后对漏洞函数和修复函数进行格式处理,去除其中的换行符和多余的空格,这些字符的存在会影响模型的推理效果,这样就得到了csv格式的标准数据集;最后,将数据集按6:2:2的比例划分为训练集、验证集和测试集进行模型训练,
10、(3)bpe分词,
11、为了处理传统词汇表方法中,模型无法处理训练数据中未出现过的词汇的问题(也就是超出词汇表问题),本专利技术使用bpe分词技术,将词汇进一步划分成粒度更小的子词,通过子词的组合来覆盖更多的词汇,同时也能缩小词汇表的大小,有效减小模型的复杂度,
12、(4)模型微调,
13、本专利技术对ast-t5模型进行微调,通过调整训练参数找到在验证集上loss最小的模型,并在测试集上对模型的泛化能力进行评估,
14、(5)束搜索,
15、在模型的推理过程中,解码器并不是直接输出一段完整的文本序列,而是每次生成一个token,解码器根据编码器输出的上下文向量以及当前选择的token来预测下一个token的可能性。传统的贪心搜索算法每次都选择概率最高的词作为下本文档来自技高网...
【技术保护点】
1.一种基于AST-T5预训练模型的智能合约自动修复方法,其特征在于,所述方法包括以下步骤:
2.根据权利要求1所述的一种基于AST-T5预训练模型的智能合约自动修复方法,其特征在于,用于修复漏洞函数的模型的训练过程,具体如下:
3.根据权利要求1所述的一种基于AST-T5预训练模型的智能合约自动修复方法,其特征在于,整个智能合约自动修复方法的执行过程,具体如下:
4.根据权利要求3所述的一种基于AST-T5预训练模型的智能合约自动修复方法,其特征在于,对于包含一个以上漏洞的函数,在完成一个漏洞的修复后,在字典中去除已修复的漏洞类型并用修复后函数替换掉原来的漏洞函数代码,然后调用相应的漏洞修复模型进行修复、验证,重复这个过程直到所有漏洞都被修复。
5.根据权利要求3所述的一种基于AST-T5预训练模型的智能合约自动修复方法,其特征在于,对于只提供漏洞函数代码的情况,需要用户自行判断需要修复的漏洞类型并选择相应的漏洞修复模型进行修复,模型会输出若干可能的修复函数,由于缺少完整合约代码,无法进行编译和检测,但是模型会根据候选修复函数的可
6.基于AST-T5预训练模型的智能合约自动修复模型,其特征在于,用于实现权利要求1-5任意一项所述的一种基于AST-T5预训练模型的智能合约自动修复方法,所述模型包括漏洞检测定位模块、漏洞函数修复模块以及候选函数验证模块,
7.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于:所述处理器执行所述程序时实现如上述权利要求1至6中的任意一项所述的基于AST-T5预训练模型的智能合约自动修复方法。
8.一种计算机可读存储介质,其上存储有计算机指令,其特征在于:该计算机指令被处理器执行时实现如权利要求1-6中任一项所述的基于AST-T5预训练模型的智能合约自动修复方法。
...【技术特征摘要】
1.一种基于ast-t5预训练模型的智能合约自动修复方法,其特征在于,所述方法包括以下步骤:
2.根据权利要求1所述的一种基于ast-t5预训练模型的智能合约自动修复方法,其特征在于,用于修复漏洞函数的模型的训练过程,具体如下:
3.根据权利要求1所述的一种基于ast-t5预训练模型的智能合约自动修复方法,其特征在于,整个智能合约自动修复方法的执行过程,具体如下:
4.根据权利要求3所述的一种基于ast-t5预训练模型的智能合约自动修复方法,其特征在于,对于包含一个以上漏洞的函数,在完成一个漏洞的修复后,在字典中去除已修复的漏洞类型并用修复后函数替换掉原来的漏洞函数代码,然后调用相应的漏洞修复模型进行修复、验证,重复这个过程直到所有漏洞都被修复。
5.根据权利要求3所述的一种基于ast-t5预训练模型的智能合约自动修复方法,其特征在于,对于只提供漏洞函数代码的情况,需要用户自行判断需要修复的漏洞类型并选择相应...
【专利技术属性】
技术研发人员:张家海,李必信,王璐璐,孔祥龙,廖力,周颖,
申请(专利权)人:东南大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。