JavaScript 不可用。

我们检测到浏览器禁用了 JavaScript。请启用 JavaScript 或改用支持的浏览器来继续访问

bZx 智能合约被黑客利用闪电贷攻击 [预言机攻击]

作者:Anban Chu

发表日期:2020年02月29日

所属目录:黑客攻击

攻击描述

合约描述

资产流转明细

索引 动作 资金 说明
1 dYdX 借钱 10,000 ETH —-
2 Compound 存钱 5,500 ETH
3 Compound 借钱 112 WBTC
4 Kyber Swap 5,637 ETH 换到 51.34 WBTC
5 dYdX 还钱 Repay 10,000

该攻击可以分成 5 个不同的步骤:

  1. 闪电贷借以太币 (Flashloan Borrow)
  2. 以太币换 WBTC (Hoard)
  3. Margin Pump
  4. Dump
  5. Flashloan Repay。

接下来,本文将逐一拆分每个步骤。

第一步: 闪电贷借以太币 (Flashloan Borrow)

该步利用闪电贷的特性从 dYdX 中借出 10,000 个 ETH。

第二步: 以太币换 WBTC (Hoard)

攻击者将 5, 500 个 ETH 存入 Compound 作为抵押品,并借出 112 个 WBTC。

该步是正常 Compound 操作,而这些 WBTC 为第 4 步做准备。

第三步: Margin Pump

该攻击者利用 bZx 的保证金交易功能做空 ETH,这有利于 WBTC (如 sETHWBTCx5)。

攻击者还存入 1,300 个 ETH,发起 bZx 保证金交易。保证金交易利用 KyberSwap 将借入的 5637.623762 个 ETH 换成 51.345576 个 WBTC。值得注意的是,做空 ETH 是借入的 5 倍。该互换实际上将 1 个 WBTC 的转化率提高到 109.8 个 WETH,大约是正常转化率的三倍。 具体来说,为了完成这一交易,bZx 将订单转发给 KyberSwap, KyberSwap 随后会查询其外汇储备并找到最佳汇率。这一步骤实质上使 Uniswap 中的 WBTC 价格上涨了三倍

需要注意的是,内置的完整性检查应该阻止该步骤的行为,因为这个检查会验证头寸在交换之后不会变成默认值。然而,当攻击发生时,这个检查并没有生效,稍后我们将在之智能合约 bug 部分检查详细信息。

在这一步之后,我们注意到攻击者控制的资产发生了以下变化。然而,这一步之后仍然没有产生收益。

第四步: Dump

随着 Uniswap 中 WBTC 的价格飙升,攻击者以 Uniswap 中的价格将借来的 112 WBTC 抛售。

该步骤将获得 6871.4127388702245 个 ETH 的回报,总的转化率为 1WBTC = 61.4WETH。

第五步: Flashloan Repay

利用 112 个 WBTC 转换的 6871.4127388702245 个 ETH,攻击者将归还 10,000 个 ETH 的 dYdX 闪电贷。 在此步骤后,我们重新计算资产明细。结果表明,攻击者获得了 71 个 ETH 的套利,再加上两个头寸,一个是 Compound (+5,500WETH/-112WBTC),另一个是 bZx (-4,337WETH/+51WBTC)。当 bZx 头寸处于默认状态时,Compound 头寸是非常有利可图的。显然,在攻击之后,攻击者马上开始安排支付 Compound 债务,归还 112WBTC 换回 5,500weth 抵押品。对于 bZx 头寸,因为它已经处于默认状态,所以攻击者没有表现出进一步的兴趣。

考虑到 1WBTC=38.5WETH (或 1WETH=0.025BTC) 的平均市场价格,攻击者可以用 4,300 个 ETH 兑换 112 个 WBTC。其结果是,加上之前的 71.4 个 ETH,攻击者大约获利 1,271 个 ETH,大约获利 355,880 美元(当时 ETH 价格约为 280 美金)。

攻击过程技术分析

相关连接





以上就是本篇文章的全部内容了,希望对你有帮助。

>> 本站不提供评论服务,技术交流请在 Twitter 上找我 @anbang_account