CN113672515A - 一种基于符号执行的wasm智能合约漏洞检测方法 - Google Patents

一种基于符号执行的wasm智能合约漏洞检测方法 Download PDF

Info

Publication number
CN113672515A
CN113672515A CN202110989270.XA CN202110989270A CN113672515A CN 113672515 A CN113672515 A CN 113672515A CN 202110989270 A CN202110989270 A CN 202110989270A CN 113672515 A CN113672515 A CN 113672515A
Authority
CN
China
Prior art keywords
function
intelligent contract
region
area
memory
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.)
Granted
Application number
CN202110989270.XA
Other languages
English (en)
Other versions
CN113672515B (zh
Inventor
姜博
王冬
陈一飞
万寒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN202110989270.XA priority Critical patent/CN113672515B/zh
Publication of CN113672515A publication Critical patent/CN113672515A/zh
Application granted granted Critical
Publication of CN113672515B publication Critical patent/CN113672515B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提出了一种基于符号执行的WASM智能合约漏洞检测方法,属于软件测试技术领域,通过对待分析的智能合约的WebAssembly字节码构建可执行实例,调用各实例中的初始化函数对运行环境的状态进行初始化,并填充运行环境的内存区和数据区的数值;进一步根据函数签名中的索引调用函数体进行符号执行,遍历字节码层次智能合约的执行路径,用以探索智能合约实际运行时可能存在的状态,并依据此状态进行智能合约潜在安全漏洞的分析。此外,针对不同区块链平台的库函数使用了通用函数接口和专用函数实现进行仿真支持,确保符号执行过程的完整性。通过设置循环上限和分支访问上限,解决符号执行中的路径爆炸问题和覆盖率问题。

Description

一种基于符号执行的WASM智能合约漏洞检测方法
技术领域
本发明属于软件测试技术领域,尤其涉及一种基于符号执行的WASM智能合约漏洞检测方法。
背景技术
区块链提供了去中心化、无信任支付场景的支持,其为哈希加密算法、网络技术、分布式系统原理以及社会经济学等交叉研究成果。区块链从原理上提供了一种新型信任机制,并基于此构建出安全可信、高容错的去中心化数据库系统。通过智能合约,区块链平台实现了交易的自动化和智能化,提高了区块链技术的泛用性。
区块链智能合约的安全性研究,主要针对逻辑上的安全性和正确性;但是,作为首次应用智能合约的区块链平台,以太坊存在典型的智能合约漏洞。
智能合约漏洞检测分析技术,主要存在形式化验证技术、模糊测试技术和符号执行技术。
形式化验证是分析智能合约安全性的一种方法,过程包括抽象解释、定理证明和模型验证。形式化验证使用预先建立的规则,对系统相关特性进行分析和验证;无法保证系统完全正确可靠,但可最大限度对系统进行分析,验证系统是否满足一致性和完备性。模糊测试与区块链平台强耦合,通过插桩技术,进行漏洞触发。符号执行技术面向智能合约字节码,支持跨平台智能合约安全性漏洞检测分析,易于漏洞类型扩展。
WebAssembly(Wasm)是一种字节码标准,目前存在多个区块链平台以Wasm作为智能合约底层字节码,例如EOS.IO平台和以太坊2.0等区块链平台。
Wasm字节码具备通用性,理论上可以支持不同类型的网络应用。
发明内容
本发明针对现有技术中存在的区块链智能合约漏洞检测方法不成熟,跨平台智能合约检测技术缺失的问题,提出了一种基于符号执行的WASM智能合约漏洞检测方法。
具体步骤如下:
步骤一、针对待分析的区块链智能合约S,判断智能合约S是否为二进制WebAssembly字节码格式,如果是,则不作处理,进入步骤二;否则,智能合约S为源代码格式或者中间表示格式,根据其所属的区块链平台进行编译工具链选择,将智能合约S编译为WebAssembly字节码;
步骤二、根据规范标准,对智能合约S的WebAssembly字节码划分为不同区域,并在内存中构建各区域对应的可执行实例;
具体构建过程为:
首先,对智能合约S的二进制WebAssembly字节码进行合法性验证;
合法性的验证为:首先选取字节码的前4个字节,进行进制转换,判断其是否为WebAssembly标准中的魔数;如果是,则该智能合约S合法,通过验证;否则验证失败,提示错误信息,并中止进一步的漏洞分析。
然后,将通过验证的字节码按标准分为不同的区域;
标准选用自主流浏览器厂商组成的W3C社区团体制定的WebAssembly字节码规范。
所述的区域及其内容如下所示:
Import区:该区域声明宿主环境在实例化时提供的一系列import,包含函数导入、全局变量导入、内存导入和表导入。
export区:该区域定义了一系列export,这些export将在实例化后返回至宿主环境,其类型可以是函数、全局变量、内存和表。
start区:该区域定义一个函数,该函数将在环境初始化之后被调用。
global区:该区域定义了零个或多个全局变量及其初始值。
memory区:该区域定义了一个线性内存区,该部分声明了内存区域的起始大小与最大内存大小。
data区:该区域定义了线性内存区的初始内容,其格式为内存起始位置与所存内容。
table区:该区域定义了一个表,存储内容为函数指针与其索引,其作用主要用于间接函数调用。
elements区:该区域信息为若干个函数索引,这些索引是哨兵值,如果此类函数被调用将会触发陷阱(trap)。
function区:该区域定义了若干逻辑函数,每个函数包含函数头与函数体,函数头包含函数名、函数类型、参数类型、返回值类型;函数体包含若干指令。
最后,针对每个区域分别进行分析,按各区域的区域头确定当前区域的元信息,并根据各区域的区域体进行实例构建。
根据不同的区域所构建出的实例是不同的;
步骤三、针对构建的各区域实例,调用各实例中的初始化函数来对运行环境的状态进行初始化,并对运行环境的内存区和数据区进行数值填充;
环境状态的初始化具体为:
首先,根据字节码memory区域的信息,初始化运行环境的内存区长度;
然后,根据字节码data区域信息,初始化内存区的数值;
最后,调用字节码的start函数,执行初始化指令,完成运行环境的初始化。
填充内容为智能合约S内部定义的初始数据;
步骤四、从构建的各区域实例中抽取出export区,从中得到所有接口函数签名;
步骤五、依次根据接口的函数签名,生成与函数参数列表相对应的符号变量,并根据函数签名中的索引调用函数体,进行符号执行;
符号执行过程具体为:
首先,开辟堆栈空间用于指令的执行,同时维护初始化的环境状态;
然后,依次调用接口函数签名,根据函数体内指令的类型进行符号执行;
针对于不同类型的指令,其符号执行的处理方式不同:
对于算术指令和变量存取指令将直接在堆栈上进行操作;
对于条件分支在内的控制指令则进行约束更新和路径遍历,在条件分支时,对分支分别进行遍历,并且维护对应的约束条件;
对于函数调用指令,分为字节码内的函数调用与外部库函数调用两种情况:
对于字节码内的函数调用,分析被调用函数的类型,对于字节码内的函数跟进符号执行;
对于外部库函数调用,采用特定的模拟仿真进行处理,进行完整的符号执行;
步骤六、符号执行完成后,获得智能合约S的所有可行路径和对应的约束条件,使用安全漏洞分析算法进行漏洞分析,确定当前智能合约S存在的安全漏洞。
本发明的优点在于:
1)、一种基于符号执行的WASM智能合约漏洞检测方法,提高了区块链智能合约的漏洞检测效率,并且实现了跨平台智能合约安全漏洞检测分析。
2)、一种基于符号执行的WASM智能合约漏洞检测方法,主要面向WebAssembly字节码,提供了一种通用的符号执行方法,方便该字节码分析的后续扩展。
附图说明
图1是本发明采用的符号执行原理图;
图2是本发明一种基于符号执行的WASM智能合约漏洞检测方法流程图;
图3是本发明采用的字节码实例结构图;
图4是本发明采用的断言类函数模拟流程图;
图5是本发明采用的数据输入类函数模拟流程图;
图6是本发明采用的内存类函数模拟流程图;
图7是本发明采用的符号执行与漏洞检测分析流程示意图。
具体实施方式
下面将结合附图对本发明作进一步的详细说明。
本发明基于软件测试中的符号执行技术,为区块链智能合约的安全漏洞检测和定位提供条件,基本原理如图1所示,符号执行引擎主要由函数调用栈、执行环境(包含内存与全局变量)、库函数仿真和求解器4部分组成。符号执行引擎所处理的是WebAssembly字节码,通过对字节码进行解析后,生成可执行实例,对符号化的变量进行记录同时进行符号执行。符号执行从字节码的入口函数开始,引擎会创建一个函数调用栈,并将函数调用信息压入栈中,其中栈帧的内容包括本地变量、操作数栈、程序计数器和指令序列。执行指令序列的过程中,需要使用求解器进行路径优化,具体做法为在符号执行中,每次条件分支前获取当前约束条件集合,将条件分支的两个不同条件分别加入约束条件集合,利用求解器进行约束求解,剪去不满足条件的分支;执行过程中如调用其他函数,将会创建一个新的栈帧并压入栈中,调用完成后即弹出该栈帧。执行过程中内存与全局变量的内容由所有栈帧共享;此外,符号执行过程依赖库函数仿真器,在函数调用时,如被调函数是外部函数,则由库函数仿真器进行模拟。
具体是一种基于符号执行的WASM智能合约漏洞检测方法,如图2所示,具体步骤如下:
步骤一、针对待分析的区块链智能合约S,判断智能合约S是否为二进制WebAssembly字节码格式,如果是,则不作处理,进入步骤二;否则,智能合约S为源代码格式或者中间表示格式,根据其所属的区块链平台进行编译工具链选择,将智能合约S编译为WebAssembly字节码;
步骤二、根据字节码的规范标准,对智能合约S的二进制WebAssembly字节码进行解析,将其划分为不同区域,并在内存中构建各区域对应的可执行实例;
字节码解析阶段,需要读取二进制字节码,根据WebAssembly模块的区信息,生成对应的实例,实例运行时的结构如图3所示;对于WebAssembly的模块,其运行时包含有状态结构和无状态结构。有状态的结构主要包括内存和操作数栈,以及局部变量区和全局变量区。有状态的结构在运行时会保持更新,需要追踪记录。无状态的结构包括表、函数索引和函数体。无状态的结构由WebAssembly模块所定义,在生成实例后不会再发生改变。
实例运行时的流程如下:按指令序列顺序执行指令,执行指令的过程中根据具体指令的不同来写入或读取内存、压入或弹出操作数栈。其中执行函数调用指令时,如果是直接调用函数,将会访问函数索引,进而查找函数体,执行函数体内部的指令序列;如果是间接调用将会访问表,进而访问函数索引,查找其函数体,执行函数体内部的指令序列。
具体构建过程为:
首先,对智能合约S的二进制WebAssembly字节码进行合法性验证;
合法性的验证为:首先选取字节码的前4个字节,进行进制转换,判断其是否为WebAssembly标准中的魔数;如果是,则该智能合约S合法,通过验证;否则验证失败,提示错误信息,并中止进一步的漏洞分析。
然后,将通过验证的字节码按标准分为不同的区域;
标准选用自主流浏览器厂商组成的W3C社区团体制定的WebAssembly字节码规范。
所述的区域及其内容如下所示:
Import区:该区域声明宿主环境在实例化时提供的一系列import,包含函数导入、全局变量导入、内存导入和表导入。
export区:该区域定义了一系列export,这些export将在实例化后返回至宿主环境,其类型可以是函数、全局变量、内存和表。
start区:该区域定义一个函数,该函数将在环境初始化之后被调用。
global区:该区域定义了零个或多个全局变量及其初始值。
memory区:该区域定义了一个线性内存区,该部分声明了内存区域的起始大小与最大内存大小。
data区:该区域定义了线性内存区的初始内容,其格式为内存起始位置与所存内容。
table区:该区域定义了一个表,存储内容为函数指针与其索引,其作用主要用于间接函数调用。
elements区:该区域信息为若干个函数索引,这些索引是哨兵值,如果此类函数被调用将会触发陷阱(trap)。
function区:该区域定义了若干逻辑函数,每个函数包含函数头与函数体,函数头包含函数名、函数类型、参数类型、返回值类型;函数体包含若干指令。
最后,针对每个区域分别进行分析,按各区域的区域头确定当前区域的元信息,并根据各区域的区域体进行实例构建。
根据不同的区域所构建出的实例是不同的,如Function区域所构建的实例包含信息为函数签名与函数指令序列;
步骤三、针对构建的各区域实例,调用各实例中的初始化函数来对运行环境的状态进行初始化,并对运行环境的内存区和数据区进行数值填充;
环境状态的初始化具体为:
首先,根据字节码memory区域的信息,初始化运行环境的内存区长度;
然后,根据字节码data区域信息,初始化内存区的数值;
最后,调用字节码的start函数,执行初始化指令,完成运行环境的初始化。
填充内容为智能合约S内部定义的初始数据;
步骤四、从构建的各区域实例中抽取出export区,从中得到所有接口函数签名并依次遍历;
根据函数签名和函数类型定义中的参数列表,会生成对应类型的位向量格式(BitVec)符号输入。外部智能合约无法直接调用目标智能合约对外提供的二进制接口(ABI)函数,调用时需要先调用入口函数,然后根据通知数据跳转到对应目标函数执行对应操作。
步骤五、依次根据接口的函数签名,生成与函数参数列表相对应的符号变量,并根据函数签名中的索引调用函数体,进行符号执行;
符号执行过程模拟了智能合约S的执行过程,目的是获取智能合约S的所有可行路径及其对应的路径约束条件,根据这些信息可以使用全漏洞分析算法进行漏洞分析。
利用WebAssembly实例中函数体的指令序列和符号值参数,进行符号执行。首次调用Export函数后,将创建一个函数调用栈并将该函数调用的信息压入栈中,栈帧中的内容包括本地变量(local)、操作数栈(stack)、程序计数器(PC)和指令序列(instructions)。执行过程中发生的每次函数调用,都会产生一个函数调用帧用以保存上下文,当被调用的函数执行完成后,将返回值返回给上层栈帧并弹出当前栈帧。除当前调用函数私有的栈帧数据外,同时维护所有栈帧共享的全局变量数据区(global)和内存区(Memory)两个区域,其中全局变量数据区为独立的有数据类型的类寄存器变量,可以储存真实值和符号值;内存区是连续的字节为单位的区域,没有类型约束。
在执行函数的指令序列过程中,需要借用求解器来进行路径优化,具体做法是:在每次条件分支前获取当前约束条件集合,将条件分支中的两个不同条件分别加入约束条件集合中,利用求解器检测其是否具有可行解,剪去不满足条件的分支。
具体为:
首先,开辟堆栈空间用于指令的执行,同时维护初始化的环境状态;
然后,依次调用接口函数签名,根据函数体内指令的类型进行符号执行;
针对于不同类型的指令,其符号执行的处理方式不同:
对于算术指令和变量存取指令将直接在堆栈上进行操作;
对于条件分支在内的控制指令则进行约束更新和路径遍历,在条件分支时,对分支分别进行遍历,并且维护对应的约束条件;
对于函数调用指令,分为字节码内的函数调用与外部库函数调用两种情况:
对于字节码内的函数调用,分析被调用函数的类型,对于字节码内的函数跟进符号执行;
对于外部库函数调用,采用特定的模拟仿真进行处理,进行完整的符号执行;
外部引入的库函数,共计5类:
断言类函数(Assertion function),作用是检测执行过程到该函数时,是否满足某一条件,若不满足则终止执行过程。具体过程如图4所示为:在符号执行过程中,检测所调用的外部库函数是否为断言函数,如果否,则继续执行;如果是,处理策略是将该函数断言的条件作为约束条件加入当前约束条件集合中,即添加约束:expression=true。若添加后的约束条件集合可解则表明后续路径可达,继续符号执行,否则终止此路径的后续执行。
打印输出类函数(Output function),此类函数与符号执行过程无关,作用是将一些信息打印出来。处理策略是从操作数栈中取出对应参数,然后直接返回执行。
数据输入类函数(Input function),此类函数的作用是从区块链上等外部环境获取数据,并返回数据本身或将数据写入到指定的内存区域。对此类函数的具体处理策略如图5所示:从栈中弹出操作数,并生成函数返回值类型的符号值,将符号值返回,如果参数列表中存在与漏洞分析相关的变量,则记录该输入输出关系,也即符号返回值与参数之间的关系;然后记录该符号值与产生该符号值的函数间关系,然后将所生成的符号返回值类型的符号值压入栈中。
计算类函数(Calculation function),此类函数是将输入值经过对应的计算,然后返回。处理策略是根据此类函数的原本实现进行模拟实现,取出栈中参数,然后利用模拟实现返回对应符号表达式。
内存类函数(Memory function),此类函数是根据参数提供的内存地址或数据,取出指定地址的内存数据或将数据写入对应地址区域。对此类函数的具体处理策略如图6所示:首先从栈中弹出函数参数,判断参数中的地址是否为符号值,如果为否,即地址为真实值,则正常地将数据读出或写入对应的内存区域;如果地址是符号值,则查询地址映射表,判断映射表中是否已经存在该符号值与内存地址的映射关系。如果存在,则在该映射关系对应的内存地址上进行读写操作;如果不存在,则选择合法的地址并与此符号值进行绑定,之后记录符号值与地址的映射关系,并在该内存地址上正常读出或写入数据。
步骤六、符号执行完成后,获得智能合约S的所有可行路径和对应的约束条件,使用安全漏洞分析算法进行漏洞分析,确定当前智能合约S存在的安全漏洞。
基于符号执行的漏洞分析技术,其包含三个功能模块,分别为:智能合约预处理模块、符号执行模块和安全漏洞分析模块。
智能合约预处理模块功能包括分析输入智能合约的格式、编译链的选取、智能合约编译、字节码解析和实例化等;符号执行模块功能包括对实例化的智能合约进行符号执行、收集路径条件,并且在合适的时机触发漏洞分析机制;安全漏洞分析模块负责接收符号执行引擎模块提交的漏洞相关特征、利用预先定义的漏洞检测算法进行漏洞判定安全漏洞,记录执行过程状态信息,并统计当前智能合约的属性(例如指令行数、执行时间等)。其工作流程如图7所示,具体步骤如下:
本技术对于所分析的智能合约首先进行装载与初始化,然后生成对应字节码实例,对该字节码实例进行符号执行。在符号执行过程中,如遇到分支指令,则利用求解器进行路径优化;如遇到函数调用指令且被调用函数为外部库函数,则进行库函数模拟。通过符号执行获取智能合约的可行路径与对应约束条件,再对路径与约束进行漏洞分析,分析过程中也可能在再次进行符号执行。最终得出分析结果。
本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。在此指明,以上叙述有助于本领域技术人员理解本发明创造,但并非限制本发明创造的保护范围。任何没有脱离本发明创造实质内容的对以上叙述的等同替换、修饰改进和/或删繁从简而进行的实施,均落入本发明创造的保护范围。

