喂价预言机操纵
许多Defi项目已经犯了非常类似的错误,依赖于一个或多个代币准确价格数据的以太坊 dApps 的经济攻击。
最近的例子是 Harvest Finance 黑客套利攻击,导致协议用户集体损失 3300 万美元。
尽管开发人员熟悉可重入性等漏洞,但很明显,人们并不经常考虑对预言机价格的操纵。相反,基于可重入性的漏洞开发数量近年来有所下降,而基于价格操纵的漏洞开发数量正在上升。
在以太坊网络中,一切都是智能合约,喂价预言机也是如此。因此,区分喂价预言机是如何获得其价格信息的更有用。在一种方法中,可以简单地从价格 api 或交易平台中获取现有的链外价格数据,然后将其引入链中。在另一种情况下,可以通过查询在链上的去中心化交易所来计算瞬时价格。
这两种选择各有优缺点。离链数据对波动性的反应通常较慢,波动性的好坏取决于试图将其用于何处。它通常需要少数特权用户将数据推送到链上,因此必须相信他们不会作恶,也不会被迫推送奇怪的更新。链上数据不需要任何特权访问,并且总是最新的,但这意味着它很容易被攻击者操纵,从而导致灾难性的故障。
集成不良的喂价预言机,导致 DeFi 项目遭受重大资金损失。
Synthetix sKRW 预言机故障
Synthetix 是一个衍生品平台,允许用户将资产质押为其他资产。为了促进这一点,Synthetix (当时) 依赖于一个定制的离链价格供应源来实现,其中一个由一组秘密的价格供应源计算出来的总价格以一个固定的间隔发布在链上。然后,这些价格允许用户对平台支持的资产持有多头或空头头寸。
2019 年 6 月 25 日,Synthetix 依赖的一个价格反馈错误地报告了韩元的价格比实际价格高出 1000 倍。由于喂价预言机系统的其他地方出现了额外的错误,这个价格被系统接受并发布在链上,在链上交易机器人可以快速进出 sKRW 市场。
尽管 Synthetix 团队能够与这个交易者谈判,以 bug 奖金的形式交换回损失资金。但理论上的来说,机器人本次能够获得超过 10 亿美元的利润。
Synthetix 正确地执行了预言机合约,并从多个来源下调了价格,以防止交易商在价格变化发布之前预测价格变化。然而,一个上游价格源故障的案例导致了毁灭性的打击。这说明了使用离链数据的喂价预言机的风险: 不知道如何计算价格,因此的系统必须仔细设计,以便所有潜在的故障模式都得到正确处理。
低担保贷款
去中心化的借贷平台使用依赖于链上数据的喂价预言机所带来的风险。
用户可以将资产作为抵押品存入平台,也可以借入其他资产,但最高金额取决于他们存入的资产的价值。假设一个用户想用 ETH 作为抵押品借入美元,ETH 的当前价格是 400 美元,抵押比率是 150%。
如果用户存款 375 ETH,意味着存入了 150,000 美元的抵押品。他们可以每 1.5 美元的抵押品借入 1 美元,所以他们可以从系统借入最多 100,000 美元。
但是当然,在区块链上它不是简单的声明 1 ETH 值 400 美元,因为恶意用户可以简单的声明 1 ETH 值 1000 美元,然后从系统中拿走所有的钱。因此,对于开发者来说,寻找最适合的喂价预言机是很诱人的,比如当前 Uniswap、Kyber 的现货价格,或者另一个去中心化的交易平台。
乍一看,这似乎是正确的做法。毕竟,只要想买进或卖出 ETH,Uniswap 的价格总是大致正确的,因为任何偏离都会被套利者迅速纠正。然而,事实证明,去中心化交易平台的现货价格在交易过程中可能严重不正确,如下面的例子所示。
想想 Uniswap AMM系统是如何运作的。价格是根据储备金持有的资产数量计算的,但储备金持有的资产随着用户在 ETH 和 USD 之间的交易而变化。如果恶意用户在平台贷款之前和之后进行交易会怎么样?
在用户申请贷款之前,他们需要花费 200 万美元购买 5000 个 ETH。Uniswap 交易所现在计算的价格是 1 ETH= 2,600 美元。那么现在,他们的 375 ETH 可以作为抵押品,抵押价值高达 650,000 美元的资产。最后,他们用 200 万美元换回原来的 5000ETH,这将重新调整价格至正常状态。结果是,贷款平台损失了 550,000 美元。
这个案例研究说明了在使用去中心化的交易作为喂价预言机时最常见的错误——攻击者在交易过程中几乎完全控制价格,并试图准确地操纵价格就像在天平安定下来之前读出秤上的重量。这样的话,可能会得到错误的号码,并根据情况它可能会造成很大的损失。
Synthetix MKR 操纵
2019 年 12 月,Synthetix 因为预言机价格操纵而再次遭受攻击。值得注意的是,它跨越了链上价格数据和链外价格数据之间的障碍。
Reddit 用户 u/MusaTheRedGuard 注意到,一个攻击者正在对 sMKR 和 iMKR (反 MKR) 进行一些非常可疑的交易。攻击者首先购买了 MKR 上的一个多头仓位sMKR,然后从 Uniswap eth/MKR 对购买了大量 MKR。等了一段时间后预言机同步价格后,攻击者在MKR高价位以 sMKR 换 iMKR,再通过 Uniswap eth/MKR卖出MKR恢复价格,再将空头 iMKR 卖出获得MKR。然后他们重复了这个过程。
在幕后,攻击者通过 Uniswap 进行的交易允许他们随意调整 Synthetix 上 MKR 的价格。这可能是因为 Synthetix 所依赖的非链式价格源实际上依赖于 MKR 的链上价格,而且没有足够的流动性让套利者将市场重新调整到最佳状态。
这个事件说明了一个事实,即使认为使用的是链外价格数据,实际上可能仍然在使用链上价格数据,而且可能仍然暴露在使用这些数据所涉及的复杂性中。
看到 Uniswap 的潜在代币汇率可能会让人着迷,但只有当真正点击交易并且交易成功后代币在的钱包里的时候,才是最终的结果。同样,要确定两种资产之间的汇率,最好的方法就是直接进行资产互换。这种方法很好,因为没有后悔和假设。然而,它可能不适用于那些要求持有原始资产协议,如贷款平台。
总结依赖于链上数据的预言机模型的问题的一种方法是,它们有点太新了。如果是这样的话,为什么不人为地推迟一下呢?编写一份合约,在 Uniswap 这样的去中心化交易平台上用最新的价格更新自己,但只有在一小群特权用户提出要求时才这样做。现在,即使攻击者可以操纵价格,他们也不能让的协议真正使用它。
这种方法实现起来非常简单,而且速度快,但也有一些缺点——在链上拥堵的时候,可能无法按照自己的意愿快速更新价格,而且仍然容易受到内外夹击。此外,现在的用户需要相信,实际上会保持价格更新。
操纵价格预言是一个时间敏感的操作,因为套利者总是在观望,并且喜欢优化任何次优市场的机会。如果攻击者想要最小化风险,他们会想要在一个交易中操纵一个喂价预言机,这样套利者就不可能在中间跳跃。作为一个协议开发人员,如果系统支持它,那么在用户进入和退出系统之间实现短至 1 区块的延迟就足够了。
当然,这可能会影响可组合性,而且矿商与交易员的合作正在增加。在未来,坏的参与者可能会在多次交易中操纵价格,因为他们知道与他们合作的矿商将保证没有人能跳到中间,从他们的收益中分一杯羹。
Uniswap V2 为链上开发人员引入了 时间加权平均价格 Time-Weighted Average Price (TWAP) 预言机。文档对预言机提供的确切安全保证进行了更详细的描述,但是一般来说,对于长时间的大型交易池,没有区块拥塞的情况下,TWAP 预言机对预言机操纵攻击具有很强的抵抗力。然而,由于其实施的性质,它可能无法对市场高度波动的时刻作出足够迅速的反应,而且只适用于已经具有流动性的资产。
如今许多大型项目都采用这种方法: Maker 运行一系列由可信实体操作的价格信息提要,Compound 创建了 Open 预言机,并提供 Coinbase 等记者功能,Chainlink 收集来自 Chainlink 运营商的价格数据,并在链上发布。
请记住,如果选择使用这些解决方案之一,那么现在已经将信任委托给了第三方,的用户也必须这样做。要求记者手动在网上发布最新消息也意味着,在市场高度波动和链上拥堵的时候,价格可能无法及时更新。
喂价预言机是一个至关重要的,但经常被忽视的组成 DeFi 安全的部分。安全地使用喂价预言机是困难的,有很多方法可以把自己和的用户都搞砸了。
过去的价格预言者操纵的例子,并且确定在交易过程中阅读价格信息可能是不安全的,并且可能导致灾难性的金融损失。
本帖steem首发
最近新帖
- 关于 ETH Nonce 的误解
- DeFi代币反弹 主流币开始陆续补涨
- 美国查获10.8亿美元比特币
- 抵押和借贷平台
- DeFi今年火热是由内外共同催生的
- 美国大选大翻盘
- IPFS+DEFI双剑合璧
- DeFi引入现实资产
- 比特币短期有回踩的势头
- 准入新政创造更加便利的投资环境
- 甲骨文的发现
- 太平天国运动爆发
- 李自成战败被杀
- 吴三桂开关迎清军
- 吴承恩创作《西游记》
- 朱元璋建立明朝
- 一代天骄成吉思汗
- 辽天祚帝亡国
- 杯酒释兵权
- 黄巢起义
- 李林甫口蜜腹剑
- 李春设计修建赵州桥
- 科学家祖冲之
- 东晋建立
- 陆逊火烧连营
- 王允施计除董卓董卓
- 昆阳之战
- 赋圣”司马相如
- 萧规曹随
- 斩白蛇起义
- 李冰修建都江堰
- 田单摆火牛阵
- 孟母教子
- 勾践灭吴
- 秦晋崤山之战
- 管鲍之交
- 烽火戏诸侯
- 帝乙归妹
- 大禹治水
- 刻苦勤学
- 仁变俗
- 愈思勉
- 过能改
- 莫闲管
- 诈与妄
- 宽转弯
- 辄净手
- 勿见能
- 挞无怨
- 晨则省
- 蔽聪明
- 任己见
- 滴水之恩
- 不安勿扰
- 闻誉恐
- 进退错
- 恭敬后尊让
- 贵洁不贵华
- 知礼守礼
- 显父母,孝之终
- 陪伴是最长情的告白
- 孝悌谨信
- 敏而好学,不耻下问
- 终身为父
- 知之思勉
- 掩饰增辜
- 见恶内省
- 用物明求
- 礼仪细节
- 作息习惯
- 谦虚的态度
- 山西饭店坍塌:100平米为何救援18小时?
- 兴趣是最好的老师
- 空城计的智慧
- 宽限紧功
- 势服不然
- 改过归无
- “错”和“恶”的区别
- 慎思缓言
- 年少勿饮
- 长呼代叫
- 世上无难事,只怕有心人
- 特朗普为了连任制裁中共政治局委员陈全国等人?
- 现代版“秀才遇到兵”荒诞剧
- 国民党终于开始学习怎么当好在野党
- 没文化真可怕:民进党歪曲韩国瑜引经据典
- 异常妖怪:STEEM/BTC小时K线,币安走势和火币完全不一样
- steem完成硬分叉HF23,2300万STEEM会不会暴涨后砸盘?
本帖中 , @hnt 作为受益人获得奖励 : 1.3 $ + 5.544 STEEM + 14.215 SP = 28.426 STEEM = 4.264 $ , 因此 @hnt 保留 5%(1.421 STEEM) 作为费用 , 并且支付本帖作者 27.005 STEEM . 谢谢使用 @hnt 的流动性服务 !
详细说明 ...