DeFi中的预言机操纵:价格源如何成为攻击载体

  • zealynx
  • 发布于 3天前
  • 阅读 75

本文深入探讨了DeFi中的预言机操纵攻击,解释了攻击者如何利用闪电贷和自动做市商(AMM)进行操作,并列举了历史上的攻击案例。文章还介绍了推式、拉式和时间加权平均价格(TWAP)等安全的预言机模型,并提供了构建弹性预言机架构和审计的关键建议,包括使用混合架构、断路器和多重验证等。

区块链作为封闭的、确定性的状态机运行。从设计上讲,以太坊智能合约缺乏执行 HTTP 请求来查询真实世界数据(例如金融资产价格)的本地能力。

为了解决这种隔离问题,DeFi 协议依赖于预言机:即将链下数据注入区块链的桥梁。这些数据为贷款发放、清算和衍生品定价的业务逻辑提供支持。

这种外部依赖在生态系统中造成了一个关键的攻击向量。如果某个代理人为地改变了智能合约读取的价格 Feed,协议将基于错误的假设执行数学上正确的指令。直接结果是协议通过确定性套利导致资不抵债——而无需利用传统软件错误。


预言机操纵攻击如何运作

大多数预言机操纵攻击都利用了无抵押贷款(闪电贷)与自动化做市商(AMMs)的数学公式之间的原子交互。

闪电贷允许合约借用无限流动性,前提是本金和费用在同一以太坊虚拟机(EVM)交易中偿还。如果还款失败,交易将回滚,从而降低交易对手风险。这通过消除前期资本要求,使市场操纵民主化。

AMMs 使用恒定乘积公式 x⋅y=kx \cdot y = kx⋅y=k 来确定资产的现货价格。资产 AAA 的价格是储备比率 (y/xy / xy/x) 的函数。攻击通过一个直接的交易序列发生:

  1. 获取 — 攻击者通过闪电贷获取大量流动性。
  2. 失衡 — 资金被倾倒到一个低流动性的 AMM 池中,推高变量 xxx 并耗尽 yyy。目标资产的现货价格遭受即时人为扭曲。
  3. 利用 — 攻击者将人为抬高的资产作为抵押品存入依赖此特定 AMM 作为其价格预言机的借贷协议(受害者)中。
  4. 提取 — 协议按抬高的价格评估存款价值,允许攻击者借入远超其抵押品实际价值的真实、流动性强的资产。
  5. 关闭 — 攻击者使用部分提取的资金偿还闪电贷并关闭原子交易,使受害者协议留下坏账。

Oracle manipulation attack flow


历史上的架构缺陷

DeFi 攻击的历史揭示了持续的架构缺陷模式。下表总结了最具启发性的案例:

协议 年份 主要攻击向量 核心架构缺陷
bZx 2020 现货价格(闪电贷) 严格依赖单一 DEX 预言机(Kyber/Uniswap)计算现货价格。
Harvest 2020 虚拟价格(闪电贷) 信任 Curve Finance 池中稳定币比例的算法计算来为份额定价。
Beanstalk 2022 治理颠覆 通过闪电贷向 AMM 池注入资本,导致原子式获取 78% 的投票权,绕过了时间锁。
Mango 2022 交叉保证金(真实资本) 使用低流动性资产(MNGO)作为抵押品借入流动性资产。价格是通过自有资本抬高的,没有使用闪电贷。
Venus 2022 基础设施不同步 Chainlink 预言机在 LUNA 崩盘期间触发了 0.10 的断路器。真实市场跌至 0.01,但协议继续根据硬编码的价格进行借贷。
Bonq DAO 2023 参数注入 智能合约在 updatePrice 函数上缺少最大限制验证,允许任意注入估值数据。
KiloEx 2025 访问欺骗 Minimal Forwarder 合约中的一个缺陷允许绕过验证并向 setPrices 函数发送伪造签名。

每一个事件都表明了一个共同的主题:协议信任单一价格真相来源,而没有进行验证或回退。理解这些模式对于构建或审计智能合约的任何人来说都至关重要。

Historical oracle exploits timeline


安全的预言机模型

为了减轻预言机操纵风险,架构师必须根据协议的延迟要求选择合适的数据交付模型。

推送式预言机(例如 Chainlink)

在此模型中,自主节点定期或当偏差阈值超过预设百分比时,在链上发布价格数据。它对于低频借贷协议来说是稳定的,但会产生高昂的维护 gas 成本,并且在极端网络波动期间可能会滞后。

1// 推送式:Chainlink 价格 Feed
2(, int256 price, , uint256 updatedAt, ) = priceFeed.latestRoundData();
3require(block.timestamp - updatedAt < MAX_STALENESS, "Stale price");

拉取式预言机(例如 Pyth, RedStone)

专注于高频协议(如永续合约交易所),提供者签署链下价格更新。智能合约仅在用户提交交易时“拉取”此验证过的更新。这消除了闲置期间的 gas 消耗,并将延迟降低到区块级别。

1// 拉取式:价格随用户交易提交
2function executeSwap(bytes calldata priceUpdate) external {
3    pyth.updatePriceFeeds(priceUpdate);
4    int64 price = pyth.getPrice(feedId).price;
5    // 执行带验证价格的兑换
6}

时间加权平均价格(TWAP)

TWAP 模型(例如 Uniswap V3)通过在固定时间窗口(例如 30 分钟)内创建数学平均值来存档过去的交互。这否定了原子闪电贷的可行性,但使预言机成为一个滞后指标。在真实市场崩盘期间,协议可能无法及时清算抵押品。

要了解 TWAP 预言机在 Uniswap 版本中如何演变,请参阅我们对Uniswap V3 架构DeFi 中移动平均线的数学原理的深入研究。

预言机可提取价值(OEV)

预言机更新中的时间差异创造了由 MEV 机器人(内存池狙击)提取的套利窗口。新的架构通过专用订单流拍卖(OFAs)路由更新来内化此流程。获胜机器人支付的出价被重定向到协议的金库,保留了价值而不是资本流失。

Oracle model comparison


审计价格集成

你的实际下一步是根据深度防御原则审计协议的价格摄入例程。

不要依赖单一 AMM 交易对的现货价格。实施混合架构:将主要的去中心化拉取或推送预言机与次要的链上 TWAP 预言机作为备用方案结合起来。

添加算法断路器逻辑,该逻辑在检测到两个来源之间存在异常差异(>10%)或激活了极端硬编码限制时,立即暂停新的发行和借贷——而不冻结抵押品保护存款——直到估值稳定。

1function getValidatedPrice() internal view returns (uint256) {
2    uint256 primaryPrice = getPrimaryOraclePrice();
3    uint256 twapPrice = getTWAPPrice();
1uint256 deviation = calculateDeviation(primaryPrice, twapPrice);
2

3// 断路器:偏差超过 10% 时暂停
4require(deviation < 1000, "Price deviation circuit breaker");
5

6return primaryPrice;

}


1

