6

Burger攻击事件复盘分析 | 零时科技

 3 years ago
source link: https://learnblockchain.cn/article/2604
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Burger攻击事件复盘分析 | 零时科技 | 登链社区 | 深入浅出区块链技术

Burger攻击事件复盘分析 | 零时科技

北京时间2021年5月28日,BurgerSwap官方推文称遭到闪电贷攻击,已暂停Swap和BURGER功能,零时科技安全团队及时对该安全事件进行复盘分析。

在这里插入图片描述

BurgerSwap是一个币安智能链上带有治理激励机制的自动做市商(AMM),BURGER代币是该平台的原生BEP-20治理代币,用户可以通过对平台提供流动性以获得BURGER奖励。
零时科技区块链安全情报平台监控到消息,北京时间2021年5月28日,BurgerSwap官方推文称遭到闪电贷攻击,已暂停Swap和BURGER功能,零时科技安全团队及时对该安全事件进行复盘分析。
在这里插入图片描述

攻击信息
通过初步追踪分析,分析出攻击信息如下:
攻击者钱包地址https://bscscan.com/address/0x6c9f2b95ca3432e5ec5bcd9c19de0636a23a4994
攻击者合约地址:
https://bscscan.com/address/0xae0f538409063e66ff0e382113cb1a051fc069cd
攻击者第一笔交易:
https://bscscan.com/tx/0xac8a739c1f668b13d065d56a03c37a686e0aa1c9339e79fcbc5a2d0a6311e333
DemaxPlatform合约地址:
https://bscscan.com/address/0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0#code
DemaxPair合约地址:
https://bscscan.com/address/0x7ac55ac530f2c29659573bde0700c6758d69e677#code

下面我们分步解析攻击者的交易,方便读者更清晰的了解攻击过程。
在这里插入图片描述

上图为攻击者主要的13笔交易截图,从图中标注的第1笔交易开始,之后2和3模块中的12交易内容基本相同,差异是盗取的代币不同,这里将详细分析第一笔交易内容,下面逐一截图分析:
在这里插入图片描述

第一步:攻击者合约通过闪电贷借到6047枚BNB。
第二步:攻击者通过BurgerSwap将6028枚BNB兑换为92677枚Burger。
在这里插入图片描述

第三步:这里有两次重要操作,也是此次闪电贷攻击的重点,攻击者通过使用自己的100枚代币和45452枚Burger添加流动性,在之后的兑换中使用攻击者本身添加的代币兑换了4478枚BNB,并使用45452枚Burger兑换了4478枚BNB,如上图所示,目前攻击者已获取8956枚BNB。(已获利,闪电贷只借了6047枚BNB)
在这里插入图片描述

第四步:攻击者使用491枚BNB换取108791枚Burger。(已控制价格少量BNB换取大量Burger)
第五步:攻击者归还借到的闪电贷6047枚BNB。
至此
攻击者获取大量Burger代币和BNB代币,在随后的12笔交易中,攻击者利用同样的方式陆续获取了多种代币,具体数量如下:4400枚WBNB、2.2万枚BUSD、2.5ETH、140万枚USDT、43.2万枚BURGER、14.2万枚xBURGER、9.5万枚ROCKS,总价值超过700万美元。
看似简单的步骤,为何可以获取大量代币,交易的第三步中为什么可以取两次4478枚BNB,并且还可以使用攻击者铸造的代币兑换,下面我们从交易日志中跟踪分析代码层面的Burger合约兑换逻辑。

攻击成功的原因

通过第三步的说明图可以明确,兑换两次4478枚BNB时触发的事件为DemaxPlatform合约SwapToken。通过跟进该合约事件,最开始调用的方法为swapExactTokensForTokens,如下图:
在这里插入图片描述

这里swapExactTokensForTokens方法传入的交易对path,就是攻击者通过自己的代币添加的交易对。
但这里需要注意的一点是:两次兑换的数额相同并且均可以成功,按照Uniswap的逻辑,兑换后会对K值进行判断,判断之后,兑换该结果则不同,我们继续跟进_swap方法,如下图:
在这里插入图片描述

_swap方法中,代币兑换使用的为DemaxPair合约中swap方法,继续跟进:
在这里插入图片描述

swap方法中,可能明显看出与Uniswap合约相似,但DemaxPair合约在正常兑换后,并没有对代币资金做恒定乘积的K值检查,导致第二次也可以兑换成功。所以攻击者在一次交易中,在没有K值检查的情况下,成功进行了两次swapExactTokensForTokens方法调用swap方法进行兑换,最终获取大量收益。
目前,Burger官方表示重新开放了Swap和Liquidity,并制定了补偿计划,以弥补受影响用户的损失。

通过此次攻击事件来看,攻击者通过多次闪电贷,并通过代码中恒定乘积的K值检查缺陷,最终获得了大量代币,目前类似的闪电贷攻击事件居多,为何还会频频发生,对于DeFi项目而言,合约代码的安全,代币价格的相对稳定,旧版本的及时更新都是保证项目安全极其重要的部分,对于部分Fork其他项目的代码而言,应在了解代码原理后,根据自身项目逻辑进行谨慎修改。对于此类闪电贷攻击事件,零时科技安全团队给出以下建议:

  • 对于合约代码安全,可找多家安全审计公司进行审计。
  • 对LP价格及获取奖励的铸币代码块,应根据业务逻辑进行严格审核演算,避免出现参数可控制导致大量铸币问题。
  • 使用可信的并且安全可靠的预言机,如Chainlink去中心化预言机,Alpha homera采用的。
  • 对敏感性较强的代码,要做到及时更新完善。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 4小时前
  • 阅读 ( 22 )
  • 学分 ( 0 )
  • 分类:其他

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK