Move语言安全性分析及合约审计要点之操纵预言机
2023-1-30 15:23:32 Author: www.aqniu.com(查看原文) 阅读量:13 收藏

SharkTeam在之前的“十大智能合约安全威胁”系列课程中,根据历史发生的智能合约安全事件,总结分析了在智能合约领域中出现较多、危害最大的前10大漏洞。这些漏洞之前通常出现在Solidity智能合约中,那么对于Move智能合约来说,会不会存在相同的危害呢?

SharkTeam【Move语言安全性分析及合约审计要点】系列课程将带您逐步深入,内容包括权限漏洞、重入漏洞、逻辑校验漏洞、函数恶意初始化、回退攻击、提案攻击、合约升级漏洞、操纵预言机、三明治攻击、重放攻击。本章内容【操纵预言机】。

操纵价格预言机是DeFi领域中常见的攻击手段。对于链上的价格预言机,更加容易被操作,尤其是在一笔交易内,可以通过闪电贷来提供大笔的攻击资金,从而实现操纵价格预言机。

预言机(Oracle)是链接链上智能合约与链下现实环境的桥梁。价格预言机则是链上智能合约获取代币链上或链下价格的桥梁工具。

根据价格数据的来源,价格预言机分为两种:链上价格预言机和链下价格预言机。

  • 链上价格预言机:价格数据来源于链上,如Uniswap交易对(AMM)价格
  • 链下价格预言机:价格数据来源于链下,如Chainlink

根据提供价格数据的运营商,价格预言机又可分为两种:中心化价格预言机和去中心化价格预言机。

  • 中心化价格预言机:价格预言机只能由单个运营商更新与验证,即反馈的价格来源单一。
  • 去中心化价格预言机:价格预言机由多个运营商或用户更新与验证,即反馈的价格来源不一,可以由多个价格计算所得。

区块链项目所有安全事件中,操纵价格预言机所引起的安全事件是最常见的一种,尤其是对于链上价格预言机。此外,闪电贷可以以极低的手续费提供操纵价格预言机的大笔资金,为操作价格预言机攻击提供了极大的便利。

操纵价格预言机有两种方式:

(1)闪电贷操纵链上的AMM价格:首先攻击者向上调整借入代币价格(或向下调整抵押品价格),最后通过价格清算抵押品。这种情况一般在链上中心化预言机以及去中心化交易所中,攻击者可以利用闪电贷在一笔交易中操纵AMM的价格,在贷方智能合约查找代币之前改变代币的现货价格。

(2)预言机故障导致随机攻击:2019年6月25日,衍生品平台Synthetix依赖的价格预言机,出现预言机喂价故障,机器人快速进出sKRW市场,最终造成大量的经济损失。

在两种方式中,安全事件中出现比较多的是第一种,比如发生在2021年5月的xToken安全事件以及Belt Finance安全事件。

2021年5月13日,DeFi 质押和流动性策略平台 xToken 遭到闪电贷和操纵价格预言机的攻击,xBNTa Bancor 池以及 xSNXa Balancer 池立即被耗尽,造成约 2500 万美元损失,其中,xSNXa 合约上直接损失的总价值为 416 枚 ETH。

经过对攻击交易的分析,攻击步骤如下:

(1)攻击者先从dYdX中通过闪电贷借出大量的ETH,然后在AAVE中抵押ETH并借出SNX。并且通过Sushiswap将ETH兑换成 SNX。至此,攻击者储备了大量SNX

(2)通过Uniswap将SNX全部兑换成ETH,此时Uniswap的ETH/SNX交易对中SNX的价格会变得非常低。

(3)攻击者此时通过xSNX合约使用ETH置换xSNX,由于xSNX使用了Kyber上的SNX价格,而Kyber的SNX价格是参考的Uniswap的ETH/SNX交易对SNX价格的,所以此时攻击者置换出了更多的xSNX。

(4)攻击者将账户中的xSNX置换成ETH和SNX后,归还闪电贷。剩余的代币即为此次攻击获利。

