[发明专利]一种基于符号执行的WASM智能合约漏洞检测方法有效
申请号: | 202110989270.X | 申请日: | 2021-08-26 |
公开(公告)号: | CN113672515B | 公开(公告)日: | 2023-08-04 |
发明(设计)人: | 姜博;王冬;陈一飞;万寒 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/41 |
代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 易卜 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 符号 执行 wasm 智能 合约 漏洞 检测 方法 | ||
1.一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,具体步骤如下:
首先,对待分析的智能合约S进行解析,根据其所属的区块链平台和该合约S的类型将其编译为WebAssembly字节码格式;
然后,根据规范标准,对WebAssembly字节码划分为不同区域,并在内存中构建各区域对应的可执行实例;
各区域的可执行实例的具体构建过程为:
首先,对智能合约S的二进制WebAssembly字节码进行合法性验证;
然后,将通过验证的字节码按标准分为不同的区域,各区域及其内容如下所示:
Import区:该区域声明宿主环境在实例化时提供的一系列import,包含函数导入、全局变量导入、内存导入和表导入;
export区:该区域定义了一系列export,将在实例化后返回至宿主环境,其类型为函数、全局变量、内存和表;
start区:该区域定义一个函数,该函数将在环境初始化之后被调用;
global区:该区域定义了零个或多个全局变量及其初始值;
memory区:该区域定义了一个线性内存区,并声明了内存区域的起始大小与最大内存大小;
data区:该区域定义了线性内存区的初始内容,其格式为内存起始位置与所存内容;
table区:该区域定义了一个表,存储内容为函数指针与其索引,其作用主要用于间接函数调用;
elements区:该区域信息为若干个函数索引,这些索引是哨兵值,如果此类函数被调用将会触发陷阱;
function区:该区域定义了若干逻辑函数,每个函数包含函数头与函数体,函数头包含函数名、函数类型、参数类型、返回值类型;函数体包含若干指令;
最后,针对每个区域分别进行分析,按各区域的区域头确定当前区域的元信息,并根据各区域的区域体进行不同的实例构建;
进一步调用各可执行实例中的初始化函数来对运行环境的状态进行初始化,并对运行环境的内存区和数据区进行数值填充;
接着,从export区的可执行实例中抽取出字节码的外部接口函数签名,依次根据各接口的函数签名中的索引调用函数体,进行符号执行;
符号执行过程具体为:
首先,开辟堆栈空间用于指令的执行,同时维护初始化的环境状态;
然后,依次调用接口函数签名,根据函数体内指令的类型进行符号执行;
针对于不同类型的指令,其符号执行的处理方式不同:
对于算术指令和变量存取指令将直接在堆栈上进行操作;
对于条件分支在内的控制指令则进行约束更新和路径遍历,在条件分支时,对分支分别进行遍历,并且维护对应的约束条件;
对于函数调用指令,分为字节码内的函数调用与外部库函数调用两种情况:
对于字节码内的函数调用,分析被调用函数的类型,对于字节码内的函数跟进符号执行;
对于外部库函数调用,采用特定的模拟仿真进行处理,进行完整的符号执行;
最后,符号执行完成后,获得智能合约S的所有可行路径和对应的约束条件,使用安全漏洞分析算法进行漏洞分析,确定当前智能合约S存在的安全漏洞。
2.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述对待分析的智能合约S进行解析,具体为:如果智能合约是WebAssembly字节码格式则不作处理,如果是源代码格式或者中间表示格式,则根据其所属的区块链平台进行编译工具链选择,将智能合约编译为WebAssembly字节码;
针对WebAssembly字节码进行分析,根据二进制字节流或文件构建出实例,支持所有使用WebAssembly作为底层字节码的区块链平台,对智能合约进行预处理,产生合法字节码。
3.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述合法性验证具体为:首先选取字节码的前4个字节,进行进制转换,判断其是否为WebAssembly标准中的魔数;如果是,则该智能合约S合法,通过验证;否则验证失败,提示错误信息,并中止进一步的漏洞分析。
4.如权利要求1所述的一种基于符号执行的WASM智能合约漏洞检测方法,其特征在于,所述对运行环境的状态进行初始化具体为:
首先,根据字节码memory区域的信息,初始化运行环境的内存区长度;
然后,根据字节码data区域信息,初始化内存区的数值;
最后,调用字节码的start函数,执行初始化指令,完成运行环境的初始化;
填充内容为智能合约S内部定义的初始数据。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110989270.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种锂电池正极材料生产用匣钵自动摇匀装置
- 下一篇:循环回转输送线