Cointime

扫码下载App
iOS & Android

用系统性的方法解决EVM的bug

VC

原文链接:Systematic Approach to Maintaining EVM Compatibility and Security 

本文来自:BlockSec  编译:CoinTime Candice

EVM(以太坊虚拟机)兼容区块链旨在与以太坊区块链的智能合约功能、编程语言(Solidity)和工具生态系统兼容。在这个过程中,实现符合EVM的虚拟机是关键步骤之一。然而,在研究过程中,我们发现,在不同的实现中保持对EVM的兼容性并不容易。

为了解决这个问题,BlockSec开发了一个内部系统,可以系统地定位EVM实现中的错误和安全漏洞。这个系统被证明是有效的。它报告了Aurora Engine中的四个错误和Moonbeam中的四个错误的定位。所有这些都已报告并修复。请注意,该测试方法还用于定位去年Solana rbpf实施中的两个关键错误(CVE-2021-46102、CVE-2022-23066)。

1. 背景

如今,人们提出了许多不同的区块链,并在低gas费用、高吞吐量和高性能方面进行了优化。在这种情况下,新的虚拟机或开发语言被提出,这增加了原始实体开发者的转型门槛。在这种情况下,提出了许多与EVM兼容的解决方案,允许用户将他们在solidity中开发的DApp部署在这些新的链上。Aurora和Moonbeam是这些EVM兼容解决方案的代表。然而,这些EVM实现的稳健性、可靠性和精确性是未知的,值得我们关注。为此,我们使用差分模糊技术,并检查实现中是否存在任何缺陷。

2. 差分模糊测试

其基本思想是向这些EVM实现(例如Aurora、Moonbeam)和最先进的以太坊客户端(即geth)提供相同的输入,以检查它们是否具有相同的输出。具体来说,我们收集以太坊上的历史交易,并使用不同的策略改变合约代码和交易状态,以生成测试用例。我们的发现表明,Aurora Engine和Moonbeam在某些情况下不符合规范。幸运的是,所有报告的问题都得到了解决,现在我们将分享细节。

3. 发现错误

这些错误大多存在于预编译的合约中,其根本原因和影响是多方面的。例如,一些错误可能会影响nonce值的计算,而另一些可能影响gas的计算,并可能进一步导致DoS攻击。所有发现的错误都违反了EVM规范的指定执行逻辑,并可能在特定情况下导致意外行为。请看下面对所发现的错误的详细描述。

3.1 验证不当

加密逻辑是复杂的。在这种情况下,在EVM字节码中实现相应的逻辑可以产生相当大的gas用量。相反,在本机代码中开发的预编译合约可以提高性能。然而,由于验证不当,我们在预编译的合约中发现了几个错误。

Aurora Engine:ecPairing

这个错误是在预编译的合约ecPairing中发现的。

ecPairing的输入由两条椭圆曲线上的多个点组成。根据规范,点(0,0)位于两条曲线上,应为有效输入:

但是,如果输入中包含点(0,0),Aurora Engine(2.7.0版)将恢复。

Moonbeam: ecMul

这个错误出现在预先编译的合约ecMul中。与Aurora Engine不同,Moonbeam在输入有效时还原交易。根据规范,当输入的长度小于64时,预编译的合约ecMul应该用零填充输入。但是,Moonbeam会还原,而不是进行填充操作。

我们还发现,预编译的合约ecAddmodexp有同样的问题。

Moonbeam: ecRecover

这个错误出现在预编译的合约ecRecover中,该合约用于恢复以太坊地址。

根据规范,输入[32..63]v表示U256标识符,它应该是27或28,否则ecRecover不应返回任何内容(但不应该还原整个交易)。

然而,Moonbeam在这里犯了两个错误:

  • 它只检查输入[63],而不是将输入[32..63]转换为U256类型,然后检查值。
  • 当标识符为0或1时,输入被视为有效(应仅为27或28)。

Moonbeam: ecPairing

这个错误出现在预编译的合约ecPairing中。当输入无效时,Moonbeam不会恢复交易。根据规范,预编译的合约ecPairing的输入应该是192的倍数。否则,交易应该被退回。

然而,当上述要求不符合时,Moonbeam不会恢复交易。