攻击者通过闪电贷操纵(调低)了SNX的价格,因为被攻击的合约中的xSNX使用了Kyber上的SNX价格,而Kyber的SNX价格是参考的Uniswap的预言机价格的。当SNX的价格被影响后直接导致xToken中xSNX价格不正常波动,造成攻击套利空间。

2021年5月30日,币安智能链(BSC)上多策略收益优化 AMM 协议 Belt Finance遭遇闪电贷攻击,四个资金池受到影响,损失620万美元。

经过对攻击交易分析,攻击过程如下:

(1)攻击者从PancakeSwap中通过闪电贷,分8次,共计借出387315994 BUSD(3.87亿 BUSD);

(2)将其中1千万BUSD存入bEllipsisBUSD策略,Ellipsis 是以太坊上DeFi协议Curve授权Fork的项目;

(3)将1.87亿BUSD存入bVenusBUSD策略;

(4)通过Ellipsis合约将1.9亿BUSD兑换为1.69亿USDT;

至此,闪电贷的3.87亿BUSD均已投入攻击交易中。其中1.87亿存入bVenusBUSD策略,1千万存入bEllipsisBUSD策略,1.9亿通过Ellipsis兑换成1.69亿USDT。

(5)从bVenusBUSD策略中提取BUSD;

(6)通过Ellipsis将1.69亿USDT换成1.89亿BUSD;

(7)向bVenusBUSD策略中再次存入1.97亿BUSD;

重复步骤(5)~(7)多次,攻击者通过重复买入卖出 BUSD,最后从策略 bVenusBUSD中提取了更多的BUSD,使用1.69亿BUSDT兑换出1.89亿的BUSD。

(8)归还闪电贷,并将剩余资产转移获利。

总结以上步骤,此次攻击,是由于bEllipsis策略余额计算中的漏洞,造成攻击者操纵了beltBUSD 的价格。通过合约分析可知,beltBUSD 的价格依赖于机枪池中的余额,攻击者将BUSD存入bVenusBUSD策略再提出,由于资产的数量不变,即使重复操作,也不会获利。但此次攻击者也同时操作了其他策略(bEllipsisBUSD)对beltBUSD余额产生了影响,造成了计算漏洞的产生。

预言机是公链必备的一个基础设施,Move生态的公链,包括Starcoin、Aptos以及SUI,同样需要预言机。因此,Move公链定义了标准的Oracle协议,为公链提供更便捷的预言机服务。

Starcoin在Stdlib中定义了一套标准的Oracle协议。标准的Oracle协议使用安全可靠的智能合约Move编写,既保持了Starcoin去中心化等特点,也继承了Move的安全性。

Move生态中,除了链上的AMM可以作为价格预言机外,同样存在类似于Solidity生态的Chainlink这样的链下价格预言机基础设施,为DeFi项目的安全性提供一定保证,包括可以为Aptos提供价格预言机服务的Pyth、可以为Aptos和SUI提供价格预言机服务的SupraOracles等。

操纵价格预言机跟智能合约语言和区块链结构无关,只跟经济模型和预言机类型有关,属于经济攻击的一种。因此,Move合约同样可能面临操纵价格预言机的风险。

Solidity生态中多起操作价格预言机的安全事件告诉我们,闪电贷是操纵价格预言机的最有效的辅助手段。然而,在Move生态中,闪电贷的实现并不像Solidity那么便捷,这在一定程度上可以降低操纵价格预言机的风险,但并不能从根本上解决操纵价格预言机的问题。而且,闪电贷是DeFi的典型特色服务,未来必须会出现在各个Move公链生态中。真正能够避免价格操纵的方法是使用类似Solidity生态Chainlink的链下预言机,比如Pyth、SupraOracles。

Solidity生态的经验告诉我们,操纵价格预言机已经成为DeFi领域内非常普遍的安全问题,相信Move项目方在开发过程中会主动采取措施,从而避免操纵价格预言机的攻击。


文章来源: https://www.aqniu.com/vendor/93273.html
如有侵权请联系:admin#unsafe.sh