zkLend黑客攻击的深入分析与EraLend黑客攻击的关联

  • slowmist
  • 发布于 2025-02-15 23:55
  • 阅读 88

本文分析了2025年2月zkLend平台遭受攻击事件的细节,攻击者利用闪电贷机制操纵了市场累积值并通过舍入错误进行了资产盗窃,导致近1000万美元的损失。文中提供了详尽的攻击步骤、根本原因以及改进建议,以加强区块链平台的安全性。

作者 | Doublenine, Lisa

编辑 | Liz

背景

根据 SlowMist 安全团队的情报,2025 年 2 月 12 日,Starknet 上领先的借贷平台 zkLend 受到攻击,造成近 1000 万美元的资产损失。SlowMist 安全团队分析了此事件并分享了如下结果:

https://x.com/SlowMist_Team/status/1889659563517026772

相关信息

根本原因

此次漏洞的根本原因在于利用闪电贷中的独特机制操纵和放大空市场中的累加器值。此外,市场合约在进行除法运算时使用了 SafeMath 库,直接对数值进行除法。这使得攻击者能够利用放大的累加器,造成收益的向下取整漏洞。

攻击步骤分析

攻击前的准备步骤

  1. 攻击者首先调用市场合约的 deposit 函数,将 1 wei 的 wstETH 代币存入合约。

可以观察到 wstETH 代币市场处于空状态,其中市场合约持有的 wstETH 数量以及铸造的 zwstETH 数量在此存款之前均为零。这使得攻击者能够以最低的成本操控后续步骤。

在这一阶段,wstETH 市场的 lending_accumulator 值为 1e27

交易哈希: https://voyager.online/tx/0x039b6587b9d545cfde7c0f6646085ab0c39cc34e15c665613c30f148b569687

  1. 接下来,攻击者调用市场合约的 flash_loan 函数,借入 1 wei 的 wstETH,并偿还 1000 wei 的 wstETH

闪电贷之后,wstETH 市场的 lending_accumulator 值增加至 8.51e29,比之前的值放大了 851 倍。

交易哈希: https://voyager.online/tx/0x039b6587b9d545cfde7c0f6646085ab0c39cc34e15c665613c30f148b569687c

那么,是什么导致 lending_accumulator 值如此显著放大?让我们深入查看市场合约中的 flash_loan 函数:

用户偿还闪电贷后,会调用名为 settle_extra_reserve_balance 的函数。

这个函数主要将合约的额外资金分配给存款人。分配的方法涉及根据合约的额外资金计算新的 lending_accumulator,并更新相应资产代币的市场数据。简化计算公式如下:

(reserve_balance + totaldebt - amount_to_treasury) * 1e27 / ztoken_supply

由于市场之前处于空状态:

  • reserve_balance 等于闪电贷的偿还金额(1000 wei),
  • total_debt 为 0,
  • amount_to_treasury 计算为 149 wei,
  • zwstETH 供应等于 1 wei(在先前存款操作期间铸造)。

更新后的 lending_accumulator 最后计算值为 8.51e29

从历史交易记录来看,攻击者执行了多次相同的闪电贷操作,通过每次偿还增加的代币快速放大了 wstETH 市场的 lending_accumulator 值。

最终,lending_accumulator 被放大到极大的值 4.069e45

正式攻击

交易哈希: https://voyager.online/tx/0x0160a5841b3e99679691294d1f18904c557b28f7d5fe61577e75c8931f34a16f

  1. 当其他用户向 wstETH 市场存款时,攻击者开始正式攻击。首先,攻击者调用 deposit 函数,大约存入 4.069 wstETH 到合约中。

  1. 然后,攻击者调用 withdraw 函数,提取约 6.1039 wstETH

  1. 通过重复以上步骤,攻击者最终从市场窃取了约 61 wstETH

攻击者为何只存入 4.069 wstETH,却能够提取 6.103 wstETH?

在执行 deposit 函数后,当用户转移资产代币 wstETH 时,系统外部调用 zToken 合约为用户铸造相应数量的 zwstETH 代币。

用户实际获得的 zwstETH 数量是根据转移的资产代币数量和市场的 lending_accumulator 计算得出的:

让我们跟进计算中使用的 safe_decimal_math 库:

计算实际获得的 zwstETH 数量的公式为:

zToken_amount = amount * 1e27 / lending_accumulator

其中 amount4069297906051644021,而被攻击者操控的 lending_accumulator4069297906051644020000000000000000000000000000。最终计算得到的 zwstETH 数量为 1。

当用户调用 withdraw 函数提取 6.103 wstETH 时,系统会调用 zToken 合约的 burn 函数,燃烧之前获得的 zwstETH

zToken 合约的 burn 函数中,计算要燃烧的实际 zwstETH 数量的方法与铸造时相同:

此时传入的 amount6103946859077466029。然而,由于 safe_math 库中的 div 函数执行除法时会进行截断,因此结果的小数部分被抛弃。此外,由于 lending_accumulator 之前被攻击者放大,因此最终计算得到的 zwstETH 燃烧金额由于向下取整也等于 1。这与存款时初始获得的 zwstETH 数量完全匹配。

6103946859077466029 * 1e27 / 4069297906051644020000000000000000000000000000 = 1

因此,提现期间燃烧 zwstETH 代币的逻辑成功通过,这也是攻击者可以只存入 4.069 wstETH 而提取 6.103 wstETH 的原因。

在正常市场条件下,lending_accumulator 的值应具有 1e27 的精度。进行除法时,分子要比分母大几个数量级,因此结果不受影响。

MistTrack 分析

根据链上追踪工具 MistTrack,攻击者从 zkLend 窃取了约 950 万美元。他们随后将被盗代币转换为 ETH,并利用 LayerSwap、Orbiter Bridge、Rhino.fi 和 StarkGate ETH Bridge 等跨链桥将资金转移到各个网络。大部分资金都已通过以下以太坊地址转移:

  • 0xcd1c290198e12c4c1809271e683572fbf977bb63
  • 0x0b7d061d91018aab823a755020e625ffe8b93074
  • 0x645c77833833A6654F7EdaA977eBEaBc680a9109

其中,地址 0x645c77833833A6654F7EdaA977eBEaBc680a9109 的交易历史非常显著,首次记录的交易可以追溯到 2024 年 6 月 22 日。

该地址在以太坊、BSC 和 Base 网络上与 Binance 有互动,表明它可能是与 Binance 账户接口相嵌套的第三方交易平台。此外,它还在以太坊网络上记录了与 ChangeNOW 和 Hitbtc 的互动。

进一步分析攻击者在 Starknet上的相关地址: 0x04d7191dc8eac499bac710dd368706e3ce76c9945da52535de770d06ce7d3b26 显示出在攻击前与以下 L1 地址的强关联:

  • 0xd95b3c1e638ce3cdc070ad6d4f385c61e2ee8662
  • 0x93920786e0fda8496248c4447e2e082da69b6c40
  • 0x34e5dc779cb705200e951239b6a89aaf5c7dbfc1

根据 MistTrack 的扩展分析,地址 0x93920786e0fda8496248c4447e2e082da69b6c400x34e5dc779cb705200e951239b6a89aaf5c7dbfc1 与 2023 年 7 月 25 日的 EraLend 攻击者地址有关。此外,根据 SlowMist InMist Lab 的情报,0x93920786e0fda8496248c4447e2e082da69b6c40 被攻击者用于接收 EraLend 攻击中被盗的资金。

当时,EraLend 遭受了约 276 万美元的损失。攻击者同样使用多个桥将盗取的资金分散到不同链和钱包中。

总之,zkLend 和 EraLend 的攻击是由同一攻击者实施的。

结论

此次攻击的核心在于攻击者利用闪电贷过程中的独特机制,操控和放大空市场中的累加器值。这使他们能够利用向下取整的错误在提取时获得超过预期的资产。

SlowMist 安全团队建议项目团队设计一个稳健且安全的闪电贷逻辑模型,考虑影响存款收据代币计算的情况。此外,应在数学运算中实施安全的取整机制,以防止精度丢失。对于涉及存款和取款的核心业务逻辑,应加强审计和安全测试,以避免类似事件的发生。

关于 SlowMist

SlowMist 是一家成立于 2018 年 1 月的区块链安全公司。该公司由一支在网络安全领域拥有十多年经验的团队创办,旨在成为全球力量。我们的目标是尽可能地为所有人提供安全的区块链生态系统。我们现在是一家知名的国际区块链安全公司,曾参与多个知名项目的工作,如 HashKey Exchange, OSL, MEEX, BGE, BTCBOX, Bitget, BHEX.SG, OKX, Binance, HTX, Amber Group, Crypto.com 等。

SlowMist 提供各种服务,包括但不限于安全审计、威胁信息、防御部署、安全顾问和其他安全相关服务。我们还提供 AML(反洗钱)软件、MistEye(安全监控)、SlowMist Hacked(加密网络攻击档案)、FireWall.x(智能合约防火墙)和其他 SaaS 产品。我们与诸如 Akamai、BitDefender、RC²、TianJi Partners、IPIP 等国内外公司建立了合作关系。我们在加密货币犯罪调查方面的广泛工作已被国际组织和政府机构引用,包括联合国安全理事会和联合国毒品和犯罪办公室。

通过为各个项目提供量身定制的综合安全解决方案,我们能够识别风险并防止其发生。我们的团队发现并公布了几处高风险区块链安全漏洞。通过这样做,我们能提高人们的警惕性,并提升区块链生态系统的安全标准。

  • 原文链接: slowmist.medium.com/in-d...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
slowmist
slowmist
江湖只有他的大名,没有他的介绍。