事件背景
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/0xac8a739c1f668b13d065d56a03c37a686e0aa1c9339e79fcbc5a2d0a6311e333DemaxPlatform
合约地址:https://bscscan.com/address/0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0#codeDemax
Pair合约地址: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采用的。
- 对敏感性较强的代码,要做到及时更新完善。
来源:freebuf.com 2021-06-10 16:33:18 by: noneage
请登录后发表评论
注册