Compound DAI 预言机操纵攻击(2020)

咪发zsh 发布于 2026-08-02 阅读 30

Compound DAI 预言机操纵攻击:底层逻辑、攻击链条与修复方案

2020 年 11 月 26 日发生的 Compound DAI 预言机操纵事件是 DeFi 历史上最经典的“价格预言机攻击”案例之一。 这次事件导致 Compound 上价值超过 8500 万至 1 亿美元 的用户资产惨遭强制清算。与传统的合约代码漏洞(如重入攻击)不同,本事件的合约代码没有任何 Bug,问题完全出在预言机架构的机制设计缺陷上。

Compound的预言机架构

• Compound 借贷协议依赖中心化交易所Coinbase Pro 的 API。Coinbase 会用自己的私钥对 DAI/USD 的实时价格进行签名,任何人都拿这个签名去链上更新 Compound 的预言机。 • 为了防止 Coinbase 价格被操纵,Compound 引入了 Uniswap v2 的 TWAP(时间加权平均价) 作为“锚定价格”。 • 系统规定,Coinbase 报出的价格与 Uniswap TWAP 锚定价之间的偏差不能超过 20%。如果在此范围内,预言机就会采信 Coinbase 的最新价格。

TWAP(时间加权平均价)

TWAP(时间加权平均价)是为了防范“单区块瞬时价格操纵”,选取一段时间内的平均价格作为数据源。

为什么引入了 TWAP 后,依然可能被价格操纵?

TWAP 并没有从根本上杜绝价格操纵,它只是拉高了操纵价格的“资金成本和时间成本”。如时间窗口只设置30分钟,攻击者只需要控制30分钟,还是可以操纵价格,收益远大于成本。 在Compound DAI案例中,规定TWAP 偏差不能超过 20%,但攻击者在Coinbase上把DAI的价格拉高到$1.34,能够满足20%偏差限制的区间,并且高价维持了近45分钟,在次期间也有套利者不断买卖DAI,导致DAI价格无法短时间内下降。

Coinbase交易所

Coinbase交易所是传统的订单簿CEX,有人挂单卖才能买,反过来有人买才能卖,由于Coinbase订单数量较少,攻击者只需要较少的资金就可以操纵交易所的DAI 价格上涨。

Compound正常流程

存款人(Supplier)

  1. 存入ETH或USDC
  2. 获得cToken(计息凭证)
  3. 根据区块高度(时间)和拐点(资金池利用率)计算利息
  4. 销毁cToken,提取本金+存款利息

借款人(Borrower)

  1. 存入ETH或USDC作为抵押物
  2. 按 75% 抵押率借出 DAI (超额抵押)
  3. 根据区块高度(时间)和拐点(资金池利用率)计算利息
  4. 偿还 DAI + 利息,赎回ETH抵押物

攻击过程拆解

  1. 攻击者利用资金买入大量的DAI,导致DAI的价格在Coinbase交易所短时间内上涨,从正常价格1美刀拉高到了1.34美刀
  2. Coinbase交易所按照正常程序,对拉升后的价格(1.33美刀)进行链下私钥签名
  3. Compound的预言机从Coinbase交易所获取私钥签名,拿到虚高的DAI价格,并返回给Compound借贷协议
  4. Compound获取到虚高的DAI价格后,导致借款债务总价值上涨,那些用抵押物借出DAI的用户,负债率大幅度增加
  5. 清算机器人实时监控获取DAI价格,并通过健康度计算公式:抵押物价值/借款债务总价值,得出健康度≤1,大批借款人到达清算线(健康度≤1会执行清算)
  6. 此时触发大规模清算,清算机器人调用清算函数,把借款人的抵押物打折售卖,清算机器人则自动偿还借贷人债务(比如:1000美刀),Compound再根据清算奖励,连带借款人的抵押物一并返给清算机器人(如:1100美刀),净赚100美刀 

攻击触发原因

依赖单一数据源:Compound的预言机只依赖于Coinbase交易所的数据源,只要Coinbase交易所的价格被短期拉高,预言机就会无条件信任。 • 低流动性市场的易操作性:DAI在Coinbase交易所流动性较低,攻击者只需要较少的资金就可以操纵交易所的DAI价格。 • 锚定阈值与防刷机制太钝化:20%的偏差容忍度给价格操纵留出了巨大的获利空间;同时,TWAP在面对持续高强度的买卖DAI时,无法及时起到止血作用。

最终修复方案

设置稳定币价格上限

给 DAI 等软锚定稳定币设定了硬性价格上限(Upper Bound)(例如限制 DAI 在清算与债务计算时的最高价格不得超过1.05美刀,甚至在后续协议中硬锚定为1.00美刀)

Chainlink去中心化预言机网络

不依赖于单一的交易所数据源,而是利用多个节点从不同的交易所获取数据源,聚合不同交易所的数据源,去除极值(价格最低、最高),再从中获取平均值并存到链上,预言机通过链上获取价格。

升级熔断与锚定机制

缩小偏差容忍度(Tolerance):将预言机允许的现货价格与 TWAP 锚定价格之间的偏差区间大幅缩窄(从原先宽泛的 20% 缩减至更严格的区间)。 引入动态熔断(Circuit Breaker):如果预言机检测到某代币价格在极短时间内发生剧烈偏离,系统直接暂停该资产的清算或借贷功能,为社区治理和人工干预争取响应时间,而不是任由机器人自动清算。

相关文章

0 条评论