DeFi平台Balancer遭黑客攻击全过程技术拆解_DEFI:BasketDAO DeFi Index

北京时间06月29日凌晨02时03分起,最近因“借贷即挖矿”模式而备受关注DeFi平台Balancer上的STA和STONK两个ERC20通缩代币池遭到了黑客攻击,共计损失了超50万美元。

PeckShield?安全人员介入分析后,迅速定位到问题的本质在于,Balancer上的通缩型代币和其智能合约在某些特定场景不兼容,使得攻击者可以创建价格偏差的STA/STONK流通池并从中获利。

此次黑客实施攻击共计分了四个步骤,具体而言:

1)攻击者通过闪电贷从dYdX平台借出了104,331个WETH;

2)攻击者反复执行swapexactMountin()调用,直至Balancer拥有的大部分STA代币被消耗殆尽,进而开始下一步攻击。最终Balancer仅仅剩余0.000000000000000001个STA。

DeFi协议总锁仓量达728.9亿美元,24小时内涨1.11%:金色财经报道,据DefiLlama数据显示,DeFi协议总锁仓量(TVL)达到728.9亿美元,24小时内涨幅为1.11%。TVL排名前五分别为MakerDAO(75.5亿美元)、AAVE(60.1亿美元)、Curve(49.7亿美元)、Uniswap(48.6亿美元)、Lido(45.6亿美元)。[2022/7/3 1:47:46]

3)攻击者利用STA代币和Balancer智能合约存在的不兼容性即记账和余额的不匹配性实施攻击,将资金池中的其他资产耗尽,最终共计获利价值523,616.52美元的数字资产。

4)攻击者?偿还从dYdX借出的闪电贷,并卷走了攻击所得的数字资产。

接下来的篇幅中,我们将逐步解析黑客在该笔闪电贷交易(http://oko.palkeo.com/0x013be97768b702fe8eccef1a40544d5ecb3c1961ad5f87fee4d16fdc08c78106/)中实施的攻击行为。

数据:主流DeFi借贷协议过去24小时共清算超1270万美元:6月13日消息,据 Dune Analytics 的数据显示,主流 DeFi 借贷协议过去 24 小时共清算超 1270 万美元。其中 Aave 清算 451.6 万美元,Compond 清算 678.2 万美元,MakerDAO 清算 141.6 万美元。[2022/6/13 4:21:37]

Balancer遭黑客攻击全过程技术拆解

第一步:闪电贷

从dYdX闪电贷104,331WETH,这部分熟悉DeFi借贷模式的读者应该都比较清楚,此处不再赘述。

第二步:清空Balancer的STA资产

Avalanche链上DeFi协议总锁仓量为82.4亿美元:金色财经报道,据DefiLlama数据显示,目前Avalanche链上DeFi协议总锁仓量为82.4亿美元,24小时减少14.83%。锁仓资产排名前五分别为AAVE(22.5亿美元)、TraderJoe(11.7亿美元)、Benqi(10.2亿美元)、Curve(9.76亿美元)、multichan(8.12亿美元)。[2022/1/29 9:20:19]

攻击者通过多次swapExactAmountIn()调用清空了Balancer的STA资产,为下一步实施攻击做准备。值得一提的是,我们发现合约代码中每次能够兑换的资产数额其实有上限,然而狡猾的攻击者预先计算了可兑换的WETH最大数额,并巧妙的让Balancer只剩了?0.000000000000000001STA。

分析:DeFi面临安全性和价格稳定性等多重挑战:7月11日消息,就DeFi产品迅猛发展的现状,外媒分析认为,尽管DeFi有极大可能在未来继续强劲增长,但DeFi仍面临多重挑战。由于DeFi平台很难组织黑客入侵,DeFi安全性是一个亟待解决的问题。

此外,DeFi还需要确保奖励用尽时,平台能为用户提供足够的价值,毕竟DeFi实际上是一个利基市场,只有在主要加密货币市场稳定或看跌的情况下,其吸引力才能增长。(Cryptocurrency)[2020/7/11]

由于Balancer资金池各资产间存在“动态平衡”原理,仅剩接近于0的STA会拉高STA的价值,使得任何人都可以用1STA换到大量的其他数字资产。

第三步:攻击获利

经过前两个准备步骤之后,攻击者是时候展现真正技术了!

稳定币活动、DeFi Dapps活动等推动ETH网络转账费用不断升高:针对ETH交易费用过去几个月不断升高并出现了超过比特币交易费用的情况,加密货币评论员ANTóNIO MADEIRA

表示,数据显示稳定币尤其是USDT转账交易是耗费gas最多,流行的DeFi Dapps如Uniswap和Kyber Network消耗gas数量次之。当前以太坊的活跃供应量处于历史最高水平,Deribit上的ETH未平仓期权过去两个月增长315%达到1.58亿美元,这都表明人们对以太坊网络的兴趣增加。正是以上因素的合力,使得以太坊的转账gas费用不断增加。(Cointelegraph)[2020/6/24]

承上所述,攻击者通过swapExactAmountIn()函数将?0.000000000000000001STA发送到BPool,以极高的价值差,立即兑换出了30,347个WETH,实现了获利。而此时,BPool的内部记账机制?_records在BPool真正收到0.000000000000000001STA之前先加了1。

另外我们发现,在swapExactAmountIn()的底部,_pullUnderlying()尝试从攻击者端收集相应消耗的STA。然而,由于STA转账时还会烧掉1%的手续费,实际BPool是收不到任何STA的。这样就使得BPool的实际STA余额和内部记账产生不匹配。

接下来是最有趣的一部分,攻击者调用gulp()不断重置_records,使得BPool中始终保持0.000000000000000001个STA。因此攻击者可以用极高价的0.000000000000000001个STA将流通池中的WETH、SNX、LINK等其他资产消耗光。

第四步:偿还闪电贷

最终,如上图所示,攻击者偿还了从闪电贷借出的104,331个WETH。

建议

此次攻击事件再次暴露了DeFi可组合性存在的兼容性风险。此前不久,Uniswap和Lendf.Me两个平台就因和ERC777标准的兼容性问题,产生了非常严重的黑客攻击事?件。需要警醒的是,在未来DeFi行业类似的黑客攻击行为或许会屡见不鲜。

如果问该怎样才能规避这类攻击事件的发生呢?或许有两个优化调整思路:1)STA/STONK在执行transfer()或transferFrom()时,当转账数额不足以支付手续费时,应该直接回滚或者返回False;2)?Balancer应该在每一次transferFrom()函数调用后检查BPool的余额。

当然,任何安全事件事后采取措施补救都无法弥补已经产生的损失,我们相信最好的解决方案还是事前防备。DeFi项目开发者应尽可能利用好的代码规范,并可寻求第三方安全公司协助其在上线前进行全面的攻防测试,尽可能找出一切潜在的漏洞。最后,尽可能对ERC20、ERC777和其它DeFi项目的任何组合行为都做好周密排查。

后续

毫无疑问,Balancer事件的发生势必也会对DeFi社区带来影响,而且这类事情接下来发生的可能性还会很大,在此提醒广大DeFi项目开发者应务必重视合约的安全问题。

经我们统计发现,Balancer在此次攻击事件共计损失了523,616.52美元的数字资产,详情列表如下:

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

金智博客

[0:15ms0-8:384ms