3.2 Gas计算不正确

每个预编译合约都有一个算法来确定gas的使用量。不正确的gas计算可能会导致DoS攻击。

然而,我们在Aurora Engine和Moonbeam中都发现了两个错误,即gas计算不正确。

Aurora Engine: modexp

这个错误出现在预编译的合约modexp中。计算gas使用量的算法由EIP-2565定义。Gas使用量与迭代次数有关。

计算迭代次数的算法如下。

根据上述算法,迭代次数至少是1。然而,Aurora Engine直接返回iteration_count,而不是max(iteration_coount,1)。在这种情况下,返回的值(即iteration_count)可以是0,这意味着在特定情况下,Aurora将收取比预期更少的gas费用。

Moonbeam: modexp

这个错误也出现在预编译的合约modexp的函数calculate_iteration_count中。但它是在Moonbeam中发现的。

exponent_length大于32时,iteration_count的计算方法如下。

请注意,它使用了exponent&(2**256-1),这需要exponent的最低32个字节,Moonbeam的实现也遵循了这种算法。

然而,根据规范,gas计算公式应使用最高32字节的exponent

3.3 Nonce增量错误

一个外部拥有的账户(EOA)的nonce表示这个地址所签署的成功交易的数量。然而,我们注意到,可以通过在Aurora Engine上发送无效交易来增加nonce。

根据EIP-1559,在执行交易之前,EVM应该确保签署者有足够的余额来支付转移的本地代币(如ETH)和所需的gas。否则,该交易应被放弃,签署者的nonce也不应增加。

虽然Aurora Engine在这种情况下会放弃交易,但它仍然会增加签署者的nonce。

3.4 操作码实现不正确

这个错误是关于特定操作码(即PUSH)的实现。当PUSH操作码后面的字节不完整时,它们应该是右对齐的。例如,字节码0x64ffff可以被解码为:

由于操作数应该是右对齐的,值0xffff000000应该被推入堆栈。然而,Aurora Engine和Moonbeam中的EVM实现却推送了0xffff,这是不正确的。

4. 我们的服务

在BlockSec,我们了解在不同的区块链实施中保持EVM兼容性和安全性的重要性。这就是为什么我们开发了一种系统的错误检测方法,可以轻松定位EVM实现中的漏洞。

我们的内部系统已被证明在定位EVM实现中的漏洞和安全漏洞方面非常有效。它已经成功报告并修复了Aurora Engine中的四个错误和Moonbeam中的四个错误。此外,我们的测试方法用于定位去年Solana rbpf实施中的两个关键漏洞(CVE-2021-46102、CVE-2022-23066),突出了我们方法的有效性。

通过实施我们的系统性漏洞检测方法,我们的客户可以确信他们的EVM实施是安全和可靠的。我们致力于为EVM的兼容性和安全性提供一流的解决方案,帮助我们的客户与他们的用户和利益相关者建立信任。

关于BlockSec

BlockSec团队专注于区块链生态系统的安全,并与领先的DeFi项目合作以确保其产品的安全。该团队由来自学术界和工业界的顶尖安全研究人员和经验丰富的专家组成。他们在著名会议上发表了多篇区块链安全论文,报告了几起DeFi应用程序的零日攻击,并发布了高影响安全事件的详细分析报告。

*本文由CoinTime整理编译,转载请注明来源。

评论

所有评论

