跳到正文

预言机攻击

预言机攻击利用可操纵、过时、缩放错误或配置错误的外部数据,使协议以不安全的数值借贷、铸造、赎回、结算或清算。

更新于

仅供教育参考,不构成投资建议;投资可能产生损失。

直接答案

预言机攻击利用协议的数据信任边界,让价格、汇率、指数、资产净值或状态输入触发经济上不安全的操作。攻击者可能操纵流动性薄弱的场所、攻破报告方或密钥、利用聚合或更新规则,也可能借助借入资金,利用消费方缺失的新鲜度、单位、范围和回退检查。即使预言机运营方没有恶意,过时或配置错误的数据源也可能造成同样损失,因此事件分析必须区分攻击路径与故障模式。

决定性比较并非显示价格是否剧烈波动,而是影响合约实际采用数值的成本与风险,是否低于借贷、铸造、赎回、结算或清算可提取的可执行价值。闪电流动性可以为原子路径融资,但它既不会制造有缺陷的信任边界,也不是利用漏洞的必要条件。

预言机数值也不一定是可执行市场价格。每次审查都必须将数值绑定到链、区块、数据源或池地址、基础与报价资产方向、小数位数、时间戳、聚合方式、市场规模及消费函数。有效签名只证明谁依某种方案报告了数据;它本身不证明数据新鲜、来源独立、市场深度充足或经济上正确。

运作方式

  1. 锁定部署:链、区块、消费合约与函数、资产合约、数据源代理或池、聚合器、基础与报价资产、小数位数、管理员和升级状态。
  2. 映射从交易所、池或报告方,经聚合、签名、代理或适配器、回退机制到消费逻辑的完整信任路径;记录共享的场所、运营方、密钥和治理,不能把不同标签直接当作独立来源。
  3. 精确复现链上读取:答案、轮次元数据、时间戳、适用的置信度或状态、小数归一化、报价方向反转、排序器状态与宽限期、最大数据年龄、偏差界限,以及零值或负值处理。
  4. 建立消费方敞口账本:抵押品系数、清算阈值、借贷与供应上限、可用流动性、债务、铸造或赎回限额、关闭因子、清算奖励,以及该数值可启用的所有操作。
  5. 按可执行规模模拟操纵,纳入储备、活跃流动性、观察值、窗口和加权约定、费用、套利、区块排序、闪电或自有资金、平仓损失、gas、MEV 及竞争清算方。
  6. 测试控制措施与故障状态:独立来源、TWAP 观察容量、限额、熔断器、暂停权限、时间锁、过时或偏离的回退数据、报告方或密钥丢失、L2 排序器停机、真实价格跳空,以及 fail-open 与 fail-closed 行为。
  7. 监控并核对 canonical 数据轮次、代理与配置变更、来源偏差、协议操作、清算、坏账、暂停和恢复决策;流动性、资产上线、升级或市场状态改变后重新分析。

现货 AMM 读数往往能在单笔交易内改变。时间加权平均要求跨观察值持续影响,可能提高攻击成本,但其安全性取决于具体算术或基于 tick 的约定、窗口、观察容量、流动性分布及区块控制。中位数能排除部分异常值,但上游场所相关或法定人数不足仍会损害安全性或活性。心跳和偏差设置决定某些数据源何时发布;消费方仍须制定自己的新鲜度与有效性政策。

