- A+
雍和比特币 5月20日,certik的安全技能团队发现硬币安全智能链的defi收入聚合器pancake Bunny(Bunny)遭到flash loan的进犯,导致令牌flash溃散。在这起事情中,共有114631只BNB和697245只兔子丧生,按现在的价格核算,丢失约为4200万美元。依据certik安全团队的查询,因为该协议运用pancakeswap AMM核算财物价格,黑客歹意运用flash loan操作AMM池价格,并运用Bunny在投币时的核算问题成功完结进犯。突击是怎样产生的?在这次进犯中,进犯者共取得了8笔闪电借款。其间7笔闪贷来自pancakeswap流动性池的BNB,另一笔来自forTube银行的usdt。技能细节剖析在本文中,certik安全专家添加了一个地址标签(如下图所示),以使令牌流更明晰。进犯者地址:https://bscscan.com/address/0xa0acc61547f6bd066f7c9663c17a312b6ad7e187进犯者运用的合同地址:https://bscscan.com/address/0xcc598232a75fb1b361510bce4ca39d7bc39cf498买卖1:https://bscscan.com/tx/0x88fcffc3256faac76cde4bbd0df6ea3603b1438a5a0409b2e2b91e7c2ba3371a在第一笔买卖中,进犯者做了两件事:① BNB转化为美元,BNB转化为美元。② 将usdt bnb flip 放入兔子池。进犯者将flip存入资金池,以便在稍后调用vaultfliptoflip合约中的draw()或getreward()函数时,资金池将抛出一个兔子令牌。
① zap所做的是用一对中的另一个令牌替换供给的令牌的一半,并向相应的pancakeswap池供给两个令牌。这也能够经过运用burny的DAPP前端来完结。
② 将usdt bnb flip储存在游水池中。
买卖2:https://bscscan.com/tx/0x897c2de73dd55d7701e1b69ffb3a17b0f4801ced88b0c75fe1551c5fcce6a979在完结第一笔买卖并将usdt bnb flip 存入兔子池后,进犯者进行了第二笔买卖,这也是大多数人最关怀的买卖。接下来,将第二个业务中一切令牌的搬运分为几个部分① 进犯者从7个不同的pancakeswap流动性池中借入232万BNB,从forTube借入296万美元。然后,进犯者进犯6035USDT bnb#39;池供给了7700亿英镑和296万美元的流动性,取得了144000个LP代币。
② 进犯者将从flash借款中取得的232万BNB兑换为pancakeswap V1池中的383万美元。因为V1池中BNB和usdt的储量远小于V2池中BNB和usdt的储量,V1池的价格更简单被操作。美国国债替代英国国债后,英国国债价格大幅跌落。
③ 如上所述,进犯者将usdt bnb flip 保存到业务-中的burny池中。现在,进犯者能够调用getrward()函数来强制转化burny。调用vaultfliptoflip 合约中的GetWard()函数时,会生成很多令牌传输记载,如屏幕截图所示。
上图中该功用的具体阐明如下:❷ burnyminterv2从2亿美元的资金池中提取流动性,从资金池中提取296万美元和7744亿美元。将usdt替换为BNB。在zapbsc合同中运用V1 pancakeswap路由器,而不是v2。因为V1池的价格被操作(拜见过程2),进犯者能够用231万BNB替换296万usdt。然后,BNB的一半(115.6万)被burny替换,BNB的另一半(115.6万)和取得的burny被添加到BNB burny池中。现在,很多的bnb被添加到bnb burny池中,这添加了bnb的数量(reserve0)。这将用于在核算稍后要浇铸的burny数时操作valueinbnb 变量。Zapbsc合同地址https://bscscan.com/address/0xf4c17e321a8c566d21cf8a9f090ef38f727913d5#code❹ 交流经过去除标签上的流动性而取得的7700亿英镑的一半❹ 将另一半与burny配对,以供给bnb burny 池中的流动性。留意符号❸, ❸, 以及❹ 产生在的 BurnyInterv2 合同的中,用于v2 函数的调用。Bunnyminderv2合同地址:https://bscscan.com/address/0x819eea71d3f93bb604816f1797d4828c90219b5d#code生成的一切LP令牌❺ 从❸ 以及❹ 标签被送到小兔子的煎饼池。这是bunnyminterv2合同中mintforv2 函数中这行代码的成果IBEP20(小兔子)。安全搬运(小兔子池,小兔子山);如符号所示❺, 合同持续履行,铸造了700万只兔子(按曾经的兔子价格核算,价值可达10亿美元左右)。那么,是什么原因让合同里选了这么多兔子🐰 那怎样办?在bunnyminerv2的合同中,要铸造的兔子的数量与变量VALUEINB 有关,该变量由“pricecalculator”核算。Valueofasset(bunny)BNB,bunnybnbamount函数。
在函数“valueofasset”中,valueinbnb的核算方法是:’valueinbnb=amount。Mul(保存0)。Mul(2)。Div(ipancakepair(财物)。Totalsupply())`因为bnb burny池中有很多bnb(如中所述)❸ 以及❹), 变量reserve0是一个十分大的值,这使得valueinbnb 十分大,因而它最终将添加burnys铸造的数量。
④ 在收到700万只兔子后,进犯者将pancakeswap中的兔子更改为BNB bunny V1池和V2池。
⑤ 最终,进犯者向forTube和pancakeswap的七个流动资金池偿还了闪电借款,并将69.7万只兔子和11.4万个BNB搬运到了进犯者的地址。
这种进犯有用的原因之一是zapbsc 合同(https://bscscan.com/address/0xf4c17e321a8c566d21cf8a9f090ef38f727913d5#code )咱们运用pancakeswap V1流动性池经过V1 pancakeswap路由器交流代币。许多defi项目无法从pancakeswap V1转化到V2,因为它们在合同中将pancakeswap路由器和池地址写为V1地址。因为V1流动性池已被抛弃,其池中的代币储藏十分低,这使得进犯者更简单操作代币价格。
写在最终在现在的加密国际中,这种闪电借款进犯和歹意价格操作将不会是最终一次。Certik主张defi项目将其pancakeswap集成从V1迁移到v2。一起,咱们还能够运用时刻加权平均价格(twap)来避免价格反常动摇带来的丢失,然后避免黑客运用flash loan进犯价格先知。
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-
2021年6月2日 下午12:47 沙发
作品在区块链上被确权后,后续交易都会进行实时记录,实现数字版权全生命周期管理,也可作为司法取证中的技术性保障。