安全检查:EVM 兼容链能否经受考验?

揭秘EVM隐藏的安全风险:BlockSec的自动化工具如何助力深入洞察

安全检查:EVM 兼容链能否经受考验?

2023年11月,BlockSec 首席执行官周亚进教授应邀参加了由 DRK Lab 主办的首届 Web3 学者峰会。在会议期间,周教授分享了 BlockSec 在 EVM(以太坊虚拟机)漏洞检测方面的工作和成就。他还介绍了 BlockSec 专为确保 EVM 兼容链安全性而设计的自动化差分模糊测试工具。本文总结了演讲内容。

引言

根据 Defillama 的数据统计,目前有 238 条 L1 和 L2 公链,其中 144 条与 EVM 兼容。然而,问题来了:这些 EVM 兼容链在实现过程中是否存在安全问题?经过我们的研究,答案是肯定的。为了应对这一挑战,BlockSec 推出了自动化差分模糊测试安全工具。加入我们,一起踏上探索这些 EVM 兼容链背后真相的旅程。

虚拟机中的漏洞

Figure 1: Diagram of the Ethereum Virtual Machine (EVM) workflow

以以太坊虚拟机 (EVM) 为例,它采用基于堆栈的架构,包括虚拟机 ROM、程序计数器、堆栈、内存和世界状态(持久性)。

虚拟机充当解释和执行智能合约编译后的二进制代码的引擎。许多区块链平台的核心组件是虚拟机,其中以太坊虚拟机 (EVM) 尤其值得关注。因此,虚拟机在执行智能合约、处理交易和确保区块链完整性方面发挥着关键作用。

我们知道,EVM 本身也是一个由程序员编写的软件程序。然而,我们如何确保 EVM 没有问题呢?毕竟,任何由人类编写的代码都可能存在 bug。

一旦 EVM 中出现 bug,将对区块链生态系统造成灾难性后果。事实上,EVM 在过去曾遭遇过许多严重的漏洞。

例如,2020 年发生了一起由预编译合约(即 CVE-2020-26241)[1] 引起漏洞事件。Geth(位于 0x00...04)协议中的 dataCopy 预编译合约在调用时执行了浅拷贝,当复制大量数据时,只复制了指针而不是完整的数据。这使得恶意智能合约能够修改不应该被修改的数据,导致不同版本虚拟机执行相同智能合约时出现数据不一致。另一个例子发生在 2021 年,当时一些 EVM 兼容链没有与以太坊同步升级。在旧版本的 Geth 中,存在一个漏洞(CVE-2021-39137)[2],其中预编译合约调用中的输入和输出数据内存区域发生重叠。攻击者利用了这个漏洞,导致了链的分叉。

BlockSec 的对策

如何及时发现 EVM 中的漏洞?存在哪些挑战?

  1. 首先,由于虚拟机设计的复杂性,很难找到能够完全理解其运行逻辑的工具。每个专业领域都需要专门知识,许多开发人员可能无法投入足够的精力来理解其运行逻辑并采取有效的防范措施。

  2. 此外,许多 L1/L2 新公链都定制了 EVM 虚拟机,这可能引入新的安全问题。

显然,仅依靠手动审计来识别 EVM 虚拟机上的这些问题是困难的。

适时调整,应对挑战!鉴于这些挑战,BlockSec 开发了一个自动化系统来直面这些问题!

差分模糊测试

在 BlockSec,我们的专家团队采用了一种巧妙的方法,称为差分模糊测试。通过在不同版本的虚拟机上执行相同的测试用例并比较输出结果,我们可以发现潜在的漏洞和不一致之处。这种方法使我们能够有效地识别传统测试方法可能忽略的细微差别,从而提高系统的整体安全性。

Figure 2: Differential fuzzing Workflow

基本工作原理:

为了进行差分模糊测试,我们需要准备相同的输入作为测试用例。这些测试用例随后被输入差分模糊测试引擎。通过比较在不同版本虚拟机上执行相同测试用例的输出,我们可以识别潜在问题。

具体实施步骤:

差分模糊测试的测试用例需要由两部分组成:交易元数据和预状态。但是,我们如何生成这些交易呢?我们有两种方法来解决这个挑战。

  1. 重用历史交易:我们可以检索区块链上发生的历史交易,并通过差分模糊测试引擎在不同版本的虚拟机上运行它们。然而,仅依靠这种方法有其局限性。历史交易往往过于“正常”,而安全测试需要发现边缘情况——异常场景。这就是我们想出第二种方法的原因。
  2. 覆盖率引导模糊测试:我们从头开始生成不常见的字节码和历史上未见的交易,然后对交易和智能合约代码进行变异,并将它们输入虚拟机。我们从不同维度确保测试用例的有效性和全面性。

一旦这些交易生成,它们就会被输入差分模糊测试引擎,然后对结果进行比较。

结果的比较不仅仅是简单的数值比较,还全面考虑了虚拟机中持久化和非持久化存储的数据一致性。本文不再详述。

案例研究

Figure 3: An example of the pre-compiled contract ModExp issue in the Aurora VM

我想分享一个我们通过差分模糊测试在 Aurora VM 中发现的虚拟机漏洞案例。具体来说,它涉及 ModExp 预编译智能合约的一个问题。

在计算一个数 x 的 y 次方(模运算)时,我们知道这个操作需要计算资源。在一个正确的实现中,gas 计算会考虑到迭代次数,因为模幂运算涉及多次迭代。然而,在一种特定情况下,gas 计算可能会出现问题:当指数 y 等于 0 时,表示零阶幂运算。在这种情况下,迭代次数为零,导致 gas 值极小。但实际上,计算仍然需要资源。

结论

目前,BlockSec 推出的差分模糊测试工具支持在各种区块链虚拟机环境中执行,包括 rbpfubpfAurora-engineneon-evmMoonbeamrevmEvmOSfevmPolygon-zkevm,并且还在不断扩展。

通过该工具,我们发现了 14 个新漏洞,申请了 2 个 CVE:CVE-2021–46102CVE-2022–23066,并获得了超过 130 万美元的 bug 奖励。

目前,BlockSec(审计服务 + 差分模糊测试工具)提供的全面 EVM 链安全解决方案已获得 EOS 和 FileCoin 的认可和采用,并将为他们的生态系统安全和健康发展做出贡献。

参考

[1] Shallow copy in the 0x4 precompile could lead to EVM memory corruption

[2] RETURNDATA corruption via datacopy

关于 BlockSec

BlockSec 是一家开创性的区块链安全公司,由一群世界顶尖的安全专家于 2021 年创立。公司致力于提升新兴 Web3 世界的安全性和可用性,以促进其大规模采用。为此,BlockSec 提供智能合约和 EVM 链安全审计服务、用于安全开发和主动阻止威胁的 Phalcon 平台、用于资金追踪和调查的 MetaSleuth 平台,以及供 Web3 构建者高效探索加密世界的 MetaDock 扩展。

迄今为止,公司已为 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap 等 300 多家知名客户提供服务,并在两轮融资中从 Matrix Partners、Vitalbridge Capital 和 Fenbushi Capital 等杰出投资者那里获得了数千万美元的投资。

✉️商务咨询:[email protected]

BlockSec 的 Twitter 账号:https://twitter.com/BlockSecTeam

Phalcon 的 Twitter 账号:https://twitter.com/Phalcon_xyz

Sign up for the latest updates