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

一种以太坊智能合约安全测试方法技术

技术编号:35070796 阅读:12 留言:0更新日期:2022-09-28 11:32
本发明专利技术提供一种以太坊智能合约安全测试方法。该方法包括基于深度学习构建智能合约交易生成模型和信息反馈引导的模糊测试两个步骤,首先使用符号执行方法,构造以太坊智能合约交易序列数据集,然后使用神经网络模型,在智能合约交易序列数据集上进行训练,得到智能合约交易生成模型;再以最大化覆盖智能合约为测试目标,对智能合约进行信息反馈引导的模糊测试,根据测试用例的执行结果,检测智能合约的安全漏洞。该方法结合静态安全测试与动态安全测试方法,能高度覆盖智能合约代码,并能有效检测智能合约中存在的安全漏洞。效检测智能合约中存在的安全漏洞。

【技术实现步骤摘要】
一种以太坊智能合约安全测试方法


[0001]本专利技术属于软件工程中的软件测试领域,尤其涉及一种以太坊智能合约安全测试方法。

技术介绍

[0002]随着区块链2.0时代的到来,主流区块链平台以太坊上频繁发现由不安全编程引起的智能合约安全漏洞,给平台用户造成了重大的财产损失。保障以太坊智能合约安全性的最有效的手段是在智能合约被部署到以太坊区块链之前,对其进行充分地安全测试,找出安全漏洞并修复。智能合约安全测试中,一个交易序列就是一个测试用例。模糊测试是目前以太坊智能合约最为主流的动态安全测试技术,目前的模糊测试工具主要以基于变异的灰盒模糊测试为主,使用轻量级的程序插桩技术,利用执行测试用例得到的合约覆盖信息,来引导测试用例的变异过程,但是这对智能合约的覆盖仍旧是有限的,这些模糊测试方法要么难以覆盖具有严格的条件守卫的智能合约分支代码,要么难以有效地变异交易序列以探索智能合约可能的状态空间,因而无法全面地检测智能合约中的安全漏洞。

技术实现思路