Claims (6)

1.一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,具体步骤如下:
首先,对待分析的智能合约S进行解析,根据其所属的区块链平台和该合约S的类型将其编译为WebAssembly字节码格式;然后,根据规范标准,对WebAssembly字节码划分为不同区域,并在内存中构建各区域对应的可执行实例;进一步调用各可执行实例中的初始化函数来对运行环境的状态进行初始化,并对运行环境的内存区和数据区进行数值填充;
接着,从export区的可执行实例中抽取出字节码的外部接口函数签名,依次根据各接口的函数签名中的索引调用函数体,进行符号执行;
最后,符号执行完成后,获得智能合约S的所有可行路径和对应的约束条件,使用安全漏洞分析算法进行漏洞分析,确定当前智能合约S存在的安全漏洞。
2.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述对待分析的智能合约S进行解析,具体为:如果智能合约是WebAssembly字节码格式则不作处理,如果是源代码格式或者中间表示格式,则根据其所属的区块链平台进行编译工具链选择,将智能合约编译为WebAssembly字节码;
针对WebAssembly字节码进行分析,根据二进制字节流或文件构建出实例,支持所有使用WebAssembly作为底层字节码的区块链平台,对智能合约进行预处理,产生合法字节码。
3.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述各区域的可执行实例的具体构建过程为:
首先,对智能合约S的二进制WebAssembly字节码进行合法性验证;
然后,将通过验证的字节码按标准分为不同的区域,各区域及其内容如下所示:
Import区:该区域声明宿主环境在实例化时提供的一系列import,包含函数导入、全局变量导入、内存导入和表导入;
export区:该区域定义了一系列export,将在实例化后返回至宿主环境,其类型可以是函数、全局变量、内存和表;
start区:该区域定义一个函数,该函数将在环境初始化之后被调用;
global区:该区域定义了零个或多个全局变量及其初始值;
memory区:该区域定义了一个线性内存区,该部分声明了内存区域的起始大小与最大内存大小;
data区:该区域定义了线性内存区的初始内容,其格式为内存起始位置与所存内容;
table区:该区域定义了一个表,存储内容为函数指针与其索引,其作用主要用于间接函数调用;
elements区:该区域信息为若干个函数索引,这些索引是哨兵值,如果此类函数被调用将会触发陷阱;
function区:该区域定义了若干逻辑函数,每个函数包含函数头与函数体,函数头包含函数名、函数类型、参数类型、返回值类型;函数体包含若干指令;
最后,针对每个区域分别进行分析,按各区域的区域头确定当前区域的元信息,并根据各区域的区域体进行不同的实例构建。
4.如权利要求3所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述合法性验证具体为:首先选取字节码的前4个字节,进行进制转换,判断其是否为WebAssembly标准中的魔数;如果是,则该智能合约S合法,通过验证;否则验证失败,提示错误信息,并中止进一步的漏洞分析。
5.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述对运行环境的状态进行初始化具体为:
首先,根据字节码memory区域的信息,初始化运行环境的内存区长度;
然后,根据字节码data区域信息,初始化内存区的数值;
最后,调用字节码的start函数,执行初始化指令,完成运行环境的初始化;
填充内容为智能合约S内部定义的初始数据。
6.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述符号执行过程具体为:
首先,开辟堆栈空间用于指令的执行,同时维护初始化的环境状态;
然后,依次调用接口函数签名,根据函数体内指令的类型进行符号执行;
针对于不同类型的指令,其符号执行的处理方式不同:
对于算术指令和变量存取指令将直接在堆栈上进行操作;
对于条件分支在内的控制指令则进行约束更新和路径遍历,在条件分支时,对分支分别进行遍历,并且维护对应的约束条件;
对于函数调用指令,分为字节码内的函数调用与外部库函数调用两种情况:
对于字节码内的函数调用,分析被调用函数的类型,对于字节码内的函数跟进符号执行;
对于外部库函数调用,采用特定的模拟仿真进行处理,进行完整的符号执行。
CN202110989270.XA 2021-08-26 2021-08-26 一种基于符号执行的wasm智能合约漏洞检测方法 Active CN113672515B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110989270.XA CN113672515B (zh) 2021-08-26 2021-08-26 一种基于符号执行的wasm智能合约漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110989270.XA CN113672515B (zh) 2021-08-26 2021-08-26 一种基于符号执行的wasm智能合约漏洞检测方法

