比特币
Ctrl+D收藏简单区块链

表里不一:Sanshu Inu的Memestake合约遇袭事情剖析_以太坊

作者:

时间:2021/8/2 20:46:45

表里不一:Sanshu Inu的Memestake合约遇袭事情剖析

中国北京时间2021年07月21日03:40,大家的进攻监测系统检验到某一交易出现异常。根据对该交易开展拓展剖析,大家发觉它是一起利用通货紧缩代币(deflation token)KEANU的体制对Sanshu Inu布署的Memestake合约的奖赏电子计算机制的系统漏洞开展进攻的事情,攻击者最终盈利ETH约56个。下边深入分析以下:

近年来爆红的比特币(DOGE)、秋田犬币(SHIB)引起了普遍的关心,与此同时带爆火别的有关的meme币,更引起了很多的新项目方开发设计自身的meme币及紧紧围绕meme币给予服务项目,在其中Sanshu Inu便是在其中一员。Sanshu Inu不但发售meme币SANSHU,还建立了合约Memestake做为meme币的耕地池。客户只需往Memestake中质押贷款meme币,就可以得到代币Mfund做为奖赏。

另一方面,很多的meme币全是通货紧缩代币,即这种代币的投放量会慢慢降低。在其中一部分meme币的通货紧缩完成方式是在客户每一次开展交易转帐(transfer)的情况下扣去一定占比的币用以消毁和初次分配,这将造成接受方具体接到的token总数低于开支方具体付款的总数。此次涉及到的通货紧缩代币KEANU便是选用这类完成。

该进攻的大概基本原理便是根据操纵Memestake开展KEANU的数次转到转出降低其拥有的KEANU总数,进而利用其奖赏测算函数的系统漏洞导致Memestake给攻击者推送很多Mfund。

为了更好地有利于了解,大家最先简短地介绍一下和本次进攻有关的2个实体线合约:KEANU代币的 KeanuInu 合约和 Memestake 合约。

KeanuInu 合约

如同前边常说,KeanuInu在完成代币KEANU的转帐时,会扣去一定占比的币用以消毁和初次分配,在其中用以消毁的占比设定为时间常数——2%。如图所示,在启用KeanuInu的transfer()及transferFrom()函数的情况下,函数启用中表明的转帐总数跟emit的事情log中纪录的总数并不一致。

其因为其具体编码完成比较繁杂,这里不会再展现,有兴趣的盆友能够依据后边附则得出的合约详细地址在etherscan.io自主查询合约完成。此外,上边二张截屏来自大家自主开发设计的交易分析专用工具,现阶段对外开放首测中。热烈欢迎诸位点一下https://tx.blocksecteam.com:8080/使用。大家的专用工具将函数启用与全过程中造成事情log融合展现的方法,针对剖析通货紧缩代币等难题更有协助。

Memestake 合约

下面的图是MemeStake的deposit函数。函数最先调用updatePool升级资金池情况,随后将客户的token转帐为自己。当传到的_amount大于0的时候会在编码的1295行开展转帐。

殊不知,因为KEANU token的通货紧缩特点,尽管启用safeTransferFrom函数时传到的额度是amount,可是事实上转到资金池的额度低于amount。而且在编码剖析中大家注意到,transfer的到达站是自身,换句话说针对MemeStake而言,全部客户的某一货币(如KEANU token)的储蓄都归属于MemeStake。

在转帐后的1296行,MemeStake会对客户的储蓄开展备案,但这儿备案选用的依然是amount(而真正的转帐量低于amount),因而客户真真正正的储蓄成交量放大备案的user.amount更小。

最终在1299行,能够看得出user.rewardDebt主要参数也是依据(比真正值要大的)user.amount来测算的。

下面的图是MemeStake的withdraw函数。该函数最先会查验user.amount是不是也有充足的账户余额,但因为user.amount自身比真正值大,因而这儿的查验不是精确的。下面,一样会调用updatePool函数升级资金池情况。

在1321行,withdraw函数会先扣减在user.amount中备案的账户余额,随后启用transfer函数把token转到客户。和deposit函数一样,这儿的逻辑性一样存在的问题,因为每一次转帐都是会导致通货紧缩,因而转入客户的总数会低于具体的转帐量。

最终看来MemeStake的updatePool函数。最先从1255行能够看得出,每一次启用会纪录上一次升级的blockNumber,假如本次启用的区块链和之前升级时同样,则会立即回到,换句话说updatePool对每一个区块链只能升级一次资金池情况。

下面在1259行,会获得MemeStake本身在token合约中的账户余额(上文提及,每一次客户deposit都是会将token转入MemeStake)。最终在1275行,会利用这一账户余额做为真分数,测算该资金池每一次deposit和withdraw的奖赏(也就是pool.accMfundPerShare主要参数)。测算方法以下:

pool.accMfundPerShare = mFundReward / token.balanceOf(MemeStake)