[0003]本专利技术结合静态和动态测试方法,基于深度学习和信息反馈引导的模糊测试,提出了一种以太坊智能合约安全测试方法。首先基于深度学习构建智能合约交易生成模型,然后进行信息反馈引导的模糊测试。包括以下步骤。
[0004]步骤1,基于深度学习构建智能合约交易生成模型;使用神经网络模型,在智能合约交易序列数据集上进行训练,得到智能合约交易生成模型,利用此模型生成达到智能合约深层次状态的交易序列,为后续信息反馈引导的模糊测试步骤提供由智能合约交易生成模型构造的高质量的初始种子。所述步骤1包含以下步骤:步骤1.1 收集并确定用于训练的智能合约;步骤1.2 预处理用于训练的智能合约;编译、部署智能合约,通过轻量级的静态分析技术生成智能合约的控制流程图,为覆盖率的计算和符号执行方法的执行奠定基础。
[0005]步骤1.3 构造智能合约交易序列数据集;使用符号执行方法,基于覆盖率优化搜索的启发式搜索策略分析每个智能合约的控制流程图,为每个智能合约生成一条能最大覆盖合约代码的最长的交易序列,从而构造出达到智能合约深层次状态的交易序列数据集。
[0006]步骤1.4 训练和评价智能合约交易生成模型;确定合适的神经网络结构,在智能合约交易序列数据集上训练智能合约交易生成模型,评价模型效果。
[0007]步骤1.5 保存模型;
得到智能合约交易生成模型。
[0008]步骤2,信息反馈引导的模糊测试;使用智能合约交易生成模型迭代生成交易,构造交易序列,形成模糊测试初始种子。运行测试用例,检测漏洞并收集智能合约运行时信息,然后根据信息反馈从执行过的测试用例中选择合适的测试用例,更新模糊测试种子,再对选择的测试用例进行交叉和变异,产生大量新的测试用例。所述步骤2包含以下步骤:步骤2.1 预处理被测试的智能合约源代码;编译、部署智能合约,通过轻量级的静态分析技术生成智能合约的控制流程图,控制流程图用于获取测试用例实现的合约基本块覆盖率。并同时生成被测合约的历史交易特征矩阵,特征矩阵用于模型输入。
[0009]步骤2.2 加载智能合约交易生成模型;步骤2.3使用智能合约交易生成模型迭代生成交易,构造交易序列,形成模糊测试初始种子;将被测合约的历史交易特征矩阵输入到模型中,得到具体交易,并更新特征矩阵。迭代这个过程,构造探索合约深层次状态的交易序列。得到一条交易序列后,重置合约运行状态,构造新的智能合约交易序列。最终得到由多条交易序列构成的模糊测试初始种子。
[0010]步骤2.4 运行测试用例,检测漏洞,收集智能合约运行时信息;执行本次迭代中生成的所有测试用例,统计每个测试用例的基本块覆盖率,计算每个测试用例与其未覆盖的基本块之间的分支距离。并根据预定义的测试预言,判断合约中是否存在有各类安全漏洞。
[0011]步骤2.5 检查是否达到测试终止条件;若达到指定的测试时间限制,执行步骤2.8,若未达到,则执行步骤2.6和步骤2.7。
[0012]步骤2.6 基于覆盖率和分支距离反馈信息选择测试用例更新模糊测试种子;根据测试用例执行后收集的信息,以提升覆盖率和减小分支距离为引导目标,从执行过的测试用例中选择合适的测试用例,更新模糊测试种子。执行此步骤的目的是提高种子质量,使交叉和变异种子能生成更多覆盖合约的测试用例,进而提高合约基本块的覆盖率,特别是具有严格条件守卫的合约分支中的基本块。
[0013]步骤2.7 交叉和变异模糊测试种子,得到大量新的测试用例;对模糊测试种子进行交叉和变异,产生大量新的测试用例,返回步骤2.4。
[0014]步骤2.8 输出漏洞检测报告;报告本次测试实现的覆盖率、检测到的安全漏洞和相应测试用例。
[0015]本方法针对以太坊智能合约的安全测试问题,首先使用符号执行方法,构造以太坊智能合约交易序列数据集,再使用神经网络模型,在智能合约交易序列数据集上进行训练,得到智能合约交易生成模型;然后以最大化覆盖智能合约为测试目标,对智能合约进行信息反馈引导的模糊测试,根据测试用例的执行结果,检测安全漏洞。该方法结合静态安全测试与动态安全测试方法,能高度覆盖智能合约代码,并能有效检测智能合约中存在的安全漏洞,具有良好的应用效果。
附图说明
[0016]图1为本专利技术方法的总体流程示意图。
具体实施方式
[0017]为了更清楚地展示本专利技术的目的和技术方案,下面将结合附图更加详细地说明本专利技术的具体实施方式。
[0018]步骤1,基于深度学习构建智能合约交易生成模型,图1中的S1步骤;所述步骤1包含以下步骤:步骤1.1 收集并确定用于训练的智能合约;通过以太坊的官方接口,遍历以太坊最近的700万个区块获取智能合约的源代码,经过筛选确定用于训练的智能合约。
[0019]步骤1.2 预处理用于训练的智能合约;根据抓取的合约信息,构造Truffle(以太坊开发框架)项目,通过Truffle将合约源码编译为以太坊虚拟机字节码,并部署在本地私有以太坊网络上,使其能够正常运行。
[0020]步骤1.3构造智能合约交易序列数据集;使用符号执行方法,基于覆盖率优化搜索的启发式搜索策略分析智能合约,为每个智能合约生成一条能最大覆盖合约代码的最长的交易序列。在交易的产生过程中,利用程序插桩,得到当前历史交易的特征矩阵,最终加入到智能合约交易序列数据集中的是智能合约历史交易的特征矩阵与下一个具体交易的二元组序列。
[0021]步骤1.4 训练和评价基于神经网络的智能合约交易生成模型;模型的输入为交易序列,其中交易序列中的每个元素是智能合约历史交易的特征矩阵,通过图卷积网络获取合约方法的嵌入表示,然后用长短期记忆网络学习和保存合约状态用作分类子模型的输入,最后由各个子模型输出交易各元素的概率分布,通过采样输出具体的合约交易。将数据集按6:2:2的比例划分训练集、验证集和测试集。在训练时,使用交叉熵损失函数计算损失,并使用自适应的Adam梯度下降算法优化模型输出与预期输出间的误差,设置隐本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种以太坊智能合约安全测试方法,其特征在于,包括以下步骤:步骤1,基于深度学习构建智能合约交易生成模型,所述步骤1包含以下步骤:步骤1.1 收集并确定用于训练的智能合约;步骤1.2 预处理用于训练的智能合约;步骤1.3 使用符合执行方法构造智能合约交易序列数据集;步骤1.4 训练和评价智能合约交易生成模型;步骤1.5 保存模型;步骤2,信息反馈引导的模糊测试,所述步骤2包含以下步骤:步骤2.1 预处理被测的智能合约源代码;步骤2.2 加载智能合约交易生成模型;步骤2.3 使用模型迭代生成交易,构造交易序列,形成模糊测试初始种子;步骤2.4 运行测试用例,检测漏洞,收集智能合约运行时信息;步骤2.5 检查是否达到测试终止条件,若达到指定的测试时间限制,执行步骤2.8,若未达到,则执行步骤2.6和步骤2.7;步骤2.6 基于覆盖率和分支距离反馈信息选择测试用例更新模糊测试种子;步骤2.7 交叉和变异模糊测试种子得到大量新的测试用例,再返回步骤2.4;步骤2.8 输出漏洞检测报告。2.根据权利要求1所述的方法...

【专利技术属性】
技术研发人员:杨秋辉赵明敏
申请(专利权)人:四川大学
类型:发明
国别省市:

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

1