【技术实现步骤摘要】
一种基于迁移学习的智能合约漏洞检测方法
[0001]本专利技术属于软件安全领域,具体涉及一种基于迁移学习的智能合约漏洞检测方法。
技术介绍
[0002]随着以比特币为代表的区块链技术的蓬勃发展,区块链技术已经开始逐步超越可编程货币时代而进入智能合约时代。智能合约是将传统合约数字化,并运行在区块链平台上一种共识规则。具有去中心化、本身无法篡改的特点,对所有人可见,保证了智能合约的透明性。广泛应用于数字支付、云计算、物联网等众多领域。
[0003]但是相比于传统的软件,由于智能合约管理大量虚拟资产,如果其本身存在漏洞,被利用者发起攻击,而智能合约受到攻击后难以被迅速解决,就会造成巨大的经济损失。例如2016年6月发生的The DaoEther的重入安全漏洞造成6000万美元的损失,虽然开发者试图达成共识的解决方案,但是因为时限的原因没有能够挽回。
[0004]现有的智能合约漏洞检测方法大多依赖人工定义的专家规则,通过符号执行、污点分析和形式化验证等技术进行漏洞检测。这些方法都存在执行效率低,代码覆盖率低和检测周期 ...
【技术保护点】
【技术特征摘要】
1.一种基于迁移学习的智能合约漏洞检测方法,其特征在于,包括以下步骤:(1)在开源社区上收集java源代码,通过Etherscan平台收集Solidity智能合约源代码,分别处理为序列的形式,构建java数据集和Solidity智能合约数据集;(2)使用步骤(1)中的java数据集训练一个java代码漏洞检测的预训练CodeBERT模型;(3)保留步骤(2)中训练好的Encoder编码器中的部分参数,使用步骤(2)中的Solidity智能合约源代码数据集完成java预训练模型的微调过程,以实现迁移过程;(4)使用步骤(3)训练好的检测模型,输入智能合约代码,检测是否存在漏洞。2.根据权利要求1所述的基于迁移学习的智能合约漏洞检测方法,其特征在于,所述步骤(1)包括以下步骤:(1.1)在开源社区获取java源代码,在Etherscan平台获取带有标签的Solidity智能合约源代码;(1.2)通过编程语言漏洞检测工具检测收集到的java源代码,并根据检测结果对其进行标记,检测工具结果显示存在漏洞的java源代码标记为"1",否则标记为"0";(1.3)对于标记为存在漏洞的java样本进行人工审计,以确保样本标记的准确性;(1.4)将java源代码和Solidity智能合约源代码分别转化为“<自然语言文本>,<编程语言代码>”的序列形式,作为java数据集和智能合约数据集用于机器学习。3.根据权利要求1所述的基于迁移学习的智能合约漏洞检测方法,其特征在于,所述步骤(2)包括以下步骤:(2.1)将java数据集输入到CodeBERT模型中,将输入的单词序列进行词嵌入操作后变为词向量的表示;给每一个词向量添加位置编码;之后词向量流入Encoder编码器的Self
‑
Attention层;(2.2)在Encoder编码器的Self
‑
Attention层中,利用缩放的点积计算对每个词向量关注的权重;给定一个输入词向量i,表示每个标记的嵌入,创建三个向量:查询向量q
i
,关键向量k
i
,值向量v
i
;使用第i个输入的查询向量q
i
和输入句子中每一个单词的关键向量k
j
,通过点积计算关注度得分,针对第i个输入的关注度得分为:其中,d是q
i
和k
j
的维度,关注度得分决定了对第j个输入进行编码时,对第j个输入的关注程度;(2.3)为了使所有单词的分数归...
【专利技术属性】
技术研发人员:薛佳雷,张佳乐,孙小兵,李斌,陈玮彤,蔡杰,
申请(专利权)人:扬州大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。