木星链 木星链
Ctrl+D收藏木星链
首页 > 火星币 > 正文

TOKEN:[虚拟印钞机] Popsicle Finance 双花攻击分析

作者:

时间:1900/1/1 0:00:00

北京时间2021年8月4日早上6点,PopsicleFinance项目下的多个机池被攻击,损失金额超过两千万美元,是迄今为止DeFi领域发生的损失数额最大的单笔攻击之一。通过分析攻击交易及项目代码我们发现,此次攻击是一个利用项目的记账漏洞进行多次提取的攻击。下面我们通过代码和攻击流程分析此次攻击。

代码分析

PopsicleFinance是一个涉及多个链的机池。

用户首先调用deposit函数向机池存入一定的流动性,并获得PopsicleLPToken作为存款的份额证明。PopsicleFinance会将用户提供的流动性存入Uniswap等底层池子并获得收益。

用户还可以调用withdraw函数,根据用户持有的PLPToken所代表的流动性份额,从机池取回流动性。PopsicleFinance会将PLPToken对应的流动性从Uniswap等底层池子中取回给用户。

最后,用户在机池中存的流动性会随着时间产生一定的收益,会累计在合约的用户状态中。用户可以调用collectFees函数取回部分存款奖励。

或因“外媒报道”至美股Robinhood盘中最高涨幅21.5%,盘后下跌6.5%:金色财经消息,据彭博社等多家外媒报道称加密货币交易所FTX正为收购Robinhood的交易寻求途径,在此不久后FTX首席执行官SBF称,没有与Robinhood就收购进行积极的会谈,或因此至美股Robinhood盘中最高涨幅21.5%,盘后下跌6.5%。[2022/6/28 1:35:12]

本次攻击的核心函数正是collectFees函数。下面我们逐步分析其代码。首先获得存储在userInfo中的用户状态。其中用户状态中的token0Rewards和token1Rewards是由于用户存款而累积的奖励。

接下来计算该合约中,对应机池的Token对的Balance。如果在合约中有足够的Balance,就按金额将Reward支付给用户;否则会调用pool.burnExactLiquidity从底层pool取回流动性返回给用户。

最后,会将记录在userInfo中的Rewards状态进行更新。看到这里,机池的代码实现还是比较符合逻辑的。但是在函数开头我们发现了updateVaultmodifier,这个函数会在collectFees的函数体之前运行,漏洞也许在updateVault相关的函数中。

DOT突破37美元关口 日内涨幅为4.59%:火币全球站数据显示,DOT短线上涨,突破37美元关口,现报37.0074美元,日内涨幅达到4.59%,行情波动较大,请做好风险控制。[2021/5/5 21:26:00]

以上是updateVault相关函数的实现。过程如下:

首先调用_earnFees向底层pool获取积累的Fee;

随后调用_tokenPerShare更新token0PerShareStored和token1PerShareStored参数,这两个参数代表了池子中每个share代表的token0和token1的数量,即机池的每个份额计代表的Token对数量;

最后调用fee0Earned和fee1Earned更新对应到这个用户的存款Rewards。

以上是fee0Earned和fee1Earned函数的实现,两个函数实现相同,都实现了这样一个公式:

user.token0Rewards=PLP.balanceOf(account)*(fee0PerShare-user.token0PerSharePaid)/1e18

AAVE跌破370美元关口 日内跌幅为5.75%:火币全球站数据显示,AAVE短线下跌,跌破370美元关口,现报369.9646美元,日内跌幅达到5.75%,行情波动较大,请做好风险控制。[2021/3/21 19:04:21]

也就是说,该函数会在原有的user.token0Rewards基础上,根据用户拥有的PLPToken数量计算应给用户发放的Fee的份额。

但我们注意到这个函数是增量的,也就是说即使用户并没有持有PLPToken,该函数仍会返回保存在user.token0Rewards中记账的存款奖励。

因此对于整个合约,我们发现两个重要的逻辑缺陷:

用户的存款奖励是记录在user.token0Rewards和user.token1Rewards中的,并不与任何PLPToken或其他东西有任何形式的绑定。

用于取回存款收益的collectFees函数仅仅依赖于记账的user.token0Rewards和user.token1Rewards状态,即使用户并未持有PLPToken,仍可以取出对应的存款奖励。

比特币突破1.8万美元又瞬间跳水,火币集团一度涨38%:比特币价格近日急升,为近三年来首次升穿18000美元,最高见18488美元,逼近历史新高。今年以来,比特币不断暴涨,年内已经从7269美元增至最高的18488美元,区间暴涨154%。比特币市值来到2.14万亿人民币,一举超越了贵州茅台的市值,目前贵州茅台市值2.12万亿人民币。不过,截至发稿,比特币已经暴跌了1000美元。随着比特币的暴涨,港股区块链火爆,其中,火币集团一度飙升38%,目前涨22%,市值12亿港元。(新浪港股)[2020/11/18 21:12:44]

我们假想一个攻击流程:

攻击者向机池中存入一定的流动性,获得一部分PLPToken。

攻击者调用collectFees(0,0),后者会更新攻击者的存款奖励,即状态变量user.token0Rewards的值,但并没有真正取回存款奖励。

攻击者将PLPToken转给自己控制的其他合约,再调用collectFees(0,0)更新状态变量user.token0Rewards。也就是说通过不断地流转PLPToken并调用collectFees(0,0),攻击者复制了这些PLPToken对应的存款奖励。

