SharkTeam独家分析 | 闪电贷攻击:Popsicle Finance被黑事件分析
北京时间8月4日,跨链收益率提升平台Popsicle Finance遭到黑客攻击,其中Sorbetto Fragola产品受到影响。
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、事件分析
攻击者主要攻击目标是SorbettoFragola.sol合约,攻击者在一次交易内共发起了8次相同模式的攻击,我们以第一次攻击为例进行剖析。
攻击合约1(0xdf)通过闪电贷借取了USDT以及WETH,然后调用SorbettoFragola合约中的deposit函数存入USDT以及WETH,
攻击合约1添加流动性,获得PLP Token.
攻击合约1将得到的PLP Token依次转入到攻击合约2(0x57)和攻击合约3(0xd2)中,最后,转回到攻击合约1。
攻击合约1移除流动性,得到对应的两种Token。
攻击合约提取收益。
最后攻击合约1进行闪电贷还款。
在以上过程中,攻击合约1将得到的PLP Token依次转入到攻击合约2(0x57)和攻击合约3(0xd2)中,同时会调用SorbettoFragola合约中的CollectFees函数计算和更新奖励。
在0xdf合约将10.52的PLP转账给合约0x57的同时触发SorbettoFragola.sol合约中的CollectFees函数。
CollectFees函数由updateValut修饰器进行修饰,该修饰器会调用updateValut(account)来计算并领取奖励费用。在_updateFeesReward(account)函数中更新 tickLower与tickUpper两个参数并计算出流动性在UniswapV3Pool的存储位置,从而查询出流动性的数量。
通过 _fee0Earned 与 _fee1Earned 函数来计算用户所持有的PLP凭证数量可以获得多少奖励。
随后0x57合约将PLP转给0xd2合约,再进行相同的操作,存入一次Token对获得的PLP计算并提取了多次奖励。原因在于SorbettoFragola.sol合约中的collectFees函数通过读取当前账户的在UniswapV3Pool中流动性存储位置的tickLower与tickUpper两个参数,计算出当前账户PLP并根据PLP的值计算奖励的数量,而PLP是可以进行转账的,在转账过程中,其奖励没有进行转账,接收到PLP的合约可以再次计算并领取额外的奖励。
最后10.52枚PLP转回0xdf合约,0xdf合约调用了 Sorbetto Fragola .sol的 withdraw 函数取回先前存入的 WETH 与 USDT 流动性。随后,0x57、0xd2合约分别调用 collectFees 函数以计算并领取了额外的奖励。
攻击者使用三个攻击合约0x57、0xd2、0xdf在一笔交易中完成了8次这种模式的攻击,盗走大量代币。
二、安全建议
此次事件是又一次与闪电贷有关的安全事件,DeFi项目的业务逻辑设计复杂,涉及的经济学计算和参数较多,却不同项目和协议之间可组合性极其丰富,很难预测,非常容易出现安全漏洞。如下表,利用闪电贷这种新型产品进行攻击的DeFi事件在过去的一年里层出不穷,已增加到36起。通常闪电贷攻击包括“哄抬套利”、“操纵预言机”、“重入攻击”和“技术漏洞”四种,本次属于基于利用“技术漏洞”进行攻击。
SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。
而作为项目方,智能合约安全关系用户的财产安全,至关重要!区块链项目开发者应与专业的安全审计公司合作,进行多轮审计,避免合约中的状态和计算错误,为用户的数字资产安全和项目本身安全提供保障。
SharkTeam作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。