2此外,在主网部署之前,使用静态分析工具和 SMT 求解器(例如 OVer 框架或 [Slither](https://github.com/crytic/slither))对经济逻辑进行形式验证。有关部署前验证的结构化方法,请查阅我们的**预审计清单**。
3

4### 预言机集成清单
5

6- 使用多个独立的价源(推送式 + TWAP 备用)
7- 在每次预言机读取时验证新鲜度
8- 为异常偏差实现断路器
9- 设置接受价格的合理界限(最小/最大)
10- 在模糊测试套件中通过**闪电贷攻击模拟**进行测试
11- 验证不同代币标准之间的十进制处理
12- 为治理控制的预言机更新添加时间锁
13- 在链上监控大的单区块价格波动
14

15如果你正在评估你的协议的预言机架构是否符合生产级标准,我们的**审计准备评估**将引导你完成 39 个 DeFi 垂直领域的结构化审查。
16

17---
18

19## 联系我们
20

21预言机安全是 DeFi 协议设计中风险最高的领域之一。一个配置错误的价格 Feed 可以在一笔交易中耗尽整个金库。
22

23在 Zealynx,我们专注于**智能合约安全审计**,在预言机集成、AMM 机制和**深度防御工作流**方面拥有深厚的专业知识。无论你是启动新的借贷协议还是升级你的预言机基础设施,我们都能帮助你在攻击者之前识别架构缺陷。
24

25**[请求安全审计 →](/quote)**
26

27---
28

29## 常见问题:预言机操纵与 DeFi 安全
30

31<details>
32<summary><strong>1. 区块链中的预言机是什么,为什么智能合约需要它?</strong></summary>
33

34预言机是一种服务,它将外部数据——例如资产价格、利率或事件结果——输入到区块链中。智能合约是确定性和隔离的:它们无法进行 HTTP 请求或访问 API。没有预言机,借贷协议就无法知道 ETH 的当前价格,也无法计算借款人的抵押品是否充足。预言机弥合了这一差距,但这种依赖性创建了一个必须在架构层面加以保护的攻击面。
35</details>
36

37<details>
38<summary><strong>2. 闪电贷如何促成预言机操纵攻击?</strong></summary>
39

40闪电贷允许任何人借用零抵押的无限资本,只要贷款在单次交易中偿还。攻击者利用这些借来的资本在低流动性的 AMM 池上执行大规模交易,人为地扭曲池中储备报告的价格。然后他们利用读取此被操纵价格的受害者协议——例如,存入膨胀的资产作为抵押品以借入真实资产。如果任何步骤失败,整个交易都会回滚,攻击者除了 gas 费外一无所获,这使得这些攻击尝试起来风险为零。
41</details>
42

43<details>
44<summary><strong>3. 推送式和拉取式预言机有什么区别?</strong></summary>
45

46推送式预言机(如 Chainlink)有链下节点,它们定期或当价格偏离超过阈值时主动在链上发布价格更新。协议读取最新的链上值。拉取式预言机(如 Pyth 或 RedStone)将签名价格数据保持在链下,直到用户提交交易——价格更新随交易一起包含并在执行时在链上验证。拉取式模型更便宜(闲置期间不消耗 gas),并且延迟更低,使其适用于永续交易所等高频交易协议。
47</details>
48

49<details>
50<summary><strong>4. TWAP 预言机可以被操纵吗,它们有什么局限性?</strong></summary>
51

52TWAP(时间加权平均价格)预言机对单笔交易操纵具有抵抗力,因为它们在时间窗口(例如多区块跨度的 30 分钟)内平均价格。然而,它们可能被资金充足的攻击者操纵,攻击者在多个区块中维持虚假价格——这很昂贵但并非不可能。它们的主要局限性是延迟:在真实市场崩盘期间,TWAP 滞后于真实价格,可能延迟关键清算,并使协议面临坏账。
53</details>
54

55<details>
56<summary><strong>5. 预言机安全背景下的断路器是什么?</strong></summary>
57

58断路器是一种防御机制,当检测到异常价格行为时自动暂停协议操作——例如两个预言机来源之间价格偏差超过 10%,或单个区块内价格变化超过历史常态。它充当安全网:协议不是基于潜在被操纵的数据执行交易,而是停止新的借贷和发行,直到价格稳定。关键的是,设计良好的断路器不应冻结现有抵押品存款,因此用户仍能保护他们的头寸。
59</details>
60

61<details>
62<summary><strong>6. 协议在主网部署前应如何审计其预言机集成?</strong></summary>
63

64从混合预言机架构开始:将主要去中心化预言机(Chainlink 或 Pyth)与次要的链上 TWAP 作为备用结合起来。在每次读取时验证新鲜度,为异常偏差实现断路器,并设置接受价格的合理界限。在**模糊测试**套件中运行**闪电贷攻击模拟**。验证所有支持代币的十进制处理。使用像 Slither 这样的静态分析工具和 SMT 求解器对经济逻辑进行形式验证。最后,让独立的安全性团队审查集成——预言机缺陷是 DeFi 中最昂贵的错误之一。
65</details>
66

67---
68

69## 词汇表
70

71| 术语 | 定义 |
72|------|------------|
73| [预言机](/glossary/oracle) | 一种服务,向无法直接访问链下信息的智能合约提供外部数据(价格、事件、随机数)。 |
74| [闪电贷](/glossary/flash-loan) | 在单次交易中借入并偿还的无抵押贷款,常用于套利或攻击。 |
75| [自动化做市商](/glossary/automated-market-maker) | 一种协议,使用数学公式而非订单簿为流动性池中的资产定价。 |
76| [TWAP](/glossary/twap) | 时间加权平均价格——一种预言机模型,在时间窗口内平均价格以抵抗单次交易操纵。 |
77| [MEV](/glossary/mev) | 最大可提取价值——通过重新排序、插入或审查区块内的交易来提取的利润。 |
78| [断路器](/glossary/circuit-breaker) | 一种防御机制,当检测到异常价格行为时暂停操作。 |
79| [恒定乘积公式](/glossary/constant-product-formula) | Uniswap 和类似 DEX 使用的 AMM 定价模型 $x \cdot y = k$。 |
80| [价格预言机操纵](/glossary/price-oracle-manipulation) | 一种攻击,攻击者人为地扭曲价格预言机报告的价格,以利用依赖的协议。 |
81| [深度防御](/glossary/defense-in-depth) | 一种安全策略,使用多层防御,以便在一个防御失效时,其他防御仍能保护系统。 |
82

83*[查看完整词汇表 →](/glossary)*

>- 原文链接: [zealynx.io/blogs/oracle-...](https://www.zealynx.io/blogs/oracle-manipulation)
>- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zealynx
zealynx
江湖只有他的大名,没有他的介绍。