[发明专利]基于符号执行的智能合约漏洞检测方法、装置及相关设备在审
申请号: | 202211247665.3 | 申请日: | 2022-10-12 |
公开(公告)号: | CN115455436A | 公开(公告)日: | 2022-12-09 |
发明(设计)人: | 郑子彬;陈焕泽;郑沛霖 | 申请(专利权)人: | 中山大学 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F16/27 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 李伟贤 |
地址: | 510275 *** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 符号 执行 智能 合约 漏洞 检测 方法 装置 相关 设备 | ||
本申请公开了一种基于符号执行的智能合约漏洞检测方法、装置及相关设备,该方法包括:每当执行完一个操作码,将此时的状态数据保存到预设的共享内存中;基于所述状态数据,判断是否需要执行路径分叉;若是,获取第一探索分支和第二探索分支,并利用原先的进程执行第一探索分支,利用一个新的进程执行第二探索分支;当所有进程执行完后,基于保存于所述共享内存的所有状态数据,构建全局变量;基于所述全局变量,生成漏洞检测结果。本申请采用多进程对路径分支进行并行探索,提高了符号执行在智能合约漏洞检测中的执行效率。
技术领域
本申请涉及智能合约技术领域,更具体地说,是涉及一种基于符号执行的智能合约漏洞检测方法、装置及相关设备。
背景技术
智能合约是区块链2.0时代的一大特征,其实质为运行在区块链上的一段能够改变链上存储状态的代码,在特定条件下可自动触发对应的函数内容,完成对应的业务逻辑。智能合约的可信度源自其不可篡改性,一旦被部署上线便无法修改,任何人都可对合约存在的安全漏洞发起攻击。此外,很多项目会公开智能合约源码。源码的公开透明虽能提升用户对合约的信任度,却也大幅度降低了黑客攻击的成本,每一个暴露在开放网络上的智能合约都有可能成为专业黑客团队的攻击目标。因此,有必要在正式部署到生产环境时对智能合约进行充分的测试。
符号执行是一种静态分析技术,最初在1976年由King JC在ACM上提出。针对一段程序,它能够以符号值而非具体值作为程序输入,探索程序中尽可能多的可达路径并记录下当前路径的约束条件,并在路径探索结束时通过求解器求解得到对应的输入具体值,常用于漏洞检测和测试样例生成等场景。
将符号执行应用于智能合约漏洞检测中,可以以尽可能少的测试用例集来达到高测试覆盖率,以及挖掘出智能合约的深层错误。在实际的测试应用过程中,当需要检测的智能合约较为复杂,代码中涉及到的分支和循环语句较多时,符号执行树的分支数量也将呈指数级别增长,从而出现路径爆炸的状况,导致无法在预定时间内探索完所有路径,存在整体执行效率较低的问题。
发明内容
有鉴于此,本申请提供了一种基于符号执行的智能合约漏洞检测方法、装置及相关设备,以提高采用符号执行对智能合约进行漏洞检测的效率。
为实现上述目的,本申请第一方面提供了一种基于符号执行的智能合约漏洞检测方法,包括:
每当执行完一个操作码,将此时的状态数据保存到预设的共享内存中;
基于所述状态数据,判断是否需要执行路径分叉;
若是,获取第一探索分支和第二探索分支,并利用原先的进程执行第一探索分支,利用一个新的进程执行第二探索分支;
当所有进程执行完后,基于保存于所述共享内存的所有状态数据,构建全局变量;
基于所述全局变量,生成漏洞检测结果。
优选地,所述状态数据包括下一个操作码、约束集和当前的合约状态;基于所述状态数据,判断是否需要执行路径分叉的过程,包括:
判断所述下一个操作码是否包含在预设的分叉操作码集合内;
若是,基于所述下一个操作码和所述合约状态,确定第一分支路径和第二分支路径;
基于所述约束集判断所述第一分支路径和所述第二分支路径是否均可达;
若是,判断当前的进程数是否小于进程阈值,所述进程阈值用于表示在预设的计算设备中能够运行的约束求解进程的最大值;
若是,确定需要执行路径分叉。
优选地,所述进程阈值的获取过程,包括:
基于SMT求解器在所述计算设备的求解性能以及性能丢失值,确定所述进程阈值;其中,所述求解性能表示为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中山大学,未经中山大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211247665.3/2.html,转载请声明来源钻瓜专利网。