一种智能合约漏洞检测的方法、系统与流程

文档序号:18031612发布日期:2019-06-28 22:43阅读:1788来源:国知局
一种智能合约漏洞检测的方法、系统与流程

本发明涉及智能合约技术领域,尤其涉及一种智能合约漏洞检测的方法、系统。



背景技术:

以太坊(ethereum)是一个开源的公共区块链平台,他拥有区块链的去中心化、共识、分布式账本等特点。它为所有开发者提供了基于solidity语言的智能合约解决方案平台,它上面提供各种模块让用户来创建属于自己项目的智能合约。

智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。

目前市场中对智能合约漏洞检测没有较优的方法是基于人工审计智能合约。但是这样的缺点明显:首先,人工检测的方式,检测结果完全依靠检测人的技术水平,导致检测结果参差不齐,多人核审结果不一致等问题;其次,人工检测的费用极高,市场上的人工检测费用少则数千,多则数十万,这样的费用不是大众开发者所能承受的;第三,人工方面的工程排期、代码难度、技术水平等维度上对检测时间影响是非常大的,检测漏洞的周期可能会非常长。



技术实现要素:

有鉴于此,本发明提供了针对目前的智能合约检测方案所存在的结果不准确、成本高、周期长等缺点,提出了一种智能合约漏洞检测的方法、系统,用以提升开发者的开发效率,增强代码安全性,减少开发者的时间和投入成本。

本发明的技术方案如下:一种智能合约漏洞检测的方法,所述方法包括:上传智能合约代码文件;

对智能合约代码文件执行智能合约漏洞的检测,并返回所述智能合约漏洞检测结果;

所述智能合约漏洞包括可重入攻击漏洞、整数数值溢出漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、短地址攻击漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞中的一种或多种。

相应的,所述智能合约代码文件为.sol文件格式。

相应的,所述检测结果包括智能合约代码对应的合约方法类错误和/或智能合约代码中的漏洞类型。

相应的,所述执行智能合约漏洞检测包括:静态分析、动态分析和基于svm的动静混合分析的一种或多种;

基于静态分析、动态分析和基于svm的动静混合分析的一种或多种分析结果,来最终确定检测结果。

此外,为实现上述目的,本发明还提出一种智能合约漏洞检测的系统,所述系统包括客户端、服务端;

其中,客户端,上传智能合约代码文件至服务端;

服务端,对智能合约代码文件执行智能合约漏洞的检测,并返回所述智能合约漏洞检测结果至客户端;

所述的智能合约漏洞包括可重入攻击漏洞、整数数值溢出漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、短地址攻击漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞中的一种或多种。

相应的,所述智能合约代码文件为.sol文件格式。

相应的,所述检测结果包括智能合约代码对应的合约方法类错误和/或智能合约代码中的漏洞类型。

相应的,所述服务端执行智能合约漏洞检测包括:静态分析、动态分析和基于svm的动静混合分析的一种或多种;

基于静态分析、动态分析和基于svm的动静混合分析的一种或多种分析结果,来最终确定检测结果。

在本发明实施例的方案中,通过上传智能合约代码文件;由服务端对智能合约代码文件执行智能合约漏洞的检测,并返回所述智能合约漏洞检测结果;所述智能合约漏洞包括可重入攻击漏洞、整数数值溢出漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、短地址攻击漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞中的一种或多种。本发明,通过客户端上传智能合约程序文件至服务端执行漏洞的自动检测,从而解放人力,检测方便,速度快,准确率高。

附图说明

图1为本发明实施例提供的智能合约漏洞检测的功能实现拓扑图;

图2为本发明实施例提供的智能合约漏洞检测结果-合约方法类错误展示图;

图3为本发明实施例提供的智能合约漏洞检测结果-合约漏洞类型展示图。

图4为本发明实施例提供的智能合约漏洞检测结果中具体的合约漏洞类型对照图。

具体实施方式

