检测智能合约恶意消除重入影响漏洞的检测方法和装置

文档序号:24824598发布日期:2021-04-27 15:37阅读:154来源:国知局
检测智能合约恶意消除重入影响漏洞的检测方法和装置

1.本发明涉及区块链技术领域,尤其是检测智能合约恶意消除重入影响漏洞的检测方法和装置。


背景技术:

2.随着区块链技术的日益成熟,目前,区块链平台以太坊首先引入了智能合约作为一个图灵完备的程序,可以自动化区块链的交易去实现复杂的功能。因此,开发者可以发布基于erc代币标准下的以太坊区块链虚拟代币。在过去的几年里,人们的注意力已经从几个智能合约组成的金融去中心化应用(dapp)上转移。在去中心化金融(defi)中,金融活动(例如虚拟代币的交换,存储和借贷)是由不可信网络中的共识算法来保证的。由于去中心化金融应用帮助用户处理并且转移宝贵的财产,所以攻击去中心化金融应用是有利可图的。因此,去中心化金融应用的安全性受到广泛关注。
3.然而,现有技术不能检测到对于lendme的漏洞的攻击,主要在于缺乏对此漏洞持久化存储的数据(例如:存储代币的账本变量)依赖关系以及执行路径的分析和提取。
4.1.首先,现有分析技术通过监控账号和账户间的以太币流动来检测安全性漏洞,此特征无法识别出针对lendme的漏洞的攻击。现有技术无法追踪合约代币的数据传递流动关系,因此漏判此漏洞。
5.2.其次,因为针对lendme的漏洞的攻击并没有出现对控制流干预的行为特征,而现有技术是通过是否干预控制流的行为特征进行判别,容易漏判此漏洞。lendme攻击事件是通过写入过期数据的方式对已经生效的状态变换进行覆盖,从而消除在重入过程中已经生效的转账行为(例如:攻击者在重入状态下进行转账操作,该操作将不记录到智能合约的账本变量中),达到攻击目的。


技术实现要素:

6.有鉴于此,本发明实施例提供一种安全性高的,检测智能合约恶意消除重入影响漏洞的检测方法和装置。
7.本发明的一方面提供了检测智能合约恶意消除重入影响漏洞的检测方法,包括:
8.通过以太坊智能合约反编译技术,构建智能合约字节码的控制流图;
9.根据所述控制流图,获取智能合约的执行路径;
10.根据所述执行路径确定所述智能合约字节码中所有变量的数据传递关系;
11.根据所述执行路径和所述数据传递关系,检测目标指令;所述目标指令用于更新index位置的存储值;
12.根据所述目标指令的动作状态,确定漏洞检测结果;所述漏洞检测结果包括存在恶意消除重入影响漏洞和不存在恶意消除重入影响漏洞。
13.优选地,所述方法还包括:
14.根据所述执行路径和所述数据传递关系,判断是否存在所述目标指令,当不存在
所述目标指令时,确定漏洞检测结果为不存在恶意消除重入影响漏洞。
15.优选地,所述根据所述目标指令的动作状态,确定漏洞检测结果,包括:
16.检测公有函数上是否存在目标指令,若是,则执行下一步骤;反之,则确定漏洞检测结果为不存在恶意消除重入影响漏洞;其中,所述目标指令用于更新index位置的存储值;
17.根据所述index位置的存储值的更新结果,确定漏洞检测结果。
18.优选地,所述根据所述index位置的存储值的更新结果,确定漏洞检测结果,包括:
19.根据所述执行路径和所述数据传递关系,判断是否有公有函数存在目标行为,若是,则根据预设条件对所述公有函数进行检测,确定漏洞检测结果;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞。
20.优选地,所述根据预设条件对所述公有函数进行检测,确定漏洞检测结果,包括:
21.判断所述公有函数中是否存在第一执行路径,若是,则执行下一步骤;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;其中,所述第一执行路径包括第一指令、第二指令和第三指令;所述第一指令用于读取所述index位置的存储值;所述第二指令用于进行外部调用;所述第三指令用于更新所述index位置的存储值;
22.判断所述公有函数中是否存在第一数据流,以使得所述第一指令读取的存储值更新所述第三指令中指定的存储值,若是,则执行下一步骤;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;
23.判断所述公有函数中是否存在第二执行路径,若是,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;反之,则执行下一步骤;其中,所述第二执行路径包括第三指令和第四指令;所述第四指令用于读取index位置的存储值;
24.判断所述公有函数中是否存在第二数据流,以使得所述第四指令读取的存储值更新所述第三指令中指定的存储值,若是,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;反之,则确定所述漏洞检测结果为存在恶意消除重入影响漏洞。
25.本发明实施例还提供了一种检测智能合约恶意消除重入影响漏洞的检测装置,包括:
26.构建模块,用于通过以太坊智能合约反编译技术,构建智能合约字节码的控制流图;
27.获取模块,用于根据所述控制流图,获取智能合约的执行路径;
28.第一确定模块,用于根据所述执行路径确定所述智能合约字节码中所有变量的数据传递关系;
29.检测模块,用于根据所述执行路径和所述数据传递关系,检测目标指令;所述目标指令用于更新index位置的存储值;
30.第二确定模块,用于根据所述目标指令的动作状态,确定漏洞检测结果;所述漏洞检测结果包括存在恶意消除重入影响漏洞和不存在恶意消除重入影响漏洞。
31.本发明实施例还提供了一种电子设备,包括处理器以及存储器;
32.所述存储器用于存储程序;
33.所述处理器执行所述程序实现如前面所述的方法。
34.本发明实施例还提供了一种计算机可读存储介质,所述存储介质存储有程序,所
述程序被处理器执行实现如前面所述的方法。
35.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
36.本发明的实施例通过以太坊智能合约反编译技术,构建智能合约字节码的控制流图;根据所述控制流图,获取智能合约的执行路径;根据所述执行路径确定所述智能合约字节码中所有变量的数据传递关系;根据所述执行路径和所述数据传递关系,检测目标指令;所述目标指令用于更新index位置的存储值;根据所述目标指令的动作状态,确定漏洞检测结果;所述漏洞检测结果包括存在恶意消除重入影响漏洞和不存在恶意消除重入影响漏洞。本发明可以检测潜在的恶意消除重入影响漏洞,从而给予智能合约开发者在部署合约之前发现漏洞的机会,提高智能合约在部署之后的安全性。
附图说明
37.为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
38.图1为本发明实施例提供的整体步骤流程图;
39.图2为本发明实施例提供的具体实施环境下的漏洞检测流程图。
具体实施方式
40.为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
41.针对现有技术存在的问题,本发明根据对此次新型漏洞的分析,针对恶意消除重入影响漏洞的行为特征建立详细模型,并基于该模型提出一种可以检测此漏洞的方法。针对智能合约编译后所生成的字节码,通过静态分析技术,检测智能合约是否存在触发恶意消除重入影响的执行路径,检测工具发现此类路径则进行告警。
42.具体地,本发明实施例提供了一种检测智能合约恶意消除重入影响漏洞的检测方法,如图1所示,该方法包括以下步骤:
43.通过以太坊智能合约反编译技术,构建智能合约字节码的控制流图;
44.根据所述控制流图,获取智能合约的执行路径;
45.根据所述执行路径确定所述智能合约字节码中所有变量的数据传递关系;
46.根据所述执行路径和所述数据传递关系,检测目标指令;所述目标指令用于更新index位置的存储值;
47.根据所述目标指令的动作状态,确定漏洞检测结果;所述漏洞检测结果包括存在恶意消除重入影响漏洞和不存在恶意消除重入影响漏洞。
48.优选地,所述方法还包括:
49.根据所述执行路径和所述数据传递关系,判断是否存在所述目标指令,当不存在所述目标指令时,确定漏洞检测结果为不存在恶意消除重入影响漏洞。
50.优选地,所述根据所述目标指令的动作状态,确定漏洞检测结果,包括:
51.检测公有函数上是否存在目标指令,若是,则执行下一步骤;反之,则确定漏洞检测结果为不存在恶意消除重入影响漏洞;其中,所述目标指令用于更新index位置的存储值;
52.根据所述index位置的存储值的更新结果,确定漏洞检测结果。
53.优选地,所述根据所述index位置的存储值的更新结果,确定漏洞检测结果,包括:
54.根据所述执行路径和所述数据传递关系,判断是否有公有函数存在目标行为,若是,则根据预设条件对所述公有函数进行检测,确定漏洞检测结果;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞。
55.优选地,所述根据预设条件对所述公有函数进行检测,确定漏洞检测结果,包括:
56.判断所述公有函数中是否存在第一执行路径,若是,则执行下一步骤;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;其中,所述第一执行路径包括第一指令、第二指令和第三指令;所述第一指令用于读取所述index位置的存储值;所述第二指令用于进行外部调用;所述第三指令用于更新所述index位置的存储值;
57.判断所述公有函数中是否存在第一数据流,以使得所述第一指令读取的存储值更新所述第三指令中指定的存储值,若是,则执行下一步骤;反之,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;
58.判断所述公有函数中是否存在第二执行路径,若是,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;反之,则执行下一步骤;其中,所述第二执行路径包括第三指令和第四指令;所述第四指令用于读取index位置的存储值;
59.判断所述公有函数中是否存在第二数据流,以使得所述第四指令读取的存储值更新所述第三指令中指定的存储值,若是,则确定所述漏洞检测结果为不存在恶意消除重入影响漏洞;反之,则确定所述漏洞检测结果为存在恶意消除重入影响漏洞。
60.下面以具体的实施环境下的漏洞检测过程为例,详细说明本发明的检测方法的实现过程,参考图2,实现过程包括以下步骤:
61.1.利用以太坊智能合约反编译技术,从以太坊智能合约字节码(由16进制数字组成的字符串序列)出发,构建控制流图,从控制流图分析出智能合约的执行路径。反编译技术是通过他人软件的可执行程序进行逆向分析,推导出其执行过程。控制流图是以基本块(单入口、单出口的最长指令序列)为节点,以基本块之间的跳转关系为边所组成的有向图。通过遍历控制流图,可以分析出智能合约的所有执行路径。
62.2.从智能合约字节码中分析出所有变量(包括存放在storage中,可以持久化,通过sstore等指令进行读取的全局变量、存放在栈和内存中,不可持久化通过mload等指令进行读取局部变量)之间的数据传递关系。
63.3.根据数据传递关系和执行路径,判断是否在公有函数1(在源代码以public关键字进行申明,可以通过abi的方式被外部用户进行调用的函数)中存在更新位置index存储值(全局变量)的行为。若否,则进入步骤4,若存在进入步骤5。
64.4.报告该合约不存在“恶意消除重入影响”漏洞。
65.5.根据数据传递关系和执行路径,判断是否有公有函数2(需要说明的是,本发明实施例的公有函数2可以和公有函数1是同一个函数,这里用于表示一个合约中存在有这两种行为的公有函数)中存在“过期数据传递关系行为”,若同时满足以下所有条件(a

d),则进入到步骤6,否则进入步骤4。
66.a)公有函数2中存在一条stmt1

