主页 > imtoken钱包华为安装不了 > 认识创宇区块链安全实验室 | 收成

认识创宇区块链安全实验室 | 收成

imtoken钱包华为安装不了 2024-01-17 05:07:08

认识创宇区块链安全实验室 | 全面回顾 Harvest.finance 闪电贷攻击

原创宇区块链实验室

创宇区块链安全实验室

gh_d0d20b87a54d

智创宇区块链实验室专注于构建区块链安全生态,核心成员来自智创宇安全团队。 团队以数字资产技术安全、风控安全、反黑客攻击为切入点,为区块链节点和普通大众提供全方位的安全解决方案,致力于让人类进入一个安全的区块链世界。

发表于

收录于#知道创宇区块链实验室|71起安全事件分析

前言

不久前,DeFi 项目 Harvest.finance 遭到黑客攻击。 黑客利用闪电贷套利2400万美元,涉及金额巨大,引起轰动。

知乎创宇区块链安全实验室旨在通过对攻击过程和代码细节的彻底梳理,一窥闪贷套利的秘密。

整理

基本信息

攻击者地址:0xF224ab004461540778a914ea397c589b677E27bb

攻击合约地址:0xc6028a9Fa486F52efd2B95B949AC630d287CE0aF

第一次攻击 tx:0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877

保险库代理(fUSDC):0xf0358e8c3CD5Fa238a29301d0bEa3D63A17bEdBE

CRVStrategyStable 主网:0xD55aDA00494D96CE1029C201425249F9dFD216cc

保险库YCRV:0xF2B223Eb3d2B382Ead8D85f3c1b7eF87c1D35f3A

CRVStrategyYCRVMainnet: 0x2427DA81376A0C0a0c654089a951887242D67C92

转换器:0xfCA4416d9dEF20aC5b6Da8b8b322b6559770eFbF

*为方便起见,后面提到的地址只用地址的前4位表示

交易的开始和结束

从tx0x35f8中的代币转账记录,我们可以大致看出事件过程

以太坊有区块链记录一定是真的吗_如何查询usdt区块记录_查询微博登陆记录查询

详细的合约调用过程可以通过以太坊交易分析平台加载到交易哈希中进行分析

查询微博登陆记录查询_以太坊有区块链记录一定是真的吗_如何查询usdt区块记录

过程分析大致如上。 综上所述,事件是攻击者0xf224部署了攻击合约0xc602,然后在攻击合约的0xfdb57542方法中进行了一系列闪贷攻击。 核心流程是通过Uniswap的Flash Swap进行闪贷。 大量的USDT和USDC为后续的攻击做准备,然后重复以下动作:

Curve ySwap 进行 USDT=>USDC 的巨额兑换(巨额兑换导致 y 池中的 USDC 价格上涨)比平时)Curve ySwap进行USDC=>USDT赎回(1步反向操作,USDC价格回升) 赎回VaultProxy fUSDC池中的USDC(USDC价格下跌,赎回的USDC比平时多)

最后归还闪贷,将盈利的USDC兑换成ETH提现

代码详情

攻击合约未开源如何查询usdt区块记录,暂不分析。可以从关键的VaultProxy fUSDC矿池合约0xf035的充值功能入手,分析fUSDC的铸币量是如何计算的

查询微博登陆记录查询_以太坊有区块链记录一定是真的吗_如何查询usdt区块记录

从质押函数可以看出,fUSDC的铸造量是根据fUSDC总量占USDC策略总投资量的比例来确定的

底层BalanceWithInvestment函数实现如下:

查询微博登陆记录查询_如何查询usdt区块记录_以太坊有区块链记录一定是真的吗

fUSDC矿池代理合约0xf035会进一步调用CRVStrategyStableMainnet策略合约0xD55a进一步查询已投入标的资产USDT的金额

来到稳定币策略合约0xD55a,investedUnderlyingBalance函数实现如下:

以太坊有区块链记录一定是真的吗_查询微博登陆记录查询_如何查询usdt区块记录

这里的调用稍微复杂一点。 从ycrvVault合约0xF2B2中获取份额和价格,将乘积传入底层ValueFromYCrv函数,结果与合约USDT金额之和作为最终函数返回值

我们先来看ycrvVault合约0xF2B2

查询微博登陆记录查询_以太坊有区块链记录一定是真的吗_如何查询usdt区块记录

金库合约 0xf2b2 本身继承了 ERC20,具有代币属性。 从构造函数可以看出token代表fyToken

也就是说,上面得到的份额是策略合约拥有的fyToken的数量

然后是价格如何查询usdt区块记录,看getPricePerFullShare函数:

查询微博登陆记录查询_如何查询usdt区块记录_以太坊有区块链记录一定是真的吗

可以明显看出price是yToken与fyToken的比值,那么shares和price的乘积代表策略合约占用yToken的数量,最后传入底层的ValueFromYCrv函数,会调用converter.yCrvToUnderlying

这是整个过程中最关键的部分,也是问题的根源所在。

转换器合约0xfCA4未开源

以太坊有区块链记录一定是真的吗_如何查询usdt区块记录_查询微博登陆记录查询

我们再回到以太坊交易分析平台,查看整个充值调用流程

以太坊有区块链记录一定是真的吗_如何查询usdt区块记录_查询微博登陆记录查询

可以看出前面的调用流程分析是正确的,convetor的调用最终会调用Curve的Zap.calc_withdraw_one_coin,而这个函数就是用来查询lpToken的赎回价格的

如何查询usdt区块记录_查询微博登陆记录查询_以太坊有区块链记录一定是真的吗

问题就出在这里,相当于向Curve询问价格,调用传入yToken的数量,那么返回的就是yUSDC对USDC的价格,即USDC/yUSDC

但是当巨量兑换成USDC后y池中的USDC价格上涨时,USDC/yUSDC的相对价格会下降。 在Harvest.finance的USDC策略中,通过calc_withdraw_one_coin计算yUSDC资产的USDC净值,减少损失,最终体现在存款功能的fUSDC铸币算法上,会导致fUSDC铸币量增加

以太坊有区块链记录一定是真的吗_查询微博登陆记录查询_如何查询usdt区块记录

总结

归根结底,Harvest.finance被攻击的本质原因是战略稳定币的价值估值存在问题。 直接调用容易操纵价格的Curve的calc_withdraw_one_coin函数计算价值,让攻击者乘虚而入。 这是一次典型的由价格供给机制不完善导致的价格操纵的经济攻击。

已知创宇区块链安全实验室官网:已知创宇唯一指定证书存储平台:联系我们:blockchain@knownsec.com

知乎创宇区块链安全实验室导航

微信公众号@创宇区块链安全实验室

以太坊有区块链记录一定是真的吗_如何查询usdt区块记录_查询微博登陆记录查询

长按关注获取最新区块链安全资讯

微博@知道创宇区块链实验室

知乎@知道创宇区块链安全实验室

推特 @KS_Blockchain

预览时无法单击选项卡