http://www.7klian.com

PeckShield:Balancer 遭到黑客进攻全进程技能理会

PeckShield 安详人员参与阐明后,迅速定位到问题的本质在于,,Balancer 上的通缩型代币和其智能合约在某些特定场景不兼容,使得进攻者可以建设价值毛病的 STA/STONK 畅通池并从中赢利。

原文标题:《PeckShield:DeFi 平台 Balancer 遭黑客进攻全进程技能拆解》

第四步:送还闪电贷  

假如问该奈何才气规避这类进攻事件的产生呢?或者有两个优化调解思路:1)STA/STONK 在执行 transfer() 或 transferFrom() 时,当转账数额不敷以付出手续费时,应该直接回滚可能返回 False;2)Balancer 应该在每一次 transferFrom() 函数挪用后查抄 BPool 的余额。
接下来的篇幅中,我们将慢慢理会黑客在该笔闪电贷生意业务中实施的进攻行为。

发起

1)进攻者通过闪电贷从 dYdX 平台借出了 104,331 个 WETH;
2)进攻者重复执行 swapexactMountin() 挪用,直至 Balancer 拥有的大部门 STA 代币被耗损殆尽,进而开始下一步进攻。最终 Balancer 仅仅剩余 0.000000000000000001 个 STA。

(图解黑客进攻全流程)  

此次进攻事件再次袒露了 DeFi 可组合性存在的兼容性风险。此前不久,Uniswap 和 Lendf.Me 两个平台就因和 ERC777 尺度的兼容性问题,发生了很是严重的黑客进攻事 件。需要警觉的是,在将来 DeFi 行业雷同的黑客进攻行为或者会多如牛毛。

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

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

第一步:闪电贷

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

  (第三步:进攻赢利图示下)  

承上所述,进攻者通过 swapExactAmountIn() 函数将 0.000000000000000001 STA 发送到 BPool,以极高的代价差,当即兑换出了 30,347 个 WETH,实现了赢利。而此时,BPool 的内部记账机制 _records[STA] 在 BPool 真正收到 0.000000000000000001 STA 之前先加了 1(注:从此进攻者会用 gulp() 对该数值举办重置)。

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

  (第三步 :进攻赢利图示上)  

Balancer 遭黑客进攻全进程技能拆解

原文来历:PeckShield 

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

后续

接下来是最有趣的一部门,进攻者挪用 gulp() 不绝重置 _records[STA],使得 BPool 中始终保持 0.000000000000000001 个 STA。因此进攻者可以用极高价的 0.000000000000000001 个 STA 将畅通池中的 WETH、SNX、LINK 等其他资产耗损光。

第三步:进攻赢利
由于 Balancer 资金池(BPool)各资产间存在「动态均衡」道理,仅剩靠近于 0 的 STA 会拉高 STA 的代价,使得任何人都可以用 1 STA 换到大量的其他数字资产。
3)进攻者操作 STA 代币和 Balancer 智能合约存在的不兼容性即记账和余额的不匹配性实施进攻,将资金池中的其他资产耗尽,最终共计赢利代价 523,616.52 美元的数字资产。
颠末前两个筹备步调之后,进攻者是时候揭示真正技能了!

此次黑客实施进攻共计分了四个步调,详细而言:
第二步:清空 Balancer 的 STA 资产
从 dYdX 闪电贷 104,331 WETH,这部门熟悉 DeFi 借贷模式的读者应该都较量清楚,此处不再赘述。

进攻者通过多次 swapExactAmountIn() 挪用清空了 Balancer 的 STA 资产,为下一步实施进攻做筹备。值得一提的是,我们发明合约代码中每次可以或许兑换的资产数额其实有上限,然而调皮的进攻者预先计较了可兑换的 WETH 最大数额,并巧妙的让 Balancer 只剩了 0.000000000000000001 STA。

毫无疑问,Balancer 事件的产生势必也会对 DeFi 社区带来影响,并且这类工作接下来产生的大概性还会很大,在此提醒宽大 DeFi 项目开拓者应务必重视合约的安详问题。
虽然,任何安详事件过后采纳法子调停都无法补充已经发生的损失,我们相信最好的办理方案照往事前预防。DeFi 项目开拓者应尽大概操作好的代码类型,并可寻求第三方安详公司协助其在上线前举办全面的攻防测试,尽大概找出一切潜在的裂痕。最后,尽大概对 ERC20、ERC777 和其它 DeFi 项目标任何组合行为都做好周密排查。

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

相关文章阅读