一种智能合约代码的自动化审计系统及方法与流程

文档序号:18835569发布日期:2019-10-09 05:13阅读:270来源:国知局
一种智能合约代码的自动化审计系统及方法与流程

本发明涉及信息安全技术领域,特别是涉及一种基于静态分析的以太坊智能合约代码的自动化审计系统及方法。



背景技术:

区块链技术狭义来讲,是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

随着区块链这一新兴技术的迅速发展,越来越多的个人与公司都开始接触并使用区块链,并且不断地有新的区块链应用涌现出来。然而,伴随着区块链技术的不断发展,区块链领域本身的安全问题逐渐凸显,与区块链相关的黑客攻击、洗钱等社会化安全问题日益突出,并且由于区块链本身与金融紧密相关,随着区块链的经济价值不断升高,不出问题则已,一出问题就是会导致巨额的金钱损失的大问题。

以太坊是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币提供去中心化的虚拟机来处理点对点合约。

智能合约作为第二代区块链最主要的组成部分,也是目前区块链技术实现中最有前景的领域,然而这项新技术面临着许多挑战,其中最不容忽视的就是安全问题。目前有不少基于区块链的以太坊平台上的智能合约应用,如社会经济平台的backfeed、去中心化预测市场augur和智能电网transactivegrid等,然而在不少应用的开发过程中,设计者只关注其功能性而未考虑其安全问题,导致应用存在有安全隐患,据权威机构统计,以太坊上光是因为智能合约安全漏洞而损失的金额至少在11亿美元以上,并且智能合约一旦出现安全问题,一切将无法挽回。

因此,在智能合约上线前对智能合约进行安全审计是重要且必要的一步,目前,传统的智能合约审计流程往往采用人工进行审计分析,然而人工审计存在着诸多问题,比如人力成本高、审计耗时久、容易忽视错误等,而且一旦人工审计在某一环节上忽视了单一错误就有可能导致数以百万计的金钱损失,更不用说由此而造成公司品牌和声誉的直接损失。



技术实现要素:

为克服上述现有技术存在的不足,本发明之目的在于提供一种智能合约代码的自动化审计系统及方法,以实现自动化对智能合约代码进行快速、准确、稳定、全面的安全审计的目的,大大提高准确率、审计速度、代码覆盖率,降低人力成本,并能准确定位潜在安全隐患,大大降低在人工智能合约审计环节上的耗时久、不全面等问题。

为达上述目的,本发明提出一种多智能合约代码的自动化审计系统,包括:

智能合约分析引擎服务器,用于获取待分析的智能合约代码,将智能合约源码编译成抽象语法树,并所述抽象语法树的数据分发到各智能合约分析模块;

多个智能合约分析模块,用于遍历并分析所述抽象语法树的元数据,根据分析结果判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至所述智能合约分析引擎服务器。

优选地,所述智能合约分析引擎服务器进一步包括:

智能合约代码获取单元,用于获取网页前端提交的所述待分析智能合约代码;

合约编译器,用于将所述待分析智能合约源码编译成抽象语法树;

分发单元,用于将生成的抽象语法树的元数据分发到各智能合约分析模块,并于接收到所述智能合约分析模块的安全隐患代码详情报告时,将其返回至网页前端。

优选地,所述合约编译器获取到所述待分析智能合约代码后,将其编译得到源码和字节码,然后对待分析智能合约源码进行词法分析和语法分析,生成所述抽象语法树。

优选地,所述合约编译器包括词法分析器以及语法分析器,所述词法分析器用于接收智能合约源码,并依赖于智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生特定规则的词法单元序列并将词法单元序列输出至语法分析器;所述语法分析器用于接收词法分析器输出的词法单元序列以及用于存储简单优先表,并将词法单元序列与简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,并结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树。

优选地,各智能合约分析模块进一步包括:

遍历分析单元,用于遍历所述抽象语法树的元数据,并逐个分析每个元数据,以判断该元数据是否存在安全隐患;

上下文判断单元,用于于所述遍历分析单元判断出某个元数据存在安全隐患时,通过预设规则判断是否需要结合上下文进行分析,如需要则对其对应的代码的上下文进行综合判断;

安全隐患详情生成单元,用于于所述上下文判断单元的判断结果为存在安全隐患时,获取存在安全隐患的代码行数、代码详情、安全隐患详情、安全隐患等级等详情数据,并将其打包成报告,返回至所述智能合约分析引擎服务器的分发单元。

优选地,所述上下文判断单元首先从存在安全隐患的元数据节点进行自底向上分析,根据缺陷规则库以及存在安全隐患的子树数据进行综合判断,若在向上的分析过程中遇到匹配的子树则进行标记;然后根据规则设定,是否需要结合下文进行判断,如需要则重新开始从有安全隐患的子树从上到下进行遍历,同样使用缺陷缺陷规则库以及存在安全隐患的子树数据进行综合判断,若在向下的分析过程中遇到匹配的子树则进行标记;最后根据规则判断标记是否满足要求,如满足则判断确实存在安全问题。

