CN116743499B - 一种针对智能合约攻击的模仿交易生成方法 - Google Patents
一种针对智能合约攻击的模仿交易生成方法 Download PDFInfo
- Publication number
- CN116743499B CN116743499B CN202310995490.2A CN202310995490A CN116743499B CN 116743499 B CN116743499 B CN 116743499B CN 202310995490 A CN202310995490 A CN 202310995490A CN 116743499 B CN116743499 B CN 116743499B
- Authority
- CN
- China
- Prior art keywords
- contract
- transaction
- attack
- address
- profit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000012546 transfer Methods 0.000 claims abstract description 17
- 238000007710 freezing Methods 0.000 claims abstract description 6
- 230000008014 freezing Effects 0.000 claims abstract description 6
- 230000006870 function Effects 0.000 claims description 31
- 238000010276 construction Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 8
- 238000012986 modification Methods 0.000 claims description 4
- 230000004048 modification Effects 0.000 claims description 4
- 238000013507 mapping Methods 0.000 claims description 2
- 230000011218 segmentation Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 10
- 230000000903 blocking effect Effects 0.000 abstract description 9
- 238000004458 analytical method Methods 0.000 abstract description 3
- 238000012545 processing Methods 0.000 abstract description 3
- 230000006872 improvement Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 238000002474 experimental method Methods 0.000 description 5
- 101100203322 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SKS1 gene Proteins 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000004069 differentiation Effects 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000009191 jumping Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 235000008694 Humulus lupulus Nutrition 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- RWSOTUBLDIXVET-UHFFFAOYSA-N Dihydrogen sulfide Chemical compound S RWSOTUBLDIXVET-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000013068 supply chain management Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer And Data Communications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种针对智能合约攻击的模仿交易生成方法,独创的模拟执行并冻结条件跳转的处理方式,构建的模仿合约可以有效绕过原始合约的权限控制,并保留完整的攻击逻辑,从而生成有效的模仿合约。同时通过分析交易中的转账记录和执行结果,本发明创新性的提出了对辅助合约和获利地址的识别与替换方法,能处理较为复杂的智能合约攻击。系统整个过程无需人工干预,也无需对具体攻击过程的分析,具备很好的实时性,也可以很好的适配各种类型的智能合约漏洞攻击,兼容多种攻击合约。该策略可以被广泛应用到对各种智能合约攻击的实时阻断中,保护区块链网络的安全。
Description
技术领域
本发明属于信息安全领域,具体涉及一种针对智能合约攻击的模仿交易生成方法。
背景技术
本发明涉及到的背景技术主要为智能合约技术。智能合约是一种基于区块链技术的自动化合约。它是一种以编程方式定义和执行合约条件的协议。智能合约在去中心化的区块链网络上运行,具有自动执行、不可篡改、去信任和透明的特性。智能合约可以被视为是一段存储在区块链上的代码,它们包含了各种条件和规则,用于监管和执行参与方之间的交互。这些合约可以自动执行、验证和记录合约中规定的条件,无需依赖第三方中介机构。
智能合约的核心思想是将合约的执行过程置于不可篡改的区块链上,从而确保交易的透明性和可靠性。通过智能合约,参与方可以在不信任的彼此的环境下进行交易,并且无需担心对方的失信行为。智能合约的编写通常使用特定的编程语言,例如以太坊使用的Solidity语言。合约的代码定义了合约的行为和条件,可以包含变量、函数和事件等元素。
智能合约可以应用于多个领域,例如去中心化金融(DeFi)应用、供应链管理、物联网设备交互等。它们提供了一种安全、高效和可靠的方式来实现合约的自动执行和交互。
然而,智能合约也存在一些挑战和风险。由于智能合约的不可篡改性,一旦合约部署在区块链上,就无法修改。此外,和传统计算机程序类似,智能合约也可能受到网络攻击或技术漏洞的影响,导致资产丢失或合约执行出现问题。以去中心化金融协议为例,其智能合约漏洞往往会严重威胁DeFi用户资产的安全。据不完全统计,仅2021年1月至12月,针对去中心化金融生态的攻击事件就已经超过195起,累计造成经济损失数十亿美金。
在传统安全领域,已有防火墙、入侵检测系统等安全防护系统可以对攻击行为进行有效检测和阻断,减少安全漏洞带来的损失。但对于完全去中心化的区块链网络,网络的状态并不由单一中心化节点决定,而由分布在各地的区块生产者决定。区块生产者只负责验证交易的合法性,不对交易是否是攻击行为负责,因而通过统一部署防火墙、入侵检测系统等方法以直接阻断攻击交易并不可行。
为了解决去中心化网络无法集中部署防御策略的问题,当前常用的解决方案是通过安全防护节点不断执行并检测当前区块链网络中的待确认交易,如果发现待确认交易中包含恶意攻击交易,则自动生成具有更高优先级且将获利地址修改为安全地址的模仿交易,并广播到区块链网络中。如果模仿交易抢先于恶意攻击交易被区块生产者打包,则可以有效避免攻击带来的资金损失。
但这种方法目前仍然面临以下几个问题:
1)时间限制问题
区块链的出块时间间隔一般较短,约为几秒到十几秒不等。因而上述的模仿交易的生成时间受到很大限制,仅仅数秒的时间意味着无法依靠人工对攻击合约和交易进行分析,只能使用算法进行自动化分析并生成模仿交易;
2)缺乏模仿策略问题
模仿交易需要和恶意攻击交易有相同的功能,且要将攻击中的获利地址替换为新的安全地址。这要求在构建模仿合约时,分析程序需要能有效绕过原始攻击者设置的权限控制,并有效处理可能的数据加密。而现有方法往往通过模仿攻击合约的外部调用信息或直接替换可能的获利地址以生成模仿合约,只能适用于简单的权限控制,且无法处理数据加密的情况。
发明内容
本发明针对现有技术的不足之处作出了改进,提供了一种针对智能合约漏洞攻击的模仿交易生成方法,由于Solidity编译器生成的合约并不包含动态的跳转目标地址,因而在合约执行过程中,所有可能的权限控制都需要由条件跳转(JUMPI)完成。区块链网络中的安全防护节点可以通过模拟执行攻击交易,得到所有JUMPI实际指向的基本块,并重新构建执行分支和恶意攻击交易一致的模仿合约,从而绕过攻击者的权限控制和数据加密,本发明的技术方案通过模拟执行恶意攻击交易,记录下每个条件跳转指向的基本块。如果一个条件跳转在实际执行中仅指向一个基本块,则会将该条件跳转冻结,即将其修改为对应跳转目的地址的非条件跳转(JUMP)。如果一个条件跳转有多个不同的基本块作为后继,则该条件跳转会被保留,避免破坏原有攻击逻辑。通过这种方法重构后的模仿合约可以绕过原始攻击者的权限控制,同时保留原始的攻击逻辑。具体技术方案如下。
本发明公开了一种针对智能合约攻击的模仿交易生成方法,包括:
执行获利可转移交易并记录执行的每个操作码及其在源代码中的位置,以及该操作码执行后的入栈参数,构建出合约的执行记录;
定位执行记录中所有的条件跳转(JUMPI),并对其跳转的目的地址进行统计,得到统计结果;
根据统计结果对执行记录进行修改,若所述的条件跳转在实际执行中仅指向一个基本块,则将其修改为对应跳转目的地址的非条件跳转(JUMP),即冻结条件跳转,若一个条件跳转有多个不同的基本块作为后继,则该条件跳转会被保留,最终得到修改后的执行记录;
对修改后的执行记录进行修复,根据指令的修改情况重新插入指令以保持合约原有的栈平衡,得到修复后的执行记录;
提取获利可转移交易中的转账记录,根据转账记录定位获利地址,并在修复后的执行记录中查找将获利地址入栈的指令,在其后加入替换获利地址的指令,得到替换获利地址后的执行记录;
从替换获利地址后的执行记录中提取出指令序列,将指令序列重新拼接为新的智能合约,即模仿合约。
作为进一步地改进,本发明所述的获利可转移交易是一种实际获利地址被替换且不影响整笔交易执行的交易类型;所述的获利可转移交易收集自区块链节点的内存池中。
作为进一步地改进,本发明所述的定位获利地址的步骤包括,一遍历交易中所有的转账记录,二将每笔转账中转出者的亏损计入,转入者的盈利计入,构建交易资金流转表,三将交易资金流转表中收益为正的地址记为获利地址。
作为进一步地改进,本发明所述的插入指令的方法是将插入新指令后的指令序列重构为新的合约,并通过新旧映射的方法处理重构后指令偏移量和原始合约不一致的问题,使重构后的新合约逻辑和原始合约完全一致。
作为进一步地改进,本发明所述的模仿合约中包含一个重新生成的分配器,以区分来自不同外部合约的多次回调。
作为进一步地改进,本发明所述的分配器使用调用函数指纹、调用者地址、调用次数三种维度综合确定当前请求和执行记录的对应关系。
作为进一步地改进,本发明所述的替换获利地址的指令包括将原始地址出栈,对比原始地址和需替换的地址是否一致,将新地址存入栈中。
作为进一步地改进,本发明所述的将指令序列重新拼接为新的智能合约,需要通过编译器生成合约中数据域和代码域的分割特点,提取出合约中的数据域,并将其添加到模仿合约中,以保证模仿合约的正常功能。
作为进一步地改进,本发明所述的模仿合约通过新的合约部署交易和调用交易在区块链节点上进行测试,若执行结果显示获利已转移至替换后的地址,则完成模仿交易的构建,否则需要使用“回滚检测”算法定位攻击交易中涉及到的辅助合约并进行重构。
作为进一步地改进,本发明所述的“回滚检测”算法是根据执行记录定位导致交易回滚的合约地址,并尝试将该地址标记为辅助合约进行模仿合约构建,若重新构建的模仿合约不在同一个地方发生回滚,则认为辅助合约的标记是正确的。
本发明的有益效果在于提出了一种有效的自动化模仿交易构建策略。得益于本发明独创的模拟执行并冻结条件跳转的处理方式,构建的模仿合约可以有效绕过原始合约的权限控制,并保留完整的攻击逻辑,从而生成有效的模仿合约。同时通过分析交易中的转账记录和执行结果,本发明创新性的提出了对辅助合约和获利地址的识别与替换方法,能处理较为复杂的智能合约攻击。系统整个过程无需人工干预,也无需对具体攻击过程的分析,具备很好的实时性,也可以很好的适配各种类型的智能合约漏洞攻击,兼容多种攻击合约。该策略可以被广泛应用到对各种智能合约攻击的实时阻断中,保护区块链网络的安全。
附图说明
图1是系统架构图;
图2是本发明中冻结条件跳转的效果示意图;
图3是内部函数所造成代码复用的可能情况;
图4是本发明中使用分配器和蹦床解决代码复用问题的设计示意图;
图5是编译器生成合约中代码部分和数据部分区分的示意图;
图6是本方法构建的模仿合约的基本结构示意图;
图7是模仿合约和原始合约的Gas消耗比值分布示意图;
图8是构建模仿合约所需时间的分布示意图。
具体实施方式
本发明记载一种针对智能合约攻击的模仿交易生成方法,这种方法通过分析攻击者合约的执行记录,构建能绕过攻击者合约权限控制并修改获利地址的模仿合约。通过模仿合约构建模仿交易,抢跑攻击,挽回智能合约攻击可能造成的经济损失。
在这里,获利可转移交易被定义为一种实际获利地址可以被替换且不影响整笔交易执行的交易类型。攻击交易的实质就是一种获利可转移交易。因为使用这种特点来识别攻击交易,因而无需额外的攻击检测过程。该方法可以针对区块链上每笔交易进行处理,且只需要在处理后检查获利是否转移到对应的安全地址。
步骤1,冻结条件跳转。
为了避免攻击合约被他人使用,攻击者通常会在攻击合约中设置一系列的权限控制,确保只有攻击者本人才能调用攻击合约,并将获利转移到自己控制的钱包地址。因此构建模仿合约要解决的核心问题就在于如何自动化绕过攻击者的权限控制,同时保留原始攻击逻辑。
在智能合约中,权限控制的一种实现方法是msg.sender==owner,其中,owner是预先存储在合约存储或字节码中的攻击者地址信息,msg.sender是通过EVM虚拟机实时获取到的当前调用者地址。该条件判断语句编译生成的字节码如图2所示。从图中容易发现,上述权限控制本质上是由一个条件跳转(JUMPI)实现的,条件跳转将代码的后续执行分离为了两个分支,只有当攻击者调用合约时,才会进入真正的攻击逻辑,否则会进入失败逻辑,导致整笔交易失败。
当通过区块链节点模拟攻击交易的执行,可以很容易记录下当攻击者调用合约时,每个条件跳转所真正指向的代码分支。如果一个条件跳转在执行时只指向唯一的一个代码分支,则会将这个条件跳转冻结,即使用非条件跳转(JUMP)替换该条件跳转(JUMPI)。而如果一个条件跳转有多个后继(例如在循环中),那么这个条件跳转会被原样保留,避免影响原有攻击逻辑。如图2,使用上述方法构建后的权限控制可以被很容易绕过,不论当前的调用者是谁,合约都会正常进入攻击逻辑。
由于条件跳转和非条件跳转所需的栈参数的数目不同,因而直接将条件跳转替换为非条件跳转将会导致栈的不平衡,因此需要插入新的操作码来维持栈平衡。但在EVM中,跳转指令的跳转目的地址由对应字节码的偏移量决定。因此,直接插入新的操作码会导致其后续操作码的偏移量发生变化,从而导致跳转指令对应的跳转目的地址失效。有几种方法可以解决上述问题。第一种方法是将需要被插入的操作码插入到字节码的末尾,并将一些已有的操作码也调整至末尾,以留出将执行流引导至末尾的空间。但因为EVM中的跳转目的地址必须包含JUMPDEST操作码,因而当JUMPDEST操作码包含在需要调整的位置时,很难保证整体的偏移量不被改变。另外一种解决方案是完全不依赖原始的合约,而将执行记录中的操作码直接串联起来,但这种方法无法很好的应对循环等复杂情况。
为了解决上述问题,本发明提出了一种基于执行记录构建模仿合约的全新方法。模仿合约的基本结构如图6所示,和普通合约类似,其可以被划分为部署代码和执行代码。在部署代码中,不仅保留了原始合约构造函数中的内容,还增加了辅助合约部署及状态预设的功能。在执行代码中,首先会插入生成的分配器,分配器会根据上下文将每次调用引导到对应的执行逻辑。
蹦床也是模仿合约的重要组成部分。当合约完全重组后,模仿合约和原始攻击合约的偏移量将完全不一致,因此需要重新处理所有的跳转偏移量问题。假设在执行记录中,一个JUMP或者JUMPI只有一个唯一的跳转目的地址0xa,且在模仿合约中0xa对应的位置时0xb,那么在模仿合约中,原始的操作码会被直接修改为目的地址为0xb的跳转。如果一个JUMPI在所有执行记录中均未发生跳转,则在模仿合约中会使用两个POP指令替代。
当JUMP或者JUMPI在执行记录中有多个目标地址时,一般存在基本块的复用。如图3所示,一个JUMP在执行记录中存在目标地址为ra0和ra1的两次跳转,这些跳转的目的地址是在代码的其他部分被压入栈中的。针对这种情况,本发明提出一种简单的分配器与蹦床的组合来将旧的偏移量映射为新的偏移量。假设在模仿合约中,ra0和ra1对应的偏移量分别为ra0’和ra1’。设计了如图4所示的字节码序列来替代原有的JUMP或JUMPI操作码。该字节码序列会根据旧偏移量和新偏移量的关系重新定位跳转目的地址,例如将ra0导向到ra0’。同时蹦床会确保跳转后的栈平衡,即跳转后栈状态和原始攻击合约一致。
步骤2,生成分配器。
在攻击交易中,经常可能涉及到对攻击合约的多次调用,即回调。回调在智能合约攻击中十分常见,例如闪电贷这一著名的攻击手法中就包含了对攻击合约的回调。但在上面所述的冻结条件跳转的过程中,只考虑了单次调用中的合约重构。由于所有的条件跳转都被冻结,编译器生成的函数分配器以及一些攻击者自定义的条件判断语句也会失效,导致回调函数不能正确执行应有的逻辑。因此,需要生成一个分配器,来区分不同的回调,并将每次回调分配到对应的指令序列。正因为如此,需要一些特征来区分攻击交易中可能涉及到的多次调用。
在Solidity编译器中,一个合约函数名以及他的参数类型合并后的SHA3哈希的前四个字节会被作为函数标识符,也被称作函数的四字节指纹。编译器生成的分配器会将用户传入的calldata的前四个字节和合约中已知的函数指纹进行对比,以确定用户调用的具体函数。函数指纹可以被用于初步区分调用,但在攻击交易中,同样的函数指纹在回调中可能有不同的含义。例如攻击者从Uniswap中借出闪电贷,虽然在每个回调中涉及到的函数名均为UniswapV2Call,但回调后执行的具体逻辑却完全不同。
在本发明设计的分配算法中,和编译器使用的分配方法类似的函数指纹会被用于第一次分配。对于相同的函数指纹,首先检查在预执行的交易记录中该函数指纹是否有重复的调用者(即EVM中的msg.sender),如果调用者不重复,则使用调用者进行第二次分配。如果调用者重复,则会使用调用次数进行进一步的区分。具体而言,如果该函数在调用记录中不包含任何涉及到静态调用(即STATICCALL)的调用,则可以通过在合约状态存储中记录调用次数实现区分。因为在静态调用上下文中无法操作状态存储,对于包含静态调用的函数,会利用冷读取和热读取间Gas消耗的差异来确定现在的调用次数。在EIP-2929中,定义了冷读取和热读取间的Gas差异,即第一次读取合约存储中的某个Slot,消耗2100 Gas,第二次及之后读取只需要消耗100 Gas。因此,当该函数被调用时,其会尝试按顺序读取SHA3(函数指纹+1)、SHA3(函数指纹+2)等Slot。当该函数在执行序列中第一次被调用时,读取SHA3(函数指纹+1)会消耗2100 Gas,而第二次被调用只需要消耗100 Gas。因此,消耗2100Gas对应的序列号便是当前的调用次数。
步骤3,地址角色替换。
当构建模仿合约时,除了保留原始攻击合约的所有正常功能,也需要替换一些关键的角色,例如辅助合约地址和攻击获利地址。
攻击获利地址指的是一个或多个在交易执行后余额变化为正的地址。且这些地址被替换后不会影响整个攻击逻辑的正常执行。辅助合约指的是由攻击者创建的包含有效攻击逻辑的一个或多个合约。这些合约可能在原始攻击合约创建之前或创建之后创建。攻击者创建辅助合约的主要目的是利用一些需要多个独立地址才能利用的漏洞,或是一种防止被抢跑的手段。
虽然攻击交易中的获利地址一般为攻击合约或攻击者地址,但有时攻击者也会将获利转移到第三方地址来避免对攻击的阻断或检测。因此在寻找获利地址时,所有具备正向收入的地址都应该纳入考虑范围中。交易的数据流分析和余额变化计算可以快速定位所有潜在的获利地址,一个示例交易的余额变化表如下表1所示。
表1
系统会记录下在余额变化表中有正向收益的所有地址,并将他们根据收益由高到低排序。接下来会尝试将这些地址逐一标记为获利地址,并尝试构建模仿合约,直到找出替换后不影响整体合约执行的地址。
由CREATE/CREATE2操作码创建的辅助合约可以被直接定位。但如果辅助合约被单独部署,则可以使用本发明提出的“回滚检测”算法进行定位。该算法的核心思想是根据执行记录定位导致交易回滚的合约地址,并尝试将该地址标记为辅助合约进行模仿合约构建。如果重新构建的模仿合约不在同一个地方发生回滚,则认为辅助合约的标记是正确的。如此循环往复,直到找到所有的辅助合约,使得攻击交易能够成功完成。如果重新构建的模仿合约还是在同一个地方发生回滚,或获利发生改变,则认为辅助合约标记失败,放弃该交易的处理。
由于这些地址可能被攻击者存储在合约的状态中,也可能在合约的代码中甚至外部合约的返回值中。因此,在这些地址存储的地方替换这些地址是比较困难的。由于替换这些地址的目的是为了防止原始辅助合约被调用,及获利被转移到由原始攻击者的地址,因此这些地址肯定会作为CALL/STATICCALL/DELEGATECALL这三种操作码之一的栈参数出现。因而不论是哪种情况,这些需要被替换的地址都会作为单独的栈元素出现在执行记录中。因此,仅在目标地址第一次出现在EVM栈中时进行替换。
为了完成上述替换,本发明在执行交易时,会记录每一个操作码执行后对栈状态的改变。当一个操作码将需要替换的目标地址压入栈中时,会在该操作码之后添加对应的替换操作码序列。但是,因为存在基本块的复用,还需要在替换之前,进一步确认当合约执行时栈顶元素是否为预计的需要替换的元素,仅当预计的元素对应时执行替换。
步骤4,数据域提取。
和正常的二进制程序一样,Solidity等智能合约语言编译出的字节码同样包括代码域和数据域两个部分。CODECOPY指令通常被用于将数据从数据域中拷贝到内存中,以供进一步使用。在构造函数参数或长参数等多种情况下,Solidity编译器都会使用CODECOPY来准备参数,因此这种情况在攻击合约中也较为常见。为了保证这部分攻击合约重构后到正常功能,必须完整保留原有合约的数据域。由于合约代码长度的限制,不可能将原有合约完全保留下来,因此必须准确提取出原有合约的数据域。
通过对大量编译器生成合约的研究,发现合约的数据域部分有一些分布特征。如附图4所示,数据域总是在合约的末尾,且和合约的代码部分由一个INVALID指令分隔开。因而可以顺序解析合约的字节码,确定每一个操作码以及对应的操作数。在合约的代码域,每一个解析出的指令都应该在EVM的指令列表中出现。但对于合约数据域,则可能出现大量的无效指令。当顺序解析遇到无效指令时,最后一个遇到的INVALID指令即可被作为代码域和数据域的分割点。
当提取出原始攻击合约中的数据域后,会将其添加到重构合约的末尾。CODECOPY指令拷贝代码对应的新偏移量可以通过老的偏移量加上重构合约的长度并减去原始合约代码域长度得到。
通过上述的步骤,即可构建出具有和原始攻击合约功能完全一致的模仿合约,且该模仿合约的权限控制可以被有效绕过,攻击获利地址可以被有效替换。模仿合约和交易预执行、交易抢跑等技术结合,可以有效阻断针对区块链上智能合约的攻击行为,实现对链上应用的保护,挽回可能的损失。
为验证本发明记载技术方案在实际应用中的所达到的技术效果,发明人进 行人如下实验。
发明人使用Go语言实现了上述的模仿交易生成方法,并以此为基础构建了一套具备交易接收、处理、执行、广播能力的攻击阻断系统以供实验使用。发明人选取了 2023年5月资金总锁仓量分别为第一和第二的公链以太坊(ETH)和币安智能链(BNB Chain)进行数据收集和实验,并从以下三个方面评估方案的效果。首先,使用一些已知的历史攻击事件来测试的方法是否能成功重构对应的攻击合约。其次,将2021年1月到2022年12月以太坊网络上的历史交易及对应的合约输入到系统中进行重构,并且检查系统能否成功重构一些未曾被社区报告过的攻击交易。最后,还在真实链上环境中部署了上述系统,以检验其对真实攻击的阻断能力。
(1)重放已知的攻击事件
在这个实验中,使用本发明提出的模仿交易构建方法对历史上已知的攻击事件进行模仿交易构建,并尝试在历史状态下重放利用模仿合约的攻击。
从DeFiHackLabs这一针对DeFi攻击的公开数据库中收集了以太坊和BNB Chain上2023年2月以前的117起攻击事件。通过对这117起攻击事件的人工审查,发现其中84起有被本发明所提出方案阻断的可能,而另外33起无法被阻断。在这33起无法被阻断的攻击事件中,29起是因为攻击步骤必须被分为多步,且没有办法在同一个区块内完成,例如一些依赖于区块时间戳的攻击。剩下的4起攻击事件是涉及到无法自动准备的本金。
收集了84起可能被阻断的攻击的交易哈希,并使用本发明中提到的方法进行交易执行,收集执行记录。随即对原始攻击合约进行重构,生成对应的模仿合约。为了模拟模仿合约在对应时刻执行的情况,使用了Phalcon提供的区块链Fork服务,将模仿合约的部署和调用交易发送到对应高度的Fork中进行。实验结果显示,系统可以在78起攻击事件中成功构建模仿合约。通过本发明独创的模拟执行并冻结条件跳转的方法,模仿合约可以顺利绕过攻击者设置的权限控制,并准确识别出获利地址与辅助合约地址,将获利转移至安全地址,实现对攻击的有效阻断。
在另外6起不能成功的案例中,有3起是因为原始攻击交易过于复杂,包含了大量的辅助合约。这导致模仿合约的代码体积过大,超过了区块链所能接受的最大代码体积。另外三起攻击事件则是因为其外部调用的合约地址是使用当前的环境参数和存储变量综合计算得出的,目前的方案并不能很好支持这种情况。
为了评估本发明提出方法的性能,记录了这78起攻击事件中获取执行记录并构建模仿交易所需的时间,同时还对模仿合约和原始合约的Gas消耗作了比较。
将创建和调用攻击合约所需的Gas总和记作一次攻击的Gas消耗。如图7所示,模仿合约的Gas消耗比原始合约平均只高出12%,在一些攻击事件中,甚至会比原始合约低,这可能是因为原始合约中包含了冗余的攻击逻辑。也记录了每次攻击事件中构建模仿合约所需的时间,如图8所示,在超过80%的事件中,系统都只需要少于100ms的时间来构建模仿合约。只有极少数的攻击事件需要超过100ms的时间来构建,这是因为他们包含了对CODECOPY的使用,因此需要向全节点请求原始合约的字节码以进行数据域的提取。
(2)检测未被报告过的攻击事件
模仿交易构建的方法不仅可以被用来实时阻断攻击,而且由于攻击交易的本质就是一种获利可转移的交易,因而其可以被应用到攻击检测中。在本实验中,发明人将2021年1月到2022年12月期间的所有以太坊网络交易输入到上述系统中,系统会对其中每笔交易进行执行记录收集及模仿合约构建,并利用Fork在对应高度上执行模仿合约,检查获利转移。
系统总共检测出了3816笔可转移获利超过1 ETH的交易,其中大多数是由套利者产生的套利或清算交易,通过人工确认去除这些交易后,会进一步确认每笔交易是否利用了智能合约漏洞,以便确认交易是否为攻击交易。确认攻击交易后,还会进一步检查这些攻击交易及攻击者地址有没有被区块链浏览器标记,或被社区的研究者提及。如果在这些渠道均没有找到和攻击有关的信息,会将这笔攻击记录为未知攻击。
实验结果显示,的系统总共检测出了99次未被报告过的攻击事件,对应212笔攻击交易,总共损失超过800万美金。其中大部分攻击事件的实际获利都小于10万美金,这可能可以解释为什么这些事件没有引起研究者的重视。但也发现了如下表2所示的攻击事件,这11起攻击事件的实际损失均超过10万美金。
表2
采用本发明提出的模仿交易构建方法构建的攻击阻断系统已经于2022年初部署到以太坊和币安智能链网络上。在AWS服务器上运行了修改过的以太坊及币安智能链全节点,实时收集并执行内存池中待确认的交易,获取交易记录并构建模仿合约。
截止2023年3月,系统已经成功阻断了10起真实的链上攻击事件。最具代表性的案例包括在2022年4月阻断了一起针对去中心化兑换项目的攻击,挽回了380万美金的损失,以及在2023年3月成功阻断的一起针对NFT项目的攻击,挽回了超过500万美金的损失。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (9)
1.一种针对智能合约攻击的模仿交易生成方法,其特征在于,包括:
执行获利可转移交易并记录执行的每个操作码及其在源代码中的位置,以及该操作码执行后的入栈参数,构建出合约的执行记录;
定位执行记录中所有的条件跳转,并对其跳转的目的地址进行统计,得到统计结果;
根据统计结果对执行记录进行修改,若所述的条件跳转在实际执行中仅指向一个基本块,则将其修改为对应跳转目的地址的非条件跳转,即冻结条件跳转,若一个条件跳转有多个不同的基本块作为后继,则该条件跳转会被保留,最终得到修改后的执行记录;
对修改后的执行记录进行修复,根据指令的修改情况重新插入指令以保持合约原有的栈平衡,得到修复后的执行记录;
提取获利可转移交易中的转账记录,根据转账记录定位获利地址,并在修复后的执行记录中查找将获利地址入栈的指令,在其后加入替换获利地址的指令,得到替换获利地址后的执行记录;
从替换获利地址后的执行记录中提取出指令序列,将指令序列重新拼接为新的智能合约,即模仿合约;
所述的获利可转移交易是一种实际获利地址被替换且不影响整笔交易执行的交易类型;所述的获利可转移交易收集自区块链节点的内存池中。
2.根据权利要求1所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的定位获利地址的步骤包括,一遍历交易中所有的转账记录,二将每笔转账中转出者的亏损计入,转入者的盈利计入,构建交易资金流转表,三将交易资金流转表中收益为正的地址记为获利地址。
3.根据权利要求1或2所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的插入指令的方法是将插入新指令后的指令序列重构为新的合约,并通过新旧映射的方法处理重构后指令偏移量和原始合约不一致的问题,使重构后的新合约逻辑和原始合约完全一致。
4.根据权利要求3所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的模仿合约中包含一个重新生成的分配器,以区分来自不同外部合约的多次回调。
5.根据权利要求4所述针对智能合约攻击的模仿交易生成方法,其特征在于,所述的分配器使用调用函数指纹、调用者地址、调用次数三种维度综合确定当前请求和执行记录的对应关系。
6.根据权利要求1或2或4或5所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的替换获利地址的指令包括将原始地址出栈,对比原始地址和需替换的地址是否一致,将新地址存入栈中。
7.根据权利要求6所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的将指令序列重新拼接为新的智能合约,需要通过编译器生成合约中数据域和代码域的分割特点,提取出合约中的数据域,并将其添加到模仿合约中,以保证模仿合约的正常功能。
8.根据权利要求1或2或4或5或7所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的模仿合约通过新的合约部署交易和调用交易在区块链节点上进行测试,若执行结果显示获利已转移至替换后的地址,则完成模仿交易的构建,否则需要使用“回滚检测”算法定位攻击交易中涉及到的辅助合约并进行重构。
9.根据权利要求8所述的针对智能合约攻击的模仿交易生成方法,其特征在于,所述的“回滚检测”算法是根据执行记录定位导致交易回滚的合约地址,并尝试将该地址标记为辅助合约进行模仿合约构建,若重新构建的模仿合约不在同一个地方发生回滚,则认为辅助合约的标记是正确的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310995490.2A CN116743499B (zh) | 2023-08-09 | 2023-08-09 | 一种针对智能合约攻击的模仿交易生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310995490.2A CN116743499B (zh) | 2023-08-09 | 2023-08-09 | 一种针对智能合约攻击的模仿交易生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116743499A CN116743499A (zh) | 2023-09-12 |
CN116743499B true CN116743499B (zh) | 2023-10-27 |
Family
ID=87901535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310995490.2A Active CN116743499B (zh) | 2023-08-09 | 2023-08-09 | 一种针对智能合约攻击的模仿交易生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116743499B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111062038A (zh) * | 2019-11-23 | 2020-04-24 | 同济大学 | 一种基于状态空间的智能合约形式化验证系统及方法 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
CN111563237A (zh) * | 2020-03-24 | 2020-08-21 | 博雅正链(北京)科技有限公司 | 一种智能合约安全增强方法 |
WO2021146988A1 (en) * | 2020-01-22 | 2021-07-29 | Shanghai Wormholes Tech Ltd. | Method and apparatus for protecting smart contracts against attacks |
CN115426190A (zh) * | 2022-09-06 | 2022-12-02 | 厦门慢雾科技有限公司 | 智能合约主动防御方法、存储介质和电子设备 |
CN115442380A (zh) * | 2022-09-14 | 2022-12-06 | 杭州安碣信息安全科技有限公司 | 针对智能合约漏洞攻击的交易阻断方法和装置 |
CN115994360A (zh) * | 2022-11-28 | 2023-04-21 | 广东工业大学 | 基于运行时信息的可重入漏洞检测方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144893B2 (en) * | 2017-10-30 | 2021-10-12 | Nec Corporation | Method and system for securing smart contracts in blockchains |
SG11202008600YA (en) * | 2018-03-18 | 2020-10-29 | Valid Network Ltd | A method and system for detecting and preventing issues in smart contracts based on historical behavior analysis |
EP3906488B1 (en) * | 2019-06-12 | 2023-08-02 | Nec Corporation | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
US10783082B2 (en) * | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
-
2023
- 2023-08-09 CN CN202310995490.2A patent/CN116743499B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111062038A (zh) * | 2019-11-23 | 2020-04-24 | 同济大学 | 一种基于状态空间的智能合约形式化验证系统及方法 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
WO2021146988A1 (en) * | 2020-01-22 | 2021-07-29 | Shanghai Wormholes Tech Ltd. | Method and apparatus for protecting smart contracts against attacks |
CN111563237A (zh) * | 2020-03-24 | 2020-08-21 | 博雅正链(北京)科技有限公司 | 一种智能合约安全增强方法 |
CN115426190A (zh) * | 2022-09-06 | 2022-12-02 | 厦门慢雾科技有限公司 | 智能合约主动防御方法、存储介质和电子设备 |
CN115442380A (zh) * | 2022-09-14 | 2022-12-06 | 杭州安碣信息安全科技有限公司 | 针对智能合约漏洞攻击的交易阻断方法和装置 |
CN115994360A (zh) * | 2022-11-28 | 2023-04-21 | 广东工业大学 | 基于运行时信息的可重入漏洞检测方法及系统 |
Non-Patent Citations (6)
Title |
---|
ContractGuard:面向以太坊区块链智能合约的入侵检测系统;赵淦森;谢智健;王欣明;何嘉浩;张成志;林成创;Ziheng Zhou;陈冰川;Chunming Rong;;网络与信息安全学报(02);全文 * |
Verifying Correctness of Smart Contracts with Conditionals;Fahad Alhabardi等;《2022 IEEE 1st Global Emerging Technology Blockchain Forum: Blockchain & Beyond (iGETblockchain)》;全文 * |
区块链智能合约安全威胁实时防御框架;白杨;;通信技术(06);全文 * |
基于智能合约的区域能源交易模型与实验测试;王德文;柳智权;;电网技术(06);全文 * |
智能合约安全漏洞研究综述;倪远东;张超;殷婷婷;;信息安全学报(03);全文 * |
智能合约漏洞检测技术综述;董伟良等;《软件学报》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116743499A (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhang et al. | Smartshield: Automatic smart contract protection made easy | |
JP7250178B2 (ja) | ブロックチェーンネットワークにおけるスマートコントラクトをサポートするための方法及びコントラクト書き換えフレームワークシステム | |
CN104123493B (zh) | 应用程序的安全性检测方法和装置 | |
CN109314642B (zh) | 用区块链实施的用于安全投票和分配的计数系统和方法 | |
He et al. | {EOSAFE}: security analysis of {EOSIO} smart contracts | |
Seijas et al. | Scripting smart contracts for distributed ledger technology | |
US9715593B2 (en) | Software vulnerabilities detection system and methods | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
Wang et al. | WANA: Symbolic execution of wasm bytecode for cross-platform smart contract vulnerability detection | |
Huang et al. | EOSFuzzer: Fuzzing eosio smart contracts for vulnerability detection | |
CN110968437A (zh) | 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质 | |
Alkhalifah et al. | A mechanism to detect and prevent Ethereum blockchain smart contract reentrancy attacks | |
CN107742078A (zh) | 一种通用的dex自动脱壳方法与系统 | |
Qin et al. | The blockchain imitation game | |
CN112749389B (zh) | 一种检测智能合约破坏敏感数据漏洞的检测方法及装置 | |
CN104881610A (zh) | 一种针对虚函数表劫持攻击的防御方法 | |
Li et al. | Detecting standard violation errors in smart contracts | |
CN108573143A (zh) | 基于程序插桩和动态信息验证的栈保护方法 | |
JP4754635B2 (ja) | 制御フロー保護機構 | |
CN116743499B (zh) | 一种针对智能合约攻击的模仿交易生成方法 | |
Xu et al. | Autopwn: Artifact-assisted heap exploit generation for ctf pwn competitions | |
Khan et al. | Dynamic Analysis for Detection of Self-Destructive Smart Contracts | |
Yao et al. | An improved vulnerability detection system of smart contracts based on symbolic execution | |
CN116841906A (zh) | 智能合约的检测方法、装置及电子设备 | |
Bieber et al. | The PACAP prototype: a tool for detecting Java Card illegal flow |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |