Rari 被黑事故分析:开心做聚合 无奈被攻击

2021 年 5 月 8 日,据链闻消息,以太坊收益聚合协议 Rari Capital 因集成了 Alpha Finance 产生了漏洞,损失近 1500 万美元。事后,Rari Capital 官方发布了事故分析报告,分析了此次事故的主要原因。慢雾安全团队在官方分析的基础上,结合慢雾安全团队对此次事件的深入分析,进一步解读本次安全事故的原因。

本次攻击发生在 Rari Capital 的 RariManger 合约中,整个过程下来就是攻击者首先通过闪电贷从 dYdX 中借出巨量资金,然后不停的重复调用 RariManger 合约中的 deposit 和 withdraw 函数,完成获利。如下图:

板球数字收藏品平台Rario与班加罗尔皇家挑战者俱乐部达成合作:5月16日消息,板球数字收藏品平台Rario与班加罗尔皇家挑战者俱乐部(RCB)达成合作,用户将可以通过Rario最新推出的APP收集和交易RCB球员的数字收藏卡,还有机会与球员见面、参观体育场、获得签名商品等。(myKhel)[2023/5/16 15:06:46]

那么用户是如何通过 deposit 和 withdraw 这两个操作获利的呢?我们需要分析对应的函数:

Tribe DAO提出1.57亿美元赎回计划,向代币持有人和Rari黑客受害者分发加密资产:金色财经报道,Tribe DAO提出了一项关闭其协议运作的提案。这是一个大约1.57亿美元的赎回计划,将DAO控制的剩余资产分配给TRIBE持有人,并对4月发生的Rari黑客攻击的受害者进行赔偿。任何批准都需要在未来由代币持有人进行的DAO投票中进行。赎回提案将用团队的8890万个未归属的TRIBE代币来补偿这次事件中的黑客受害者,这将向受害者发放约1600万美元。对于TRIBE持有人来说,DAO控制的资产总额约为1.41亿美元,将按比例分配。

4月30日,Rari Capital的资金池遭到攻击,价值约8000万美元。(The Block)[2022/8/20 12:37:18]

NFT市场聚合平台Gem将集成LooksRare:2月17日消息,NFT 市场聚合平台 Gem 创始人 vasa 发推称,Gem 将集成 LooksRare,用户可以使用 Gem 购买来自 LooksRare 的 NFT。此外,Gem 还将能自动帮助用户领取 LOOKS 奖励,出售 WETH 奖励并兑换为 LOOKS 进行再质押获得复利,并且用户无需支付 Gas 费。LOOKS 自动复利的奖励可以随时领取。[2022/2/17 9:57:46]

以上是 deposit 函数的部分逻辑,首先 deposit 函数本身会调用内部的 _depositTo 函数,然后会再次调用 getFundBalance 函数来获取合约的余额。getFundBalance 函数最终是会调用到 Rari Controller 合约的 getBalance 函数去获取余额。最后是通过 Rari Controller 合约中的 AlphaPoolController 库的 getBalance 函数获取余额。如下图:

AC更新Loot类游戏Rarity代码库 已部署“Goods”栏目代码:9月9日消息,YFI创始人AndreCronje更新了Fantom链上Loot类游戏Rarity的代码库。此次更新将”Codex”模块代码进行了更替,Items组分中的“Goods”栏目代码被部署到游戏合约地址。目前,武器、盔甲、炼金术、矿物等游戏成分的代码尚在设计中。[2021/9/9 23:12:57]

流程上略微复杂,用图来展示大概就是下面这样:

BiKi平台RARE连续2日上涨 累计涨幅104.28%:据BiKi行情数据显示,截止今日14:30( GMT+8),平台内币种RARE连续2日上涨,累计涨幅104.28%,当前涨幅81.1%,现价3.6624USDT。行情波动较大,请注意风险控制。

BiKi平台即将上线Unique.Photo的通证FOTO,并在上线时给RARE持币用户空投FOTO。Unique.Photo是无需许可的摄影NFT平台,旨在将自主权和全部佣金交还给摄影师,减少传统摄影平台因为裁员带来的问题。[2021/2/25 17:51:36]

从上面的分析不难发现,Rari 合约最终是用到了 Alpha Finance 项目的 ibETH 合约的 totalETH 函数获取合约的余额,目的是为了根据 totalETH 和 totalSupply 的比值计算出 Rari 合约真正的 ETH 余额。deposit 函数是根据用户的充值 ETH 的数量和比值计算要发放给用户的 REPT 数量,而 withdraw 函数的公式也大同小异,同样需要通过 getBalance 函数获取合约的 ETH 余额并计算比值,然后根据用户的 REPT 代币的余额和比值计算需要返还给用户的 ETH 的数量。但是问题恰恰出在这个获取 ETH 余额的公式上。

根据官方描述,从 ibETH 合约获取的 totalETH 函数获取的值是可以被用户操控的。以下是官方原文:

根据官方的描述,用户可通过 ibETH 合约的 work 函数操控 totalETH 函数返回的值,导致 Rari 整个价值计算公式崩溃。我们分别分析 ibETH 的 work 函数和 totalETH 函数:

totalETH 函数:

work 函数:

以上分别是 ibETH 合约中的 totalETH 函数和 work 函数的部分实现。不难发现 totalETH 函数其实就是获取合约的总的 ETH 的数量。而 work 函数,本身是一个 payable 函数,也就是说,用户是可以通过 work 函数来控制 ibETH 合约中的 ETH 数量从而来改变 totalETH 返回的值的。更糟糕的是,work 函数同时还支持调用其他的任意合约。那么整个思路就很清晰了。

1、从 dYdX 中进行闪电贷,借出大量的 ETH;

2、使用一部分的 ETH 充值到 Rari Capital 合约中,此时从 ibETH 获取的比值还是正常的;

3、使用剩余的 ETH 充值到 ibETH 合约中,调用 ibETH 合约的 work 函数,为后续推高 ibETH 合约的 totalETH 的返回值做准备;

4、在 work 函数中同时对 Rari Capital 合约发起提现,由于上一步已经推高 totalETH 值,但是计算的 totalETH()/totalSupply() 的值相对于充值时被拉高,从而使攻击者能从 Rari Capital 中使用等量的 REPT 获取到更多的 ETH。

本次分析下来,主要的原因是协议的不兼容问题,攻击者通过闪电贷和重入的方式,攻击了 Rari Capital,造成了巨大的损失。慢雾安全团队建议在 DeFi 逐渐趋于复杂的情况下,各 DeFi 项目在进行协议间交互时,需要做好协议之间的兼容性,避免因协议兼容问题导致的损失。

【参考链接】

Rari Capital 官方分析:

https://medium.com/rari-capital/5-8-2021-rari-ethereum-pool-post-mortem-60aab6a6f8f9

攻击交易(其中一笔):

https://etherscan.io/tx/0x171072422efb5cd461546bfe986017d9b5aa427ff1c07ebe8acc064b13a7b7be

By:yudan@慢雾安全团队

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

币赢交易所解析以太坊抢先交易原理及其解决方案

作为一般用户,可以通过设置较低的交易滑点和较高的 Gas 费来应对抢先交易。本文旨在全面解析广泛存在于以太坊区块链上的攻击行为:Front-Running (抢跑交易),通过对其原理的研究,寻找最有效的解决方案,最终帮助 DeGate.

[0:0ms0-1:750ms