Publications (2)

Publication Number Publication Date
CN113672515A true CN113672515A (zh) 2021-11-19
CN113672515B CN113672515B (zh) 2023-08-04

Family

ID=78546804

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110989270.XA Active CN113672515B (zh) 2021-08-26 2021-08-26 一种基于符号执行的wasm智能合约漏洞检测方法

Country Status (1)

Country Link
CN (1) CN113672515B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114510414A (zh) * 2022-01-17 2022-05-17 北京大学 一种基于符号执行对智能合约功能属性进行形式化验证的方法及系统
CN114510723A (zh) * 2022-02-18 2022-05-17 北京大学 一种智能合约权限管理漏洞检测方法及装置
CN114996126A (zh) * 2022-05-17 2022-09-02 电子科技大学 一种针对eosio智能合约的漏洞检测方法及系统
CN116541132A (zh) * 2023-06-30 2023-08-04 紫光同芯微电子有限公司 一种间接访问变量栈的管理方法和装置
CN116578988A (zh) * 2023-05-23 2023-08-11 海南大学 一种智能合约的漏洞检测方法和装置、存储介质
WO2024001929A1 (zh) * 2022-06-27 2024-01-04 中国人民银行数字货币研究所 智能合约漏洞检测方法、装置和设备
CN117520199A (zh) * 2023-12-06 2024-02-06 北京邮电大学 基于静态符号执行的数值软件缺陷检测方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112015628A (zh) * 2020-09-01 2020-12-01 北京物资学院 一种智能合约函数级动态监测分析系统及实现方法
CN112749389A (zh) * 2020-12-29 2021-05-04 华南师范大学 一种检测智能合约破坏敏感数据漏洞的检测方法及装置
WO2021114093A1 (zh) * 2019-12-10 2021-06-17 中国科学院深圳先进技术研究院 一种基于深度学习的智能合约漏洞检测方法
CN113051574A (zh) * 2021-03-11 2021-06-29 哈尔滨工程大学 一种智能合约二进制代码的漏洞检测方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021114093A1 (zh) * 2019-12-10 2021-06-17 中国科学院深圳先进技术研究院 一种基于深度学习的智能合约漏洞检测方法
CN112015628A (zh) * 2020-09-01 2020-12-01 北京物资学院 一种智能合约函数级动态监测分析系统及实现方法
CN112749389A (zh) * 2020-12-29 2021-05-04 华南师范大学 一种检测智能合约破坏敏感数据漏洞的检测方法及装置
CN113051574A (zh) * 2021-03-11 2021-06-29 哈尔滨工程大学 一种智能合约二进制代码的漏洞检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
WANG, DONG 等: ""WANA: Symbolic Execution of Wasm Bytecode for Cross-Platform Smart Contract Vulnerability Detection"", 《COMPUTER SCIENCE - SOFTWARE ENGINEERING》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114510414A (zh) * 2022-01-17 2022-05-17 北京大学 一种基于符号执行对智能合约功能属性进行形式化验证的方法及系统
CN114510414B (zh) * 2022-01-17 2024-05-17 北京大学 一种基于符号执行对智能合约功能属性进行形式化验证的方法及系统
CN114510723A (zh) * 2022-02-18 2022-05-17 北京大学 一种智能合约权限管理漏洞检测方法及装置
CN114510723B (zh) * 2022-02-18 2024-04-16 北京大学 一种智能合约权限管理漏洞检测方法及装置
CN114996126A (zh) * 2022-05-17 2022-09-02 电子科技大学 一种针对eosio智能合约的漏洞检测方法及系统
CN114996126B (zh) * 2022-05-17 2024-02-23 电子科技大学 一种针对eosio智能合约的漏洞检测方法及系统
WO2024001929A1 (zh) * 2022-06-27 2024-01-04 中国人民银行数字货币研究所 智能合约漏洞检测方法、装置和设备
CN116578988B (zh) * 2023-05-23 2024-01-23 海南大学 一种智能合约的漏洞检测方法和装置、存储介质
CN116578988A (zh) * 2023-05-23 2023-08-11 海南大学 一种智能合约的漏洞检测方法和装置、存储介质
CN116541132B (zh) * 2023-06-30 2023-10-13 紫光同芯微电子有限公司 一种间接访问变量栈的管理方法和装置
CN116541132A (zh) * 2023-06-30 2023-08-04 紫光同芯微电子有限公司 一种间接访问变量栈的管理方法和装置
CN117520199A (zh) * 2023-12-06 2024-02-06 北京邮电大学 基于静态符号执行的数值软件缺陷检测方法及装置
CN117520199B (zh) * 2023-12-06 2024-05-14 北京邮电大学 基于静态符号执行的数值软件缺陷检测方法及装置

Also Published As

Publication number Publication date
CN113672515B (zh) 2023-08-04

Similar Documents

Publication Publication Date Title
CN113672515B (zh) 一种基于符号执行的wasm智能合约漏洞检测方法
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
CN110175454B (zh) 一种基于人工智能的智能合约安全漏洞挖掘方法及系统
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN107526625B (zh) 一种基于字节码检查的Java智能合约安全检测方法
CN113626324B (zh) 一种面向Move语言虚拟机的模糊测试方法
Hwang et al. CodeNet: Code-targeted convolutional neural network architecture for smart contract vulnerability detection
CN112256271B (zh) 一种基于静态分析的区块链智能合约安全检测系统
CN111475820A (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN111045927A (zh) 性能测试评估方法、装置、计算机设备及可读存储介质
Davis et al. The reflective Milawa theorem prover is sound (down to the machine code that runs it)
Djoudi et al. Formal verification of a JavaCard virtual machine with Frama-C
US11593076B2 (en) Method for merging architecture data
Hay-Schmidt et al. Towards a unified language architecture for reversible object-oriented programming
Poorhadi et al. Analysing the impact of security attacks on safety using SysML and event-B
Ko et al. Weakly sensitive analysis for JavaScript object‐manipulating programs
CN111176980B (zh) 调试环境和运行环境分离的数据分析方法、装置及系统
US20180253287A1 (en) Method for translation of assembler computer language to validated object-oriented programming language
Alpuente et al. Automatic inference of specifications using matching logic
CN116775034A (zh) 内核观测程序的构建方法、装置及设备
Hiep et al. Verifying OpenJDK’s LinkedList using KeY (extended paper)
He Modeling and analyzing smart contracts using predicate transition nets
Zheng et al. An approach for predicting multiple-type overflow vulnerabilities based on combination features and a time series neural network algorithm
Bockisch et al. Java bytecode verification with OCL: Why how and when
Zhang et al. Multi-transaction sequence vulnerability detection for smart contracts based on inter-path data dependency

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