【翻译】以太坊的CREATE2:区块链安全的双刃剑
Al1ex 发表于 四川 区块链安全 831浏览 · 2024-06-10 07:28

翻译:https://research.checkpoint.com/2024/ethereums-create2-a-double-edged-sword-in-blockchain-security/

序言

以太坊的CREATE2函数正被攻击者利用来绕过传统的安全措施并进行未经授权的资金访问,从而危害数字钱包的安全性。攻击方法主要包括诱骗用户批准尚未部署的智能合约交易,从而允许网络犯罪分子随后部署恶意合约并窃取加密货币,该漏洞凸显了钱包安全产品需要加强安全措施以适应网络犯罪分子不断发展的策略,确保在面临创新攻击时数字资产的安全

在区块链和加密货币的数字领域,以太坊是一个创新和多功能平台,其适应和发展能力使其成为技术领域的重要参与者,然而以太坊的卓越特性也使其面临潜在的漏洞,CREATE2函数就是其中之一,它展示了以太坊先进的技术能力,但不幸的是它也为数字钱包带来了新的安全威胁

CREATE2

CREATE2函数是在以太坊君士坦丁堡升级中引入的,它因能够在创建合约字节码之前部署具有确定性地址的智能合约而受到称赞,该函数显著提高了智能合约交互的可预测性和效率,为去中心化应用程序(DApp)的复杂生态系统带来了福音,它允许预先协调多个合约之间的交互,这一功能对于DApp的无缝运行至关重要

安全问题

创新的CREATE2功能存在重大安全漏洞,网络犯罪分子可迅速利用此功能绕过常规钱包安全措施,为毫无戒心的受害者创造了一种新的利用方法,漏洞的核心在于CREATE2能够在未来将智能合约部署到已知地址,使攻击者能够欺骗用户批准尚不存在的合约交易,一旦用户批准,攻击者就可以将恶意合约部署到该地址,劫持交易并耗尽受害者的加密货币钱包

攻击机制

1.攻击者首先说服受害者批准或增加尚未部署的合约的allowance(授权额度)
2.由于批准时合约尚未部署,因此它逃避了安全解决方案的检测,而安全解决方案无法识别不存在的合约中的潜在威胁
3.在获得受害者的授权后,攻击者部署恶意合约并窃取受害者的资金

这种方法不仅突显了恶意实体对以太坊功能的创造性滥用,还凸显了安全产品面临的重大挑战,大多数安全解决方案都经过校准,可根据现有合约和已知行为分析和验证交易。CREATE2通过促进与未来合约的交互有效地绕过了这些安全框架,使数字资产面临风险

技术角度

从技术角度来看,CREATE和CREATE2都是以太坊区块链开发中的操作码,支持部署智能合约。它们的主要区别在于新合约的地址确定方式,CREATE根据创建者的地址和随机数来确定合约的地址,而CREATE2通过将用户指定的salt、创建者的地址和合约的初始化代码纳入地址计算,实现了更灵活的方法。

在以太坊区块链开发中CREATE和CREATE2都是促进智能合约部署的操作码,但它们在新合约的地址确定方式上有所不同,CREATE操作码根据创建者(交易发送者)的地址随机数生成新合约的地址,另一方面CREATE2提供了一种更灵活的方法,允许根据用户指定的salt、创建者的地址和合约的初始化代码来确定合约的地址

CREATE2中的合约地址是使用4个参数计算的:

keccak256(0xff + 发送者地址 + salt + keccak256(初始化代码))
  • 常量前缀:哈希处理过程中的固定前缀,即0xff。这用于区分CREATE2地址和使用CREATE操作码创建的地址
  • 发送者的地址:创建合约的账户的地址,使用CREATE2时通常是智能合约本身
  • 盐值:由创建者选择的32字节(256位),盐值允许创建者将具有相同初始化代码的多个合约部署到不同的地址
  • 初始化代码:正在创建的合约的字节码,包括编译智能合约源代码产生的字节码以及编码到其中的任何构造函数参数

为了演示CREATE2如何部署具有确定性计算地址的另一个合约,我们将使用以下包含两个Solidity合约的简单示例:Factory和Child,Factory合约使用CREATE2函数将Child合约部署到特定的预先计算的地址

通过将工厂合约部署到测试网并使用123456作为盐,我们将能够预先计算子合约地址:
工厂合约地址为(https://goerli.etherscan.io/address/0xb74025567acdc922507821516014dc5fe659483f),现在通过使用computeChildAddress函数,我们将能够预先计算子地址,即0xe41Ba18D5e667b0B391b33b848520FA6F041C092

由于我们尚未部署合约,因此该地址尚不存在:

接下来攻击者将试图诱骗受害者批准该合约作为他想要窃取的特定代币的消费者并且由于合约尚未创建,因此该交易逃避了受害者拥有的所有形式的钱包安全措施,这些措施依赖于合约地址的历史记录,攻击者诱骗用户签署批准请求后他将能够在deployChild函数中使用相同的盐123456来部署合约

在野利用

此漏洞的一个典型实例是有一名用户因该漏洞而损失了350万美元,受害者批准了一项尚未创建的合约交易,该合约在批准后不久就被部署,攻击者执行了一项功能将受害者的资金转移到他们自己的地址

交易发生时approval的合同a01dee645e4dbaaa8aa2089cc4b1cc34d36fa71c尚未创建:

https://etherscan.io/tx/0xb5f03259859c10243a85f7a9ca27d8b45e67ce6463800193634d27718ba162a0
该交易执行一个未经验证的函数,该函数执行各种检查,然后使用CREATE2创建批准的合约地址,正如我们之前演示的那样:

  • target:在本例中是SUPER代币
  • callData:这是攻击者想要执行的函数的字节数据

在这种情况下攻击者执行transferFrom函数并使用之前的允许将受害者的余额转移到以下地址0x8f9278aab84290fe6e78515b7938b3136b89a1e2:

文末小结

CREATE2函数的利用凸显了区块链领域创新与安全之间的持续斗争,随着以太坊的不断发展,旨在保护用户免受此类复杂攻击的安全机制也必须不断发展。意识和教育是保护数字资产免受新兴威胁的第一步,区块链开发人员和用户都必须保持警惕并不断更新他们的知识和安全实践以安全地驾驭这个不断变化的环境

0 条评论
某人
表情
可输入 255