有鉴于此,本发明提供了针对目前的智能合约检测方案所存在的成本高、周期长等缺点,提出了一种智能合约漏洞检测的方法、装置,用以提升开发者的开发效率,增强代码安全性,减少开发者的时间和投入成本。

本发明的技术方案如下:一种智能合约漏洞检测的方法,所述方法包括上传智能合约代码文件;

相应的,所述智能合约代码文件为.sol文件格式。

如图1所示为本实施例智能合约漏洞检测方法的功能实现拓扑图,具体地,通过本地客户端确定待审计的.sol智能合约文件上传至服务器端,

本实施例,智能合约漏洞检测方法是针对使用solidity编写的运行在以太坊网络的智能合约,通过一系列的技术检测制成的引擎,实现完全自动化分析该智能合约中存在的漏洞情况。面对目前复杂多样的智能合约市场,保证自己项目的智能合约安全性是无可厚非的,所以对智能合约安全检测也是必不可少的,本发明将给所有开发者一个更简单易用并高效的工具。

相应的,对智能合约代码文件执行智能合约漏洞的检测,并返回所述智能合约漏洞检测结果。

服务端执行对对智能合约代码文件执行智能合约漏洞的检测,并将漏洞检测结果返回至客户端。

本实施例,智能合约程序文件一般以.sol文件形式上传至服务器端,在服务器端,通过solc编译solidity编写的运行在以太坊网络的智能合约。其中,solc是solidity源码库的构建目标之一,它是solidity的命令行编译器。你可使用solc--help命令来查看它的所有选项的解释。该编译器可以生成各种输出,范围从简单的二进制文件、汇编文件到用于估计“gas”使用情况的抽象语法树(解析树)。

相应的,所述检测结果包括智能合约代码对应的合约方法类错误和/或智能合约代码中的漏洞类型。

参见附图2,为本发明实施例一、二提供的智能合约漏洞检测结果-合约方法类错误的系统展示图;其中“viewoffunctions”展示了合约方法类错误,是以程序中的功能函数类来直观的显示合约代码的问题。图3为本实施例提供的智能合约漏洞检测结果-合约漏洞类型展示图,其中,“viewofchecklist”将漏洞检测审计的结果按照漏洞的种类进行分类显示,从而得知代码中存在的问题比重。

进一步,参见附图4,为本实施例提供的智能合约漏洞检测结果中具体的合约漏洞类型对照图。所述智能合约漏洞包括可重入攻击漏洞、整数数值溢出漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、短地址攻击漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞中的一种或多种。

本实施例,服务器端执行智能合约漏洞检测的形式包括:静态分析、动态分析和基于svm的动静混合分析的一种或多种;并基于静态分析、动态分析和基于svm的动静混合分析的一种或多种分析结果,来最终确定检测结果。

其中,静态分析,包括不执行智能合约程序,对源代码进行分析漏洞;静态分析是指在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷。静态分析一般采用数据分析流、机器学习、语义精简等技术,能够快速准确地检测所有的代码级别可执行路径组合,直接面向源码,分析多种问题。

相应的,所述静态分析包括:词法分析、语法分析、抽象语法树分析、语义分析、控制流分析、数据流分析、污点分析以及无效代码分析。

词法分析:从左至右一个字符、一个字符的读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(token)流,生成相关符号列表。

语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树。

抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相关代码。

语义分析:对结构上正确的源程序进行上下文有关性质的审查。

控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。

数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息。

污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。

无效代码分析,根据控制流图可分析孤立的节点部分为无效代码。

本实施例,服务器端执行的动态分析检测智能合约漏洞,包括建立智能合约的输入、输出的对应关系,执行智能合约程序。

代码动态调试技术,一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,挖掘例如整数溢出,数组溢出,越权等各类代码漏洞。首先构造能够触发漏洞的代码输入参数,然后真实运行或虚拟机模拟运行被测试的程序代码,对其运行情况进行动态分析,建立输入输出的对应关系,以达到检测的目的。代码流和数据流是动态调试技术通常要特别关注的两个方面。

本实施例,智能合约程序文件一般以.sol文件形式输入,并通过solc编译solidity编写的运行在以太坊网络的智能合约;进一步构造abi调用,在使用abi(合约应用二进制接口)调用合约函数时,传入的abi会被编码成calldata。合约应用二进制接口(abi)指定了一个通用的编码模式。calldata由functionsignature和argumentencoding两部分组成。通过读取calldata的内容,evm可以得知需要执行的函数,以及函数的传入值,并作出相应的操作。对于evm而言,交易的输入数据(calldata)只是一个字节序列。evm内部不支持调用方法。进一步,执行智能合约的opcode,获得编译进opcode的参数结果,从而获取执行结果以分析出漏洞。

本实施例,服务器端执行的基于svm的动静混合分析,包括收集存在的智能合约的样本,执行svm学习模型进行训练,得到缺陷模型。

由于代码的复杂性,传统的代码检测方式误报漏报率较高,不论是采用动态或静态的检测方法,检测过程无记忆,即使采用动静结合的方法也只是优势互补,无法结合缺陷库信息来判定。我们提出基于svm(支持向量机)的动静检测方法,由于采用交互式的方式来测试漏洞,我们称之为isst(interactivesoliditysecuritytesting)。

svm是一种监督学习模型,其主要用于数据分类和回归分析。给定一组训练示例,每个示例被标记为属于两个类别中的一个或另一个,svm训练算法构建一个模型,将新示例分配给一个类别或另一个类别,使其成为非概率二元线性分类器。svm模型是将示例表示为空间中的点,映射使得单独类别的示例除以尽可能宽的明确间隙。然后将新的示例映射到同一空间,并根据它们落在哪个边缘预测属于哪个类别。

通过事先搜集存在漏洞的代码样本,进入svm学习模型进行训练,执行漏洞样本的特征提取,并生成漏洞缺陷模型,经过模型初始化以后,执行相似度计算,对模型中的参数重估,并判断模型收敛性,若重新估算后的参数代入模型中的模型收敛性符合要求,则形成缺陷模型;若重新估算后的参数代入模型中的模型收敛性不符合要求,则返回到参数重估步骤,继续执行参数重新估算直到模型收敛,从而形成缺陷模型。

本实施例,根据静态分析、动态分析和/或基于svm的动静混合分析中的一种或多种分析结果,确定最终的智能合约漏洞的检测结果。

具体地,通过综合三种分析方式同时进行执行分析的智能合约的漏洞,并综合罗列,形成最终的智能合约漏洞的检测结果清单,并输出返回至客户端。

此外,为实现上述目的,本发明还实施一种智能合约漏洞检测的系统,所述系统包括客户端、服务端;

其中,客户端,上传智能合约代码文件至服务端;

服务端,对智能合约代码文件执行智能合约漏洞的检测,并返回所述智能合约漏洞检测结果至客户端;

所述的智能合约漏洞包括可重入攻击漏洞、整数数值溢出漏洞、条件逻辑风险验证、访问控制权限风险验证、返回值风险验证、随机数误用风险验证、执行顺序依赖漏洞、时间戳依赖漏洞、短地址攻击漏洞、平台接口误用漏洞、拒绝服务攻击检测漏洞、多重签名合约漏洞中的一种或多种。

相应的,所述智能合约代码文件为.sol文件格式。

相应的,所述检测结果包括智能合约代码对应的合约方法类错误和/或智能合约代码中的漏洞类型。

相应的,所述服务端执行智能合约漏洞检测包括:静态分析、动态分析和基于svm的动静混合分析的一种或多种;

具体地,通过综合三种分析方式同时进行执行分析的智能合约的漏洞,并综合罗列,形成最终的智能合约漏洞的检测结果清单,并输出返回至客户端。

本领域普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1