当前位置:首页 > 知识 >

比特币国内交易合法首发,WarpFinance闪电贷事件解析

一张100元纸币可以实现许多不同的用途。可以用来买早餐、买菜、炒股、旅游,甚至可以用来折纸飞机或功能过于复杂反而引发了各种不同形式的钱的出现。比如,数字货币存放在银行卡、支付宝等应用中,或者存放在股票和基金中。甚至可以用一句话写在借条上。

闪电贷作为一种新型金融产品,被视为金融领域区块链应用的重要进步。它将借贷功能从货币形式中“剥离”出来,资金可以通过协议自由流动,从一个协议转移到另一个协议,从一种资产转移到另一种资产,大大提高了单一功能的效率。

然而,对于用户的便利也使得闪电贷成为黑客的钻空子的对象,使用起来几乎可以获得巨大的利益,甚至可以说是“一本万利”甚至是“无本万利”。

2020年,闪电贷攻击频发,成为金融安全事故中的“新常态”。最近,CertiK安全技术团队接到了一个关于WarpFinance项目的闪电贷攻击预警。

CertiK安全技术团队立即进行了分析,

1.攻击者通过闪电贷从uniswap和dydx处借取了5笔贷款,每笔借出的WETH和DAI的数量如表一所示。

表一:攻击流程中闪电贷借出的代币种类和数量

2.攻击者将所借的代币放入uniswap的WETH-DAI流动性池中,铸造了大约94349个流动性证明LP代币。然后攻击者通过调用WarpVaultLP智能合约中的provideCollateral函数,将这些LP代币全部存入WarpFinance的Vault。

图一:WarpVaultLP智能合约中的provideCollateral函数

3.在将LP作为collateral存入WarpVaultlp合约后,攻击者调用WarpControl智能合约中的borrowSC函数,从warp项目中借出USDC,如图二所示。

图二:WarpControl智能合约中的borrowSC函数

图二中的getBorrowLimit函数通过调用同一合约中的getTotalAvailableCollateralValue间接调用了oracle的getUnderlyingPrice函数,以获取攻击者存入的collateral的价格。

图三:WarpControl智能合约中调用的价格预言机地址

通过查看价格预言机oracle地址的值,可以发现WarpControl智能合约调用了UniswapLPOracleFactory智能合约作为计算质押资产价格的预言机。

通过调用oracle中的getUnderlyingPrice函数来计算价格,getUnderlyingPrice函数如图四所示。

图四:UniswapLPOracleFactory智能合约中getUnderlyingPrice函数

getUnderlyingPrice函数在1390行和1394行调用了图五中的consult函数,并在1404行执行了图六中的_calculatePriceOfLP函数来计算价格。

其中_calculatePriceOfLP函数的参数priceAsset1和priceAsset2来源于consult函数。

图五:UniswapLPOracleFactory智能合约中consult函数

图六:UniswapLPOracleFactory智能合约中_calculatePriceOfLP函数

从以上两图可以看出,攻击者质押的collateral可以借出的USDC数量或者价格的计算公式为:(token0的价格*token0的数量+token1的价格*token1的数量)/当前合约中LP代币的供应量。

然而,由于(token0的价格*token0的数量+token1的价格*token1的数量)这一部分无法正确计算出当前uniswap中对于token0-token1代币对LP的总共锁定价格,因此攻击者存入的collateral可以借出的USDC数目比正常情况下多。

利用WarpFinance项目中使用的oracle计算质押LP代币资产价格错误的漏洞,攻击者最终从WarpFinance项目中获得了约1462个ETH代币,总价值约95万美元。

此外,攻击者还铸造了价值约600万美元的DAI-ETHLPshare,并有约100万美元的利润流入了uniswap和sushiswap的流动性池中。

总体来看,在这次攻击中,WarpFinance遭受的损失约为770万美元。WarpFinance表示他们可以恢复约550万美元的损失,并将恢复的资金用于补偿用户。来源:https://twitter.com/warpfinance/status/1339751977836789767

CertiK安全技术团队认为这次攻击的特点是攻击者采用了多种多次的闪电贷来获取所需的启动资金,并利用了当前热门的预言机价格计算漏洞进行攻击。

针对这类攻击,CertiK安全验证团队提出以下建议:

1.接入链上预言机(如chainlink),以提供实时的价格数据对所有代币进行定价。

2.在智能合约内部建立详细的价格监控程序,对可能引发巨大波动的交易进行监控或阻止。

猜你喜欢

关注我们

微信二维码

微信