Files
nexus/wiki/concepts/Oracle-Manipulation.md

80 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Oracle Manipulation"
type: concept
tags: [smart-contract, vulnerability, defi, oracle, flash-loan]
sources: [blockchain-security-auditor]
last_updated: 2026-04-25
---
## 中文定义
**预言机操纵Oracle Manipulation**:攻击者利用 DeFi 协议对价格预言机输入的信任通过在单笔交易内通常借助闪电贷操纵市场价格从而在借贷、清算、DEX 交易等场景中获取非法收益的攻击类型。
## 问题描述
许多 DeFi 协议依赖链上价格预言机(直接从 AMM 池获取价格)来计算抵押品价值、清算阈值、交易价格等关键参数。由于 AMM 的"即时价格"可以被单笔交易内的操作所操纵,攻击者可以在无需长期持仓的情况下:
1. 在操纵价格时执行借贷/清算获取超额资产
2. 在价格恢复后平仓获利
## 操纵模式
### 1. AMM 即时价格操纵Spot Price Manipulation
```solidity
// 有漏洞的代码:使用 AMM 即时储备计算价格
(uint112 reserve0, uint112 reserve1,) = pair.getReserves();
uint256 price = (uint256(reserve1) * 1e18) / reserve0;
// 攻击者在同一笔交易中先Swap大量代币改变储备再执行借贷
```
**攻击步骤**
1. Flash Loan 借入资产 A
2. 在 DEX 中用资产 A 兑换资产 B推动 B 的价格)
3. 操纵后的价格被借贷协议读取,攻击者以虚高抵押品价值借款
4. 归还 Flash Loan
5. 偿还部分借款,保留利润
### 2. 时间加权平均价格TWAP操纵
Uniswap V3 的 TWAP 预言机理论上比即时价格更安全,但仍可在以下条件下被操纵:
- 操纵成本 < 攻击收益
- 资金池流动性不足(攻击成本低)
- TWAP 时间窗口过短
### 3. Chainlink 聚合价格操纵
Chainlink 的去中心化价格源在极端市场条件下(如流动性枯竭)可能出现价格偏差:
- 预言机更新延迟
- 小币种流动性不足导致聚合价格失真
- Chainlink 的 `staleness` 检查缺失或配置不当
## 防御机制
### TWAPTime-Weighted Average Price
```solidity
// Uniswap V3 的 TWAP使用历史时间加权平均而非即时价格
(uint256 price, ) = OracleLibrary.getQuoteAtTick(
currentTick,
1000000, // 1 AMM token
token0,
token1
);
```
### Chainlink 预言机 + 合法性验证
```solidity
(, int256 price, , uint256 updatedAt, ) = priceFeed.latestRoundData();
require(price > 0, "Invalid price");
require(updatedAt > block.timestamp - MAX_STALENESS, "Stale price");
require(answeredInRound >= roundId, "Incomplete round");
```
### Chainlink Off-Chain 监控
设置价格异常波动告警,在 TWAP 偏离超过阈值时暂停协议。
## 关键案例
- [[Euler-Finance]]donate-to-reserves 攻击结合了预言机操纵(虽然主要是内部会计逻辑漏洞)
- [[blockchain-security-auditor]] 的 Source Page 示例代码:展示了完整的有漏洞的借贷合约和修复方案
## 关联概念
- [[Flash-Loan-Attack]]:预言机操纵几乎总是借助闪电贷实现(单笔交易内完成借贷和操纵)
- [[Reentrancy]]:两者常被组合使用(操纵价格 + 重入执行操作)
- Uniswap V2 / V3主要 AMM 平台,也是大多数预言机操纵攻击的目标