优选地,所述分发单元在各个智能合约分析模块分析完成后,将所述待分析智能合约代码存在的所有安全隐患打包成数组,返回到前端。

为达到上述目的,本发明还提供一种智能合约代码的自动化审计方法,包括:

步骤s1,利用智能合约分析引擎服务器获取待分析的智能合约代码,将智能合约源码编译成抽象语法树,并所述抽象语法树的数据分发到各智能合约分析模块;

步骤s2,利用各智能合约分析模块遍历所述抽象语法树的元数据,判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至智能合约分析引擎服务器;

步骤s3,于各智能合约分析模块分析完成后,将所述待分析智能合约代码存在的所有安全隐患打包成数组,返回到前端。

优选地,步骤s1进一步包括:

步骤s100,获取网页前端提交的所述待分析智能合约代码;

步骤s101,将所述待分析智能合约源码编译成抽象语法树;

步骤s102,将生成的抽象语法树的元数据分发到各智能合约分析模块。

优选地,步骤s2进一步包括:

步骤s200,利用各智能合约分析模块遍历所述抽象语法树的元数据,并逐个分析每个元数据,以判断该元数据是否存在安全隐患;

步骤s201,当智能合约分析模块判断出某个元数据存在安全隐患时,对其对应的代码的上下文进行综合判断;

步骤s202,于步骤s201的判断结果为存在安全隐患时,则获取存在安全隐患的代码行数、代码详情、安全隐患详情、安全隐患等级等详情数据,并将其打包成报告,返回至智能合约分析引擎服务器。

与现有技术相比,本发明一种智能合约代码的自动化审计系统及方法通过利用智能合约分析引擎服务器获取待分析的智能合约代码,将智能合约源码编译成抽象语法树,将所述抽象语法树的数据分发到各智能合约分析模块,并利用各智能合约分析模块遍历所述抽象语法树的元数据,判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至智能合约分析引擎服务器,本发明可以实现自动化对智能合约代码进行快速、准确、稳定、全面的安全审计的目的,大大提高了准确率、审计速度、代码覆盖率,并可以大大降低人力成本,准确定位潜在安全隐患,大大降低了在人工智能合约审计环节上的耗时久、不全面等问题,从而能在降低用户智能合约审计成本的前提下让智能合约开发者更加安心、放心。

附图说明

图1为本发明一种智能合约代码的自动化审计系统的系统架构图;

图2为本发明一种智能合约代码的自动化审计方法的步骤流程图;

图3为本发明具体实施例中步骤s1的细部流程图;

图4为本发明具体实施例中步骤s2的细部流程图;

图5为本发明具体实施例中智能合约代码的自动化审计流程图。

具体实施方式

以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。

图1为本发明一种智能合约代码的自动化审计系统的系统架构图。如图1所示,本发明一种多智能合约代码的自动化审计系统,包括:

智能合约分析引擎服务器10,用于获取待分析的智能合约代码,将智能合约源码编译成抽象语法树(abstractsyntaxtree,ast),并将所述抽象语法树的数据分发到各智能合约分析模块。

在本发明具体实施例中,网页前端获取待分析的智能合约代码,并将该待分析的智能合约代码提交到部署了智能合约分析引擎服务器的checksol路径,智能合约分析引擎服务器10则获取到所述待分析的智能合约代码。具体地,智能合约分析引擎服务器10进一步包括:

智能合约代码获取单元101,用于获取网页前端提交的所述待分析智能合约代码;

合约编译器102,用于将所述待分析智能合约源码编译成抽象语法(ast)树。在本发明具体实施例中,合约编译器102使用solc编译工具将智能合约源码编译成ast树。具体地,合约编译器102获取待分析智能合约代码后,将其编译得到源码和字节码,然后对待分析智能合约源码进行词法分析和语法分析,生成所述抽象语法树,在本发明具体实施例中,合约编译器102包括词法分析器以及语法分析器,所述词法分析器用于接收智能合约源码,并依赖于智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生特定规则的词法单元序列并将词法单元序列输出至语法分析器;所述语法分析器用于接收词法分析器输出的词法单元序列以及用于存储简单优先表,并将词法单元序列与简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,并结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树。

分发单元103,用于将生成的抽象语法树的元数据(包括语法树结构、执行分支、表达式结构、表达式参数等),分发到各智能合约分析模块20,并于接收到智能合约分析模块20的安全隐患详情报告时,返回至网页前端,以便用户查看,在本发明具体实施例中,所述元数据包括但不限于语法树结构、执行分支、表达式结构、表达式参数等。

