System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种智能合约升级漏洞的检测方法技术_技高网

一种智能合约升级漏洞的检测方法技术

技术编号:41202943 阅读:3 留言:0更新日期:2024-05-07 22:28
本发明专利技术属于合约漏洞检测领域,尤其是一种智能合约升级漏洞的检测方法,针对现有的智能合约无法检测内存冲突和变形智能合约的访问控制问题问题,现提出如下方案,其包括以下步骤:S1:获取合约,S2:生成抽象语法树,获取槽映射关系;S3:编译源代码获得字节码,再反汇编得到操作码特征;S4:根据上述获得的槽映射关系与操作码特征,通过符号执行动态的构建控制流图;本发明专利技术能够检测可升级智能合约特有的内存冲突漏洞,也关注到了使用率较低的create2模式下创建的合约的自毁函数权限访问控制漏洞,能够填补这方面漏洞检测的空白,构建出精度更高的控制流图,从而提高漏洞检测的精度。

【技术实现步骤摘要】

本专利技术涉及合约漏洞检测,尤其涉及一种智能合约升级漏洞的检测方法


技术介绍

1、区块链是一种分布式存储系统,该系统由多个节点组成。区块链的底层是由许多区块组成的链,每个区块由区块头和区块体构成,根据哈希值将彼此连接在一起。每当一个新区块被生成时,所有区块都会参与到它的验证中,通过验证后才能加入到区块链中。区块链存在于每个节点的服务器中,修改区块链中的信息需要征得半数以上的节点同意并修改所有节点中的信息,因此篡改区块链信息是几乎不可能的事情,区块的内容被认为具有不可篡改性。

2、在第二代区块链中,智能合约是重要组成部分。智能合约是运行在区块链上的程序代码,是一种计算机化的交易协议,其中的合约条款会在满足条件时自动执行。基于区块链技术,智能合约一旦部署上链就无法篡改,并且所有智能合约都是公开可见的。因此,如果智能合约中存在漏洞,那么就很容易被黑客利用进行恶意攻击,从而使智能合约账户损失虚拟资产。

3、为了解决部署后的智能合约中发现的漏洞,以及根据需求实现新的拓展功能,人们对于可升级智能合约的需求越来越大,对可升级智能合约的使用变得越来越普遍。目前主流的可升级合约是uups代理模式,将一个合约分成两个:代理合约和逻辑合约,代理合约中存储用户数据以及逻辑合约的地址,负责与用户交互,并将用户的调用(例如,出价竞标)委托给包含实际业务逻辑(例如,实际的出价功能函数)的逻辑合约。升级时,开发人员部署一个新的逻辑合约,然后将代理合约中的旧地址替换为新地址即可完成升级。值得注意的是,还有其它实现可升级性的方法。另一种选择是使用create2操作码的变形智能合约,它能够将包含自毁功能的合约部署到预定的地址,升级时只需将旧版本合约销毁,然后将升级版本重新部署到相同的地址。

4、显然,可升级智能合约的使用在带来方便的同时,也会带来新的安全问题。尽管人们已经开发了许多技术来检测常规的智能合约,对于可升级智能合约的特有漏洞却缺乏相应的检测手段。因此本专利技术注重于检测可升级智能合约的特有漏洞,以保证智能合约升级的安全性与可靠性。

5、可升级智能合约越来越普遍,现有技术对于普通智能合约漏洞的检测方法有很多,但是专门针对于可升级智能合约的漏洞检测方法还很少。本专利技术提出的方法则针对可升级合约的特有漏洞进行检测,填补了这方面的空白。

6、现有技术基于控制流图对合约进行检测的方法中,都是根据合约字节码和操作码来得到智能合约的子结构特征和关联关系进而构建控制流图。本专利技术则在此基础上使用符号执行来获取控制流图,因此在构建控制流图的过程中可以获取更多的语义信息以及对应的状态变量的变化关系,并且获得更精确的控制流图,更有效地检测漏洞。

7、本申请人检索的相近技术方案:

8、1、申请公布号cn112631611a,公开了一种智能庞氏骗局合约识别方法及装置,包括根据智能合约的字节码,通过反汇编处理方式,提取操作码特征;根据智能合约的字节码提取智能合约对应的控制流图特征;将操作码特征与控制流图特征作为智能合约识别模型的输入,以通过智能合约识别模型的分类运算,得到智能合约对应的智能庞氏骗局合约识别结果。

9、2、申请公布号cn116028495a,公开了智能合约的检测方法及装置,包括获取智能合约对应的源代码;通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历抽象语法树中的多个树结点;根据预设条件检测多个树结点中是否包含有异常树结点,其中,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配;在多个树结点中存在异常树结点的情况下,确定智能合约为存在信息安全风险的异常智能合约。

10、3、申请公布号cn116127480a,公开了一种智能合约检测方法及装置,包括通过反编译分别获取旧智能合约对应的第一操作码记录和新智能合约对应的第二操作码记录,第一操作码记录和第二操作码记录分别用于,记录旧智能合约和新智能合约反编译时,执行的各操作码以及各操作码的执行顺序;根据第一操作码记录和第二操作码记录,分别获取旧智能合约中各第一状态变量各自的第一存储位置信息,以及新智能合约中各第二状态变量各自的第二存储位置信息;分别比较各第一存储位置信息与对应的第二存储位置信息是否存在差异,若存在,则更新失败。上述方法中,可以保证更新后获得的新智能合约,可以继承旧智能合约的服务。

11、4.授权公告号cn106648818b,公开了一种目标代码控制流图生成系统,公开了一种基于符号执行的目标代码控制流图生成系统,该系统包括预处理模块、反汇编与控制流图生成模块、目标地址分析模块。对间接地址跳转地址进行了分析,其生成的控制流图,相比于一般模块生成的控制流图,具有更加精确、相对完整的特点。

12、现有技术存在问题:

13、1.不能检测内存冲突问题。

14、在可升级智能合约中,因为存在升级这一过程,因此需要对旧合约存储的数据进行正确的继承,才能够在升级后保存原来的用户数据并加以操作。而升级后的合约新添加的功能与变量,也会与原来的用户数据存储在同一存储空间内,因此必须正确分配内存,在不与旧的数据冲突的同时保持原有的“紧凑”布局,以节省打包数据的开销。现有技术只关心了常规智能合约可能发生的漏洞,而不能检测可升级智能合约中最容易发生的内存冲突问题。本专利技术能够准确的检测在合约升级的过程中,数据能否被正常的继承使用,是否产生内存冲突的漏洞。

15、2.不能检测变形智能合约的访问控制问题

16、变形智能合约的升级过程中存在合约自毁这一步骤,而合约自毁会销毁旧合约并转走当前账户的余额,对其的权限控制应非常谨慎。由于这一升级模式的使用率较低,现有技术没有针对此类合约进行必要的访问控制检查。本专利技术能够准确检测具有自毁功能的合约,是否有对自毁功能的访问权限做出正确的限制,是否存在访问控制漏洞。


技术实现思路

1、本专利技术的目的是为了解决现有技术中存在的智能合约无法检测内存冲突和变形智能合约的访问控制问题,而提出的一种智能合约升级漏洞的检测方法。

2、为了实现上述目的,本专利技术采用了如下技术方案:

3、一种智能合约升级漏洞的检测方法,包括以下步骤:

4、s1:获取合约;

5、分别输入uups代理合约(或create2工厂合约)、旧版本合约、新版本合约(旧版本合约的更新版本);

6、s2:生成抽象语法树,获取槽映射关系;

7、首先通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,可以使用solidity官方依据c++语言编写的编译器solc,或者antlr4来生成抽象语法树,抽象语法树中含有合约定义结点以及合约定义结点下的函数声明子结点,每个树结点都表征了智能合约中的一个函数代码的定义信息;

8、智本文档来自技高网...

【技术保护点】

1.一种智能合约升级漏洞的检测方法,其特征在于,包括以下步骤:

【技术特征摘要】

1.一种智能合约升级漏洞的检测方...

【专利技术属性】
技术研发人员:李志伟
申请(专利权)人:广东启链科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1