推荐阅读

  • 谷歌母公司Alphabet计划通过发行债券筹集至多250亿美元资金

    8月6日,谷歌母公司Alphabet计划通过发行债券筹集至多250亿美元资金。

  • 沃什坚持审慎的市场指引 若通胀强劲或考虑9月加息

    8月6日,据英国金融时报报道,即便在决定不透露太多利率策略的细节,而引发国债被大幅抛售之后,美联储主席沃什仍坚持他一贯的简洁沟通风格。与沃什关系密切的人士表示,他承认在执掌全球最重要的央行的头10周里犯了一些错误,包括未能强化其关于价格稳定的关键信息,以及造成了人们对其改革美联储的长期计划是否会影响近期政策决定的困惑。但他们坚称,这些错误并不足以成为推翻沃什对美联储改革计划的理由。知情人士还透露,如果未来几周公布的通胀数据强劲,且市场对借贷成本上升的预期也随之升高,沃什准备在9月的会议上提高利率。知情人士补充说,尽管美联储主席提出了缩减央行6.7万亿美元资产负债表的可能性,以收紧货币政策,但利率目前仍是主要工具——如果需要,将在即将召开的会议上使用。

  • DeepSeek、腾讯等获宇树科技战略配售

    宇树科技披露战略配售名单,杭州深度求索人工智能基础技术研究有限公司(DeepSeek)、腾讯旗下上海启善投资有限公司作为“与发行人经营业务具有战略合作关系或长期合作愿景的大型企业或其下属企业”入围。这一序列的战略配售投资者还包括中国石油集团昆仑资本有限公司、南方电网产融控股集团有限公司、天翼资本控股有限公司。

  • 闪迪盘前跌超10% 遭花旗、富国银行下调目标价

    8月6日,闪迪(SNDK.US)盘前跌超10%。消息面上,花旗将闪迪目标价从2500美元下调至2100美元;而一个半月前的6月25日,花旗将闪迪的目标价从2025美元上调至2500美元,理由是NAND闪存价格前景持续改善,并开启为期90天的短期上行观察。 此外,富国银行将闪迪目标价从1620美元下调至1400美元;而半个月前的7月22日,富国银行才刚将闪迪目标价从1250美元上调至1620美元。

  • 富国银行下调闪迪目标价至1400美元

    8月6日,富国银行将闪迪目标股价从1620美元下调至1400美元。

  • 葛卫东加仓存储芯片龙头兆易创新

    兆易创新发布的公告显示,截至7月31日,葛卫东、王萍分别持有公司股票1644.67万股、859.99万股,持股比例分别为2.34%、1.23%。 相较于一季度末的1626.16万股、757.32万股,二者的持股分别增加18.51万股、102.67万股。据公开资料,葛卫东为混沌投资掌门人、知名投资人,与王萍系夫妻关系。(证券时报)

  • 美议员拟推出“数据中心权利法案”遏制AI基建扩张

    8月6日,据CNBC,美国众议员罗·卡纳拟推出“数据中心权利法案”,以赋予地方社区拒绝数据中心建设的权力。随着民众担忧AI基础设施庞大的能源需求将推高电费、加剧水资源压力,美国围绕数据中心扩张的争议持续升温。卡纳表示,近期访问宾夕法尼亚州期间,收到的最大反馈是民众普遍反对数据中心建设。他说:“我们需要一项权利法案,让社区不必被迫接受这些数据中心,并确保它们不会被建在农田或居民区。”该提案包括多项对地方社区和政府权利的保护措施,以及要求数据中心使用清洁可靠能源、遵守污染排放限制等。目前,包括纽约州在内的几个州已经实施了数据中心建设禁令,数据中心的反对者最近也在选举中取得了重大胜利。卡纳称,建造数据中心的超大规模企业正在“失去这个国家”。

  • SK海力士:Solidigm子公司正审议约5万亿韩元的Pre-IPO融资

    SK海力士:Solidigm子公司正审议约5万亿韩元的Pre-IPO融资。

  • SK海力士:Solidigm子公司正审议约5万亿韩元的Pre-IPO融资

    SK海力士:Solidigm子公司正审议约5万亿韩元的Pre-IPO融资。

  • 广发香港:看好GPU/CPU/光模块,谨慎看待存储芯片

    8月6日消息,广发证券(香港)今日发布研报称,在健康资产负债表的支撑下,预测前五大美国云服务商(CSP)的资本开支在2027/2028/2029年将分别达到1.19万亿美元、1.428万亿美元和1.642万亿美元,同比增长45%、20%和15%,但这也意味着相比2027年45%的增速,2028年和2029年的增速会有所放缓。 该行还称,英伟达等平台正在削减内存成本并下调规格。例如,Rubin Ultra的HBM规格从12层堆叠下调至8层堆叠,Meta和谷歌的定制芯片也转向8层。 该行表示,对AI趋势保持高度乐观,并看好GPU/CPU/光模块(Optic)赛道。另一方面,对存储芯片持保守/谨慎态度。