智能合约分析模块20,用于遍历所述抽象语法树的元数据,判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至智能合约分析引擎服务器10。

在本发明具体实施例中,所述智能合约分析模块20包括但不限于以下种类:合约自杀分析模块、使用旧版本solidity编译器检测模块、以太坊自锁分析模块、低级别调用分析模块、重入分析模块、行内汇编分析模块、交易源分析模块、假充值分析模块、假随机数分析模块、除法精度分析模块、无效智能合约检测分析模块、使用被替代函数分析模块、未显示定义权限分析模块、循环复杂度分析模块、算术溢出分析模块、未检查转账结果分析模块。各智能合约分析模块20进一步包括:

遍历分析单元201,用于遍历所述抽象语法树的元数据,并逐个分析每个元数据,通过预设的缺陷规则库进行匹配以判断该元数据是否存在安全隐患。例如,在算术溢出分析模块中,当分析模块遍历到有算术赋值子树时,就会将该子树标记为存在安全隐患的代码。

上下文判断单元202,用于于遍历分析单元201判断出某个元数据存在安全隐患时,通过预设规则判断是否需要结合上下文进行分析,如需要则对其对应的代码的上下文进行综合判断。具体地说,进行上下文综合判断时,首先从存在安全隐患的元数据节点进行自底向上分析,根据缺陷规则库以及存在安全隐患的子树数据进行综合判断,如果在向上的分析过程中遇到匹配的子树则进行标记,然后根据规则设定,是否需要结合下文进行判断,如需要则重新开始从有安全隐患的子树从上到下进行遍历,同样使用缺陷缺陷规则库以及存在安全隐患的子树数据进行综合判断,如果在向下的分析过程中遇到匹配的子树则进行标记,最后根据规则判断标记是否满足要求,如满足则判断确实存在安全问题。

例如,当算术溢出分析模块检测到赋值语句并进行标记后,则向上溯源赋值语句中的算术子语句的左右计算变量值是否有在上文出现,如果有在上文出现,它的计算过程是否有经过安全计算验证限制它的计算结果范围,如果有限制计算结果范围则不存在安全问题,如果没有限制计算范围则存在安全问题。

安全隐患详情生成单元203,用于于上下文判断单元202的判断结果为存在安全隐患时,获取存在安全隐患的代码行数、代码详情、安全隐患详情、安全隐患等级等详情数据,并将其打包成报告,返回至智能合约分析引擎服务器10的分发单元103,当智能合约分析引擎服务器10的分发单元103等待各个分析模块分析完成后,将智能合约代码存在的所有安全隐患打包成数组,返回到前端,以便给用户查看。

图2为本发明一种智能合约代码的自动化审计方法的步骤流程图。如图2所示,本发明一种智能合约代码的自动化审计方法,包括:

步骤s1,利用智能合约分析引擎服务器获取待分析的智能合约代码,将智能合约源码编译成抽象语法树(abstractsyntaxtree,ast),并所述抽象语法树的数据分发到各智能合约分析模块。

在本发明具体实施例中,网页前端获取待分析的智能合约代码,并将该待分析的智能合约代码提交到部署了智能合约分析引擎服务器的checksol路径,智能合约分析引擎服务器则获取到所述待分析的智能合约代码。具体地,如图3所示,步骤s1进一步包括:

步骤s100,获取网页前端提交的所述待分析智能合约代码;

步骤s101,将所述待分析智能合约源码编译成抽象语法(ast)树。在本发明具体实施例中,使用solc编译工具将智能合约源码编译成ast树。具体地,当获取待分析智能合约代码后,利用合约编译器将其编译得到源码和字节码,然后对待分析智能合约源码进行词法分析和语法分析,生成所述抽象语法树,在本发明具体实施例中,合约编译器包括词法分析器以及语法分析器,所述词法分析器用于接收智能合约源码,并依赖于智能合约语言文法规则库中存储的不同编程语言的文法规则,对输入的字符串进行扫描与分解,识别合法的词素,产生特定规则的词法单元序列并将词法单元序列输出至语法分析器;所述语法分析器用于接收词法分析器输出的词法单元序列以及用于存储简单优先表,并将词法单元序列与简单优先表进行比较判断,得出词法单元序列所属的编程语言种类,并结合智能合约语言文法规则库中对应的文法规则,将词法单元序列中的词素生成抽象语法树。

步骤s102,将生成的抽象语法树的元数据分发到各智能合约分析模块。

步骤s2,利用各智能合约分析模块遍历所述抽象语法树的元数据,判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至智能合约分析引擎服务器。在本发明具体实施例中,智能合约分析模块包括以下种类:合约自杀分析模块、使用旧版本solidity编译器检测模块、以太坊自锁分析模块、低级别调用分析模块、重入分析模块、行内汇编分析模块、交易源分析模块、假充值分析模块、假随机数分析模块、除法精度分析模块、无效智能合约检测分析模块、使用被替代函数分析模块、未显示定义权限分析模块、循环复杂度分析模块、算术溢出分析模块、未检查转账结果分析模块。

