[发明专利]一种智能合约权限管理漏洞检测方法及装置在审
申请号: | 202210150834.5 | 申请日: | 2022-02-18 |
公开(公告)号: | CN114510723A | 公开(公告)日: | 2022-05-17 |
发明(设计)人: | 文伟平;刘军杰;胡叶舟;刘宇航;肖遥;方莹 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F11/36 |
代理公司: | 北京万象新悦知识产权代理有限公司 11360 | 代理人: | 贾晓玲 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 智能 合约 权限 管理 漏洞 检测 方法 装置 | ||
1.一种智能合约权限管理漏洞的检测方法,其特征在于,分为两个阶段,第一阶段是将智能合约solidity源码编译成操作码指令序列,在操作码指令序列中找到表示构造函数结束的指令,在构造函数结束指令之前的指令中找到与关键权限变量“owner”初始化相关的指令,并确定“owner”初始化时的存储位置;第二阶段是通过符号执行的方法,遍历构造函数之外所有可能修改“owner”存储位置所存储的值的路径,进行约束求解,得到智能合约权限管理漏洞。
2.如权利要求1所述的智能合约权限管理漏洞的检测方法,其特征在于,第一阶段具体步骤包括:
步骤1.根据智能合约的操作码指令序列,确定构造函数分界点,即确定构造函数内指令和构造函数外指令;
步骤2.对构造函数内指令初始化的变量进行筛查,确定“owner”变量,并确定其初始化时的存储位置。
3.如权利要求1所述的智能合约权限管理漏洞的检测方法,其特征在于,第二阶段具体步骤包括:
步骤3.对构造函数外指令的写操作指令进行判断,根据“owner”变量的存储位置,判断写操作的存储位置是否是该位置;
步骤4.判断写操作这笔交易是否为任意地址可以调用;
步骤5.对满足上述条件的路径进行约束求解,有解则报告该漏洞。
4.如权利要求2所述的智能合约权限管理漏洞的检测方法,其特征在于,步骤1具体为,以CODECOPY所在的位置为分界点,根据合约编译后的操作码指令序列,从中找到CODECOPY操作码所在位置的序号,小于该序号的指令为构造函数内指令,大于该序号的指令为构造函数外指令。
5.如权利要求2所述的智能合约权限管理漏洞的检测方法,其特征在于,步骤2具体为,在构造函数内指令中对“owner”变量赋值为msg.sender,msg.sender由CALLER操作码压入EVM栈中,赋值操作由SSTORE操作码完成,在指令集中寻找小于分界点序号的CALLER操作码,CALLER操作码会将msg.sender的值放入栈中,对栈中该数据进行跟踪,在指令集中寻找序号小于分界点序号的SSTORE操作码,SSTORE操作会从栈中获取key和value,如果value为msg.sender,key就是“owner”在storage中的存储位置。
6.一种智能合约权限管理漏洞检测装置,其特征在于,包括源代码处理子系统、符号执行虚拟机子系统、漏洞检测和约束求解子系统;其中:
源代码处理子系统包括智能合约代码编译模块和智能合约字节码文件解析模块,将输入的合约数据转换为统一描述的智能合约操作码指令序列;
符号执行虚拟机子系统包括字节码执行模块和上下文信息管理模块,字节码执行模块执行经过处理得到的操作码指令序列;上下文信息管理模块保存符号执行过程中所产生的信息,包括栈数据、内存数据、存储数据;
漏洞检测和约束求解子系统包括漏洞检测模块和约束求解模块,其中漏洞检测模块分析符号执行完成后虚拟机上下文中保存的分支数据,通过分支中保存的指令执行路径、符号表和路径约束集合进行漏洞判断或建立约束表达式;约束求解模块利用SMT方法进行约束条件表达式求解。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210150834.5/1.html,转载请声明来源钻瓜专利网。