返回withdraw,大家看来存取款奖赏代币Mfund是如何转帐的。最先在图中withdraw函数的第一325行,测算客户是不是有pending的Mfund token沒有派发,计算方法为:

rewardMfund = user.amont * pool.accMfundPerShare / 1e18 - user.rewardDebt。

而rewardDebt是那样测算的(图上第一325行):

user.rewardDebt = user.amount * pool.accMfundPerShare / 1e18

因而,从编码中大家不会太难结构出一种很有可能的进攻:

最先,在一个交易内,根据不断启用deposit和withdraw函数,吸干MemeStake的资金池。这一实际操作利用了三个编码难题:

最先,user.amount的记帐比真正值多,因而每一次withdraw都能够取得成功。

第二,MemeStake中全部客户的资产都是在一个养金鱼的鱼缸中,因而每一笔转帐事实上Burn掉的是养金鱼的鱼缸中别的用户存进的KEANU token。

第三,因为updatePool在同一个块中不容易开展情况升级,因而不容易危害pool.accMfundPerShare主要参数,也不会造成Mfund token的reward。

下面,在下一个区块链时,立即启用withdraw函数。

根据对updatePool函数的剖析得知,这时会造成养金鱼的鱼缸情况的升级,且因为前一步实际操作吸干了MemeStake的资金池,token.balanceOf(MemeStake)极低,造成了极大的pool.accMfundPerShare。

接着在withdraw函数的第一315行,测算出的Mfund reward量十分大,造成高额的Mfund收益。

0x2. 进攻剖析

前边详细介绍了系统漏洞诱因及系统漏洞的利用方法,大家下面详细介绍攻击者具体是怎样开展进攻的。

如下图所示,进攻能够分成4步,在其中重要进攻流程为第2步,利用通货紧缩代币的特点控制Memestake的奖赏测算。

第一步(提前准备),最先攻击者建立了2个合约并开展复位,在其中合约一为主要表现一切正常的项目投资合约,攻击者根据合约一往Memestake存进约2,049B KEANU ,为流程3盈利很多MFUND奖赏搞好埋下伏笔。合约二为控制Memestake的奖赏测算的合约,先开展了有关token的approve实际操作。

第2步(控制),攻击者先从uniswapV2中flash loan很多的KEANU代币,随后根据合约二往Memestake中数次deposit 和withdraw大量KEANU,造成Memestake迫不得已很多交易KEANU。因为KEANU是一种通货紧缩代币,每一次交易会烧毁2%的交易额,导致用户真真正正存进Memestake的成交量放大备案的user.amount更小,取下时也是依照user.amount转入客户(详细编码剖析),造成Memestake养金鱼的鱼缸中KEANU的代币拥有量持续降低,最后为1e-07。如下图所显示,涉及到交易为0x00ed,交易截屏未彻底,请自主依据交易查询。

第三步(盈利),攻击者最先根据合约二启用了Memestake.updatePool()函数,改动了KEANU所属养金鱼的鱼缸的accMfundPerShare,因为该值依靠于池子所拥有的KEANU的代币量,而这在第二步中被控制了(实际公式计算见下边编码剖析)。这促使合约二在下面withdraw的情况下能够得到远超标准值的Mfund(约61M)这类token做为奖赏。第三步产生于交易0xa945中,与此同时攻击者逐渐将一部分得到的MFund换为WETH等代币。

第4步(结束),攻击者将得到的MFund、KEANU等代币换为ETH,并根据Tornado.Cash迁移走,到此进攻完毕,攻击者从这当中盈利ETH 55.948457815835七个(攻击者的EOA详细地址及布署的进攻合约还残余有一部分SANSHU和KEANU代币未记入),约10万美元。

下边另附进攻详细地址0x0333的交易截屏,交易截屏未彻底,请依据详细地址自主查看更多(详细地址及交易详细文章内容结尾)。

Others:

有意思的是,进攻的第2、3步都和flashbots交易相关。

在其中第2步涉及到的交易0x00ed因为选用了UniswapV2 flashloan,且交易前后左右等同于用约38ETH去选购了KEANU,从而造成了非常大的对冲套利室内空间。因而此笔交易遭受另一名攻击者的三明治进攻(sandwich attack),即本事情的攻击者也是另一个三明治事情的受害人。该三明治攻击者盈利3.2769697165652474ETH,可是给了挖矿2.405295771958891249ETH,净盈利0.8716739446063562ETH。

而第3步进攻涉及到的交易0xa945则因为在uniswap养金鱼的鱼缸中很多卖出MFund,造就了对冲套利室内空间,因此 被back-running而变成flashbots交易。该searcher盈利0.13858054192600666ETH,在其中交到挖矿0.099085087477094764ETH,净盈利0.03949545444891189ETH。

因为UniswapV2里将flash loan的完成与一般的Swap融合在一起,实际的完成基本原理及为何从而造成第2步存有对冲套利室内空间能够参考大家的paper Towards A First Step to Understand Flash Loan and Its Applications in DeFi Ecosystem (SBC 2021). 连接https://www.blocksecteam.com/papers/sbc21_flashloan.pdf

