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会还原,而不是进行填充操作。

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

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整理编译,转载请注明来源。

评论

所有评论

推荐阅读

  • 立讯精密:公司及立讯技术涉337调查,尚处立案初期

    10月10日,立讯精密公告,公司及控股子公司东莞立讯技术股份有限公司被列为美国国际贸易委员会337调查被调查方,涉及美国专利US 10,90.37万。ITC于当地时间2026年10月9日正式启动调查,调查编号337-TA-1526,目前尚处于立案初期,尚未就相关侵权主张作出实质认定;涉案产品处于客户验证阶段,尚未进入量产状态。

  • 法国财委会通过稳定币兑换税与加密离境税修正案

    10月10日,据Decrypt报道,法国国民议会财政委员会本周通过两项加密税收修正案:自2027年1月1日起,将兑换受MiCA监管的稳定币视为应税出售;并拟对过去10年内至少6年为法国税务居民、加密资产合计价值超80万欧元而迁居海外的纳税人征收离境税。委员会10月9日以31票对3票否决预算收入部分,全体国民议会将基于政府原始文本审议,修正案不会自动纳入,支持者需在10月13日开始的辩论中重新提出,正式投票定于10月20日,相关措施尚未成为法律。稳定币修正案由左翼GDR党团成员Nicolas Sansu及16名联署者提出,未设新税率,拟将收益纳入法国现行31.4%统一税制。委员会还通过修正案,允许将加密资产亏损结转10年抵扣未来收益。

  • Entropy花费569.98枚HYPE拍下xiaomi(小米)代码,或即将上线其永续合约

    10月10日,HIP-3市场部署者Entropy花费569.98枚HYPE拍下代码xiaomi,Entropy或即将上线其永续合约。

  • 韩国金融委:交易所大股东持股限制不针对特定企业

    10月10日,据韩国金融委员会主席李亿元表示,正在推进的《数字资产基本法》中关于虚拟资产交易所大股东持股限制的规定,并非针对特定人士或企业,而是考虑到交易所制度化运营后需承担更高公共责任。目前韩国虚拟资产交易所采取每3年更新申报制度,未来《数字资产基本法》实施后将转为许可制运营。李亿元称,交易所具有基础设施属性,需具备与其地位相匹配的公共性和责任性。

  • 伯恩斯坦拆解AI基建成本:每吉瓦投资最高395亿美元

    10月10日,伯恩斯坦研报显示,采用不同AI加速器架构,建设1GW数据中心所需的资本开支约为346亿至395亿美元。其中,英伟达Vera Rubin架构的建设成本最高,OpenAI自研ASIC架构Jalapeno则相对较低。伯恩斯坦将英伟达Rubin NVL72单机柜成本预期从此前的910万美元大幅下调至752万美元,降幅约17%,主要反映了对HBM价格和NAND存储容量预期的调整。研报还指出,AI数据中心的主要经济负担并非电费,而是巨额资本开支及其产生的折旧。

  • 长鑫技术新突破:4F²架构产品预计年底亮相

    10月10日,长鑫存储4F² DRAM架构研发近期取得关键进展。该公司总裁曹堪宇博士在第四届集成芯片和芯粒大会上发表演讲,全面介绍了长鑫存储在DRAM器件、4F²架构及混合键合等方向的技术探索与积累,并官宣预计年底将推出融合了上述先进技术的新一代DDR5 RDIMM产品。

  • 中国证监会召开资本市场和金融形势专家座谈会

    10月10日,中国证监会党委书记、主席吴清在北京召开座谈会,与部分上市公司负责人、证券基金机构专家深入交流,就当前资本市场和金融形势充分听取意见建议。座谈会上,大家一致认为,我国宏观经济稳中向好,产业结构转型持续深化,资本市场运行总体稳健,多层次市场功能有效发挥,虽然面临一些风险挑战,但高质量发展的态势不会改变,对经济运行和资本市场充满信心。同时,与会专家对更好推动资本市场平稳健康发展提出了具体建议,主要包括:持续加强稳市机制建设,进一步拓宽中长期资金来源、渠道和入市方式,发展壮大耐心资本;推动有条件的上市公司加大分红回购力度,完善投资者回报和权益保护机制;优化发行上市制度,支持不同类型、不同行业、多元化的优质企业发展壮大;强化交易监管,加强跨境风险监测应对;研究储备更多增量政策工具;等等。吴清表示,上市公司和行业机构是市场的重要主体,希望大家积极建言献策,共同把资本市场建设好,更好回报广大投资者,为中国式现代化建设积极贡献力量。中国证监会有关司局负责同志参加座谈。

  • Hyperliquid巨鲸在10·10崩盘周年持有3236万美元比特币空单

    10月10日,据Bitcoin.com报道,一Hyperliquid巨鲸在「10·10崩盘」一周年之际持有391.48枚BTC空单,规模3236万美元,平均入场价82863.10美元,采用13倍全仓杠杆,账户权益719万美元,清算价99801.20美元,较当前价格高约20%。数据显示,该地址已累计交易4726笔,近一周永续合约盈利95.2万美元,最大回撤11.03%;截至发稿该空单浮盈约7.55万美元。2025年10月10日,加密市场经历史上最大清算事件,清除了超191亿美元的杠杆头寸。比特币��报约82754美元,较126080美元历史高点低约34%。Coinglass数据显示,若BTC回升至85000美元,约33亿美元空单将面临风险。Hyperliquid的BTC未平仓合约约38040枚,该巨鲸约占1%。

  • 摩根士丹利增持比特币,总持仓量达1.06万枚

    10月10日,摩根士丹利通过旗下现货比特币交易所交易基金MSBT增持91.69枚比特币,总持仓量升至10639枚,当前价值约8.8亿美元。

  • Strive募资约5500万美元 足够买入约638枚比特币

    10月10日,据Bitcoin.com报道,Strive的SATA优先股本周募资约5500万美元,足以购买约638枚比特币。据追踪平台Bitcointreasuries.net统计,该数字来自周度仪表盘快照,仅计入以100美元面值或以上成交的成交量,再按经SEC文件校准的捕获比率估算其通过ATM计划售出的新股数量。SATA在10月5日及6日多数时间高于面值成交,但周三至周五全部低于面值,发行随之暂停——这是此类机制的内置刹车:低于面值发行新股会侵蚀计划承诺,须待买方推高价格方能恢复。同期Michael Saylor旗下Strategy在9月28日至10月4日未售出任何STRC股份,其10月1日至4日购入的334枚BTC由出售MSTR普通股提供资金,持仓升至848000枚BTC。Strive截至10月2日持有29462枚BTC。两家公司周一的8-K文件预计将确认实际购币数量。