具体地,如图4所示,步骤s2进一步包括如下步骤:

步骤s200,利用各智能合约分析模块遍历所述抽象语法树的元数据,并逐个分析每个元数据,以判断该元数据是否存在安全隐患。例如,在算术溢出分析模块中,当分析模块遍历到有算术赋值子树时,就会将该子树标记为存在安全隐患的代码。

步骤s201,当智能合约分析模块判断出某个元数据存在安全隐患时,通过预设规则判断是否需要结合上下文进行分析,如需要则对其对应的代码的上下文进行综合判断。具体地说,进行上下文综合判断时,首先从存在安全隐患的元数据节点进行自底向上分析,根据缺陷规则库以及存在安全隐患的子树数据进行综合判断,如果在向上的分析过程中遇到匹配的子树则进行标记,然后根据规则设定,是否需要结合下文进行判断,如需要则重新开始从有安全隐患的子树从上到下进行遍历,同样使用缺陷缺陷规则库以及存在安全隐患的子树数据进行综合判断,如果在向下的分析过程中遇到匹配的子树则进行标记,最后根据规则判断标记是否满足要求,如满足则判断确实存在安全问题。

例如,当算术溢出分析模块检测到赋值语句并进行标记后,则向上溯源赋值语句中的算术子语句的左右计算变量值是否有在上文出现,如果有在上文出现,它的计算过程是否有经过安全计算验证限制它的计算结果范围,如果有限制计算结果范围则不存在安全问题,如果没有限制计算范围则存在安全问题。

步骤s202,于步骤s201的判断结果为存在安全隐患时,则获取存在安全隐患的代码行数、代码详情、安全隐患详情、安全隐患等级等详情数据,并将其打包成报告,返回至智能合约分析引擎服务器,当步骤s201的判断结果为不存在安全隐患时,则返回步骤s200继续遍历下面的ast树。

步骤s3,于各智能合约分析模块分析完成后,将所述待分析智能合约代码存在的所有安全隐患打包成数组,返回到前端,以便用户查看。

图5为本发明具体实施例中智能合约代码的自动化审计流程图。如图5所示,该智能合约代码的自动化审计过程如下:

步骤s01将待监测的智能合约代码通过网页前端提交到部署了智能合约分析引擎服务器的checksol路径。

步骤s02智能合约分析引擎服务器接收到要分析的智能合约代码后使用solc编译工具将智能合约源码编译成ast树。

步骤s03智能合约分析引擎服务器的分发模块将ast树的元数据分发到各个智能合约分析模块进行分析

步骤s04当智能合约分析模块接收到ast树元数据后开始遍历ast树的数据进行分析,例如,在算术溢出分析模块中,当分析模块遍历到有算术赋值子树时,就会将该子树标记为存在安全隐患的代码。

步骤s05如果发现有安全隐患的代码时,会结合该处代码的上下文进行综合判断。例如:在上面算术溢出分析模块检测到赋值语句并进行标记后,会向上溯源赋值语句中的算术子语句的左右计算变量值是否有在上文出现,如果有在上文出现,它的计算过程是否有经过安全计算验证限制它的计算结果范围,如果有限制计算结果范围则不存在安全问题,如果没有限制计算范围则存在安全问题。

步骤s06如果最后的判断结果是智能合约代码不存在安全隐患,则返回步骤s04继续遍历下面的ast树。

步骤s07如果最后的判断是该安全问题确实存在后会将存在安全隐患的代码行数、代码详情、安全隐患详情、安全隐患等级等数据打包成报告,并返回到智能合约分析引擎服务器的分发模块。

步骤s08智能合约分析引擎服务器等待各个分析模块分析完成后,将智能合约代码存在的安全隐患打包成数组,返回到前端,以便给用户查看。

综上所述,本发明一种智能合约代码的自动化审计系统及方法通过利用智能合约分析引擎服务器获取待分析的智能合约代码,将智能合约源码编译成抽象语法树,将所述抽象语法树的数据分发到各智能合约分析模块,并利用各智能合约分析模块遍历所述抽象语法树的元数据,判断是否存在安全隐患的代码,以于判断存在安全隐患代码后,将存在安全隐患的代码详情返回至智能合约分析引擎服务器,本发明可以实现自动化对智能合约代码进行快速、准确、稳定、全面的安全审计的目的,大大提高了准确率、审计速度、代码覆盖率,并可以大大降低人力成本,准确定位潜在安全隐患,大大降低了在人工智能合约审计环节上的耗时久、不全面等问题,从而能在降低用户智能合约审计成本的前提下让智能合约开发者更加安心、放心。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。

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