【技术实现步骤摘要】
一种针对EOSIO智能合约的漏洞检测方法及系统
[0001]本专利技术属于区块链智能合约
,具体为一种针对EOSIO智能合约灰盒模糊测试方法及系统,处理对象为EOSIO智能合约字节码及ABI文件,可检测EOSIO智能合约字节码中存在的安全漏洞。
技术介绍
[0002]针对智能合约漏洞检测的研究根据其检测方法,可分为以下三类:
[0003]形式化验证方法通过语法分析、控制流分析与数据流分析对智能合约源码或字节码进行扫描,并建立抽象语法树、控制流图、数据流图,进而采用形式化工具对智能合约的执行过程进行建模、分析和验证。此类工具的代表性工具有EVulHunter和Slither等,EVulHunter将EOSIO智能合约的WebAssembly字节码文件进行解析以生成控制流图,并使用预定义模式匹配控制流图中匹配与智能合约漏洞相关的代码块。EVulHunter仅支持两种EOSIO智能合约安全漏洞,其使用的预定义模式依赖于已知的攻击手段,一旦攻击手段发生变化,EVulHunter必须重新生成预定义模式,且预定义模式的生成必须手工从智能合约中提取和总结,限制了漏洞支持类型的扩展。Slither是面向以太坊智能合约的漏洞检测工具,Slither将以太坊智能合约编译后的Solidity抽象语法树作为输入,经过数据整合获得智能合约的类型继承图、控制流图,分析以太坊智能合约中变量、函数的依赖关系,变量的读写以及函数权限控制等信息,并从这些信息中搜索与安全漏洞匹配的模式。Tikhomirov等人提出了SmartCheck,一 ...
【技术保护点】
【技术特征摘要】
1.一种针对EOSIO智能合约的漏洞检测方法,该方法包括:步骤1:对EOSIO区块链平台的链API与WebAssembly虚拟机进行插桩,插桩代码在智能合约运行期间记录其链API调用信息、代码覆盖率信息;步骤2:对有源代码的智能合约,将智能合约源代码进行编译,生成智能合约ABI文件和WebAssembly字节码文件,对于无源代码的智能合约,直接读取其ABI文件和WebAssembly字节码文件;步骤3:对智能合约WebAssembly字节码文件进行插桩,插桩代码在智能合约运行期间记录其执行路径;步骤4:将智能合约字节码文件部署到本地区块链节点,解析智能合约ABI文件,获取智能合约的函数列表;步骤5:根据步骤4获得的智能合约函数列表生成测试用例,并在区块链上执行;所述测试用例包括智能合约中函数列表的方法或函数,以及调用该方法或函数所需的参数;步骤6:记录智能合约执行路径和代码覆盖率,判断执行路径是否符合测试预言,从而判断报告智能合约中的安全漏洞;所述代码覆盖率即代码执行率,所述测试预言指存在漏洞的智能合约可能的执行路径;步骤7:根据代码覆盖率对测试用例进行变异,返回步骤5进行重复操作。2.如权利要求1所述的一种针对EOSIO智能合约的漏洞检测方法,其特征在于,所述步骤1中的具体插桩方法为:步骤A1:对EOSIO区块链平台的每个链API,在其实现函数入口处,插入代码记录链API调用信息,并将调用信息写入到日志文件;调用信息具体包括,链API的调用者、链API的调用时间以及调用链API使用的参数;步骤A2:对WebAssembly虚拟机寻址和跳转逻辑进行插桩,其插桩方式为:搜索WebAssembly虚拟机源代码中处理跳转和函数调用的代码位置,即修改程序计数器PC的代码位置,并在这些位置处插入计算程序计数器PC的当前地址和跳转后的地址的代码,记录程序计数器PC的当前地址和跳转后的地址;步骤A3:在步骤A2搜索到的插桩位置,插入代码对WebAssembly虚拟机的程序计数器PC的当前位置P1和跳转位置P2先进行一次异或运算,再对P1和P2进行一次移位运算,生成一个整数用于标识被测试智能合约的一条执行路径;步骤A4:在步骤A2搜索到的插桩位置,插入统计被测试智能合约执行路径的代码,插入的代码将步骤A3生成的被测试合约的执行路径记录到智能合约代码覆盖率信息文件。3.如权利要求1所述的一种针对EOSIO智能合约的漏洞检测方法,其特征在于,所述步骤3中的插桩方法为:步骤B1:对智能合约WebAssembly字节码文件进行反汇编获得WAST文件,然后提取智能合约导入的函数签名;步骤B2.在WAST文件中搜索插桩位置,搜索插桩位置的具体确定方式为:搜索每个WAST文件中的函数定义区,对每个函数,定位该函数栈分配的指令序列;其中,栈分配指令序列的特征:首先是一条将栈指针变量读取到栈上的全局变量读取指令,再是一条将栈长度读取到栈上的32位整数入栈指令,最后是一条将栈指针变量减去栈长度变量生成新的栈指针变量的32位整数减法指令,这条32位整数减法指令结束的位置即为插桩位置;
步骤B3:在WAST文件函数导入段插入智能合约导入的函数签名;步骤B4:在WAST文件中的步骤B2搜索到的每个插入位置,插入智能合约导入的函数调用的堆栈分配代码、函数调用代码和堆栈清理代码;步骤B5:将WAST文件重新编译为WebAssembly文件,完成插桩。4.如权利要求1所述的一种针对EOSIO智能合约的漏洞检测方法,其特征在于,所述步骤6中获取智能合约的执行路径的方法为:读取步骤1所述的对EOSIO区块链平台的链API的插桩代码产生的链API调用信息日志文件,并读取步骤3所述的对对智能合约WebAssembly字节码的插桩代码产生的智能合约执行路径日志文件,两者共同组成智能合约的执行路径。5.如权利要求1所述的一种针对EOSIO智能合约的漏洞检测方法,其特征在于,所述步骤6中计算代码覆盖率...
【专利技术属性】
技术研发人员:刘洋洋,周健飞,陈厅,蒋天星,宋书玮,程曦,吴昊,
申请(专利权)人:电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。