攻击者利用通货紧缩代币的特点操纵了服务平台拥有代币的总数,危害了奖赏代币的测算派发,从而盈利ETH 55.9484578158357个。而这缘故取决于,Sanshu Inu服务平台在引进通货紧缩代币时欠缺一定的安全性考虑,造成攻击者有时间可趁。

从而,大家给相关新项目方的安全性提议有:

1. 对项目引进的代币理应有充足的了解,或是根据创建授权管理的体制对交互的token开展限定。近几年来,早已有几起安全性事件与没加限定的token或是交互的token有什么问题相关,如近期的BSC链上的Impossible Finance事件,大家这一系列产品上一篇Akropolis攻击事件,2020-11-17的Origin Dollar事件及2020-06-28的Balancer事件等。尤其是与通货紧缩代币的交互,当在该事件产生没多久后,PeckShield也汇报了一起产生在polygon链上一样运用通货紧缩代币及奖赏测算系统漏洞的安全性事件——PolyYeld事件。

2. 项目发布前,必须找有资质证书的安全性企业开展网络安全审计。我们可以见到,因为defi的money lego特性,许多 defi项目中间能够随便组成,进而造成了相互之间危害,而这恰好是defi行业安全性事件高发的缘故。因而,项目方所需关心的安全隐患不仅限于自身项目,也一样必须考虑到在与别的项目交互全过程中存有的网络安全问题。

攻击者EOA详细地址:

0x0333e323e61aa8afa38a1623604a165dcb9f4fec

攻击合同一:

0x67a54b340392e661af8f757ba03674ede40d9dc3

攻击合同二:

0xe30dc9b3c29534e9b4e9a166c2f44411163ad59f

攻击第2步买卖0x00ed: 

0x00edd68087ee372a1b6e05249cc6c992bb7b8478cc0ddc70c2a1453428285808

攻击第三步买卖0xa945:

0xa945b1857630e730bd3fac6459c82dee44da45e35cfbbd6dfb7b42146e8dde41

受害人Memestake详细地址:

0x35c674c288577df3e9b5dafef945795b741c7810

代币KEANU详细地址:

0x106552c11272420aad5d7e94f8acab9095a6c952

代币Mfund详细地址:

0xddaddd4f73abc3a6552de43aba325f506232fa8a

0x

标签:

区块链热门资讯
孟岩:以NFT搭建价值互联网_以太坊

孟岩:以NFT搭建价值互联网 近期数字货币销售市场总体归属于大牛市情况,在其中或是展现出一些闪光点,部分发生了很好的提高征兆,很多高提高种类与NFT、跟gamifi(游戏化金融业)有关。NFT究竟是什么?大家融合自身的科学研究,给大伙儿做一些理论上的讨论。 2017年的情况下,我跟元道教师把Token这一英语单词译成通证,在领域内得到了认同和接纳。

2021/8/2 20:58:49
肖风:元宇宙可能发生新一代互联网平台_以太坊

肖风:元宇宙可能发生新一代互联网平台 小伙伴们好,我今天要共享的主题风格是“元宇宙:下一代互联网平台”。下一代的互联网平台是哪些的互联网平台呢?我将它称之为“数字互联网”。回首过去一百年的技术性发展趋势,起先CT技术性的发展趋势产生了通信网络。下面,电子计算机、互联网技术等IT技术性的完善产生了网络信息。

2021/8/2 20:58:22
以Starcoin为例子 分析区块链项目怎样运用PoW做组成自主创新?_以太坊

以Starcoin为例子 分析区块链项目怎样运用PoW做组成自主创新? 纵览区块链项目的演变史,改进和自主创新早已变成必定。 前有以太坊明确提出智能化合约产生区块链技术2.0与“全球电子计算机”,后有Polkadot以无线中继链共享资源安全性创建对映异构分块构架。

2021/8/2 20:29:15
DFINITY周刊第5期:第一个NFT贸易市场 生态采访等_以太坊

DFINITY周刊第5期:第一个NFT贸易市场 生态采访等 DFINITY周刊是由DfinityClub推出的內容版面,聚集近一周DFINITY以及生态运用有关的关键/今日热点。 DFINITY的重任是要打造出一款具有无尽扩充工作能力的基层民主分布式系统云计算技术互联网,让互联网维持高效率的与此同时具有区块链技术不能伪造、区块链技术及其安全性的特点。

2021/8/2 19:55:09
怎样在Cherry Swap早鸟阶段开展mining并获得盈利?_以太坊

怎样在Cherry Swap早鸟阶段开展mining并获得盈利? 欧易OKEx打造出的智能化链OEC总算宣布上线,一时间也不断涌现了许多DeFi新项目。 Cherry Swap就是在其中的引领者,也是OEC上DEX跑道的领头新项目之一。 Cherry Swap发布于7月28号22时,发布的前七天归属于早鸟阶段,以后是官方阶段1和官方阶段2。

2021/8/2 19:38:32