作者:Kong,慢雾安全团队
据慢雾消息,2021年10月27日,CreamFinance?再次遭受攻击,损失约1.3亿美金,慢雾安全团队第一时间介入分析,并将简要分析分享如下。
攻击核心
本次攻击的核心在于利用Cream借贷池对抵押物价格获取的缺陷,恶意操控拉高了其抵押物的价格,使得攻击者可以从Cream借贷池借出更多的代币。
攻击细节
首先攻击者从DssFlash中闪电贷借出5亿个DAI,随后将借出的5亿个DAI抵押至yearn的yDAI池中,以获得约4.5亿个yDAI凭证。
随后攻击者将获得的yDAI代币在Curve的yDAI/yUSDC/yUSDT/yTUSD池子中进行单币流动性添加,以获得相应的流动性凭证。紧接着攻击者就将获得的凭证抵押到yvWBTC池子中以获得yUSD凭证,为后续在CreamcrYUSD借贷池中抵押做准备。
BitZ平台在慢雾科技的安全审计中评级为优:据官方消息,区块链安全公司-慢雾科技通过十大维度对BitZ平台进行安全审计,BitZ平台凭借优异的表现在本次安全审计中评级为:优。本次安全审计核心目标是为BitZ平台检测潜在的威胁点,协助 BitZ平台提升安全维度。协力BitZ团队一起为客户的资金安全做出有效的推进,更好的保护广大BitZ用户的安全。
BitZ平台创立于2016年,是联合区块链资深从业者和专业量化团队交易团队创立的一家专注于区块链数字资产交易和交流的平台。BitZ采用全球顶尖的安全技术,持续不断的为用户提供安全、快速、智能的区块链资产流通服务。[2020/8/6]
之后攻击者开始向Cream的crYUSD借贷池中抵押其获得yUSD凭证,为了扩大其抵押规模,攻击者从AAVE闪电贷借出约52.4万个WETH,并将其抵押到Cream的crETH池子中。
声音 | 慢雾:EOS假充值红色预警后续:慢雾安全团队今早发布了 EOS 假充值红色预警后,联合 EOSPark 的大数据分析系统持续跟踪和分析发现:从昨日开始,存在十几个帐号利用这类攻击技巧对数字货币交易所、钱包等平台进行持续性攻击,并有被真实攻击情况。慢雾安全团队在此建议各大交易所、钱包、DApp 做好相关防御措施,严格校验发送给自己的转账交易在不可逆的状态下确认交易的执行状态是否为 executed。除此之外,确保以下几点防止其他类型的“假充值”攻击: 1. 判断 action 是否为 transfer 2. 判断合约账号是否为 eosio.token 或其它 token 的官方合约 3. 判断代币名称及精度 4. 判断金额 5. 判断 to 是否是自己平台的充币账号。[2019/3/12]
攻击者通过在crETH池子中抵押大量ETH,来使得其有足够的借贷能力将crYUSD池子中的yUSD全部借出并重复抵押到crYUSD池子中,随后通过在crYUSD池子中进行循环贷以杠杆的形式扩大了本身在crYUSD池子中yUSD的抵押规模,为后续操控价格获利做准备。
声音 | 慢雾创始人余弦:优秀的公链是敬畏黑客 但又不惧黑客的:区块链安全公司慢雾创始人余弦在线上表示,至少有四个理由表明黑客攻击事件多的公链反而更可能快速发展:1、只要不会出现超巨额不可挽救损失,积极的社区治理总能渡过难关,而且可以大大提高公链的知名度;2、公链如果关注度低或价值低,攻击者也不一定会感兴趣,机会成本的问题,除非攻击者本身就属于这条公链生态的一部分或可以轻易了解这条公链;3、越偏应用层的攻击会越多,比如 DApp 越多,原则上被攻击成功的数量也会多,这可能会造成一种假象:这条公链似乎很不安全,但真相可能恰恰相反;4、类比早期的 Windows XP,安全问题极多,但却奠定了个人电脑操作系统生态的霸主地位。与此同时,余弦总结道:持续黑客攻击导致破产倒闭、低价被收购的血淋淋案例。所以优秀的公链是敬畏黑客,但又不惧黑客的。[2019/3/5]
随后为了获得yDAI/yUSDC/yUSDT/yTUSD4Pool凭证以操控价格,攻击者用约1,873个ETH从UniswapV3中兑换出约745万个USDC,并通过Curve3Pool将其兑换成DUSD代币约338万个。
声音 | 慢雾预警:DNS劫持静默攻击全球蔓延 一旦劫持 用户数字资产可被轻易窃取:慢雾安全团队注意到 FireEye 近日的情报披露《全球 DNS 劫持活动:大规模操纵 DNS 记录》。据悉,其中最关键的部分是明确指出有三种 DNS 劫持手法可以完成静默攻击(用户无法察觉访问的目标网站或 Web 服务是否已经被劫持)。如果数字货币交易所遭遇了DNS静默攻击,将导致交易所用户的数字资产可能被轻易盗取。慢雾安全团队进一步解释道,“这个攻击很高端,但也不难,迟早会有被这样手法攻击的数字货币相关平台。”不过,目前还未知是否已经有交易所遭遇类似攻击。[2019/1/11]
接下来攻击者通过获得的DUSD代币从YVaultPeak中赎回yDAI/yUSDC/yUSDT/yTUSD4Pool凭证,并利用此凭证从yUSD(yvWBTC)池子中取回yDAI/yUSDC/yUSDT/yTUSD代币。
随后攻击者开始进行此次攻击的关键操作,其将约843万个yDAI/yUSDC/yUSDT/yTUSD代币直接转回yUSD池子中,由于其不是通过正常抵押操作进行抵押的,所以这843万个yDAI/yUSDC/yUSDT/yTUSD代币并没有被单独记账,而是直接分散给了yDAI/yUSDC/yUSDT/yTUSD凭证的持有者,这相当于直接拉高了其share的价格。
在crToken中由于其抵押物价格被恶意拉高了,因此攻击者抵押的大量yUSD可以使其借出更多的资金,最后攻击者将Cream的其他15个池子全部借空。接下来我们跟进Cream的crToken借贷池中具体借贷逻辑。
从cToken合约中我们可以看到,主要借贷检查在borrowAllowed函数中:
我们跟进borrowAllowed函数,可以看到在427行,其会根据getHypotheticalAccountLiquidityInternal函数检查实时状态下的该账户所对应的所有cToken的资产价值总和和借贷的资产价值总和,并通过对比cToken的资产价值和借贷的Token价值和,来判断用户是否还可以继续借贷。
我们跟进getHypotheticalAccountLiquidityInternal函数,可以发现对于抵押物的价值获取来自886行的oracle.getUnderlyingPrice。
我们跟进预言机的getUnderlyingPrice函数,可以容易的发现其将通过代币150行的getYvTokenPrice函数进行价格获取。
继续跟进getYvTokenPrice函数,由于yvTokenInfo.version为V2,因此将通过yVault的pricePerShare函数进行价格获取。
跟进pricePerShare可以发现其直接返回了_shareValue作为价格,而_shareValue是通过_totalAssets除合约的总share数量(self.totalSupply)来计算单个share的价格的。因此攻击者只需要操控_totalAssets将其拉高就可以提高单个share的价格从而使得攻击者的抵押物价值变高以借出更多的其他代币。
我们可以查看下_totalAssets是如何获取的,从772行我们可以很清晰的看到,_totalAssets是直接取的当前合约的yDAI/yUSDC/yUSDT/yTUSD代币数量,以及抵押在策略池中的资产数额相加获得的。因此攻击者通过直接往yUSD合约中转入yDAI/yUSDC/yUSDT/yTUSD代币就可以拉高share价格从而完成获利。
通过Ethtx.info可以清晰的看到pricePerShare前后变化:
最后攻击者在借空其他池子后归还了闪电贷获利离场。
总结
本次攻击是典型的利用闪电贷进行价格操控,由于Cream的借贷池在获取yUSD池子share价格时直接使用了其pricePerShare接口,而此接口是通过合约的抵押物余额与策略池抵押资产数额相加除总share数来计算单个share的价格的。因此用户直接往yUSD转入抵押物就可以很容易的拉高单个share价格,最终使得Cream借贷池中抵押物可以借出更多的资金。
附:前两次CreamFinance被黑分析回顾
慢雾:CreamFinance被黑简要分析
王者开局偶遇猪队友——简析AlphaFinance&Cream被黑
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。