stmt2

stmt3的执行路径,stmt1是读取index位置的存储值,stmt2是进行外部调用(例如call、delegatecall、callcode等),stmt3是更新index位置的存储值。
67.b)公有函数2中存在数据流,stmt1中所读取的值流至stmt3所更新的存储值中;
68.c)公有函数2中不存在一条路径stmt4

stmt3的执行路径,stmt4是读取index位置的存储值。
69.d)公有函数2中不在数据流,stmt4中所读取的值流至stmt3。
70.综上所述,本发明基于对恶意消除重入影响行为特征进行详细建模,并以漏洞特征的方式进行表达描述,从而可以基于该特征利用智能合约的执行路径和相关数据的传递依赖关系,可以在字节码层次上识别出恶意消除重入影响智能合约漏洞。
71.本发明以数据依赖传递关系,执行路径为特征分析智能合约消除重入影响的漏洞。
72.本发明针对智能合约恶意消除重入影响漏洞的检测步骤。
73.与现有的技术相比,本发明所提出的检测方法,通过静态分析智能合约中的执行路径和数据传递依赖关系,结合恶意消除重入影响漏洞的行为特征,可以检测潜在的恶意消除重入影响漏洞,从而给予智能合约开发者在部署合约之前发现漏洞的机会,提高智能合约在部署之后的安全性。
74.本发明实施例还提供了一种检测智能合约恶意消除重入影响漏洞的检测装置,包括:
75.构建模块,用于通过以太坊智能合约反编译技术,构建智能合约字节码的控制流图;
76.获取模块,用于根据所述控制流图,获取智能合约的执行路径;
77.第一确定模块,用于根据所述执行路径确定所述智能合约字节码中所有变量的数据传递关系;
78.检测模块,用于根据所述执行路径和所述数据传递关系,检测目标指令;所述目标指令用于更新index位置的存储值;
79.第二确定模块,用于根据所述目标指令的动作状态,确定漏洞检测结果;所述漏洞检测结果包括存在恶意消除重入影响漏洞和不存在恶意消除重入影响漏洞。
80.本发明实施例还提供了一种电子设备,包括处理器以及存储器;
81.所述存储器用于存储程序;
82.所述处理器执行所述程序实现如前面所述的方法。
83.本发明实施例还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
84.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的
处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
85.在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
86.此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
87.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
88.在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
89.计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
90.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件
或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
91.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
92.尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
93.以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1