两次攻击的核心都在于控制预言机价格,并通过操纵预言机价格获利。
本文作者:yudan@慢雾安全团队
今早,bZx 疑似遭遇第二次攻击,不同的是本次的对象是 ETH/sUSD 交易对,但也许有人会有疑问, sUSD 不是对标 USD 的稳定币吗?这都能被攻击?攻击手法具体是怎样的?带着这样的疑问,针对此次事件,慢雾安全团队接下来将剖析此次攻击过程。
在第一次攻击中,攻击者结合 Flash loan 和 Compound 中的贷款,对 bZx 实施攻击,主要分成以下几步:
此次攻击与之前稍有不同,但核心都在于控制预言机价格,并通过操纵预言机价格获利。
注: 下文中出现的 WETH 是 ETH 的 token 化代币,可统一认为是 ETH。与 ETH 之间的兑换比例是 1:1
本次发生攻击的交易哈希为
0x762881b07feb63c436dee38edd4ff1f7a74c33091e534af56c9f7d49b5ecac15
通过 etherscan 上的分析,我们看到这笔交易中发生了大量的 token 转账
这么多转账交易中,攻击者一共购买了 20 次 sUSD, 最终获利离场,那么攻击者具体是怎么操作的呢?我们使用区块浏览器 bloxy.info 来做进一步分析。
和第一次一样,首先攻击者需要从 Flash loan 借入一定的金额开始本次的攻击,第一次攻击是从 dydx 借入 10000 ETH,这次,攻击者选择从 bZx 本身支持的 Flash loan 下手,借入 7500个 ETH。
在完成从 bZx 的借入之后,攻击者开始通过 Kyber 进行 sUSD 的买入操作,第一次使用了 540 个 ETH 购买了 92,419.7 个 sUSD, 这个操作令 WETH/sUSD 的价格瞬间拉低,捧高了 sUSD 的价格。这次的交易兑换的比例大概为 1:170,而 Kyber 最终是通过 UniSwap 来进行兑换的,所以此时 Uniswap 的 WETH/sUSD 处于低位,反过来,sUSD/WETH 升高。
在完成第一次的 540 个ETH的兑换之后,攻击者再次在 Kyber 进行 18 次小额度的兑换,每次使用 20 个 ETH 兑换 sUSD,从 etherscan 我们能够看到,每一次的兑换回来的 sUSD 金额在不断减少。
这表明 sUSD/WETH 的价格被进一步拉升,这加剧了 Uniswap 中 sUSD/WETH 的价格,此时价格已经达到顶峰了,大概是 1:157
在完成以上两步操作之后,攻击者已经完成狩猎前的准备,随时可以开始攻击
在完成对 sUSD/WETH 的拉升后,攻击者此时需要采集大量的 sUSD,为后续兑换 WETH 做准备。为了达成这个目的,攻击者向 Synthix 发起 sUSD 的购买,通过向 Synthix 发送 6000 ETH 购买 sUSD, 直接把 Synthix 中的 sUSD 买空,Synthix 合约返还 2482 个 ETH 给攻击者。 1
完成了上面的操作后,攻击者直接对 bZx 发动总攻,直接用之前操作得来的一共 1,099,841 个 sUSD 向 bZx 兑换 WETH, 此时由于 bZx 兑换还是要去查询 Uniswap 的 sUSD/WETH 的价格,而这个价格已经被攻击者人为拉得很高了,此时兑换,就能通过 1,099,841 个 sUSD 换取大量的 WETH, 此次交易一共用 1,099,841 个 sUSD 换取了 6792 个 WETH。此时攻击已经完成。
完成了对 bZx 的攻击之后,将 7500 ETH 归还给 bZx, 完成闪电贷流程,从 bZx 来,再回到 bZx 去,还使 bZx 遭受了损失。
通过分析攻击者的攻击手法,我们统计下攻击者在攻击过程中的支出和收入情况
7500 => bZx 闪电贷
+
2482 => Synthetix 返还
+
6792 => 使用 sUSD 在 bZX 兑换 WETH
=
16774 ETH
540 + (20*18) => 拉高 sUSD/WETH 价格
+
6000 => 买空sUSD
+
7500 => 归还bZx闪电贷
=
14400 ETH
总的收益为: 16774 - 14400 = 2374 ETH
两次攻击的主要原因还是因为 Uniswap 的价格的剧烈变化最终导致资产的损失,这本该是正常的市场行为,但是通过恶意操纵市场,攻击者可通过多种方式压低价格,使项目方造成损失。针对这种通过操纵市场进行获利的攻击,慢雾安全团队给出如下建议:
项目方在使用预言机获取外部价格的时候,应设置保险机制,每一次在进行代币兑换时,都应保存当前交易对的兑换价格,并与上一次保存的兑换价格进行对比,如果波动过大,应及时暂停交易。防止市场被恶意操纵,带来损失。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!