LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > BSC 闪贷攻击:三个模仿者

BSC 闪贷攻击:三个模仿者

2021-07-25 wanbizu AI 来源:区块链网络

5 月份,一系列攻击破坏了几个币安智能链 (BSC) 项目。 继 PancakeBunny 之后,其三个分叉项目——AutoShark、Merlin Labs 和 PancakeHunny——也被使用类似的技术攻击。 PancakeBunny 遭受了四次攻击中代价最高的一次,总损失接近 4500 万美元。 在本文中,Amber Group 区块链安全团队负责人 Chiachih Wu 博士详细阐述了对三个山寨者的攻击背后的细节。

模仿者

AutoShark 在 PancakeBunny 后五天遭到攻击,其次是 Merlin Labs 和 PancakeHunny。 下面对这三个分叉项目存在的问题和可能的攻击技术进行分析。

在 SharkMinter.mintFor() 函数中,要铸造的奖励 SHARK 代币的数量(即 mintShark)来自于第 1494 行中由 tokenToSharkBNB() 计算的sharkBNBAmount。 然而,tokenToSharkBNB() 引用了当前的翻转余额,这使得这是一个脆弱点。 人们可以假设在第 1492 行收到的代币数量等于翻转余额的数量。 尽管如此,坏人可以通过在 getReward() 调用之前发送一些翻转令牌并间接破坏 tokenToSharkBNB() 的逻辑来简单地操纵翻转余额。

在 tokenToSharkBNB() 的底层实现中,还有另一个攻击面。 如上面的代码片段所示,_flipToSharkBNBFlip() 从 ApeSwap(第 1243 行)或 PantherSwap(第 1262 行)中移除流动性,并将 LP 代币转换为 SHARK+WBNB。 稍后,调用 generateFlipToken() 将 SHARK+WBNB 转换为 SHARK-BNB LP 令牌。

在 generateFlipToken() 内部,SharkMinter 当前的 SHARK 和 WBNB 余额(amountADesired,amountBDesired)用于生成 LP 代币,并将 LP 代币的数量作为sharkBNBAmount 返回给 mintFor()。 基于此,坏人可以将 SHARK+WBNB 转移到 SharkMinter 来操纵要铸造的 SHARK 代币的数量。

PancakeHunny 中的漏洞与 AutoShark 中发现的漏洞相同,即不良行为者可以使用 HUNNY 和 WBNB 代币操纵 HUNNY 奖励铸造。

相比 AutoShark 和 PancakeHunny,Merlin Labs 的 _getReward() 有一个更明显的漏洞。

上面的代码片段表明,performanceFee 可以通过 CAKE 的余额来操纵,这间接影响了 MERL 奖励的铸造。 然而,nonContract 修饰符摆脱了闪贷。

即使没有漏洞利用合同,坏人仍然可以通过多次调用获利。

再现 AutoShark 攻击

为了重现 AutoShark hack,我们首先需要从 PantherSwap 获取一些 SHARK-BNB-LP 令牌。 具体来说,我们将 0.5 WBNB 交换到 SHARK(第 58 行),并将剩余的 WBNB 与这些 SHARK 代币一起转移到 PantherSwap 中以铸造 SHARK-BNB-LP 代币(第 64 行)。 稍后的,我们将这些 LP 代币存入 AutoShark 的 StrategyCompoundFLIP 合约(第 69 行)以获得奖励。请注意,我们故意只在第 69 行存入一半的 LP 代币。

第二步,让getReward()进入SharkMinter合约. 在上面的代码片段中,我们知道奖励可以通过 Earn() 函数(第 1658 行)检索。 此外,30% 的奖励(即 performanceFee)应该大于 1,000(即 DUST)以触发第 1668 行中的 SharkMinter.mintFor()。

因此,在我们的漏洞利用代码中,我们在第 76 行将一些 LP 代币转移到 StrategyCompoundFLIP 合约,以绕过 performanceFee > DUST 检查并触发 mintFor() 调用。 由于我们需要大量的 WBNB+SHARK 来操作 SharkMinter,我们通过第 81 行的 flash-swap 调用来利用 PantherSwap 的 100k WBNB。

