[发明专利]一种基于抽象语法树的智能合约重入漏洞检测方法有效
申请号: | 201910390316.9 | 申请日: | 2019-05-10 |
公开(公告)号: | CN110162474B | 公开(公告)日: | 2020-09-15 |
发明(设计)人: | 马锐;菅泽峰;陈光媛;田东海;薛静锋 | 申请(专利权)人: | 北京理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 温子云 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 抽象 语法 智能 合约 漏洞 检测 方法 | ||
本发明公开了一种基于抽象语法树的智能合约重入漏洞检测方法,首先利用编译器solc生成源程序代码的抽象语法树;对抽象语法树进行逐步遍历分析,针对每个合约检测在执行address.call.value()()转账函数之后是否还存在合约账户余额的变化,以及合约内是否存在互斥锁;对于某个合约,如果执行address.call.value()()转账函数之后还存在合约账户余额的变化,且互斥锁不存在,则判定该合约存在重入漏洞的危险。使用本发明能够提高分析效率,降低误报率。
技术领域
本发明涉及漏洞检测技术领域,尤其涉及一种基于抽象语法树的智能合约重入漏洞检测方法。
背景技术
智能合约是区块链2.0的核心,具有图灵完备性,它是由事件驱动的、具有状态的、运行在可复制的共享区块链数据账本上的计算机程序,能够实现自主调用或被调用的处理数据,接受、储存和转发数字货币对应的价值,以及控制和管理各类在区块链上的智能数字资产等功能。
重入漏洞,就是可以重复进入导致的漏洞。以太坊智能合约的特点之一是能够调用和利用其他外部合约的代码。攻击者可以在自身地址对应合约的回退函数中,构建一段恶意代码,一旦向被攻击者“劫持”的合约账户发起转账操作,迫使被攻击的合约账户执行攻击合约的回退函数,从而执行该函数内攻击者构建的恶意代码,恶意代码将会重新进入被攻击合约的相关函数代码中,即包含回调合约转账函数的操作,这将会导致代码执行“重新进入”合约,执行一些开发人员不希望执行的合约逻辑。利用重入漏洞执行的攻击方式被用于臭名昭著的TheDAO攻击中。
造成智能合约重入的根本原因有以下几种:一是由于程序员在编写合约代码的时候没有考虑去预防和避免重入漏洞的发生;二是由于智能合约转账函数本身存在成为安全漏洞的隐患,即在执行转账函数后会调用回退函数。
目前针对智能合约漏洞的检测方法包括基于符号执行的检测方法、利用形式化验证的检测方法和基于源程序代码进行静态分析的检测方法。
其中,基于源程序代码进行静态分析的检测方法比较常见,灵活性和扩展性比较好,但对应的特征库并不能对漏洞进行完全充分的解析和检测,造成覆盖率低、误报率较高等问题。GitHub上开源的以太坊智能合约漏洞检测工具Slither运用了基于抽象语法树的静态分析方法对常见漏洞进行检测,它首先将智能合约源代码编译为json格式的抽象语法树,之后对抽象语法树进行了初步分析,将漏洞检测的必要信息都保存在自身定义的结构当中,同时使用该结构将智能合约源代码转换成自身定义的一套中间语言,然后模拟源代码的执行流程,逐步对中间语言进行分析,检测是否满足漏洞存在的条件。
现有方案的问题是,需要将抽象语法树转换为中间语言再进行分析,分析效率不高。
发明内容
有鉴于此,本发明提供了一种基于抽象语法树的智能合约重入漏洞检测方法,能够提高分析效率,降低误报率。
为了解决上述技术问题,本发明是这样实现的:
一种基于抽象语法树的智能合约重入漏洞检测方法,包括:
步骤一、利用编译器solc生成源程序代码的抽象语法树;
步骤二、对抽象语法树进行逐步遍历分析,针对每个合约检测在执行address.call.value()()转账函数之后是否还存在合约账户余额的变化,以及合约内是否存在互斥锁;
步骤三、对于某个合约,如果执行address.call.value()()转账函数之后还存在合约账户余额的变化,且互斥锁不存在,则判定该合约存在重入漏洞的危险。
优选的,步骤一获得抽象语法树之后,进一步删除抽象语法树中与智能合约重入漏洞检测无关的冗余节点,得到重入漏洞可能发生的保留节点;步骤二对保留节点进行遍历分析。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学,未经北京理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910390316.9/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种软件测试方法
- 下一篇:一种基于深度迁移的软件缺陷预测方法