宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > Polygon > 正文

BlockSec DeFi 攻击系列之五以假乱真:DODO V2 众筹池造袭事件分析

作者:

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

去中心化金融(DeFi)作为区块链生态当红项目形态,其安全尤为重要。从去年至今,发生了几十起安全事件。BlockSec作为长期关注DeFi安全的研究团队(https://blocksecteam.com),独立发现了多起DeFi安全事件,研究成果发布在顶级安全会议中(包括USENIXSecurity,CCS和Blackhat)。在接下来的一段时间里,我们将系统性分析DeFi安全事件,剖析安全事件背后的根本原因往期回顾:(1)我为自己代言:ChainSwap攻击事件分析(2)倾囊相送:Sushiswap手续费被盗(3)偷天换日:深度剖析Akropolis攻击事件(4)表里不一:Sanshulnu的Memestake合约遭袭事件分析0x0.前言

北京时间2021年3月9日凌晨,以太坊(Ethereum)去中心化交易平台DODO的多个V2众筹池遭到攻击,攻击者利用众筹池的合约漏洞,用自己创建的token套出了池内的token,上演了一出狸猫换太子的把戏。只不过,从之后的分析来看,事情的发展显然偏离了攻击者的预期轨道……如果您是个以太坊小白又恰巧喜欢看故事的话,可以从下面的0x1开始阅读。如果您喜欢简单直接的攻击分析的话,那可以下拉到0x2开始阅读。接下来,就让大家跟我一起来看看攻击者到底做了什么,而当时又到底发生了什么。为了便于后文的讲述,就管这次的攻击者(Attacker)叫做小A吧。0x1.事件回顾

“攻击成功了吗?成功了,但没完全成功。”这可能就是小A当时的心理写照Nocode,nobug有代码的地方,就可能有漏洞。智能合约虽然被人们冠以“智能”二字,但归根到底也是一段段的代码,因而也总被别有用心的人揪住它的漏洞搞一波钱实现财富自由。我们这次故事中的智能合约,就是DODO的V2众筹池合约。而我们的主角小A,就是那个发现了该合约漏洞并试图趁机搞钱的人。0x1.1概念简析

提了这么多次DODOV2众筹池,那它到底是个啥玩意儿?简单来说呢,它就是个资金池,只不过本文中的资金所指代的并非我们日常接触到的法币,而是以太坊上的代币(ERC20token)。这种资金池在初始化的时候会设定两种链上有价值的ERC20token作为这个池子的tokenpair,然后用户可以正常使用这些池子提供的服务。在这次小A针对DODOV2众筹池的攻击中,就是利用了该池子提供的闪电贷(flashloan)服务。闪电贷(flashloan)相比于普通借贷,具有无需抵押即可借贷大量资金,加之还不上钱就状态回滚的特点。简单来说就是可以空手套白狼,要是最后借出的钱自己一通操作之后亏了还不上也不打紧,所有相关状态会回滚到借贷之前,而对于借贷者来说唯一的损失除了手续费之外,可能就只有时间了。使用闪电贷的逻辑也很简单,就是用户从资金池借钱-->对借来的钱进行操作-->还钱,而这些需要在一笔交易中完成。Ok,简单了解完相关的概念之后,咱接着看小A的操作。0x1.2小A的骚操作

BlockFi CEO:未直接持有GBTC,仅有几笔以GBTC为抵押品小额贷款:7月12日消息,BlockFi首席执行官Zac Prince在发推表示,BlockFi目前没有直接持有GBTC,BlockFi有几笔以GBTC作为抵押品的小额贷款(如低于1000美元)且正在逐步退出。

据悉,BlockFi与三箭资本此前一度是GBTC最大持仓机构,据此前Grayscale曾经披露的SEC Form 13F文件,仅BlockFi和三箭资本两家机构的GBTC持仓占比一度达到了11%(机构持有比例占总流通不超过20%)。[2022/7/12 2:07:10]

小A接下来做了两件事儿。第一件事儿就是创建了两个ERC20token的合约,说白了就是造了俩假币(因为没价值),分别叫做FDO和FUSDT.创建完这俩假币之后呢小A就把它们存入到之后将被攻击的DODO池子里了。小A做的第二件事儿就是使用了DODOV2众筹池的闪电贷(flashloan)服务。上文提到闪电贷使用逻辑中的一环就是对借来的钱进行操作,而本文的主角小A就是在这一环节上玩儿出了花样。小A发现这个DODOV2众筹池是可以被重新人为初始化的,而且没什么限制。接着小A就在借出钱之后把这个池子重新初始化了,并且初始化时设定的tokenpair变成了小A自己造的俩假币FDO/FUSDT(这就是之前提到的考点,现在考到了吧)。并且小A在借钱之前已经通过上文他做的第一件事儿把足量的两种假币都预先存入到了这个池子里,这就导致池子在检查小A欠钱情况的时候,所检查的token不再是之前的真币,而是小A存入其中的假币,加之数额也足够。这样一来小A就用假币套出了真币。咱们可以对上述过程打个简单的比方,细节按下不表。就是有一家银行,这个银行就可以类比上文提到的资金池。同时该银行也有一个小本本拿来记账,只不过在小本本的首页有一条记录。至于其他的币种,美元也好,越南盾也好。用户也可以往里面存,但银行不管你,它的小本本上虽然也会记账,但核对时它只看涉及到人民币的记录。为了类比众筹池可以被重新初始化的问题,可以这么理解。就是这个小本本有个问题,问题出在首页的这句的规定是用铅笔写的,并且这个小本本就放在窗口,外人拿个橡皮擦+铅笔就能改。然后这个问题被小A发现了,他先往这个银行存了100越南盾,银行会记账。然后小A又去银行借出100人民币,银行又记账。注意银行会检查所有用户对人民币的借存情况并和储备量比对,从而确认是否有用户借了人民币但没还。刚借完钱,小A就鸡贼地掏出准备好的铅笔+橡皮将小本本首页的规定改为了。然后银行核对金额的时候,因为规定改为了只处理越南盾,而查验的时候发现越南盾的储备量和小A存入的越南盾数额是一样的,说明没人欠银行钱。然后小A拿着借出来的人民币潇洒离去,不再回头。小A针对DODOV2众筹池的攻击思路就如上文所述,小A接下来要做的就是把想法付诸实际行动。本文从合约代码层面要分析的攻击也就是上述提到的攻击,然而咱的故事还没完。不想接着看故事的看官可以直接下滑到0x2的攻击分析部分,剩下的看官,就请容我接着给您讲故事。0x1.3攻击过程:山路十八弯

HIVE Blockchain2022财年第一季度挖矿总收入为3720万美元:10月4日消息,上市矿企HIVE Blockchain公布截至2021年6月30日的第一财季业绩,第一财季数字货币挖矿的总收入为3720万美元,比去年同期增长466%,比上一季度增长11%,净收入达到创纪录的1860万美元,高于去年同期的180万美元,比上一季度高出430万美元,挖矿毛利润从去年的260万美元扩大至3100万美元,比上一季度的2770万美元高出330万美元。HIVE Blockchain在该季度开采了225枚比特币和超过9700枚以太坊。(coindesk)[2021/10/4 17:23:24]

第一回.螳螂捕蝉黄雀在后咱书接上文。项目方也就是DODO采用相同的逻辑创建了多个池子,而这些池子都有同样的漏洞。小A第一次瞄准的池子是(WSZO/USDT)池,WSZO和USDT就是两种有价值的代币(ERC20token)。他美滋滋的把自己的攻击逻辑写入一笔交易之后,就准备躺着收钱,可就在这时,出岔子了。咱知道,以太坊上的交易存在交易费,这笔费用是用户支付给矿工的。所以矿工为了自身利益最大化,当他们从pengding池打包交易准备上链时会查看各条交易的交易费并排个序,交易费高的优先上链。而由于以太坊的去中心化机制,黑暗森林法则在这也同样适用。DeFi(去中心化金融)项目的攻击者、套利者抑或抢跑者潜伏在世界各地,一旦发现目标,就会一拥而上,至于最后谁能成功,除了技术等因素,就得看谁出的交易费高了。回到主角小A,他发现了漏洞准备趁机搞一波钱,可小A的举动被另一个角色--抢跑机器人--发现了,咱称这个抢跑机器人为小B吧。小B就在交易费上做了文章,他把交易的油费(gasprice)提高了,从而增加了这笔交易的交易费。这就使得矿工在打包交易的时候优先打包了小B的交易。一般把小B的这种操作叫做抢跑交易(frontrunning)。等轮到打包小A交易的时候,WSZO/USDT池子里的WSZO和USDT已经空空如也,只剩下一堆没啥价值的(FDO/FUSDT)。小A可能以为这一次的失败只是一次普通的抢跑交易,于是他又故技重施。只不过这次的目标换成了(ETHA/USDT)池,而且为了防止被抢跑,在这一次的交易中小A提高了交易的油费(gasprice)。可小A不知道的是,他已经被小B盯上了。同样的套路,同样的手法,小A又一次被小B抢跑了交易。第二回.半路杀出个程咬金到目前为止,小A两次攻击都是给小B做了嫁衣,甚至自己还亏了交易费!小A那个气啊,于是痛定思痛,把目标瞄向了下一个池子(wCRES/USDT)。并且这一次小A成功的绕过了小B的监控。事情发展到现在似乎小A就要成功了,可现实就是喜欢和小A开玩笑。第三次攻击虽然绕过了小B,但小A把钱成功取出来之后并没有直接转移到自己的地址,而是创建了一个新合约来接收这笔钱。小A的想法是先把钱暂存在这个新合约内,之后再转移到自己的账户中。然而,小A的这个用来暂存赃款的合约又有个漏洞,就是任何人都能从这个合约中取出(withdraw)合约内的资金。However,thiscontracthadaloopholethatallowedanyonetowithdrawassetsfromit.而恰巧这个漏洞,被另一个角色(小C)发现了。于是,在小A发出一笔交易准备从这个合约中取回赃款的时候,又双叒被抢跑了,这不过这一次抢跑者变成了小C。看到这,小A既是攻击者,又是抢跑交易的受害者。这波啊,小A算是偷鸡不成蚀把米。第三回.倔强的小A前文提到,具有同样逻辑漏洞的池子有多个。小A又双叒叕准备发起他的第四次攻击了,这一次,目标换成了(DODO/USDT)池。这一次小A学聪明了,一方面他将暂存赃款的合约替换为了新合约,另一方面小A也将代币(token)转移的过程合并在了一笔交易中,以免出现像第三次攻击中被小C抢跑的情况。而这一次,不撞南墙不回头的小A终于成功用假币(FDO/FUSDT)搞到了真钱(DODO/USDT)。第四回.疯起来连自己都咬四次攻击终获成功之后小A满足了吗?事实告诉我们答案是否定的。不知道小A是怎么想的,可能是历经曲折终于成功导致兴奋过头。这第五次攻击,他的目标瞄向了(wCRES/USDT)池。是不是有点眼熟?没错!这个池子正是小A在第三次攻击中的目标池子。而经过第三次攻击的洗劫之后,这个池子已经从(wCRES/USDT)池变为了(FDO/FUSDT)池,即真币池成了假币池。因而在这一轮攻击中,小A用同样的攻击套路得到的结果无非就是拿着新假币去换旧假币……而这俩假币还都是小A自己造的。可能,小A还是个怀旧的人吧……咱们关于小A的故事,也走向了尾声。或许以太坊(Ethereum)对于攻击者而言就是一片黑暗森林,猎手与猎物的身份在这个特殊的竞技场也并非一成不变。终要记得,当你在凝视深渊的时候,深渊也在凝视着你。ok,接下来就是正儿八经的攻击分析环节了。准备好了吗?坐稳扶好,发车了。0x2.攻击分析

动态 | LoanScan和Bloqboard背后团队推出带有DeFi后端的银行服务应用Linen:加密借贷公司Bloqboard和加密货币数据提供商LoanScan背后的团队正在推出一款名为Linen的银行服务应用。该应用整合了DeFi功能,目标是通过减少借贷过程中对多个DApp的需求来降低普及加密的障碍,从而让非加密用户更容易接触到加密货币。Linen最近还完成了一轮金额未披露的融资,参投者包括Polychain、Coinbase、Wyre和Hashkey,其中Hashkey为战略性投资。需要注意的是,Linen并未对纽约居民开放服务。(The Block)[2019/9/21]

为便于理解,下文将以第三次攻击为例子来进行分析,涉及到的池子为(wCRES/USDT)池0x2.1代码分析

以下提到的函数都来源于资金池(wCRES/USDT)的合约代码,并且在本次攻击事件中被涉及。0x2.1.1getVaultReserve函数

首先来看getVaultReserve函数,这个函数的功能很简单,就是当用户调用它的时候会返回当前池子里tokenpair的储量。0x2.1.2flashloan函数

上图就是本次攻击中资金池合约的flashloan函数。可以看到当用户调用这个函数时,会先根据用户传入的baseAmount和quoteAmount这两个参数将相应数量的token转入参数assetTo所代表的地址。到此,就算是完成了闪电贷(flashloan)的借钱环节。顺着代码往下看,只要data不为空,就会触发外部逻辑。而这个外部逻辑,就是调用者自己实现的,本次攻击的实现,也正是在这个外部逻辑执行时做了手脚。0x2.1.3init函数

声音 | BlockTower Capital联合创始人Ari Paul:比特币不太可能被快速、功能丰富的加密资产取代:据newsbtc消息,加密投资公司BlockTower Capital的联合创始人Ari Paul表示:比特币(BTC)资产规模比其自己的底层区块链更大。他解释称:“如果比特币只是在其网络上进行交易,那将是一个问题,因为比特币区块链是第一代技术,吞吐量和功能有限。但是,BTC可以用于其他协议和网络。” 例如,加密货币最近开始在所谓的“侧链”和“第二、第三等等层”中使用。Paul以闪电网络为例,解释说第二层协议允许“大量快速、廉价的比特币转账,由主要的比特币链进行结算和保护”。 尽管闪电网络提升比特币作为加密货币地位的存在理由至关重要,但Paul指出,他相信随着时间的推移,用户将开始利用基于比特币的侧链、驱动链和其他解决方案。考虑到这一趋势的重要性,以及它对区块链/加密资产的影响,Paul表示:“比特币的可编程性质意味着,比特币不太可能被提供渐进式改进的竞争性协议淘汰。它不局限于比特币区块链的功能或吞吐量限制。” 因此,加密货币不能简单地通过“添加功能,或以不断提高的交易吞吐量”来取代比特币的长期霸主地位,而是要利用不同的治理和共识机制、货币模型或安全模型。[2019/2/10]

上图就是本次攻击中最为关键的初始化函数init.可以注意到该函数是外部调用的,而且最关键的是,这个函数有以下两个特点:这就意味着任何人都可以从外部调用这个函数。则意味着这个init函数除了在该池子建池时被必要的调用一次后,仍然可以在任何时候被调用来重新初始化这个池子。调用者调用这个函数时,所传入的两个参数baseTokenAddress和quoteTokenAddress会被用来给变量_BASE_TOKEN_和_QUOTE_TOKEN_分别的重新赋值。而这两个变量的改变就意味着这个池子的tokenpair也会发生改变。而这,便是wCRES/USDT池变FDO/FUSDT的原因。0x2.2攻击过程

动态 | Block.one 发起基于 EOS 的DApp 项目采访系列 KARMA已接受采访:据 IMEOS 报道,Block.one 发起了基于 EOS 的杰出 DApp 项目采访系列,名为:BuiltOnEOSIO。基于EOS的Dapp项目 KARMA 已接受 Block.one 的采访。KARMA 是一个激励用户做出善行的APP,在有益的人类互动和代币激励之间创造一个积极的反馈循环。创始人 Dallas Rushing 设想道:KARMA 有能力改变慈善机构在世界各地的完成和组织方式。

关于DApp项目详细信息可参考DApp信息聚合平台:imeos.one[2018/7/5]

攻击交易的流程如下图所示

Step2攻击者根据Step1得到的储量,分别调用两个假币合约的transferFrom函数给资金池合约(DLP)转入略多于该储量的假币(FDO和FUSDT),从而保证能通过flashloan函数的余额检查。

Step3攻击者接着调用资金池合约(DLP)的flashloan函数,借出了略少于资金池储量的真币(wCRES和USDT)。

Step4flashloan函数在将wCRES和USDT转入到攻击者预先设置好的合约地址之后,会自动调用攻击者的外部逻辑。而攻击者就是在外部逻辑的实现中调用了wCRES/USDT这个池子的初始化函数init,将该池子的tokenpair替换为了FDO/FUSDT。

0x3.总结及安全建议

本次攻击之所以发生,最主要的问题出在DODOV2众筹池的init函数上。查看该函数的调用情况可以发现,正常的逻辑应该是该函数只能在刚建池的时候被调用一次,之后就应该设置访问权限,同时也不能被重复调用。攻击者就是利用了init函数可以被重复调用来重新初始化池子的这一漏洞,结合闪电贷(flashloan)将池子中的真币用假币套取了出来,从而完成了攻击。因此,我们给相关项目方的建议有:对项目合约的关键功能做好权限审核工作,以免核心函数由于权限要求过低被滥用引发不可预料的后果从而造成损失。提高项目代码审计意识,项目上线前需咨询相关的区块链安全公司进行充分的安全审计,最大程度的保证项目安全。0x4.参考

慢雾:狸猫换太子——DODO被黑分析DODOPoolIncidentPostmortem:WithaLittleHelpfromOurFriendsImportantupdateregardingrecenteventsonDODODODO-REKT0x5.附录

文中涉及的外部地址和合约地址

攻击者A抢跑者B抢跑者C资金池DLP(WSZO/USDT)资金池DLP(ETHA/USDT)资金池DLP(wCRES/USDT)资金池DLP(DODO/USDT)文中涉及的交易

第一次攻击A的攻击交易(fail)B对A的抢跑交易第二次攻击A的攻击交易(fail)B对A的抢跑交易第三次攻击A的攻击交易C的抢跑交易(抢跑了A对代币USDT的转移)A被C抢跑的代币(USDT)转移交易C的抢跑交易(抢跑了A对代币wCRES的转移)A被C抢跑的代币(wCRES)转移交易第四次攻击A的攻击交易第五次攻击A的攻击交易

标签:SDTUSDUSDTBLObtc交易平台usdtusdt币提现到银行卡会冻结吗usdc币与usdt币哪个好RunBlox

Polygon热门资讯
Loot (for Adventurers) TOP 10|不一样的「NFT」

“Loot”是随机生成的冒险者装备,并存储在区块链上。统计数字、图像和其他功能被有意省略,供他人解释.

1900/1/1 0:00:00
在Wault Finance上提供ZIG-WUSD 流动性并赚取WEX教程

ZIG已登陆BSC上的WaultFinance,用户可通过提供ZIG-WUSD的流动性来获取奖励。可以登陆https://app.wault.finance/bsc/index.html#overview去为交易对提供流动性.

1900/1/1 0:00:00
从青铜变王者:一文快速了解元宇宙

嗨bro,今天,你“元宇宙”了没?“元宇宙”——币圈新晋标杆流行语,盘踞各大媒体撰文、社群起名导流、商务侃侃而谈、酒桌凡尔赛的TOP热词,是高质量币圈人的“身份证明”,一旦聊起元宇宙的,大家彼此心领神会,“哦.

1900/1/1 0:00:00
链游项目对比分析

链游项目对比分析报告:2022年链游总交易量54.1亿美元,未来10年复合年均增长率达到68.90%:4月21日消息,Polaris Market Research报告显示,区块链游戏总交易量在2022年达到54.1亿美元.

1900/1/1 0:00:00
Envoy Network:「UNFT」可以提升NFT实用性 | N-POWER

今天下午,《N-POWER第一届OdailyNFT线上加密论坛》成功举行。本次活动邀请到多个热门链游项目、加密艺术交易平台、新生态公链、知名投资机构等参与活动,揭秘市场投资趋势,展望NFT生态前景.

1900/1/1 0:00:00
分析师Willy Woo:比特币价格正在追赶指标,其保守价格应该至少为5.5万美元

根据衡量其所谓“供应冲击”的一个指标,比特币的价格应该至少为每枚55000美元。在9月5日的一条推文中,分析师WillyWoo强调,他补充的是对BTC/USD的“保守”价格估计.

1900/1/1 0:00:00