2021年5月8日,据《连锁新闻》报道,以太坊收入聚合协议rari capital由于alpha finance的整合而遭遇漏洞,造成近1500万美元的损失。随后,瑞利资本正式发布事故分析报告,分析了事故的主要原因。在官方分析的基础上,结合对事件的深入分析,慢雾安全小组进一步解读了事故原因。
攻击细节分析
这次袭击发生在瑞丽资本的瑞曼格合同中。在整个过程中,攻击者首先通过闪贷向dydx借了大量资金,然后多次拨打电话;在保险合同中;存款;以及;撤消;函数来完成利润。如下图所示:
那么用户如何使用;存款;以及;撤消;这两项业务的利润是多少?我们需要分析相应的函数:
这些是;存款;函数逻辑的一部分,首先;存款;该函数本身调用内部函数u2; The depositto函数,然后再次调用getfundbalance函数以获取合同的余额。getfundbalance函数最终将调用rari控制器契约的getbalance函数来获取余额。**,通过rari控制器契约中alphapoolcontroller库的getbalance函数得到平衡。如下图所示:
流程有点复杂,如下图所示:
通过以上分析不难发现,rari合同最终使用了阿尔法金融项目ibETH合同的TOTALLETH函数来获得合同的余额。目的是根据总ETH和总供给的比率来计算rari合约的实际ETH余额。存款;该函数根据用户充值次数和充值比例,计算向用户发出的报告数;撤消;函数的公式是相似的。它还需要通过getbalance函数得到合同的ETH余额并计算出比例,然后根据用户rep token的余额和比例计算出返回给用户的ETH个数。但问题在于得到ETH平衡的公式。
根据官方的描述,从ibETH合同的totalETH函数获得的值可以被用户操纵。以下是官方文本:
根据官方的描述,用户可以通过ibETH合约的功函数来控制totalETH函数返回的值,从而导致rari整体价值计算公式的崩溃。分别分析了ibETH的功函数和总函数
TotalETH函数:
工作职能:
以上是ibETH合同中totalETH功能和work功能的部分实现。不难发现totalETH函数实际上是获取合同的ETH总数。work函数本身是一个payable函数,即用户可以通过work函数控制ibETH合同中ETH的个数,从而改变totalETH返回的值。更糟糕的是,work函数还支持调用其他任意契约。那么整个想法就很清楚了。
攻击过程
1dydx提供的快速贷款,提供大量ETH贷款;
2当ETH的一部分用于补充rari资本合同时,从ibETH获得的比率仍然是正常的;
3使用剩余的ETH充值到ibETH合同中,调用ibETH合同的工作函数,准备推高ibETH合同的TOTALLETH返回值;
4在工作功能中,同时为rari资本合同启动现金提取。因为totalETH的值在上一步中被推高,但是totalETH()/totalsupp()的计算值相对于充值时间被拉高,所以攻击者可以通过使用相同数量的rept从rari capital获得更多的ETS。
总结
在这种分析中,主要原因是协议的不兼容性。攻击者通过闪贷、再入等手段对瑞利资本进行攻击,造成巨大损失。slow fog安全团队建议,在DeFi日益复杂的情况下,在DeFi项目之间的交互中要做好协议之间的兼容性,避免协议兼容性问题造成的损失。
[参考链接]
rari资本官方分析:
https://medium.com/rari-capital/5-8-2021-rari-ETHereum-pool-post-mortem-60aab6a6f8f9
攻击事务(其中之一)
https://ETHerscan.io/tx/0x171072422efb5cd461546bfe98比特币d9b5aa427ff1c07ebe8acc064b13a7b7be
文章标题:rari被攻击的原因分析
文章链接:https://www.btchangqing.cn/254339.html
更新时间:2021年05月10日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。