Bibox主板区开放DNA/USDT交易 涨幅达106%:Bibox主板区3月27日16:00开放DNA/USDT交易对,根据Bibox行情数据显示,DNA/USDT开盘涨幅达105%。开盘价0.0051USDT,最高涨至0.010602USDT,现价0.010529 USDT。

DNA是元界开发团队基于元界基础链ETP开发的双链网络架构,双链整合了未来数字金融生态所需的所有功能。[2020/3/27]

最后,攻击者从以上各个地址调用collectFees函数,取回真正的奖励。此时虽然这些账户中并没有PLPToken,但由于记账在user.token0Rewards没有更新,攻击者因此得以取出多份奖励。

用现实生活中的例子来描述这个攻击,相当于我向银行存钱,银行给了我一张存款凭证,但这张凭证没有防伪措施也没有和我绑定,我把凭证复印了几份发给不同的人,他们每个人都凭借这个凭证向银行取回了利息。

攻击流程分析

通过以上的代码分析,我们发现了PopsicleFinance在机池实现上的漏洞。下面我们对攻击交易进行深入分析,看攻击者是怎样利用这个漏洞的。

攻击者的总体流程如下:

攻击者创建了三个交易合约。其中一个用于发起攻击交易,另外两个用于接收PLPToken并调用PopsicleFinance机池的collectFees函数取回存款奖励。

通过闪电贷从AAVE借出大量流动性。攻击者选择了PopsicleFinance项目下的多个机池,向AAVE借出了对应这些机池的六种流动性。

进行Deposit-Withdraw-CollectFees循环。攻击者一共进行了8次循环,分别攻击了PopsicleFinance项目下的多个机池,取出了大量流动性。

向AAVE归还闪电贷,并将获利通过TornadoCash。

本次攻击交易主要由数个Deposit-Withdraw-CollectFees循环构成,每一个循环的示意图如上图所示。根据我们的分析,逻辑如下:

攻击者首先将闪电贷借来的流动性存入机池中,获得一定量的PLPToken。

攻击者将PLPToken转给攻击合约2。

攻击合约2调用机池的collectFees(0,0)函数,设置合约2对应的user.token0Rewards和user.token1Rewards状态。

攻击合约2将PLPToken转给攻击合约3。

和攻击合约2的操作类似,攻击合约3调用机池的collectFees(0,0)函数,设置合约2对应的user.token0Rewards和user.token1Rewards状态。

攻击合约2将PLPToken转回攻击合约,后者调用机池的withdraw函数Burn掉PLPToken,取回流动性。

攻击合约2和攻击合约3调用collectFees函数,用虚假的tokenRewards状态取回了存款奖励。

根据我们的以太坊交易追踪可视化系统给出的交易调用图如下,其中部分重要交易用红字进行标注:

利润分析

本次攻击一共获利:2.56kWETH,96.2WBTC,160kDAI,5.39mUSDC,4.98mUSDT,10.5kUNI,获利共计超过20,000,000美元。

在此次攻击之后攻击者通过首先通过Uniswap和WETH将攻击获得的其他token全部换成ETH,然后通过多次使用Tornado.Cash将ETH洗白。

BlockSec团队以核心安全技术驱动,长期关注DeFi安全、数字货币反和基于隐私计算的数字资产存管,为DApp项目方提供合约安全和数字资产安全服务。团队发表20多篇顶级安全学术论文(CCS,USENIXSecurity,S&P),合伙人获得AMiner全球最具影响力的安全和隐私学者称号(2011-2020排名全球第六).研究成果获得中央电视台、新华社和海外媒体的报道。独立发现数十个DeFi安全漏洞和威胁,获得2019年美国美国国立卫生研究院隐私计算比赛(SGX赛道)全球第一名。团队以技术驱动,秉持开放共赢理念,与社区伙伴携手共建安全DeFi生态。

扫描二维码,关注更多精彩

https://www.blocksecteam.com/

标签:TOKENTOKETOKKENMILF TokenCCB TokenCoinSale Token假imtoken钱包

火星币热门资讯
EFI:DeFi周报 | DeFi一周重要数据&热门项目,看这篇就够了(7.27-8.2)

DeFictory、区块链营销咨询公司WXY、数据提供方OKLink、内容合作方BlockArk推出的一档栏目,从链上数据、二级市场数据、热门项目介绍和一级市场投融资信息四个板块.

1900/1/1 0:00:00
NEX:XT 关于恢复 TBCC-BEP20 充提的公告

尊敬的XT用户:TBCC-BEP20钱包升级已完成,XT现已恢复TBCC-BEP20充值与提币业务.

1900/1/1 0:00:00
TIG:币虎即将暂停NAFTY交易

尊敬的用户:由于NAFTY智能合约升级,币虎将于2021年8月4日18:00暂停NAFTY/USDT交易.

1900/1/1 0:00:00
APP:慢雾 | 钱包安全审计服务全面增加插件钱包安全审计项

近年来,加密钱包安全事件频发。根据慢雾MistTrack所接触的受害者信息收集整理,钱包被盗的事件占比高达60%,显而易见钱包是最有利可图的目标,因此,钱包的安全性至关重要,当然,对钱包进行安全.

1900/1/1 0:00:00
OIN:中币开放YGG和FARM提币业务

尊敬的中币用户:????中币现已开放YGG和FARM提币业务。感谢您对中币的支持与信任!中币运营团队2021年8月4日关注我们:Telegram:ZBEnglish?https://t.me/Z.

1900/1/1 0:00:00
COI:KuCoin上线Solana (SOL)!

亲爱的KuCoin用户:我们很高兴的宣布,KuCoin将上线Solana(SOL)项目并支持交易对SOL/USDT.

1900/1/1 0:00:00