CN111062038B - 一种基于状态空间的智能合约形式化验证系统及方法 - Google Patents
一种基于状态空间的智能合约形式化验证系统及方法 Download PDFInfo
- Publication number
- CN111062038B CN111062038B CN201911160402.7A CN201911160402A CN111062038B CN 111062038 B CN111062038 B CN 111062038B CN 201911160402 A CN201911160402 A CN 201911160402A CN 111062038 B CN111062038 B CN 111062038B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- behavior
- module
- file
- model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/034—Test or assess a computer or a system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于状态空间的智能合约形式化验证系统和方法,所述系统包括:代码编译模块,用于将智能合约源代码编译成源码和虚拟机操作指令字节码序列;基本块划分模块,用于将虚拟机操作指令字节码序列划分为基本块集合;控制流图生成模块,用于生成包含条件标识的控制流图;逻辑规则模块,用于将条件标识转化为逻辑规则条件;源代码形式化模块,用于从源码中解析出行为要素,保存为形式化行为文件;模型生成模块,用于根据形式化行为文件生成行为模型文件;根据逻辑规则条件和控制流图生成执行模型文件;执行与验证模块,用于获取状态空间报告和状态空间有向图。与现有技术相比,本发明具有检测全面、效率高、能直观反映出异常状态等优点。
Description
技术领域
本发明涉及区块链技术领域,尤其是涉及一种基于状态空间的智能合约形式化验证系统及方法。
背景技术
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。使用去中心化共识机制去维护一个完整的、分布式的、不可篡改的账本数据库的技术,它能够让区块链中的参与者在无需建立信任关系的前提下实现一个统一的账本系统。智能合约是基于区块链上不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。将智能合约以数字化的形式写入区块链中,以信息化方式传播、验证或执行合同,允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
在区块链应用中,由于区块链的不可篡改性,智能合约一旦上线并出现安全隐患,对用户造成的损失是巨大且不可挽回的。倘若出现黑客事件,需要整个社区的共识才能回滚交易,所以每次遭受攻击都回滚交易也是不现实的。智能合约的安全审计工作变得尤为重要。目前已经显露出的智能合约漏洞有溢出漏洞、DOS漏洞、静态条件漏洞、权限验证漏洞、函数误用漏洞等十余种,且漏洞的种类会随着智能合约复杂性地提高而逐步提高。此外,区块链应用开发的过程需要用大量的测试和检验以获取足够的安全性,而反过来牺牲迭代的速度。形式化验证方法是使用数学的公式、定理和系统来验证一个系统的功能正确性和安全属性,与传统检测方法相比,形式化验证方法可以发现目标与系统描述的不一致性问题,因此使用形式化验证方法来验证智能合约,可以有效的检验智能合约的安全性,检测合约是否存在漏洞。但是常见的形式化验证方法存在着下列问题:
1、现有技术仍主要依赖于手工验证,工作量大,自动化程度低,时间成本高,建立模型的正确性无法保障,模型的正确性依赖于程序员的建模经验和技术程度。
2、目前的大多数方法,局限于编码层面的漏洞,对于区块链网络中行为并发等逻辑漏洞,以及运行环境底层的资源消耗等问题,缺乏完备的验证策略和对潜在bug的描述能力。
3、现有的形式化验证策略基于智能合约源代码建立完备的形式化模型,对所有可能的执行路径进行检查,而合约执行过程本身会包含大量实际不可达路径,完整的检测会产生不必要的成本。
4、方法分散,常见形式化验证方法所建立的模型没有统一规范,即使检测出合约代码存在安全漏洞,也可能需要耗费时间定位排查,易用性差。
公开号为CN108985073A的发明公开了一种高度自动化的智能合约形式化验证系统及方法,包括:步骤001:将智能合约功能需求描述文档转换为使用非自然语言描述的智能合约功能需求规范文档,智能合约功能需求规范文档内容包括目标合约功能规范描述和安全属性描述;步骤002:建立形式化验证规则模型库。步骤003:通过自动化建模工具对合约源代码和/或字节码进行自动化建模;步骤004:对步骤003生成的抽象语法树解析,为代码中常量、变量分配内存地址;步骤005:形式化证明。
该智能合约形式化验证系统及方法仍存在以下缺点:1、仅针对合约源代码编码层面的漏洞,忽视了区块链网络中行为并发等逻辑漏洞;2、形式化证明中仅采用定理证明获取验证结果,验证策略片面;3、需要对所有可能的执行路径进行检查,检测成本高。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种对智能合约检测全面、效率高的基于状态空间的智能合约形式化验证系统及方法。
本发明的目的可以通过以下技术方案来实现:
一种基于状态空间的智能合约形式化验证系统,该系统包括:
代码编译模块,用于将智能合约源代码编译成源码和虚拟机操作指令字节码序列;
基本块划分模块,用于将虚拟机操作指令字节码序列划分为基本块集合,基本块表示虚拟机执行过程的基本单元,是用于构建控制流图的基本结构;
控制流图生成模块,用于解析基本块的跳转关系和虚拟机运行条件生成包含条件标识的控制流图;
逻辑规则模块,用于将控制流图中的条件标识转化为适用于形式化建模的逻辑规则条件;
源代码形式化模块,用于从源码中解析出行为要素,并保存为形式化行为文件,所述行为要素包括合约代码中的常量、变量、继承关系、函数和事件限定符等要素;
模型生成模块,用于将形式化行为文件插入预设的策略模板文件中,获取行为模型文件;将程序逻辑规则条件和控制流图,插入预设的封装模块中,获取执行模型文件;
执行与验证模块,用于读取行为模型文件和执行模型文件,进行状态空间分析,获取状态空间报告和状态空间有向图。
进一步地,为减少形式化验证工作的人工参与度,提高验证自动化能力和效率,所述智能合约形式化验证系统还包括形式化模型库,用于存储所述策略模板文件和所述封装模块,供模型生成过程参考和调用。
进一步地,所述智能合约形式化验证系统还包括智能合约漏洞特征库,用于存储智能合约安全漏洞特征信息。
进一步地,所述执行与验证模块进行状态空间分析前,还根据智能合约漏洞特征库中存储的智能合约安全漏洞特征信息,反向推导出漏洞类型的初始标识,作为状态空间分析的输入,提高模型执行效率。
进一步地,所述形式化行为文件、行为模型文件和执行模型文件均为着色Petri网模型描述文件。
进一步地,所述执行与验证模块中,在运行工具CPN Tools中进行状态空间分析。
本发明还提供一种基于状态空间的智能合约形式化验证方法,该方法包括以下步骤:
行为模型预处理步骤:从智能合约源代码中解析出行为要素,并插入着色Petri网模型描述模板文件中,生成形式化行为文件;
执行模型预处理步骤:从智能合约源代码中编译出虚拟机操作指令字节码序列;
基本块划分步骤:将虚拟机操作指令字节码序列划分为基本块集合;
控制流图生成步骤:执行基本块,基本块连接,生成包含条件标识的控制流图;
逻辑规则生成步骤:将控制流图中的条件标识转化为适用于形式化建模的逻辑规则条件;
着色Petri网建模步骤:将形式化行为文件插入预设的策略模板文件中,获取行为模型文件;将逻辑规则条件和控制流图,插入预设的封装模块中,获取执行模型文件;
模型检测步骤:将行为模型文件和执行模型文件部署到CPN Tools中,获取状态空间报告和状态空间有向图,状态空间报告中的模型属性,并对应状态空间有向图定位,可以得到状态空间中任一异常状态节点的完备错误信息和执行路径,为智能合约开发人员提供修正导向;
所述形式化行为文件、行为模型文件和执行模型文件均为着色Petri网模型描述文件。
进一步地,所述基本块的划分包括以下原则:
1)采用占位符JUMPDEST结束当前基本块,并作为一个新基本块的第一条语句;
2)将JUMP,JUMPI和分支语句、循环语句,作为当前基本块的最后一条语句;
3)其他语句直接加入当前基本块。
进一步地,所述逻辑规则生成步骤中,通过霍尔逻辑生成逻辑规则条件,该逻辑规则条件包括基本块跳转的约束条件,该约束条件对应于控制流图中的分支结构条件标识。
进一步地,所述着色Petri网建模步骤中,还包括构建模型初始标识,具体为,从已知的智能合约安全漏洞特征信息中,反向推导出漏洞类型的初始标识,作为模型输入。
与现有技术相比,本发明具有以下优点:
(1)本发明基于状态空间的智能合约形式化验证系统中,将智能合约的业务逻辑和抽象的执行过程映射为可视化的形式化模型,同时检测的结果也可以表示为有向图的形式,能够定位任一状态空间节点,并直观反映出异常状态的信息。
(2)本发明基于状态空间的智能合约形式化验证系统,能够以较高程度的自动化,实现对区块链智能合约的形式化验证,设计了形式化模型库和智能合约漏洞特征库,这些集合可以有效提高智能合约形式化建模的效率,并对模型执行过程加以优化,降低了系统的冗余程度,减少人工参与度;结合现有智能合约审计经验和已曝漏洞分析,获取智能合约安全漏洞特征,定义智能合约中易产生漏洞的高危指令和逻辑问题为目标状态进行建模,不必对所有可能的执行路径进行检查,可以有效地缩减状态空间,一定程度上减少了重复工作。
(3)本发明基于状态空间的智能合约形式化验证系统,将形式化验证方法中的定理证明与模型检测策略相结合,对智能合约的源代码以及虚拟机操作指令字节码序列进行形式化建模,能够从编码规范问题、设计缺陷问题、编码安全问题、编码设计问题等多个角度,对智能合约的安全漏洞和潜在风险,进行较为全面的检测。
(4)本发明基于状态空间的智能合约形式化验证系统,使用着色Petri网进行建模,该形式化方法的特性缓解了状态空间分析中较为致命的状态空间爆炸问题,适应于智能合约的扩展;同时,该方法不局限于以太坊智能合约和以太坊虚拟机,对于其他智能合约规范和执行引擎具有实现意义。
附图说明
图1为本发明基于状态空间的智能合约形式化验证方法流程示意图;
图2为本发明实施例中库所在.cpn文件中的存储格式模板示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
如图1所示,本实施例为提供一种基于状态空间的智能合约形式化验证系统及方法。应用将抽象的智能合约逻辑和行为图形化的形式化建模工具着色Petri网,以状态空间报告和状态空间有向图的形式,表示出智能合约形似化模型中的错误路径和错误信息,方便开发人员定位错误路径,减少对开发人员的依赖,易用性高;预先设定建模辅助元素集合,能够减少时间成本,降低了人员参与度,提高验证效率;同时基于现有智能合约审计经验和已曝漏洞分析,在建模或模型仿真过程中主要关注的重点路径并进行漏洞验证,可以有效地状态缩减空间的规模。
下面对本实施例基于状态空间的智能合约形式化验证系统及方法进行具体介绍:
1、基于状态空间的智能合约形式化验证系统
基于状态空间的智能合约形式化验证系统包括:
代码编译模块:代码编译模块是系统的输入模块,读取智能合约源代码,将区块链智能合约源代码编译得到源码和虚拟机操作指令字节码序列。
源代码形式化模块:源代码形式化模块针对于智能合约源代码的预处理模块,解析智能合约源代码,获取合约代码中的常量、变量、继承关系、函数和事件限定符等要素,将按照形式化建模工具着色Petri网的xml格式文本存储模板,得到智能合约行为元素的形式化.cpn文件(着色Petri网模型描述文件),用于构建基于合约业务逻辑行为模型。
基本块划分模块:基本块划分模块是智能合约虚拟机操作指令序列形式化的预处理模块,参照以太坊虚拟机的执行过程,将用户合约源代码编译的操作指令字节码序列划分为基本块集合,基本块表示虚拟机执行过程的基本单元,是用于构建控制流图的基本结构。
控制流图生成模块:解析基本块的跳转关系和虚拟机运行条件生成智能合约字节码序列控制流图。
逻辑规则模块:用于优化控制流图的结构,将控制流图中的条件标识转换为适用于形式化建模的条件表达式;基于霍尔逻辑,获得面向基本块层级和操作指令字节码层级的程序逻辑规则和约束条件,对基本块的跳转关系和虚拟机运行条件进行形式化的描述,与控制流图共同成为模型生成模块输入。
模型生成模块:本实施例中智能合约源代码分为行为模型和执行模型两条路径,将接收到的源代码形式化模块生成的行为元素的形式化.cpn文件插入形式化模型库中预先涉及的策略模板.cpn文件,构建完整的行为模型.cpn文件;将接收到的程序逻辑规则条件和控制流图结构,同样按照着色Petri网的xml格式模板,并调用形式化模型库中预先搭建好的封装模块,拼接得到完整的执行模型.cpn文件;.cpn文件能够直接在状态空间分析工具中生成形式化模型。
执行与验证模块:运用自动化的模型检测工具读取Petri网模型.cpn文件,进行状态空间分析,得到状态空间报告和状态空间有向图。
形式化模型库:为减少形式化验证工作的人工参与度,提高验证自动化能力和效率,存储多种通过预先设置的准则和策略,以及各类操作指令的封装模块,形成一个工具库,供模型生成过程参考和调用。
智能合约漏洞特征库:存储现有的智能合约安全漏洞特征信息,包含智能合约中高危的逻辑漏洞信息如重入漏洞,交易顺序依赖,并发漏洞等,易产生漏洞的高危敏感指令和限定符如SUICIDE、CALL、ORIGIN、DelegateCall、Timestamp等,并通过路径的反向推导和分析生成Petri网模型初始标识测试用例,提高模型执行效率。
2、基于状态空间的智能合约形式化验证方法
基于状态空间的智能合约形式化验证方法包括以下步骤:
行为模型预处理步骤:从智能合约源代码中解析出限定符,并插入cpn模板文件中,生成形式化行为文件;
具体为,读入智能合约源代码,分析智能合约源代码的编程语言,使用与之相匹配得的文法和词法规则,应用AST(Abstract Syntax Tree,抽象语法树),解析合约源代码中的常量、变量、继承关系、函数事件修改器等限定符;从.cpn模板文件中抽取petri网主要元素的xml文件格式模板,解析得到的各个元素和xml文件格式模板,生成各元素的xml文件内容;将各元素的xml文件内容插入到.cpn模板文件中,生成新的.cpn文件。
执行模型预处理步骤:从智能合约源代码中编译出虚拟机操作指令字节码序列;
具体为,读入区块链智能合约源代码,编译得到的虚拟机操作指令字节码序列,进行执行模型建模预处理,该预处理过程包括基本块划分,控制流图生成,程序逻辑规则约定。
基本块划分步骤:将虚拟机操作指令字节码序列划分为基本块集合;
基本块的划分需要遵循三个原则:
1)JUMPDEST是一个无实际意义的占位符,令其表示遇到程序、子程序的第一条指令或语句。它用于结束当前基本块,并作为一个新基本块的第一条语句。
2)将JUMP,JUMPI和分支语句、循环语句,作为当前基本块的最后一条语句,并结束当前块。
3)遇到其他语句直接将其加入到当前基本块。
控制流图生成步骤:执行基本块,基本块连接,生成控制流图;
具体为,在执行到基本块最后一条指令,并满足约束条件时,跳转到相应指令指向对应的基本块或结束执行过程,基本块连接生成控制流图。
逻辑规则生成步骤:将控制流图中的条件标识转化为适用于形式化建模的逻辑规则条件;
具体为,基于霍尔逻辑设计了面向基本块和操作指令的双层程序逻辑规则,得到基本块跳转的约束条件,约束条件对应于控制流图中的分支结构条件判定。
着色Petri网建模步骤:将形式化行为文件插入预设的策略模板文件中,获取行为模型文件;将程序逻辑规则条件和控制流图,插入预设的封装模块中,获取执行模型文件;
具体为,使用非形式化的方式描述将智能合约源代码和控制流图转换为等价的着色Petri网的转换规则,把控制流图中的单元与着色Petri网元素之间建立一个明确的映射,这当中既包含结构元素,如库所、变迁、输入输出弧;又包含逻辑元素,如全局声明中的颜色集和变量、颜色集与库所、弧表达式和识别函数之间的关联关系,以及转换后的着色Petri网的初始标识;并通过分析映射前后两种模型的语义,验证映射的正确性;该转换规则作为所有.cpn文件构建的参考,本实施例中智能合约源代码分为行为模型和执行模型两条路径,将接收到的源代码形式化模块生成的行为元素的形式化.cpn文件插入形式化模型库中预先涉及的策略模板.cpn文件,构建完整的行为模型.cpn文件;将接收到的程序逻辑规则条件和控制流图结构,同样按照着色Petri网的xml格式模板,并调用形式化模型库中预先搭建好的封装模块,拼接得到完整的执行模型.cpn文件;.cpn文件能够直接在状态空间分析工具中生成形式化模型。
将将形式化行为文件插入预设的策略模板文件中,以及将程序逻辑规则条件和控制流图,插入预设的封装模块中的方法定义如下:
1)颜色集:颜色集数据类型,通过CPN元语言定义,对应于合约代码中的变量和执行过程中的虚拟机状态参数。
2)库所:智能合约涉及的账户定义为各自的库所,账户的状态对应库所的状态;在执行模型中,将虚拟机状态定义为库所。
3)变迁:智能合约代码中涉及的函数事件及字节码操作指令定义为相应的变迁,变迁与库所由输入和输出弧连接。
4)弧表达式:弧表达式表明在弧上传递参数的数据类型以及传递方式,通常根据其输入库所的颜色集与输出库所的颜色集来注释弧表达式;程序逻辑规则的设定将控制流图中的跳转条件转换为了等价的弧表达式。
5)构建模型初始标识:指示CPN状态的令牌提取初始合同状态的输入数据的相应特征值作为相应库所的初始标识符。为提高证明效率,调用智能合约漏洞库获取现有的智能合约安全漏洞特征,结合现有智能合约审计经验和已曝漏洞分析约定出一些目标状态,反向推导出漏洞类型的初始标识,作为模型输入,可降低建模涉及的代码规模,或缩减状态空间的规模。
模型检测步骤:将生成的智能合约行为模型文件和虚拟机执行模型文件部署到CPN Tools中,获取状态空间报告和状态空间有向图。分析状态空间报告中的模型属性,并对应状态空间有向图定位,可以得到状态空间中任一异常状态节点的完备错误信息和执行路径,为智能合约开发人员提供修正导向。
具体应用:
为了能够更容易让本领域技术人员理解,以下将用以太坊区块链智能合约的形式化验证为例进行说明,其并不构成对本实施例的任何限制。本例中以太坊区块链平台的Solidity语言官网给出的安全远程购买(Safe Remote Purchase)智能合约应用为例,结合图1,使用本实施例工具对智能合约进行形式化验证的流程进行详细阐述,主要步骤如下:
S1:以太坊区块链平台的安全远程购买智能合约源代码导入形式化分析系统的代码编译模块,源代码包括完整的安全远程购买智能合约,与其有继承关系的父合约源代码,与其有外部函数调用的库合约源代码,本例中的智能合约是由以太坊区块链中支持的高级编程语言Solidity编写。
S2:源代码形式化模块将Solidity语言编写的远程购买智能合约转换为用于形式化建模的合约行为特征程序。本实施例源代码形式化模块采用语法树解析的方式,解析出合约代码中的常量、变量、继承关系、函数和事件限定符等要素,本例中为Solidity编程语言至合约行为特征程序的预处理过程。首先识别智能合约的开发语言为高级语言Solidity,并使用匹配当前合约Solidity编码版本的文法规则,解析出安全远程购买合约智能合约代码中的用于建模的要素,例如:为单个订单中涉及的对象价格Value,合约状态State,修改器声明限定符和约束modifier onlyBuyer()||onlySeller()||instate()限定函数访问的对象;函数限定符function abort()||confirmPurchase()||confirmReceived()对应合约执行终止,买家确认购买,确认收到购买对象;事件限定符event Aborted()||PurchaseConfirmed()||ItemReceived()对应合约执行终止事件,买家确认购买事件,对象已被接收事件;从着色Petri网模板文件中抽取petri网主要元素的xml文件格式模板,以库所为例,其模板文件如图2所示,该模板文件存储了库所的颜色集和初始标识等信息,也包含了其在建模工具CPN Tools中的位置信息;通过抽象语法树解析得到的各个元素和xml文件格式模板,生成各元素的xml文件内容;将各元素的xml文件内容插入到petri模板文件中,生成新的文件;petri模板文件需要调用形式化模型库,获取预先搭建好的并发验证策略和敏感操作检测策略,生成适用于该智能合约行为的petri模板文件。
S3:使用反编译工具将智能合约源代码反编译得到EVM执行过程的操作指令字节码序列;依照约定的基本块划分规则,将用户合约源代码反编译的字节码指令序列划分为基本块集合,解析基本块的跳转关系生成智能合约字节码序列控制流图;基于霍尔程序逻辑设计面向基本块和操作指令的双层程序逻辑规则,得到基本块跳转约束条件的形式化表达式,对应于控制流图中的条件分支结构,应用辅助定理证明工具事先对程序逻辑规则的正确性与合理性加以证明。对于安全远程购买合约,源代码可以划分为79个基本块,调用智能合约漏洞特征库获取现有的安全漏洞特征,判别是否存在易产生漏洞的高危指令如SUICIDE、CALL、ORIGIN等,设立基于漏洞的目标状态,并通过路径的反向推导和分析削减建模关联的基本块数量,并生成Petri网模型初始标识测试用例。在本例中,以高危操作指令为目标状态,通过路径的推导分析,关联路径的基本块数量由79个减少至54个,并可由得到模型初始标识中涉及的变量,提高模型执行效率;调用形式化模型库,获取预先设定的操作指令和验证策略模块,所述模块均以.cpn模板格式文件存储,依照基本块的指令逻辑和时序关系,添加到目标智能合约执行模型.cpn文件特定位置。例如分析得出执行过程的程序逻辑前置条件:当前虚拟机的状态满足参数界限;后置条件:执行某些指令后虚拟机参数出现异常。将该属性与合约部署后的初始状态整合在一起,就生成了完整的程序规约,程序逻辑规则可形式化表示着色Petri网模型的弧函数,判别运行过程的方向。
S4:将生成的智能合约行为模型和虚拟机执行模型部署到着色Petri网的运行工具中;执行模型将得到系统的状态空间报告和状态空间有向图。分析状态空间报告中的模型属性,结合状态空间有向图,可以找到状态空间中任一异常状态节点,定位错误的执行路径,获取关联节点中的状态信息,为智能合约开发人员提供修正导向。本实施例验证工具中的Petri网部署运行工具CPN Tools可模拟了智能合约的执行环境,以安全远程购买智能合约为例,设有三个账户,包括买方,卖方和合约账户。Value表示为单个订单中涉及的项目的价格,合约状态State,在用于初始化的构造函数中,将所需的ETH(2*Value作为押金)发送给合约账户被视为卖方。如果构造函数执行成功,订单的状态变为创建状态State.Created,卖方等待买方的购买确认。在买家确认购买之前,卖家有机会调用abort()函数来中止订单,使得订单变为非活跃状态State.Inactive。在订单状态变为非活动状态后,押金将返回卖方的账户。调用confirmPurchase()函数的账户是买方,只有当买方成功将存款(Value*2)发送给合约账户时,订单的状态State才会被锁定State.Locked,完成确认程序。交易将顺利进行,直到买方收到该项目。最后,买方调用confirmReceived()函数。在此功能中,订单状态变为非活动状态State.Inactive,然后将Value数值的ETH转移回买方账户,最后合同账户中剩余的3*Value ETH将返回到卖方账户。卖家可能在不同的时间节点调用abort()函数中止订单,当在买家支付后且合约尚未进入锁定状态时,卖家取消交易会导致此时合约账户的4*Value ETH全部退回给卖家,这是一个典型的用户行为并发引发的潜在漏洞,有两个函数abort()和confirmPurchase()都会对同一个全局变量state进行操作,在并发情况下会导致漏洞,属于合约设计缺陷问题。对于状态空间报告中给出的异常节点,对应状态空间有向图,可以明确的找出由于abort()和confirmPurchase()函数的错误调用时机,与本实施例针对形式化的合约行为特征程序编写的形式化验证安全策略用户行为function or event concurrency策略存在冲突,故由此得到智能合约漏洞的分析报告,为开发人员提供修正导向。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (9)
1.一种基于状态空间的智能合约形式化验证系统,其特征在于,该系统包括:
代码编译模块,用于将智能合约源代码编译成源码和虚拟机操作指令字节码序列;
基本块划分模块,用于将虚拟机操作指令字节码序列划分为基本块集合;
控制流图生成模块,用于根据基本块集合生成包含条件标识的控制流图;
逻辑规则模块,用于将控制流图中的条件标识转化为适用于形式化建模的逻辑规则条件;
源代码形式化模块,用于从源码中解析出行为要素,并保存为形式化行为文件;
模型生成模块,用于将形式化行为文件插入预设的策略模板文件中,获取行为模型文件;将逻辑规则条件和控制流图,插入预设的封装模块中,获取执行模型文件;
执行与验证模块,用于读取行为模型文件和执行模型文件,进行状态空间分析,获取状态空间报告和状态空间有向图;
所述形式化行为文件、行为模型文件和执行模型文件均为着色Petri网模型描述文件。
2.根据权利要求1所述的一种基于状态空间的智能合约形式化验证系统,其特征在于,所述智能合约形式化验证系统还包括形式化模型库,用于存储所述策略模板文件和所述封装模块。
3.根据权利要求1所述的一种基于状态空间的智能合约形式化验证系统,其特征在于,所述智能合约形式化验证系统还包括智能合约漏洞特征库,用于存储智能合约安全漏洞特征信息。
4.根据权利要求3所述的一种基于状态空间的智能合约形式化验证系统,其特征在于,所述执行与验证模块进行状态空间分析前,还根据智能合约漏洞特征库中存储的智能合约安全漏洞特征信息,反向推导出漏洞类型的初始标识,作为状态空间分析的输入。
5.根据权利要求1所述的一种基于状态空间的智能合约形式化验证系统,其特征在于,所述执行与验证模块中,在运行工具CPN Tools中进行状态空间分析。
6.一种基于状态空间的智能合约形式化验证方法,其特征在于,该方法包括以下步骤:
行为模型预处理步骤:从智能合约源代码中解析出行为要素,并插入着色Petri网模型描述模板文件中,生成形式化行为文件;
执行模型预处理步骤:从智能合约源代码中编译出虚拟机操作指令字节码序列;
基本块划分步骤:将虚拟机操作指令字节码序列划分为基本块集合;
控制流图生成步骤:执行基本块,基本块连接,生成包含条件标识的控制流图;
逻辑规则生成步骤:将控制流图中的条件标识转化为适用于形式化建模的逻辑规则条件;
着色Petri网建模步骤:将形式化行为文件插入预设的策略模板文件中,获取行为模型文件;将逻辑规则条件和控制流图,插入预设的封装模块中,获取执行模型文件;
模型检测步骤:将行为模型文件和执行模型文件部署到CPN Tools中,获取状态空间报告和状态空间有向图;
所述形式化行为文件、行为模型文件和执行模型文件均为着色Petri网模型描述文件。
7.根据权利要求6所述的一种基于状态空间的智能合约形式化验证方法 ,其特征在于,所述基本块的划分包括以下原则:
1)采用占位符JUMPDEST结束当前基本块,并作为一个新基本块的第一条语句;
2)将JUMP,JUMPI和分支语句、循环语句,作为当前基本块的最后一条语句;
3)其他语句直接加入当前基本块。
8.根据权利要求6所述的一种基于状态空间的智能合约形式化验证方法 ,其特征在于,所述逻辑规则生成步骤中,通过霍尔逻辑生成逻辑规则条件,该逻辑规则条件包括基本块跳转的约束条件,该约束条件对应于控制流图中的分支结构条件标识。
9.根据权利要求6所述的一种基于状态空间的智能合约形式化验证方法 ,其特征在于,所述着色Petri网建模步骤中,还包括构建模型初始标识,具体为,从已知的智能合约安全漏洞特征信息中,反向推导出漏洞类型的初始标识,作为模型输入。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911160402.7A CN111062038B (zh) | 2019-11-23 | 2019-11-23 | 一种基于状态空间的智能合约形式化验证系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911160402.7A CN111062038B (zh) | 2019-11-23 | 2019-11-23 | 一种基于状态空间的智能合约形式化验证系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111062038A CN111062038A (zh) | 2020-04-24 |
CN111062038B true CN111062038B (zh) | 2022-06-24 |
Family
ID=70298538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911160402.7A Active CN111062038B (zh) | 2019-11-23 | 2019-11-23 | 一种基于状态空间的智能合约形式化验证系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111062038B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651977B (zh) * | 2020-05-26 | 2021-07-06 | 中南民族大学 | 一种语言独立的法律合约与智能合约一致性度量方法 |
CN111666216B (zh) * | 2020-06-05 | 2024-01-23 | 中国银行股份有限公司 | 一种智能合约分析方法及装置 |
CN111695805B (zh) * | 2020-06-10 | 2022-09-27 | 北京航空航天大学 | 一种面向法律合同的智能合约模型构建方法及系统 |
CN112163949A (zh) * | 2020-09-25 | 2021-01-01 | 湖南和信安华区块链科技有限公司 | 一种基于合约组件图形化的智能合约生成方法及装置 |
CN112581140B (zh) * | 2020-12-24 | 2022-07-29 | 西安深信科创信息技术有限公司 | 一种智能合约验证方法、计算机存储介质 |
CN112767155B (zh) * | 2021-01-19 | 2024-02-13 | 华南师范大学 | 智能合约安全交易序列生成方法、装置、介质和设备 |
CN112887321B (zh) * | 2021-02-08 | 2022-08-09 | 海尔数字科技(上海)有限公司 | 一种基于haskell实现安全可证明的智能合约平台 |
CN113204765B (zh) * | 2021-04-27 | 2022-09-30 | 交叉信息核心技术研究院(西安)有限公司 | 一种Hyperledger Fabric链码的测试方法及系统 |
CN113391815B (zh) * | 2021-06-09 | 2023-11-21 | 上海创景信息科技有限公司 | 基于多种开发语言的源码分析结果测试方法及系统 |
CN114385185A (zh) * | 2021-12-24 | 2022-04-22 | 深圳前海微众银行股份有限公司 | 一种智能合约的控制流图生成方法及装置 |
CN115879868B (zh) * | 2022-09-09 | 2023-07-21 | 南京审计大学 | 一种专家系统与深度学习相融合的智能合约安全审计方法 |
CN116777620A (zh) * | 2023-06-25 | 2023-09-19 | 北京航空航天大学 | 一种确保资产证券化合约可靠性的形式化验证方法 |
CN116743499B (zh) * | 2023-08-09 | 2023-10-27 | 杭州安碣信息安全科技有限公司 | 一种针对智能合约攻击的模仿交易生成方法 |
CN117436091B (zh) * | 2023-12-21 | 2024-04-12 | 电子科技大学(深圳)高等研究院 | 基于模型检测的区块链众筹合约形式化验证方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102447695A (zh) * | 2011-11-14 | 2012-05-09 | 中国科学院软件研究所 | 一种识别业务系统中关键攻击路径的方法 |
CN108536445A (zh) * | 2018-03-28 | 2018-09-14 | 成都链安科技有限公司 | 面向区块链智能合约的高度自动化形式化验证系统及方法 |
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109492402A (zh) * | 2018-10-25 | 2019-03-19 | 杭州趣链科技有限公司 | 一种基于规则引擎的智能合约安全评测方法 |
CN110135847A (zh) * | 2019-05-22 | 2019-08-16 | 同济大学 | 基于区块链的用于提高电子拍卖安全性的系统及方法 |
CN110175454A (zh) * | 2019-04-19 | 2019-08-27 | 肖银皓 | 一种基于人工智能的智能合约安全漏洞挖掘方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9857356B2 (en) * | 2011-12-09 | 2018-01-02 | President And Fellows Of Havard College | Muscle chips and methods of use thereof |
CN106934513A (zh) * | 2015-12-29 | 2017-07-07 | 天津科技大学 | 基于随机着色Petri网的虚拟企业BPM建模方法 |
US11144893B2 (en) * | 2017-10-30 | 2021-10-12 | Nec Corporation | Method and system for securing smart contracts in blockchains |
CN109063477B (zh) * | 2018-07-18 | 2021-04-20 | 成都链安科技有限公司 | 一种自动化的智能合约代码缺陷检测系统和方法 |
CN109347651B (zh) * | 2018-08-27 | 2021-06-01 | 西安电子科技大学 | 基于msvl的区块链系统建模和安全性验证的方法及系统 |
-
2019
- 2019-11-23 CN CN201911160402.7A patent/CN111062038B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102447695A (zh) * | 2011-11-14 | 2012-05-09 | 中国科学院软件研究所 | 一种识别业务系统中关键攻击路径的方法 |
CN108536445A (zh) * | 2018-03-28 | 2018-09-14 | 成都链安科技有限公司 | 面向区块链智能合约的高度自动化形式化验证系统及方法 |
CN108985073A (zh) * | 2018-07-18 | 2018-12-11 | 成都链安科技有限公司 | 一种高度自动化的智能合约形式化验证系统及方法 |
CN109492402A (zh) * | 2018-10-25 | 2019-03-19 | 杭州趣链科技有限公司 | 一种基于规则引擎的智能合约安全评测方法 |
CN110175454A (zh) * | 2019-04-19 | 2019-08-27 | 肖银皓 | 一种基于人工智能的智能合约安全漏洞挖掘方法及系统 |
CN110135847A (zh) * | 2019-05-22 | 2019-08-16 | 同济大学 | 基于区块链的用于提高电子拍卖安全性的系统及方法 |
Non-Patent Citations (3)
Title |
---|
Formal Verification of Blockchain Smart Contract Based on Colored Petri Net Models;Zhentian Liu 等;《2019 IEEE 43rd Annual Computer Software and Applications Conference (COMPSAC)》;20190709;第555-560页 * |
基于区块链的供应链金融服务平台;马小峰 等;《大数据》;20180115;第13-21页 * |
智能合约中的安全与隐私保护技术;王化群 等;《南京邮电大学学报(自然科学版)》;20190831;第39卷(第4期);第63-71页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111062038A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111062038B (zh) | 一种基于状态空间的智能合约形式化验证系统及方法 | |
CN108536445B (zh) | 面向区块链智能合约的高度自动化形式化验证系统及方法 | |
US11868745B2 (en) | System and method for compiling high-level language code into a script executable on a blockchain platform | |
CN109063477B (zh) | 一种自动化的智能合约代码缺陷检测系统和方法 | |
Mathur et al. | Advancements in the V-Model | |
CN109753288B (zh) | 一种适用于形式化验证的智能合约编译方法 | |
Shao | Certified software | |
CN112100054A (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
Duo et al. | Formal analysis of smart contract based on colored petri nets | |
CN110989997A (zh) | 基于定理证明的形式化验证方法 | |
Nelaturu et al. | Verified development and deployment of multiple interacting smart contracts with VeriSolid | |
Fourneret et al. | Model-based security verification and testing for smart-cards | |
Ahrendt et al. | Smart contracts: a killer application for deductive source code verification | |
Jin et al. | Aroc: An automatic repair framework for on-chain smart contracts | |
Antonino et al. | Formalising and verifying smart contracts with solidifier: a bounded model checker for solidity | |
Schivo et al. | How to efficiently build a front-end tool for UPPAAL: a model-driven approach | |
Ebrahimi Salari et al. | Pylc: A framework for transforming and validating plc software using python and pynguin test generator | |
Nelaturu et al. | Correct-by-design interacting smart contracts and a systematic approach for verifying ERC20 and ERC721 contracts with VeriSolid | |
Tuong et al. | Deeply integrating C11 code support into Isabelle/PIDE | |
Tabareau et al. | A typed monadic embedding of aspects | |
Stappers | Bridging formal models: an engineering perspective | |
Roo | Towards more robust advice: Message flow analysis for composition filters and its application | |
Scherer | Engineering of Reliable and Secure Software via Customizable Integrated Compilation Systems | |
Ellul et al. | Towards a unified programming model for blockchain smart contract DAPP systems | |
Varró et al. | VPM: Mathematics of metamodeling is metamodeling mathematics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |