当前位置: 首页 > 专利查询>扬州大学专利>正文

一种基于迁移学习的智能合约漏洞检测方法技术

技术编号:33631645 阅读:25 留言:0更新日期:2022-06-02 01:36
本发明专利技术公开了一种基于迁移学习的智能合约漏洞检测方法,该方法首先收集java源代码和智能合约源代码数据,并进行预处理建立标签,构建机器学习的样本集;然后将java样本集输入到模型中训练,学习java代码表示的特征及java漏洞的检测,针对检测智能合约代码的下游任务,重用java的预训练模型并进行微调,使其能够胜任智能合约漏洞的检测。本发明专利技术可以更加快速、自动地检测出Solidity智能合约是否存在漏洞。洞。洞。

【技术实现步骤摘要】
一种基于迁移学习的智能合约漏洞检测方法


[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)为了使所有单词的分数归...

【专利技术属性】
技术研发人员:薛佳雷张佳乐孙小兵李斌陈玮彤蔡杰
申请(专利权)人:扬州大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1