当前位置:首页区块链煎饼兔闪光崩溃最完整的技术细节分析

煎饼兔闪光崩溃最完整的技术细节分析

5月20日,certik的安全技术团队发现硬币安全智能链的DeFi收入聚合器pancake Bunny(Bunny)受到flash loan的攻击,导致代币flash崩溃。

共有114631个BNB和697245个Bunny在这次事件中丧生,按目前的价格计算,损失约为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()函数时,资金池将抛出一个兔子代币。

煎饼兔闪光崩溃最完整的技术细节分析1

① zap所做的是用一对中的另一个代币替换提供的代币的一半,并向相应的pancakeswap池提供两个代币。这也可以通过使用burny的DAPP前端来实现。

煎饼兔闪光崩溃最完整的技术细节分析2

② 将USDT bnb flip储存在游泳池中。

煎饼兔闪光崩溃最完整的技术细节分析3

交易2:

https://bscscan.com/tx/0x897c2de73dd55d7701e1b69ffb3a17b0f4801ced88b0c75fe1551c5fcce6a979

在完成第一笔交易并将USDT bnb flip 存入兔子池后,攻击者进行了第二笔交易,这也是大多数人最关心的交易。

接下来,将第二个事务中所有代币的转移分为几个部分

① 攻击者从7个不同的pancakeswap流动性池中借入232万BNB,从forTube借入296万美元。

然后,攻击者攻击6035USDT bnb#39;池提供了7700亿英镑和296万美元的流动性,获得了144000个LP代币。

煎饼兔闪光崩溃最完整的技术细节分析4

② 攻击者将从flash贷款中获得的232万BNB兑换为pancakeswap V1池中的383万美元。

由于V1池中BNB和USDT的储量远小于V2池中BNB和USDT的储量,V1池的价格更容易**纵。美国国债取代英国国债后,英国国债价格大幅下跌。

煎饼兔闪光崩溃最完整的技术细节分析5

③ 如上所述,攻击者在中交易了一个;在中,USDT bnb flip 保存到burny池。现在,攻击者可以调用getrward()函数来强制转换burny。

调用vaultfliptoflip 合约中的GetWard()函数时,会生成大量代币传输记录,如屏幕截图所示。

煎饼兔闪光崩溃最完整的技术细节分析6

上图中该功能的详细说明如下:

❷ 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函数。

煎饼兔闪光崩溃最完整的技术细节分析7

在函数“valueofasset”中,valueinbnb的计算方法是:’valueinbnb=amount。Mul(保留0)。Mul(2)。Div(ipancakepair(资产)。Totalsupp())`

因为bnb burny池中有大量bnb(如中所述)❸ 以及❹), 变量reserve0是一个非常大的值,这使得valueinbnb 非常大,因此它最终将增加burnys铸造的数量。

煎饼兔闪光崩溃最完整的技术细节分析8

④ 在收到700万只兔子后,攻击者将pancakeswap中的兔子更改为BNB bunny V1池和V2池。

煎饼兔闪光崩溃最完整的技术细节分析9

⑤ **,攻击者向forTube和pancakeswap的七个流动资金池偿还了闪电贷款,并将69.7万只兔子和11.4万个BNB转移到了攻击者的地址。

煎饼兔闪光崩溃最完整的技术细节分析10

这种攻击有效的原因之一是zapbsc 合同(https://bscscan.com/address/0xf4c17e321a8c566d21cf8a9f090ef38f727913d5#code )我们使用pancakeswap V1流动性池通过V1 pancakeswap路由器交换代币。

许多DeFi项目无法从pancakeswap V1转换到V2,因为它们在合同中将pancakeswap路由器和池地址写为V1地址。

由于V1流动性池已被放弃,其池中的代币储备非常低,这使得攻击者更容易操纵代币价格。

煎饼兔闪光崩溃最完整的技术细节分析11

写在**

在目前的加密世界中,这种闪电贷款攻击和恶意价格操纵将不会是**一次。

Certik建议DeFi项目将其pancakeswap集成从V1迁移到v2。

同时,我们还可以利用时间加权平均价格(twap)来避免价格异常波动带来的损失,从而防止黑客利用flash loan攻击价格预言家。

迄今为止,certik已经进行了700多项审计,保护了300多亿美元的数字资产和软件系统免受安全损失。

温馨提示:

文章标题:煎饼兔闪光崩溃最完整的技术细节分析

文章链接:https://www.btchangqing.cn/263295.html

更新时间:2021年05月22日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

区块链

索坎是怎么工作的?

2021-5-22 6:48:52

区块链

各种“货币投机”信息火上浇油

2021-5-22 7:04:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索