3、经典案例:bZx攻击(2020年2月):攻击流程详解、漏洞分析(Uniswap + Kyber 价格差异)、教训与反思

3.1 背景:DeFi 世界的第一次“核爆”

2020年2月,bZx 协议被攻击。这是 DeFi 历史上第一次大规模闪电贷攻击。

说实话,当时整个圈子都懵了。大家第一次意识到:原来不用本金,也能撬动百万美元级别的攻击。

bZx 是一个去中心化保证金交易平台。用户可以通过它做多或做空资产。攻击者利用了 Uniswap 和 Kyber 之间的价格差异,配合闪电贷,完成了一次教科书级的套利攻击。

核心数据:

  • 攻击获利:约 35 万美元(当时价值)
  • 攻击成本:几乎为零(仅支付 Gas 费)
  • 影响范围:bZx 协议暂停,用户资金被冻结数日

3.2 攻击流程详解:四步走

我当年复盘这个案例时,画了一张流程图。现在我把核心逻辑拆解给你看。

步骤1:闪电贷 从 dYdX 借出 10,000 ETH 步骤2:做空 ETH 在 bZx 存入 5,500 ETH 做空 1 WBTC 步骤3:价格操纵 在 Uniswap 卖出 大量 ETH 压低 WBTC 价格 步骤4:套利平仓 在 Kyber 低价买入 WBTC 归还闪电贷,获利离场 关键:价格差异 Uniswap WBTC 价格被压低 Kyber 价格未受影响 获利 ~35 万美元

嗯,这张图应该能帮你理清脉络。下面我详细拆解每一步。

第一步:借入闪电贷

攻击者从 dYdX 闪电贷借出 10,000 ETH。注意,这里没有抵押物,全靠“借了马上还”的机制。

第二步:在 bZx 做空

攻击者将 5,500 ETH 存入 bZx 作为抵押,然后做空 1 WBTC。bZx 的做空机制是:协议从 Kyber 借入 WBTC 并卖出,获得 ETH。

这里有个细节:bZx 当时使用的是 Kyber 的价格作为参考。但攻击者知道,Kyber 的价格是聚合的,不容易被单笔交易影响。

第三步:操纵 Uniswap 价格

攻击者将剩余的 4,500 ETH 在 Uniswap 上大量卖出,换取 WBTC。这一操作直接把 Uniswap 的 WBTC/ETH 价格打了下来。

说白了,就是让 Uniswap 上的 WBTC 变得“便宜”了。

第四步:套利平仓

攻击者回到 bZx,用低价从 Uniswap 买来的 WBTC 平仓。bZx 按照 Kyber 的高价结算,攻击者赚取了差价。

最后,攻击者归还闪电贷,净赚约 35 万美元。

我的经验: 这个攻击最精妙的地方在于,攻击者没有用自己的钱。所有资金都是借来的,攻击完成后全部归还。这就是闪电贷的威力——也是它的危险所在。

3.3 漏洞分析:Uniswap + Kyber 价格差异

为什么这个攻击能成功?核心原因只有一个:价格预言机被操纵了

bZx 在做空时,使用了 Kyber 的价格作为参考。但攻击者通过 Uniswap 操纵了 WBTC 的市场价格。两个价格出现了巨大偏差:

价格来源 WBTC/ETH 价格 说明
Uniswap(被操纵后) 约 1 WBTC = 4,500 ETH 攻击者大量卖出 ETH 压低价格
Kyber(正常) 约 1 WBTC = 5,500 ETH 聚合价格,未被影响
差价 约 1,000 ETH 攻击者赚取的就是这个差价

你想想看,bZx 在做空时,从 Kyber 借入 WBTC 并卖出,获得了 5,500 ETH。但攻击者平仓时,只需要从 Uniswap 花 4,500 ETH 就能买回 1 WBTC。一来一回,净赚 1,000 ETH。

注意: 这不是 Kyber 或 Uniswap 的漏洞。这是 bZx 协议设计的问题——它不应该依赖单一价格来源,尤其是在做空这种高杠杆场景下。

3.4 教训与反思

这个案例给我最大的触动是:DeFi 协议的安全,不能只靠“看起来没问题”

bZx 的代码在攻击前已经经过审计。但审计公司没有发现这个价格操纵的风险。为什么?因为审计师通常只检查代码逻辑,不测试“组合攻击”场景。

我总结了几条核心教训:

  • 价格预言机必须去中心化: 使用单一价格来源(哪怕是聚合器)在高杠杆场景下是危险的。建议使用 TWAP(时间加权平均价格)或 Chainlink 等去中心化预言机。
  • 闪电贷是双刃剑: 闪电贷本身不是漏洞,但它放大了价格操纵的风险。协议必须假设攻击者可以借到无限资金。
  • 组合攻击测试不可少: 我建议在审计时,专门测试“如果攻击者同时操作多个协议,会发生什么”。
  • 暂停机制很重要: bZx 在攻击发生后及时暂停了协议,避免了更大损失。这是他们做得对的地方。

避坑指南: 我曾经审计过一个类似的项目,他们用了 Uniswap 的即时价格作为清算依据。我直接告诉他们:如果攻击者用闪电贷操纵价格,你的清算机制会变成提款机。后来他们改用了 Chainlink 的喂价。

3.5 后续影响

bZx 攻击之后,整个 DeFi 行业开始重视闪电贷攻击。很多协议都加上了“闪电贷保护”机制。

但说实话,这只是一个开始。2020 年 2 月之后,闪电贷攻击变得越来越频繁,手法也越来越复杂。

嗯,这个案例告诉我们:在 DeFi 世界里,没有“绝对安全”。只有不断学习、不断改进,才能跟上攻击者的步伐。

我的建议: 如果你在开发 DeFi 协议,一定要把“闪电贷攻击”作为默认威胁模型。假设攻击者可以借到无限资金,然后问自己:我的协议还能撑住吗?

专注资料整理