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

一种基于动态执行信息分析的智能合约重入缺陷检测方法技术

技术编号:30232491 阅读:55 留言:0更新日期:2021-09-29 10:08
本发明专利技术涉及一种基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,所述方法包括以下步骤:步骤1)预处理待测合约;步骤2)构建攻击合约;步骤3)部署待测合约和攻击合约;步骤4)随机生成可执行交易;步骤5)收集动态执行信息;步骤6)分析动态执行信息,检测有害重入;步骤7)重复步骤4)—步骤6),若检测到有害重入,则合约存在重入缺陷,若执行时间executionTime大于测试时间限t,则合约安全。该技术方案提高了重入缺陷检测的自动化程度,该技术方案准确率高,误报率低,该方案代码覆盖率高。盖率高。盖率高。

【技术实现步骤摘要】
一种基于动态执行信息分析的智能合约重入缺陷检测方法


[0001]本专利技术涉及一种检测方法,具体涉及一种基于动态执行信息分析的智能合约重入缺陷检测方法,属于区块链系统的智能合约缺陷检测领域。

技术介绍

[0002]区块链技术因为其去中心化、持久性、匿名性和可审计性等特性,受到了各界的关注,被应用于数字货币、投票等多种场景,解决了数字交易领域对可信第三方的过度依赖问题。以太坊是当今应用最多的区块链平台之一,它支持开发人员编写智能合约以实现各种目的。但由于以太坊虚拟机的特性和用以编写智能合约的Solidity语言的复杂性,智能合约中往往存在着缺陷。重入缺陷是其中最为复杂,危害也最为严重的缺陷之一,曾经的the DAO事件,造成了超过6000万美元的损失,并迫使以太坊进行了硬分叉。
[0003]目前,已有的重入缺陷检测方法主要有:模式匹配、符号执行、污点分析、形式化验证等。模式匹配的方法,使用抽象语法树提取合约源码信息,将合约源码的语法、语义信息以xml、owl等中间形式存储起来,利用对应的查询语句构建缺陷模式,搜索源码中是否存在重入缺陷,然而重入缺陷的代码表示形式十分复杂,人为构建的缺陷模式难以覆盖所有可能,误报率较高。符号执行方法使用符号代替变量来模拟执行合约,探索合约可能执行的所有路径以发现重入缺陷,该方法的面临着路径爆炸和路径可达性分析两大难题,现有的工具大多没有考虑路径可达性,故而误报率较高。污点分析利用给关键数据打污点的方式,判断该数据是否被重复修改,以此判断是否存在重入缺陷,但现有的工具大多通过复现公链已有的交易或是人工在测试链上发交易来进行污点分析,难以自动化的对未上链的合约进行重入缺陷检测。形式化验证方法,利用数学模型验证合约的特性属性,其难度大,且建模过程难以自动化,需要大量人力的投入。因此,亟需一种自动化的、误报率低的智能合约重入缺陷检测方法。

技术实现思路

[0004]本专利技术正是针对现有技术中存在的问题,提供一种基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,该技术方案使用动态执行信息分析,检测以太坊平台下以Solidity语言编写的合约的重入缺陷,自动生成可执行交易,记录动态执行信息,构建合约调用链以发现重入,在发现重入后进一步分析动态执行信息,判断重入是否有害,以此检测合约重入缺陷。
[0005]为了实现上述目的,本专利技术的技术方案如下,一种基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,所述方法包括以下步骤:
[0006]步骤1)预处理待测合约;
[0007]编译待测合约,获取其字节码Bytecode和二进制接口信息ABI。分析二进制接口信息,获取待测合约每个函数的函数原型FunctionPrototype
i
,依据函数原型构建候选函数FunctionCandidate
i
={Function_name
i
,Function_selector
i
,Function_parameters
i
},
其中Function_name
i
为函数名,Function_selector
i
为函数选择器,Function_parameters
i
为函数所需的参数类型集合。函数选择器的计算公式为:
[0008]Function_selector=bytes4(keccak256(functionPrototype))
[0009]添加候选函数到函数候选池FunctionCandidatePool中。
[0010]步骤2)构建攻击合约;
[0011]重入指:在一笔交易执行过程中,合约A进行外部调用,调用合约B中函数,合约B又调用了合约A中函数的过程。
[0012]构建攻击合约Agent。Agent具备如下功能:Agent调用待测合约中以payable修饰的函数并转账,Agent调用testedContract中的任意函数,Agent通过fallback函数重入待测合约任意函数。
[0013]步骤3)部署待测合约和攻击合约;
[0014]发送交易,部署待测合约和攻击合约到测试链中,获取待测合约地址testedContractAddr和攻击合约地址AgentAddr;
[0015]步骤4)随机生成可执行交易;
[0016]随机选取候选池FunctionCandidatePool中的候选函数FunctionCandidate
i
和FunctionCandidate
j
(i、j可以相等),分别作为第一次调用的目标first和重入的目标reentrancy,根据候选函数FunctionCandidate中的参数类型Function_parameters,随机生成合法的参数值paraValue构成可执行交易。
[0017]步骤5)收集动态执行信息;
[0018]获取步骤4)中生成的可执行交易在以太坊虚拟机中每一步执行的动态执行信息stepInfo
i
={opcode,stack,storage,callerAddr,calleeAddr},其中opcode为EVM执行的指令,stack为当前栈中的变量值,storage为当前存贮中的变量值,callerAddr为调用的发起者地址,calleeAddr为调用的目标地址。
[0019]步骤6)检测有害重入;
[0020]依据步骤5)中获取的callerAddr、calleeAddr信息,构建合约调用链callList,其中节点表示合约在测试链上的地址,边表示调用关系。若合约调用链中两次出现待测合约地址,则发生重入。若发生重入,判断重入后是否进行转账操作或多次修改storage中相同地址的变量值,若有上述操作,则重入有害,反之安全。
[0021]步骤7)重复步骤4)

步骤6),若检测到有害重入,则合约存在重入缺陷,若执行时间executionTime大于测试时间限t,则合约安全.
[0022]作为本专利技术的一种改进,步骤6)中所述的检测有害重入,具有如下步骤:
[0023](1)依据步骤5)中获取的callerAddr、calleeAddr信息,构建合约调用链callList,其中节点表示合约在测试链上的地址,边表示调用关系,基于callList判断是否发生重入。具体如下,
[0024]1)从执行日志中获取stepInfo的callerAddr和calleeAddr;
[0025]2)判断合约调用链callList是否为空,若callList为空,执行步骤3),否则执行步骤4);
[0026]3)添加callerAddr和calleeAddr到callList中,返回步骤1);
[0027]4)判断callerAddr是否与callList链尾节点存储的地址相同,若相同执行步骤...

【技术保护点】

【技术特征摘要】
1.一种基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,其特征在于,所述方法包括以下步骤:步骤1)预处理待测合约;步骤2)构建攻击合约;步骤3)部署待测合约和攻击合约;步骤4)随机生成可执行交易;步骤5)收集测试用例的动态执行信息;步骤6)检测有害重入;步骤7)重复步骤4)

步骤6),若检测到有害重入,则合约存在重入缺陷,若执行时间executionTime>测试时间限t,则合约安全。2.根据权利要求1所述的基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,其特征在于,步骤1)预处理待测合约;具体如下,编译待测合约,获取其字节码Bytecode和二进制接口信息ABI,分析二进制接口信息,获取待测合约每个函数的函数原型FunctionPrototype
i
,依据函数原型构建候选函数FunctionCandidate
i
={Function_name
i
,Function_selector
i
,Function_parameters
i
},其中Function_name
i
为函数名,Function_selector
i
为函数选择器,Function_parameters
i
为函数所需的参数类型集合,函数选择器的计算公式为:Function_selector=bytes4(keccak256(functionPrototype))添加候选函数到函数候选池FunctionCandidatePool中。3.根据权利要求2所述的基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,其特征在于,步骤2)构建攻击合约;具体如下,构建攻击合约Agent,Agent具备如下功能:Agent调用待测合约中以payable修饰的函数并转账,Agent调用testedContract中的任意函数,Agent通过fallback函数重入待测合约任意函数。4.根据权利要求3所述的基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,其特征在于,步骤3)部署待测合约和攻击合约;具体如下,发送交易,部署待测合约和攻击合约到测试链中,获取待测合约地址testedContractAddr和攻击合约地址AgentAddr。5.根据权利要求3或4所述的基于动态执行信息分析的以太坊智能合约重入缺陷检测方法,其特征在于,步骤4)随机生成可执行交易;具体如下,随机选取候选池FunctionCandidatePool中的候选函数FunctionCandidate
i
和FunctionCan...

【专利技术属性】
技术研发人员:李必信潘振宇胡甜媛
申请(专利权)人:东南大学
类型:发明
国别省市:

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

1