在 flash-swap 回调 pancakeCall() 中,我们将一半的 WBNB 交换为 SHARK,并将剩余 50,000 WBNB 的 SHARK 发送到 SharkMinter 合约以操纵奖励铸造。

下一步是在 SharkMinter 收到 WBNB+SHARK 令牌时触发 getReward() 以向调用方铸造大量 SHARK。

最后一步是将 SHARK 转换为 WBNB,支付闪贷,然后带走剩余的 WBNB 代币。

在我们的实验中,坏人从 1 WBNB 开始。 在闪贷的帮助下,他从一笔交易中返还了 1,000 多个 WBNB 中获利。

复制 PancakeHunny 攻击

PancakeHunny 攻击背后的理论类似于 AutoShark 攻击。 简而言之,在触发 getReward() 之前,我们需要向 HunnyMinter 发送大量 HUNNY+WBNB。 但是,HUNNY 代币合约有一个称为 antiWhale 的保护机制,可以防止大量转移。 因此,闪贷在这里不起作用。

为了绕过 antiWhale,我们创建了多个子合约并通过这些合约发起多个 CakeFlipVault.deposit() 调用。

在上面的漏洞利用代码片段中,在第 116 行收集的 LP 代币被分成 10 个部分,并在第 122 行转移到 10 个 Lib 合约,然后为每个合约调用 Lib.prepare()。

在 Lib.prepare() 中,我们批准 () CakeFlipVault 使用 LP 代币并调用 CakeFlipVault.deposit() 以启用稍后的 getReward() 调用来铸造奖励 HUNNY 代币。

准备好 10 个 Lib 合约后,主合约对每个合约进行迭代: 1) 将 WBNB 换成 HUNNY 的最大允许数量; 2) 将WBNB+HUNNY转给HunnyMinter; 3) 通过 lib.trigger() 触发 getReward(); 和 4) 将 HUNNY 交换回 WBNB。

最后,拥有 10 个 WBNB 的坏人从 10 次运行 10 个 Lib 合约操作中赚取了大约 200 个 WBNB。

重现 Merlin Labs 攻击

如前所述,Merlin Labs 具有 noContract 修饰符来摆脱闪贷攻击。 但是,我们可以使用脚本来触发从 EOA(外部拥有账户)地址发起的多笔交易的攻击。 唯一的区别是有人可能会抢先进行不良行为者的交易以窃取利润。

与 AutoShark 攻击类似,我们需要准备足够的 LINK 和 WBNB(第 23 行),用它们铸造 WBNB-LINK-LP 代币(第 34 行),并将 LP 代币存入 VaultFlipCake 合约(第 38 行)。

剩下的动作是:

将 WBNB 交换为 CAKE(第 42 行)。 通过将 CAKE 发送到 VaultFlipToCake 合约(第 50 行)来操纵 MERL 铸造。 在第 55 行触发 getReward()(铸造了大量的 MERL 代币)。 将 MERL 交换回 WBNB 并多次重复上述步骤。

如前所述,如果有人在第 2 步之后立即执行第 3 步,则该人可能会删除大量的 MERL。

在我们的实验中,坏人从 10 WBNB 开始,然后通过将四个步骤重复 10 次,以大约 165 WBNB 走开。

关于琥珀集团

Amber Group 是全球领先的加密金融服务提供商,在全球范围内全天候运营,在香港、台北、首尔和温哥华设有办事处。 Amber Group 成立于 2017 年,为 500 多家机构客户提供服务,在 100 多个电子交易所累计交易额超过 5000 亿美元,管理的资产超过 15 亿美元。 2021年,Amber Group在B轮融资1亿美元,成为最新一家估值超10亿美元的金融科技独角兽。 如需更多信息,请访问 www.ambergroup.io。

—-

原文链接:https://www.newsbtc.com/news/company/bsc-flash-loan-attack-the-three-copycats/

原文作者:NewsBTC

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...