一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于对智能合约进行审计的方法及装置与流程

2022-02-22 10:15:34 来源:中国专利 TAG:


1.本说明书实施例涉及计算机技术领域,具体地,涉及用于对智能合约进行审计的方法及装置。


背景技术:

2.智能合约是一种以信息化方式传播、验证或者执行合同的计算机协议,智能合约广泛应用于区块链技术中。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
3.智能合约通过合约开发工具(比如,cloud ide)创建后,便可以被部署到区块链网络上。而智能合约一旦在区块链网络上发布后,智能合约的代码便无法再修改。因此,为了确保区块链上交易安全以及整个区块链系统被入侵,在智能合约发布之前,需要对智能合约进行审计,以避免智能合约出现错误、漏洞和风险等。


技术实现要素:

4.鉴于上述,本说明书实施例提供了用于对智能合约进行审计的方法及装置。通过本说明书实施例提供的方案,根据不同的审计角度来确定智能合约的审计任务,不同的审计任务采用对应审计类型的审计方式,从而有针对性地对各个审计任务进行审计,提高了审计的准确度。此外,按照指定审计类型对应的审计方式进行审计,实现了有针对性的审计,避免了重复审计和不必要的审计,从而避免浪费审计资源。
5.根据本说明书实施例的一个方面,提供了一种用于对智能合约进行审计的方法,包括:获取待审计的智能合约;根据所述智能合约的指定审计类型来确定针对所述智能合约的审计任务,所述指定审计类型包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种,每个审计任务对应一种指定审计类型;针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应的审计方式对所述智能合约进行审计;以及输出各个审计任务的审计结果,其中,所述合约静态检测对应的审计方式包括静态分析方式,所述合约逻辑检测对应的审计方式包括在合约运行状态下所进行的动态分析方式,所述合约漏洞检测对应的审计方式包括针对指定合约漏洞的形式化检测方式。
6.根据本说明书实施例的另一方面,还提供一种用于对智能合约进行审计的装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器上的计算机程序,所述至少一个处理器执行所述计算机程序来实现:获取待审计的智能合约;根据所述智能合约的指定审计类型来确定针对所述智能合约的审计任务,所述指定审计类型包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种,每个审计任务对应一种指定审计类型;针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应的审计方式对所述智能合约进行审计;以及输出各个审计任务的审计结果,其中,所述合约静态检测对应的审计方式包括静态分析方式,所述合约逻辑检测对应的审计方式包括在合约运行状态下所进行的动态分析方式,所述合约漏洞检测对应的审计方式包括针对指定合
约漏洞的形式化检测方式。
7.根据本说明书实施例的另一方面,还提供一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的用于对智能合约进行审计的方法。
8.根据本说明书实施例的另一方面,还提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的用于对智能合约进行审计的方法。
附图说明
9.通过参照下面的附图,可以实现对于本说明书实施例内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
10.图1示出了根据本说明书实施例提供的用于对智能合约进行审计的方法的一个示例的流程图。
11.图2示出了根据本说明书实施例的审计任务并行执行的一个示例的示意图。
12.图3示出了根据本说明书实施例的审计任务并行执行的另一个示例的示意图。
13.图4示出了根据本说明书实施例的用于对智能合约进行审计的装置的一个示例的方框图。
14.图5示出了根据本说明书实施例的用于实现智能合约审计方法的电子设备的方框图。
具体实施方式
15.以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书实施例内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
16.如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
17.智能合约是一种以信息化方式传播、验证或者执行合同的计算机协议,智能合约广泛应用于区块链技术中。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
18.智能合约通过合约开发工具(比如,cloud ide)创建后,便可以被部署到区块链网络上。而智能合约一旦在区块链网络上发布后,智能合约的代码便无法再修改。因此,为了确保区块链上交易安全以及整个区块链系统被入侵,在智能合约发布之前,需要对智能合约进行审计,以避免智能合约出现错误、漏洞和风险等。
19.目前,针对智能合约的审计方式主要是静态分析方式,任何智能合约都可以直接以静态分析方式进行审计。然而,静态分析仅仅是在不运行智能合约的情况下对合约代码在形式上进行审计,这样的审计方式比较片面且准确度较低,导致智能合约的审计效果不好。
20.鉴于上述,本说明书实施例提供了一种用于对智能合约进行审计的方法及装置。在该方法中,可以获取待审计的智能合约,根据智能合约的指定审计类型来确定针对智能合约的审计任务,指定审计类型包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种,每个审计任务对应一种指定审计类型;针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应的审计方式对智能合约进行审计;以及输出各个审计任务的审计结果,其中,合约静态检测对应的审计方式包括静态分析方式,合约逻辑检测对应的审计方式包括在合约运行状态下所进行的动态分析方式,合约漏洞检测对应的审计方式包括针对指定合约漏洞的形式化检测方式。通过本说明书实施例提供的方案,根据不同的审计角度来确定智能合约的审计任务,不同的审计任务采用对应的审计类型的审计方式,从而有针对性地对各个审计任务进行审计,提高了审计的准确度。此外,按照指定审计类型对应的审计方式进行审计,实现了有针对性的审计,避免了重复审计和不必要的审计,从而避免浪费审计资源。
21.图1示出了根据本说明书实施例提供的用于对智能合约进行审计的方法的一个示例100的流程图。
22.图1示出的方法可以由智能合约审计平台来执行,智能合约审计平台可以用于对智能合约进行审计。智能合约审计平台可以具有输入端和输出端,输入端用于接收待审计的智能合约,并将所接收的待审计的智能合约传输给智能合约审计平台以进行审计,输出端可以输出审计结果。
23.如图1所示,在110,可以获取待审计的智能合约。
24.在本说明书实施例中,待审计的智能合约的编程语言可以是solidity、c 、go、java等多种编程语言中的任一种。基于此,本说明书实施例所提供的方法可以对不同编程语言的智能合约进行审计。
25.在本说明书实施例中,所获取的智能合约可以是智能合约的源码。智能合约的获取方式可以是用户输入,还可以是由用于开发智能合约的智能合约ide(integrated development environment,集成开发环境)输入。在一个示例中,智能合约审计平台的输入端可以与智能合约ide通信连接,智能合约ide在开发并完成一个智能合约后,可以将该智能合约的源码发送给智能合约审计平台,以由智能合约审计平台对该智能合约进行审计。
26.在一个示例中,智能合约审计平台可以与多个不同的智能合约ide通信连接,不同智能合约ide所采用的编程语言可以不同。智能合约审计平台可以从不同智能合约ide接收不同编程语言的智能合约,可以对不同编程语言的智能合约进行审计。
27.在本说明书实施例的一个示例中,在获取到待审计的智能合约后,可以识别所获取的智能合约的编程语言。在一个示例中,智能合约审计平台可以具有多编程语言的识别能力,能够识别并理解各个编程语言所编程的代码。在另一个示例中,智能合约审计平台中包括具有多编程语言识别能力的设备。
28.然后,可以将所获取的智能合约的源码编译成中间代码,中间代码可以包括字节
码或者汇编语言。通过将待审计的智能合约编译成通用的中间代码,便于智能合约审计平台理解智能合约,从而便于智能合约审计平台针对不同编程语言的智能合约进行审计,提高了智能合约审计的通用性。
29.在一个示例中,在将智能合约的源码编译成中间代码后,还可以将中间代码反编译成指定编程语言的源码,指定编程语言可以是便于智能合约审计平台审计的编程语言,或者是更通用的语言。例如,指定编程语言可以是c语言,c语言能够和其他编程语言交互,且各个编程语言之间能够通过c语言的socket和pipe接口来实现互操作。
30.通过上述示例,本说明书实施例提供的审计方法能够覆盖不同编程语言的智能合约,从而能够对不同编程语言的智能合约进行审计,提高了智能合约审计的通用性。
31.在120,根据智能合约的指定审计类型来确定针对智能合约的审计任务。
32.在本说明书实施例中,指定审计类型可以包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种。
33.合约静态检测是在不运行智能合约的代码的方式下,对智能合约的代码进行扫描,以验证代码的规范性、安全性等指标。合约静态检测是对智能合约的代码进行形式化的检测。合约逻辑检测是在运行智能合约的方式下对智能合约进行逻辑检测。合约漏洞检测是对智能合约中指定类型的合约漏洞进行有针对性的检测。
34.在一个示例中,指定审计类型可以根据智能合约的代码量、复杂度和重要程度中的至少一个因素确定。
35.针对代码量,智能合约的代码量与指定审计类型的数量成正比。待审计的智能合约的代码量越少,则指定审计类型的数量可以相应的较少;代码量越多,则指定审计类型的数量可以相应的较多。在一个示例中,可以将代码量分为三个等级:代码量较少的第一等级,代码量中等的第二等级,以及代码量较多的第三等级。例如,代码量少于或等于10行属于第一等级,代码量大于10行且少于或等于50行属于第二等级,代码量大于50行属于第三等级。
36.代码量较少的第一等级可以对应一个指定审计类型,即,对于属于第一等级的代码量的智能合约,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择一种审计类型作为该智能合约的指定审计类型。进一步地,在一个示例中,可以直接将合约静态检测确定为属于第一等级的代码量的智能合约的指定审计类型。
37.代码量中等的第二等级可以对应两个指定审计类型,即,对于属于第二等级的代码量的智能合约,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择两种审计类型作为该智能合约的指定审计类型。
38.代码量较多的第三等级可以对应三个指定审计类型,即,对于属于第三等级的代码量的智能合约,可以将合约静态检测、合约逻辑检测和合约漏洞检测三种审计类型都作为该智能合约的指定审计类型。
39.针对智能合约的复杂度,复杂度可以包括时间复杂度和空间复杂度,根据时间复杂度和空间复杂度来确定智能合约的代码的复杂度。在一个示例中,代码的复杂度可以用5个阶段表示,该5个阶段按照复杂度从低到高的顺序依次为:o(1),o(log(n)),o(n),o(n log(n)),o(n2)。
40.智能合约的复杂度越高,则对应指定审计类型可以越多。例如,对于复杂度为o(1)
的智能合约,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择一种审计类型作为该智能合约的指定审计类型。对于复杂度为o(log(n))和o(n)的智能合约,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择两种审计类型作为该智能合约的指定审计类型。对于复杂度为o(n log(n))和o(n2)的智能合约,可以将合约静态检测、合约逻辑检测和合约漏洞检测三种审计类型都作为该智能合约的指定审计类型。
41.针对智能合约的重要程度,重要程度可以自定义,对于重要程度较低的智能合约,可以仅指定较少数量的审计类型作为指定审计类型;对于重要程度较高的智能合约,则可以指定较多数量的审计类型作为指定审计类型,实现对智能合约更全面的审计,从而提高智能合约的可靠性和安全性。
42.在另一个示例中,指定审计类型可以根据审计需求确定。审计需求可以是用户自定义的。审计需求可以包括审计时间、审计效率、智能合约重要程度、审计的全面程度等。例如,在智能合约的重要程度低、审计的全面程度要求低以及审计时间较短的情况下,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择一种审计类型作为该智能合约的指定审计类型。在智能合约的重要程度高、审计的全面程度要求高以及审计时间较长的情况下,可以从合约静态检测、合约逻辑检测和合约漏洞检测中选择两种审计类型作为该智能合约的指定审计类型,甚至进一步地,可以将合约静态检测、合约逻辑检测和合约漏洞检测都确定为指定审计类型。
43.在本说明书实施例中,按照指定审计类型所确定的审计任务与指定审计类型一一对应,每个审计任务对应一种指定审计类型,即,每个审计任务针对所对应的指定审计类型来进行审计。例如,智能合约的指定审计类型包括有三种:合约静态检测、合约逻辑检测和合约漏洞检测,则可以确定三个审计任务,其中,合约静态检测类型对应审计任务a,合约逻辑检测对应审计任务b,合约漏洞检测对应审计任务c。审计任务a是对智能合约进行合约静态检测,审计任务b是对智能合约进行合约逻辑检测,审计任务c是对智能合约进行合约漏洞检测。
44.在本说明书实施例的一个示例中,在确定出审计任务后,可以生成审计任务,并将所生成的审计任务提交到任务队列中待执行。任务队列中可以存储有其他智能合约的审计任务。一个待审计的智能合约可以对应生成多个审计任务,该多个审计任务可以同时执行,从而提高智能合约的审计速度和效率。
45.在一个示例中,任务队列中各个审计任务对应的智能合约有优先级,智能合约的优先级可以根据智能合约的重要程度、审计时间等因素来确定。优先级高的智能合约所对应的审计任务可以优先执行,优先级较低的智能合约所对应的审计任务可以按照任务队列中的排序依次执行。
46.进一步地,在一个示例中,同一智能合约的多个审计任务相互之间的优先级也可以不同。审计任务的优先级根据审计任务的重要程度、审计准确度等因素来确定,例如,审计任务的重要程度越高、审计准确度越高,则该审计任务的优先级越高。比如,针对合约逻辑检测的审计任务和针对合约漏洞检测的审计任务的重要程度和审计准确度都高于针对合约静态检测的审计任务,因此,针对合约逻辑检测的审计任务和针对合约漏洞检测的审计任务的优先级都高于针对合约静态检测的审计任务的优先级。
47.在130,针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应
的审计方式对智能合约进行审计。
48.在本说明书实施例中,不同的审计任务对应的指定审计类型不同,不同的指定审计类型所采用的审计方式也不同。具体地,合约静态检测类型对应的审计方式包括静态分析方式,合约逻辑检测类型对应的审计方式包括在合约运行状态下所进行的动态分析方式,合约漏洞检测类型对应的审计方式包括针对指定合约漏洞的形式化检测方式。
49.下面针对每一种审计方式进行详细说明。
50.针对静态分析方式
51.在所针对的审计任务的指定审计类型是合约静态检测时,可以将智能合约的源码编译成中间代码,便于后续针对中间代码进行静态分析。此外,在源码被编译成中间代码时,还可以生成抽象语法树(abstract syntax code,ast)。抽象语法树是源码的抽象语法结构的树状表示,抽象语法树上的每个节点可以表示源码中的一种结构,抽象语法树包括了源码的调用关系、执行环境、上下文等结构。通过抽象语法树能够全面地表示出智能合约源码中的结构。
52.然后,可以按照抽象语法树对智能合约的中间代码进行指定分析类型的静态分析。指定分析类型的静态分析可以包括别名分析、污点分析、数据流分析、指针分析、函数调用检测、随机数检查、整型溢出检查、权限检查、拒绝服务检查中的至少一种。
53.针对每一种指定分析类型的静态分析,按照抽象语法树所进行的静态分析可以覆盖智能合约中的所有结构,从而能够对智能合约进行全面地分析。例如,对智能合约进行数据流分析时,从抽象语法树可以清晰地确定出数据的流通路径,从而对该数据的流通路径进行分析,以检测出数据的非正常流向,从而避免针对智能合约的攻击行为。又例如,对智能合约进行整型溢出检查时,可以从抽象语法树中找到所有定义的参数,然后在代码的形式上检查这些参数是否存在溢出的风险。
54.在一个示例中,在对智能合约的静态分析中,可以将上述所有分析类型确定为指定分析类型,从而可以对智能合约进行上述所有分析类型的静态分析,根据每一种指定分析类型对智能合约进行一次静态分析,每一种指定分析类型的静态分析都能够得到相应的一份分析结果,进而能够实现对智能合约的全面静态分析。
55.在另一个示例中,可以从上述的分析类型的静态分析中选择部分分析类型作为指定分析类型,然后仅针对该部分分析类型对智能合约进行静态分析。选择指定分析类型的方式可以是指定的。通过选择部分分析类型作为指定分析类型进行静态分析,可以有针对性地进行静态分析,从而提高了静态分析的效率。
56.最后,每一种指定分析类型的静态分析可以对应生成分析结果,将所有指定分析类型的静态分析对应的分析结果综合即得到针对智能合约的静态分析的分析结果。在一个示例中,可以根据分析结果的严重程度对各个指定分析类型对应的分析结果进行排序,按照严重程度从高到低的顺序依次排列各个指定分析类型的分析结果,方便用户了解严重程度较高的分析结果,从而可以及时地处理所分析出的错误、攻击行为等。
57.通过静态分析,无需运行智能合约,从智能合约的代码形式上进行分析,实现了一种简便且快速的合约审计方式。此外,通过利用抽象语法树,可以更全面地对智能合约进行分析,提高了静态分析的全面性和准确度。
58.针对动态分析方式
59.动态分析方式是在智能合约的运行状态下对智能合约进行分析的一种方式。在动态分析方式中,可以对智能合约进行插桩,以在智能合约的代码中插入自定义的内容,在智能合约的运行过程中,所插入的自定义的内容也会被执行,根据执行的状况可以检测出异常情况,从而实现对智能合约的审计。
60.在一个示例中,首先,可以将智能合约的源码编译成中间代码,再对智能合约的中间代码进行插桩处理。插桩的位置可以是指定参数变异位置,指定参数变异位置可以包括调用序列、参数列表、参数值和元数据中的至少一个,调用序列、参数列表、参数值和元数据中都具有所定义的参数。在插桩完成后,可以在所插桩的位置处(即,指定参数变异位置处)进行参数变异处理,参数变异可以是随机变异。然后,运行经过参数变异处理后的智能合约,以对智能合约进行审计。
61.在该示例中,在插桩位置处的参数变异可以认为是一个输入,然后在智能合约运行过程中监测该参数变异对应的输出,该输出与输入一一对应。通过参数变异对应的输出,可以检测智能合约是否异常。此外,若智能合约存在异常,在运行过程中会因异常而终止运行,此时可以检测各个参数变异的输出,从而对异常进行分析。
62.在另一个示例中,可以在智能合约中的指定信息监测位置处进行插桩,指定信息监测位置可以包括待检测的函数位置、程序代码的第一条语句位置、分支语句的开始位置、循环语句的开始位置、下一个入口语句之前的语句位置、程序代码的结束语句位置、分支语句的结束位置和循环语句的结束位置等。其中,待检测的函数位置可以包括待检测的调用函数位置、函数声明或定义的位置、转账函数位置等。
63.然后,在插桩位置处插入探针代码,探针代码可以用于对所在位置处的数据量、性能等进行监测,并获取更多的智能合约的运行信息。之后,运行包括有探针代码的智能合约。在智能合约的运行过程中,探针代码也同时执行,执行中的探针代码可以采集运行中的智能合约的运行信息,比如,请求信息、响应信息、完整的数据流信息和堆栈信息等。然后根据所采集到的运行信息来检测智能合约是否存在异常。通过插入探针代码的方式,可以更精确地检测智能合约中的异常,并定位异常所在的位置。
64.通过合约逻辑检测方式,可以对智能合约中的数值溢出、重放攻击、重排攻击等异常进行审计。例如,在插桩时将unit类型的变量赋予大于2
256
的值,则在智能合约运行过程中该值会直接变成0,从而导致数值溢出的异常。又例如,重放攻击是在主链上创建一个交易后,在分叉链上重复同样的交易,比如,转账。再比如,在一个函数中nonce值可以预判,则可能导致重放攻击。因此,在实际运行智能合约过程中通过插入的探针代码可以监测是否重复相同的交易,若存在多次重复的交易,则表示智能合约存在重放攻击。又例如,重排攻击是矿工或其他方通过将自己的信息插入列表(list)或映射(mapping)中来与智能合约参与者竞争,从而攻击者有机会将自己的信息存储到合约中。列表和映射可以用来表示参与者各方所选择的值,通过运行智能合约能够检测出智能合约中攻击者的信息,从而避免重排攻击。
65.针对形式化检测方式
66.形式化检测是利用基于数学的符号系统给出智能合约的代码正确性、安全性的严格定义和形式证明,通过用来刻画各种漏洞特征的特征属性来判断智能合约是否存在该类型的合约漏洞。
67.在形式化检测方式中,用于刻画漏洞特征的特征属性可以由漏洞检测模型来表征,漏洞检测模型中的模型特征包括所针对合约漏洞的属性特征。漏洞检测模型可以是机器模型,通过样本训练的方式训练出针对各种类型漏洞的各种漏洞检测模型,每种漏洞检测模型用于检测一种类型的合约漏洞。具体地,可以获取针对一种合约漏洞的训练样本集,然后利用该训练样本集对模型进行训练,得到用于检测该类型合约漏洞的漏洞检测模型。
68.在本说明书实施例中,可以预先训练多个针对不同类型漏洞的漏洞检测模型,不同类型的合约漏洞可以包括接口漏洞、地址漏洞、调用函数漏洞和合约执行方法漏洞等。
69.在形式化检测方式中,当所针对的审计任务的指定审计类型是合约漏洞检测时,可以在智能合约的源码中插入针对待检测的指定合约漏洞的断言代码。断言代码用于表征漏洞检测的预期,在形式化检测中,断言代码所表征的内容可以作为漏洞检测模型进行漏洞检测的参考标签,用来与漏洞检测模型的漏洞检测结果进行比对,以确定漏洞检测结果与断言代码的预期是否一致。待检测的指定合约漏洞可以包括接口漏洞、地址漏洞、调用函数漏洞和合约执行方法漏洞中的至少一种。
70.然后,可以将插入断言代码的智能合约生成合约形式化模型。合约形式化模型是智能合约的一种表现形式,合约形式化模型通过漏洞检测模型能够接受的形式语言来描述该智能合约,该合约形式化模型中包括有智能合约的所有结构和特征。
71.在生成合约形式化模型后,可以根据待检测的指定合约漏洞从预设的多个漏洞检测模型中选择用于检测待检测的指定合约漏洞的漏洞检测模型。每一种指定合约漏洞对应选取一个漏洞检测模型。当指定合约漏洞包括有多种类型的漏洞时,每一种类型的漏洞选取一个对应的漏洞检测模型,用于对该类型的漏洞进行由针对性的检测。例如,待检测的指定合约漏洞是地址漏洞时,可以选取用于检测地址漏洞的漏洞检测模型。
72.接着,使用所选择的漏洞检测模型对形式化模型进行检测,并输出检测结果。所输出的检测结果可以包括是否存在指定合约漏洞、与断言代码的预期是否一致等信息。
73.以地址漏洞为例,由于地址漏洞的存在可能会导致智能合约中的短地址攻击,例如,用户创建一个钱包的地址为【0xiofa8d97756as7df5sd8f75g8675ds8gsdg0】,然后该用户在使用过程中将地址中的最后一位去掉后来进行交易,比如,购买代币,即,所使用的地址是【0xiofa8d97756as7df5sd8f75g8675ds8gsdg】,系统通过补0的方式来满足数据包长度的要求,在对地址补0的同时也会对交易金额补0,从而导致交易金额变化。针对地址漏洞的漏洞检测模型可以检测出交易接收地址的位数是否满足地址长度,从而可以检测出地址漏洞,避免短地址攻击。
74.以调用函数漏洞为例,调用函数漏洞可以导致重入攻击,重入攻击是通过没有限制gas的call函数作为转账函数而导致的攻击。针对调用函数漏洞的漏洞检测模型可以检测出调用函数使用call函数的漏洞,从而避免重入攻击。
75.通过上述形式化检测方式,可以对智能合约中的指定合约漏洞进行有针对性的检测,减少了其他不必要的或者不需要的检测,提高了漏洞检测的效率。此外,使用具有与指定合约漏洞的漏洞特征匹配的模型特征的漏洞检测模型,可以更准确地检测所针对的指定合约漏洞,从而提高漏洞检测准确性。
76.在本说明书实施例的一个示例中,智能合约的各个审计任务可以并行执行,这样可以提高智能合约的整体审计效率。
77.图2示出了根据本说明书实施例的审计任务并行执行的一个示例的示意图。如图2所示,智能合约审计平台可以包括有多个审计执行设备,每一种审计方式对应由一个审计执行设备来具体执行,对智能合约的静态分析可以由静态分析设备来执行,对智能合约的动态分析可以由动态分析设备来执行,对智能合约的形式化检测可以有形式化检测设备来执行。
78.智能合约审计平台还可以包括有审计任务分发平台,在确定出针对智能合约的审计任务后,审计任务分发平台可以将审计任务对应下发给各个审计执行设备,由各个审计执行设备来并行执行各个审计任务。在各个审计任务完成后,可以将各个审计执行设备的审计结果进行汇总。
79.以图2为例,智能合约审计平台确定出三个审计任务:针对合约静态检测的审计任务1、针对合约逻辑检测的审计任务2以及针对合约漏洞检测的审计任务3,然后,审计任务分发平台将审计任务1下发给静态分析设备,将审计任务2下发给动态分析设备,将审计任务3下发给形式化检测设备。静态分析设备、动态分析设备以及形式化检测设备并行执行各个审计任务。
80.在本说明书实施例的另一个示例中,静态分析方式、动态分析方式和形式化检测方式按照串行组合方式根据所确定的审计任务依次对智能合约进行审计。
81.图3示出了根据本说明书实施例的审计任务并行执行的另一个示例的示意图。如图3所示,智能合约审计平台中包括有多个审计执行设备,每一种审计方式均有一个审计执行设备来执行,对智能合约的静态分析可以由静态分析设备来执行,对智能合约的动态分析可以由动态分析设备来执行,对智能合约的形式化检测可以有形式化检测设备来执行。
82.静态分析方式、动态分析方式和形式化检测方式可以按照串行组合方式排列,静态分析方式、动态分析方式和形式化检测方式三者串行组合的顺序可以不限定。例如,可以先静态分析方式,再动态分析方式,最后形式化检测方式。
83.在一个示例中,静态分析方式、动态分析方式和形式化检测方式串行组合的方式可以通过静态分析设备、动态分析设备和形式化检测设备来实现,静态分析设备、动态分析设备和形式化检测设备按照指定顺序依次排列。例如,如图3所示。
84.待审计的智能合约可以按照设备排列的顺序依次输入给各个审计执行设备,以使每一个审计执行设备对智能合约进行审计,并输出相应的审计结果。以图3为例,智能合约先输入给静态分析设备,静态分析设备对该智能合约进行静态分析。在静态分析完成后,智能合约再输入给动态分析设备,动态分析合并再对智能合约进行动态分析。在动态分析完成后,智能合约再输入给形式化检测设备,形式化检测设备对智能合约进行形式化检测。在形式化检测完成后,即完成了全部的合约审计。
85.在一个示例中,可以根据所确定的审计任务按照审计方式串行组合方式依次对智能合约进行审计。对于没有的审计任务,该审计任务对应审计方式可以不用进行审计。基于此,智能合约在输入给审计执行设备之前,可以判断所确定的审计任务中是否存在该审计方式对应的审计任务,若不存在,则可以跳过该审计执行设备,继续下一个审计执行设备。若存在,则可以将智能合约输入给该审计执行设备来进行合约审计。
86.以图3为例,当仅确定针对静态分析的审计任务和针对形式化检测的审计任务时,智能合约首先输入给静态分析设备以进行静态分析,在静态分析完成后,由于不需要执行
针对动态分析的审计任务,可以跳过该动态分析设备,将智能合约输入给形式化检测设备以进行形式化检测。
87.在140,输出各个审计任务的审计结果。
88.可以将各个审计任务的审计结果综合在一起,即得到智能合约的审计结果。在一个示例中,可以根据审计任务的权重来对输出的各个审计结果进行排序。具体地,可以按照权重从大到小的顺序,依次排列各个审计任务对应的审计结果。在另一个示例中,可以根据所输出的各个审计结果的严重程度来对输出的各个审计结果进行排序。具体地,可以按照严重程度由高倒地的顺序来依次排列各个审计结果。在另一个示例中,可以根据各个审计任务的权重和所输出的各个审计结果的严重程度,对输出的各个审计结果进行排序。例如,可以先按照审计任务的权重来对各个审计任务的审计结果进行排序,然后,针对每一个审计任务,当该审计任务中有多个审计结果时,对于该多个审计结果可以根据审计结果的严重程度来进行排序。
89.在一个示例中,还可以对所输出的审计结果进行去重处理。若不同的审计任务针对同一个对象进行审计,比如,静态分析可以包括针对调用函数的函数调用检测,合约漏洞检测也可以针对调用函数漏洞进行检测,若两种类型的分析方式所针对的调用函数相同,则可以仅保留一个更详细、更准确的审计结果。
90.图4示出了根据本说明书实施例的用于对智能合约进行审计的装置(以下称为合约审计装置400)的一个示例的方框图。
91.如图4所示,合约审计装置400包括合约获取单元410、任务确定单元420、合约审计单元430和结果输出单元440。
92.合约获取单元410,被配置为获取待审计的智能合约。
93.任务确定单元420,被配置为根据智能合约的指定审计类型来确定针对智能合约的审计任务,指定审计类型包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种,每个审计任务对应一种指定审计类型。
94.合约审计单元430,被配置为针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应的审计方式对智能合约进行审计,其中,合约静态检测对应的审计方式包括静态分析方式,合约逻辑检测对应的审计方式包括在合约运行状态下所进行的动态分析方式,合约漏洞检测对应的审计方式包括针对指定合约漏洞的形式化检测方式。
95.结果输出单元440,被配置为输出各个审计任务的审计结果。
96.在一个示例中,合约审计单元430还可以被配置为:在所针对的审计任务的指定审计类型是合约静态检测时,使用由智能合约的源码所生成的抽象语法树对智能合约进行指定分析类型的静态分析,指定分析类型的静态分析包括别名分析、污点分析、数据流分析、指针分析、函数调用检测、随机数检查、整型溢出检查、权限检查、拒绝服务检查中的至少一种;以及生成各个指定分析类型的静态分析的分析结果。
97.在一个示例中,合约审计单元430还可以被配置为:在所针对的审计任务的指定审计类型是合约逻辑检测时,在智能合约中的指定参数变异位置处进行插桩,指定参数变异位置包括调用序列、参数列表、参数值和元数据中的至少一个;在指定参数变异位置处进行参数变异处理;以及运行经过参数变异处理后的智能合约,以对智能合约进行审计。
98.在一个示例中,合约审计单元430还可以被配置为:在所针对的审计任务的指定审
计类型是合约逻辑检测时,在智能合约中的指定信息监测位置处进行插桩;在插桩位置处插入探针代码;以及运行包括有探针代码的智能合约,以对智能合约进行审计。
99.在一个示例中,合约审计单元430还可以被配置为:在所针对的审计任务的指定审计类型是合约漏洞检测时,在智能合约中插入针对待检测的指定合约漏洞的断言代码;将插入断言代码的智能合约生成合约形式化模型;根据待检测的指定合约漏洞从预设的多个漏洞检测模型中选择用于检测待检测的指定合约漏洞的漏洞检测模型;以及使用所选择的漏洞检测模型对形式化模型进行检测。
100.在一个示例中,合约审计装置400还可以包括语言识别单元和编译单元。语言识别单元被配置为识别所获取的智能合约的编程语言,语言识别单元可以具有多编程语言的识别能力,能够识别并理解多种不同的编程语言。编译单元被配置为基于所识别出的编程语言将所述智能合约的源码编译成中间代码。
101.在一个示例中,合约审计装置400还可以包括审计结果排序单元,该审计结果排序单元可以被配置为根据各个审计任务的权重和/或所输出的各个审计结果的严重程度,对输出的各个审计结果进行排序。
102.以上参照图1到图4,对根据本说明书实施例的用于对智能合约进行审计的方法及装置的实施例进行了描述。
103.本说明书实施例的用于对智能合约进行审计的装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本说明书实施例中,用于对智能合约进行审计的装置例如可以利用电子设备实现。
104.图5示出了根据本说明书实施例的用于实现智能合约审计方法的电子设备500的方框图。
105.如图5所示,电子设备500可以包括至少一个处理器510、存储器(例如,非易失性存储器)520、内存530和通信接口540,并且至少一个处理器510、存储器520、内存530和通信接口540经由总线550连接在一起。至少一个处理器510执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
106.在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器510:获取待审计的智能合约;根据智能合约的指定审计类型来确定针对智能合约的审计任务,指定审计类型包括合约静态检测、合约逻辑检测和合约漏洞检测中的至少一种,每个审计任务对应一种指定审计类型;针对所确定的各个审计任务,按照该审计任务所针对的指定审计类型对应的审计方式对智能合约进行审计;以及输出各个审计任务的审计结果,其中,合约静态检测对应的审计方式包括静态分析方式,合约逻辑检测对应的审计方式包括在合约运行状态下所进行的动态分析方式,合约漏洞检测对应的审计方式包括针对指定合约漏洞的形式化检测方式。
107.应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器510进行本说明书的各个实施例中以上结合图1-4描述的各种操作和功能。
108.根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-4描述的各种操作和功能。
109.具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
110.在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
111.本说明书各部分操作所需的计算机程序代码可以用任意一种或多种程序语言编写,包括面向对象编程语言,如java、scala、smalltalk、eiffel、jade、emerald、c 、c#、vb、net以及python等,常规程序化编程语言如c语言、visual basic 2003、perl、cobol2002、php以及abap,动态编程语言如python、ruby和groovy,或者其他编程语言等。该程序编码可以在用户计算机上运行,或者作为独立的软件包在用户计算机上运行,或者部分在用户计算机上运行另一部分在远程计算机运行,或者全部在远程计算机或服务器上运行。在后一种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或者在云计算环境中,或者作为服务使用,比如软件即服务(saas)。
112.可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd-rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
113.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
114.上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
115.在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
116.以上结合附图详细描述了本说明书的实施例的可选实施方式,但是,本说明书的实施例并不限于上述实施方式中的具体细节,在本说明书的实施例的技术构思范围内,可以对本说明书的实施例的技术方案进行多种简单变型,这些简单变型均属于本说明书的实施例的保护范围。
117.本说明书内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书内容。对于本领域普通技术人员来说,对本说明书内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书内容的保护范围的情况下,将本文所定义的一般
性原理应用于其它变型。因此,本说明书内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献