买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:扬州大学
摘要:本发明公开了一种基于迁移学习的智能合约漏洞检测方法,该方法首先收集java源代码和智能合约源代码数据,并进行预处理建立标签,构建机器学习的样本集;然后将java样本集输入到模型中训练,学习java代码表示的特征及java漏洞的检测,针对检测智能合约代码的下游任务,重用java的预训练模型并进行微调,使其能够胜任智能合约漏洞的检测。本发明可以更加快速、自动地检测出Solidity智能合约是否存在漏洞。
主权项:1.一种基于迁移学习的智能合约漏洞检测方法,其特征在于,包括以下步骤:1在开源社区上收集java源代码,通过Etherscan平台收集Solidity智能合约源代码,分别处理为序列的形式,构建java数据集和Solidity智能合约数据集;2使用步骤1中的java数据集训练一个java代码漏洞检测的预训练CodeBERT模型;3保留步骤2中训练好的Encoder编码器中的部分参数,使用步骤1中的Solidity智能合约源代码数据集完成java预训练模型的微调过程,以实现迁移过程;4使用步骤3训练好的检测模型,输入智能合约代码,检测是否存在漏洞;所述步骤2包括以下步骤:2.1将java数据集输入到CodeBERT模型中,将输入的单词序列进行词嵌入操作后变为词向量的表示;给每一个词向量添加位置编码;之后词向量流入Encoder编码器的Self-Attention层;2.2在Encoder编码器的Self-Attention层中,利用缩放的点积计算对每个词向量关注的权重;给定一个输入词向量i,表示每个标记的嵌入,创建三个向量:查询向量qi,关键向量ki,值向量vi;使用第i个输入的查询向量qi和输入句子中每一个单词的关键向量kj,通过点积计算关注度得分,针对第i个输入的关注度得分为: 其中,d是qi和kj的维度,关注度得分决定了对第j个输入进行编码时,对第j个输入的关注程度;2.3为了使所有单词的分数归一化,都为正值且和为1,使用通过softmax函数得到规一化分数: 将每个值向量乘以softmax分数,以关注语义上相关的单词和弱化不相关的单词,并将加权值相加: 为了加快处理速度,计算使用矩阵形式: 2.4Self-Attention层的输出连接到一个参数矩阵W,然后由线性层线性投影:A=concatAttentioniQi,Ki,ViW使用Mult-headedAttention多头注意力机制,得到融合了所有注意力头信息的矩阵Z,然后将该层的向量矩阵Z输出到前馈神经网络层中;2.5在Encoder编码器的前馈神经网络中,编码器首先将输入的向量矩阵Z转换成一组注意向量,关键向量k和值向量v的组合,输入到Encoder解码器中使用;2.6在Decoder解码器中的每个解码阶段,每次都从输出序列中输出一个元素,重复该过程,直到特殊符号出现完成解码器的输出;每一次的输出会随后反馈到底部的解码器,然后将位置编码嵌入一并添加到解码器的输入中,以指示单词的位置;最后输出的是浮点数向量,输入到Linear层;2.7在Linear线性层中,将解码器堆栈产生的向量投影到更大的logits向量中,logits设置特定的单元格宽度,每个单元格对应一个唯一单词的分数,将分数传递到Softmax层;在Softmax层中,将分数转换为概率,全部为正,和为1.0,然后选择概率最高的单元格,并生成与之关联的单词作为该时间步的输出;所述步骤3包括以下步骤:3.1使用步骤2中训练好的java预训练模型,输入带标签的智能合约数据集,访问预先训练好的Encoder编码器参数以获得java代码漏洞知识;3.2在Solidity智能合约漏洞检测过程中对模型进行微调,以学习和适应来自java预训练模型的代码语义和漏洞知识;重用预先训练好的编码器来学习智能合约代码的表示,解码器从预先训练的编码器接收智能合约漏洞检测的结果,以实现下游的检测任务;3.3对检测出的结果,按智能合约样本的漏洞标签进行对照,以保证模型的正确性。
全文数据:
权利要求:
百度查询: 扬州大学 一种基于迁移学习的智能合约漏洞检测方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。