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

POL:[BlockSec DeFi 攻击分析系列之三] 偷天换日:深度剖析 Akropolis 攻击事件

作者:

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

去中心化金融(DeFi)作为区块链生态当红项目形态,其安全尤为重要。从去年至今,发生了几十起安全事件。

BlockSec作为长期关注DeFi安全的研究团队(https://blocksecteam.com),独立发现了多起DeFi安全事件,研究成果发布在顶级安全会议中(包括USENIXSecurity,CCS和Blackhat)。在接下来的一段时间里,我们将系统性分析DeFi安全事件,剖析安全事件背后的根本原因

往期回顾:(1)我为自己代言:ChainSwap攻击事件分析(2)倾囊相送:Sushiswap手续费被盗

0xffffffff.前言

北京时间2020年11月12日夜晚。DeFi聚合器Akropolis遭受攻击,黑客?通过Flashloan重入的攻击方式,盗取了存储在Akropolis中价格超过2,000,000美元的数字资产。本文将以?一笔攻击交易?为例,深度解读此次攻击的原理。

时间:Nov-12-202012:04:02PMUTC#11242695

阅读建议:

如果您刚刚接触DeFi(Ethereum),可以从头看器,但是文章比较长,看不下去记得点个关注再走。

如果您对Akropolis等DeFi聚合器项目比较了解,可以直接从「0x2攻击分析」开始。

加密货币ATM提供商安装量近半年增长60%:加密货币ATM提供商 Coin Cloud 即将安装其第2,000 个售货亭,并将机器放置在位于德克萨斯州的流行杂货连锁店 HEB 的商店中。这家总部位于拉斯维加斯的公司近几个月来一直处于热潮中,其ATM安装量较12月的1,250个售货亭增加60%。(CoinDesk)[2021/6/19 23:49:33]

0x0.背景介绍

2020年可谓是去中心化金融的元年。随着DeFi生态的不断发展,越来越多的DeFi项目上线以太坊。普通用户可以选择自己喜欢的DeFi项目进行投资以获得收益。但是随着DeFi市场的急剧扩张,普通用户面临的一个问题就是在众多DeFi项目中如何选择投资的目标,他们需要有人来帮助他们来进行投资。在这种情况下,一系列资产托管平台、投资组合平台应需而生。Akropolis就是众多资产托管平台中的一个:

普通用户将个人的数字资产投入到Akropolis中,由Akropolis确定投资方向,优化投资策略。Akropolis获得投资收益之后,将收益按比例分配给投资Akropolis的普通用户。以现实中的金融活动举例子,Akropolis就像是基金,其所投资的DeFi项目就是股票,基民购买基金,基金持有股票,获得收益后将收益分配给基民。

0x1.Akropolis机制

OKT突破240美元关口 日内涨幅为9.7%:欧易OKEx数据显示,OKT短线上涨,突破240美元关口,现报240.03美元,日内涨幅达到9.7%,行情波动较大,请做好风险控制。[2021/5/2 21:17:45]

为了便于理解,我们首先简要地介绍一下和此次攻击相关的两个实体合约:Protocolcontract?和?Akropoliscontract

Protocol:Protocol?可以简单地理解为:用户将手中的token投资到?Protocol?中,获得?Protocol?的份额,等到将来?Protocol?中的资产升值了,那么用户便可以从?Protocol?获取到一定的收益

Akropolis:之前我们讲过,由于ETH上的DeFi项目太多了,如果用户要投资多个项目,要么不知如何抉择,要么操作难度比较大,所以Akropolis扮演了一个投资聚合器的角色:Akropolis绑定了多个DeFi投资项目,用户可以很方便地通过Akropolis使用手里的token进行投资:用户只需要简单的调用Akropolis的函数,指定想要投资的protocol,那么Akropolis就会去帮你在不同的protocol中完成投资。

总体的交互逻辑如图所示:

Akropolis提供了两个外部接口:functiondeposit(address_protocol,addressmemory_tokens,uint256memory_dnAmounts)?和?functionwithdraw(address_protocol,addresstoken,uint256dnAmount,uint256maxNAmount)

EOS跌破3美元关口 日内跌幅为4.93%:火币全球站数据显示,EOS短线下跌,跌破3美元关口,现报2.9988美元,日内跌幅达到4.93%,行情波动较大,请做好风险控制。[2020/8/27]

Akropolis.deposit?fucntion:deposit?函数的功能是:

用户调用?deposit。

Akropolis先计算?Protocol?中有多少的token:nBalanceBefore。

Akropolis将用户的token转入到?Protocol?中。

Akropolis再计算protocol中token的数量:nBalanceAfter。

得到用户投资的数量:nDeposit=nBalanceAfter-nBalanceBefore。

通过用户投资的数量计算得到用户投资份额。

Akropolis.depositToProtocol?函数:

Akropolis.distributeYieldInternal?函数和?Akropolis.updateProtocolBalance?函数:

Protocol.normalizedBalance?函数:

BTC跌破9400美元关口 日内跌幅为1.24%:火币全球站数据显示,BTC短线下跌,跌破9400美元关口,现报9399.0美元,日内跌幅达到1.24%,行情波动较大,请做好风险控制。[2020/6/12]

注意,Protocol.normalizedBalance?中的?_registeredTokens=。deposit函数中使用到的?distributeYieldInternal?函数和?updateprotocolBalance?函数的功能都是查询当前?Protocol?函数中所有代币的余额,注意这里面?normalizedBalance?的意思是对余额归一化处理。

用户可以调用?deposit?函数,通过指定?Protocol?和token以及token的amount,将一定数量的代币存入到和Akropolis中,Akropolis根据用户存入的代币数量给用户返还Akropolis的LPToken。随后使用用户投资的token投入到?Protocol?中。

withdraw?fucntion:

用户通过调用?withdraw?函数,取出之前通过?deposit?函数存入的token,获取利息。

0x2.攻击原理

我们注意到,在?Akropolis.deposit?函数中,要先计算?beforeBalance,然后调用token的?transferFrom?函数,将token转到?Protocol?中,最后计算?afterbalance,正常逻辑下这种计算方式是正确的,但是如果攻击者提供的token地址是一个恶意地址,那么在这种情况下,实际有效的token并没有转到?Protocol?账户中,并且?Akropolis.deposit?没有防止重入的机制。这样就使得攻击者可以利用1.token地址未经校验,2.?deposit?函数没有放重入机制来对Akropolis进行攻击。攻击流程图如下:

BBKX交易平台XTZ3L持续上涨 日内涨幅超36%:据BBKX行情显示,BBKX交易平台ETF专区多个币对持续上涨,截至今日20:00(UTC+8),XTZ3L/USDT当前净值0.731美元,日内涨幅36.63%,BNB3L/USDT日内涨幅20.89%,EOS3L/USDT日内涨幅19.04%。

杠杆ETF是一种锚定标的资产价格变化的指数基金。BBKX平台目前已经上线BTC、ETH、EOS、XRP、BCH、LTC、BSV、ETC多个主流币种以及HT、BNB、OKB等平台币。

BBKX成立于2019年6月,以“共创未来,共享红利”为原则,致力于打造专业的衍生品交易平台,已获得节点资本和链上基金的联合战略投资。[2020/3/10]

STEP1:

攻击者首先调用?Akropolis.deposit?函数,传递的token地址参数是一个恶意合约地址。函数内部首先计算?balanceBefore1,然后由于攻击者传递进来的token合约地址是攻击者伪造的faketoken,所以Akropolis紧接着调用了?fakeToken.transferFrom?函数。

STEP2:

在?fakeToken.transferFrom?函数中,该合约再次调用?Akropolis.deposit,传递的token地址就是真实的DAI的地址,所以在第二次调用?deposit?的逻辑是一个正常逻辑:攻击者存入一笔DAI,然后Akropolis根据?balanceAfter2-balanceBefore2?为攻击者mint出对应的LPtoken。注意:这里面?balanceBefore2=balanceBefore1。

STEP3:

在step2结束后,交易控制流返回到第一次的deposit之中,注意:这时候Akropolis计算了?balanceAfter1?并且?balanceAfter1=balanceAfter2,然后根据step1中的?balanceBefore1?计算出?balance?之差,再一次给攻击者mint出LPtokens。

虽然在整个交易中攻击者只给?Protocol?传进去一笔约$25k的DAI,但是由于重入的机制,导致的第二次?deposit?之后?balanceBefore1?没有及时更新,使得Akropolis在函数控制流返回到第一次?deposit?函数中的时候以为攻击者又给?Protocol?转移了$25k的DAI。从而给用户再一次mint出对应的LPtokens。

Others

总体而言,攻击者通过重入构造恶意token合约的方式,在仅仅花费$25kDAI的情况下使得Akropolis以为攻击者存入了$50kDAI,最后取出这50kDAI,完成攻击,获利25kDAI。

Step3中我们提到了其实?balanceAfter2?比?balanceAfter1?小1,这个原因是在deposit的后续操作中会将用户传递进来的token注入到?Curve?的池子之中,而?Curve?的合约中会检查?Curve?之中Token的余额变化,如果说池子的余额没有变化,那么?Curve?就会执行?revert。所在faketoken的?transferFrom?函数中一定要往?protocol?之中转一笔钱,不过数量不限。

可以看出在faketoken的?transferFrom?函数中攻击者向?Protocol?转了1个DAI。

0x3.总结

由于Akropolis并没有对用户传递进来的token参数进行校验,加上?deposit?函数没有防重入,导致攻击者利用伪造的tokencontract重入?deposit?函数,从而达到偷天换日,鱼目混珠,使用少量的DAI换出大量的DAI的效果。

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

https://www.blocksecteam.com/

标签:POLLISPOLISKROpolkadotteddonkeyHalisAkropolisAkropolis

MEXC热门资讯
加密货币:韩国加密交易所关停潮来袭?11家中型交易所或因监管停业

本文来自?TheKoreaHerald,原文作者:ByunHye-jinOdaily星球日报译者|余顺遂行业消息人士8月1日表示,韩国本地中型加密货币交易所正在关闭.

1900/1/1 0:00:00
COM:中币暂停BSV充值和提币业务

尊敬的中币用户:????由于BSV钱包维护,维护期间暂停BSV的充值和提币业务,给您带来的不便敬请谅解!????感谢您对中币的支持与信任!中币运营团队2021年8月4日关注我们:Telegram.

1900/1/1 0:00:00
OMC:OMCHF MEME创意挑战,赢取800 OMCHF

尊敬的用户:币虎交易平台携手项目方带来了800OMCHF活动福利,详细规则如下:活动:MEME创意挑战.

1900/1/1 0:00:00
NEX:XT 关于上线 REVO的公告

尊敬的XT用户:XT即将上线REVO,充提已开通,并于2021年8月2日14:00在创新区开放REVO/USDT.

1900/1/1 0:00:00
ITA:一站式数字资产管理平台 Aspen Digital 完成 880 万美元融资,RIT Capital Partners 和 Liberty City Ventures 领投

链闻消息,一站式数字资产管理平台AspenDigital宣布完成880万美元Pre-A融资,由英国投资信托基金RITCapitalPartners和LibertyCityVentures领投.

1900/1/1 0:00:00
GAGA:关于ZT创新板即将上线GAGA的公告

尊敬的ZT用户:ZT创新板即将上线GAGA,并开启GAGA/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年8月3日16:00;GAGA项目简介:GAGA(Opengaga)?是.

1900/1/1 0:00:00