北京时间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的TVL在6个月时间下滑67%:金色财经报道,在过去的125天或大约四个月中,去中心化金融 (DeFi) 的锁定总价值 (TVL) 一直在500亿美元到650亿美元之间。在过去六个月中,DeFi的TVL价值大幅缩水,从4月1日的1610亿美元跌至今天的517.2亿美元,跌幅超过67%。[2022/10/23 16:35:56]
3)攻击者利用 STA 代币和 Balancer 智能合约存在的不兼容性即记账和余额的不匹配性实施攻击,将资金池中的其他资产耗尽,最终共计获利价值 523,616.52 美元的数字资产。
4)攻击者 偿还从 dYdX 借出的闪电贷,并卷走了攻击所得的数字资产。
接下来的篇幅中,我们将逐步解析黑客在该笔闪电贷交易(http://oko.palkeo.com/0x013be97768b702fe8eccef1a40544d5ecb3c1961ad5f87fee4d16fdc08c78106/) 中实施的攻击行为。
Avalanche链上DeFi协议总锁仓量为108.5亿美元:金色财经报道,据DefiLlama数据显示,目前Avalanche链上DeFi协议总锁仓量为108.5亿美元,24小时增加1.62%。锁仓资产排名前五分别为AAVE(27亿美元)、TraderJoe(16.5亿美元)、Benqi(15.5亿美元)、Curve(11.6亿美元)、multichan(9.49亿美元)。[2022/1/11 8:40:05]
(图解黑客攻击全流程)
第一步:闪电贷
从 dYdX 闪电贷 104,331 WETH,这部分熟悉 DeFi 借贷模式的读者应该都比较清楚,此处不再赘述。
第二步:清空 Balancer 的 STA 资产
Messari前主管:目前正处于DeFi顶峰阶段,但实际的顶峰可能会是现在的两倍:2月6日消息,Messari前主管Qiao Wang发推称,“我不知道在目前的DeFi mini周期中,我们离顶端有多远,但是事情并没有像2020年8月下旬那样疯狂。如果当前的DeFi mini循环到此结束,那么这就是完美的顶峰,我确实认为我们正处于顶峰阶段,但实际的顶峰很可能会是现在的两倍。完全基于互联网泡沫,我不会感到惊讶,在当前加密货币周期的顶峰时期,顶级DeFi资产的价值将超过超过100B美元。”[2021/2/6 19:03:49]
攻击者通过多次 swapExactAmountIn() 调用清空了 Balancer 的 STA 资产,为下一步实施攻击做准备。值得一提的是,我们发现合约代码中每次能够兑换的资产数额其实有上限,然而狡猾的攻击者预先计算了可兑换的 WETH 最大数额,并巧妙的让 Balancer 只剩了 0.000000000000000001 STA。
CFTC主席:DeFi理念是革命性的,或降低系统性风险:金色财经报道,美国商品期货交易委员会(CFTC)主席Heath Tarbert周三在活动中讨论了以太坊、DeFi及BitMEX。Tarbert表示,DeFi的整个理念首先是革命性的,且他认为最终可能导致金融系统和传统参与者大规模的非中介化。最后,DeFi甚至可能在某种程度上降低系统性风险,因为我们没有将金融体系集中在这些全球性的、具有系统重要性的大型机构中。Tarbert预计这种转变不会立即发生,可能需要“数十年之久”。对于涉及DeFi项目或由DeFi项目发行的资产如何适用于证券或商品法,Tarbert没有给出明确的回答,指出这可能取决于数字合约的用途和代币的分配方式。对于针对BitMEX的执法行动,Tarbert表示:“我们希望创造一个环境,使数字资产交易的创新者可以在美国成长,他们可以到CFTC这样的地方获得许可证,他们可以从我们的监管制度中获益。我们不希望看到的是那些藐视美国法律的离岸交易所。”Tarbert称,CFTC有“义务”追踪不合规的交易所。当被问及该机构是否也在关注其他平台时,他回答说:“我觉得可能。”[2020/10/15]
由于 Balancer 资金池(BPool)各资产间存在“动态平衡”原理,仅剩接近于 0 的 STA 会拉高 STA 的价值,使得任何人都可以用 1 STA 换到大量的其他数字资产。
大多数Defi项目90%的代币被前500个地址所持有:根据DeFi Italy联合创始人、CryptoLab数字资产投资负责人Simone Conti的分析,大多数去中心化金融(DeFi)项目的代币供应并未广泛分发。他从Defi Pulse和Etherscan收集的数据表明,几乎所有Defi项目90%的代币都被前500个地址所持有。根据Conti分享的一份图表,在被调查的前10个项目中,Compound是“最集中的”(按锁定总价值衡量),在前50名持有者中,有几十人持有总供应量的96%。绝大多数DeFi项目的前五个地址拥有各自总供应量的40%以上。Bancor是唯一一个例外,但即便如此,Bancor前5名的地址也占据了33%的供应量。Simone Conti观察到,在最近的DeFi热潮之前诞生的项目,往往比后来启动的项目分布更广泛。(Cointelegraph)[2020/8/7]
第三步:攻击获利
经过前两个准备步骤之后,攻击者是时候展现真正技术了!
(第三步 :攻击获利图示上)
承上所述,攻击者通过 swapExactAmountIn() 函数将 0.000000000000000001 STA 发送到 BPool,以极高的价值差,立即兑换出了 30,347 个WETH,实现了获利。而此时,BPool 的内部记账机制 _records[STA] 在 BPool 真正收到 0.000000000000000001 STA 之前先加了 1(注:此后攻击者会用gulp()对该数值进行重置)。
(第三步:攻击获利图示下)
另外我们发现,在 swapExactAmountIn() 的底部,_pullUnderlying() 尝试从攻击者端收集相应消耗的 STA。然而,由于 STA 转账时还会烧掉 1% 的手续费,实际BPool 是收不到任何 STA 的。这样就使得 BPool 的实际 STA 余额和内部记账产生不匹配。
接下来是最有趣的一部分,攻击者调用 gulp() 不断重置 _records[STA],使得 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 美元的数字资产,详情列表如下:
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。