Balancer因通缩代币STA遭遇闪电贷攻击,价值50万美圆资产被黑

来源 | 巴比特资讯php

封图 | CSDN 下载自视觉中国 
gulp

写在前面:北京时间6月29日,知名defi项目Balancer的两个资产池遭遇闪电贷攻击,价值50万美圆的代币被攻击者抽走,对此,defi服务商1inch及Balancer项目方相继对攻击事件进行了复盘。此外,Balancer联合创始人兼CTO Mike McDonald还提醒称,任何恶意的ERC20代币都有可能被添加到Balancer合约层,所以须要注意这种未知的风险,根据此前的计划,Balancer很快将进行第三次安全审计。安全

今天,至少有两个Balancer多币资产池遭到闪电贷攻击,致使价值50万美圆的资产被耗尽,缘由是AMM(自动化作市商)和通缩代币模型环境形成的漏洞。框架

Balancer池是相似Uniswap的自动作市商(AMM),其包含了多种资产,并经过特殊数学公式造成价格,为交换任何资产创造套利机会。机器学习

据defi服务商1inch分析,攻击者向以太坊主网发送了一笔复杂的交易,致使对其中一个Balancer资产池发起攻击,几分钟后,其发起了第二笔交易,并耗尽了另外一个Balancer资产池,如下是1inch编写的分析报告:ide

  1. 攻击者使用智能合约在单笔交易中自动执行多个操做。在第一步,攻击者经过闪电贷从dYdX得到10.4万 WETH,这些资金被用于将WETH与STA 代币来回交换24次,从而将STA余额从Balancer池中抽走,而后池中资产变成了1 weiSTA(0.000000000001 STA)。函数

  2. 形成这个问题的缘由在于,Balancer资产池合约跟踪合约中的代币余额,而STA代币有一个通缩模型,从接收方收取1%的传输费,从而致使transfer()和 transferFrom() 的错误行为。所以,每当攻击者将WETH交换到STA时,Balancer池收到的STA就比预期的少1%。工具

  3. 而后下一步,攻击者屡次将1 weiSTA换成WETH,因为STA代币传输费的实施,资产池中从未收到STA,但它却释放了WETH。重复相同的步骤,攻击者就从Balancer资产池中抽走了WBTC、SNX以及LINK代币余额。学习

  4. 而最后一步,攻击者向dYdX偿还了10.4万WETH,攻击者经过存入一些weiSTA迅速增长其在Balancer 池中的份额,而后,他经过Uniswap V2将收集的Balancer池代币交换成13.6万STA,而后再次将13.6万STA交换成109 WETH 。spa

  5. 全部被盗资金都被转移到如下地址:0xbf675c80540111a310b06e1482f9127ef4e7469a;

1inch总结称:此次攻击的幕后黑手,是一位很是老练的智能合约工程师,他对领先的DeFi协议有着普遍的知识和理解。 显然,此次攻击是有着充分计划的,此外,他还用Tornado Cash来得到初始资金,用于部署智能合约和执行攻击,从而隐藏了ETH的来源。

Balancer项目方的分析与反应

在攻击发生后,Balancer项目方也进行了分析:

  1. 经过闪电贷从dYdX借出ETH并转换为WETH;

  2. 不断交易 WETH & STA;

  3. 在每笔交易中,STA都有一笔转移费,而资产池但愿它在没有这笔费用的状况下得到余额;

  4. 通过足够的调用后,攻击者调用gulp(),该函数将代币余额的内部池记账同步到代币跟踪器合约中存储的实际余额;

  5. 因为STA的余额接近于零,所以它相对于其余代币的价格很是高,攻击者如今可使用STA,以极低的成本交换池中的其余资产;

对此,Balancer联合创始人兼CTO Mike McDonald在博客中写道:

“尽管事先咱们并不知道这种特定类型的攻击是可能的,但咱们在文档、discord及其余渠道中始终警告ERC-20与传输费可能在协议中产生的意外影响。这就是为何STA不包含在最近汇总的BAL 挖矿白名单中的缘由。

该系统是为符合ERC20标准而设计的,当代币表现出意外的行为时,可能会发生不良状况。Balancer是一种无需许可的协议,始终能够在合约层添加损坏或恶意的代币。

至于下一步,咱们将开始向UI黑名单中添加传输费代币,相似于咱们对无bool转移代币所作的同样。请注意,这些列表并不详尽,任何新代币均可以随时添加到Balancer。

咱们将添加更多文档,说明这些资产池如何工做,以及存在漏洞或恶意设计的代币可能如何从资产池中耗尽资产的风险。

Balancer已通过2次全面审核,而且已经制定了第三次审核计划(在今天以前),此次审核很快将开始。咱们将继续审核和审查Balancer协议。

推荐阅读

真香,朕在看了!