计算示例

  • 恒定乘积现货。 忽略一个池的费用,其储备为 1,000,000 ABC1,000,000 USDC,因此 k = 10^12。目标边际价格 9 USDC/ABC 要求储备变为 3,000,000 USDC333,333.333333 ABC:交易者投入 2,000,000 USDC,获得 666,666.666667 ABC。最终边际价格为 3,000,000 / 333,333.333333 = 9,平均成交价为 2,000,000 / 666,666.666667 = 3 USDC/ABC。相比之下,投入 5,000,000 USDC 后储备为 6,000,000166,666.666667,边际价格是 36,不是 9。实际费用、套利、集中流动性和平仓会改变账本。
  • TWAP 约定。 十个等权一分钟观察值中,九个价格为 100,一个为 160。教学用算术 TWAP 为 (9 * 100 + 160) / 10 = 106,仅比 100 高 6%,即使最后现货高出 60%。若其他九个仍为 100,要使算术平均达到 130,被操纵的观察值必须是 400。Uniswap v3 的 tick 均值采用几何口径,并非这个算术示例,因此消费方必须复现已部署约定。
  • 中位数与法定人数。 七个归一化观察值为 [99, 100, 100, 101, 101, 500, 600];中位数为 101,因此两个极端报告无法让结果偏离诚实值簇。若接受结果需要五个实时报告,而三个诚实报告方离线,就只剩 4 < 5:抗异常值不等于可用性,回退行为也成为安全模型的一部分。
  • 过时数据与错误清算。 一个八位小数的数据源返回原始值 140,000,000,000,即 1,400,但数据年龄为 17 minutes,超过消费方上限 15 minutes,因此应拒绝。若仍用该过时数值计算 10 ETH75% 清算阈值和 12,000 债务,健康因子为 10 * 1,400 * 0.75 / 12,000 = 0.875;按新鲜价格 2,000 计算则为 1.25。之后修正价格不会撤销已经完成的清算。

风险

  • 链、资产、数据源、代理、池或消费方地址错误。
  • 基础与报价资产方向反转,或计价单位不一致。
  • 数据源、代币和内部定点数的小数归一化错误。
  • 接受过时数据,或误把心跳和偏差触发条件当作新鲜度保证。
  • 接受不完整轮次、无效状态、零值、负值、封顶值或越界答案。
  • 流动性薄弱的单一场所现货价格控制庞大协议敞口。
  • TWAP 窗口过短、观察稀疏、加权错误或读取方向错误。
  • 误解观察容量、初始化、插值或回退行为。
  • 集中或即时流动性使池总价值无法反映攻击成本。
  • 多个数据源共享相同交易所、数据商、运营方、密钥或控制平面。
  • 报告方、交易所、API、签名方、网络或法定人数故障破坏更新或完整性。
  • L2 排序器停机,或恢复宽限期缺失、设置错误,暴露过时状态。
  • 回退数据过时、循环依赖、相关、缩放不同或语义不兼容。
  • 闪电流动性与原子可组合性使短暂影响可用于获利。
  • 预言机更新排序、抢跑、夹击、尾随交易或清算 MEV 改变收益。
  • 抵押品系数、清算阈值、限额、奖励和可用流动性放大小幅错误。
  • 治理方、管理员、guardian、多签或签名密钥被攻破,改变信任路径。
  • 代理、聚合器、适配器、升级、存储或配置错误选择了错误数值。
  • 熔断器或 fail-closed 逻辑在压力期冻结正常借贷、还款或清算。
  • 暂停、恢复、账户核对、坏账分配或跨协议隔离失败。

常见误区

  • “每次预言机攻击都会攻破预言机网络。” 很多故障利用薄弱来源、过时数值、错误单位、不安全适配器或消费逻辑,而报告网络仍按配置运行。
  • “多个或去中心化数据源保证价格正确。” 来源独立性与质量、法定人数、新鲜度、单位、聚合和消费方检查仍不可少。
  • “TWAP 让操纵不可能发生。” 它改变影响所需的时长与成本;薄弱窗口、稀疏观察、浅流动性或区块控制仍可能被利用。
  • “禁止闪电贷就能消除预言机风险。” 闪电贷只是一种融资方式;自有资金、信用、跨协议借贷、报告方被攻破和配置错误仍然存在。
  • “价格恢复就会撤销损失。” canonical 借贷、铸造、赎回、结算和清算会继续有效,除非协议另有获授权的恢复流程。

相关主题

来源

导航

搜索知识库...