By:yudan@慢雾安全团队
据慢雾区消息,2021年05月28日,币安智能链(BSC)DeFi项目BurgerSwap被黑,损失达330万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
BurgerSwap是一个仿UniswapAMM项目,但是和Uniswap架构有所区别。BurgerSwap架构总体分成。其中Delegate层管理了所有的Pair的信息,并负责创建lpPlatForm层。然后lpPlatForm层再往下创建对应的Pair合约。在整个架构中,lpPlatForm层充当了Uniswap中Router的角色,负责将计算交易数据和要兑换的代币转发到Pair合约中,完成兑换。
以太坊链上费用在一个月内飙升153%:金色财经报道,在 4 月 12 日实施 Shapella 升级后,以太坊网络费用大幅上涨。在过去 30 天里,链上费用飙升了 153% 以上,从之前的每笔转账 4.65 美元到目前的平均每笔交易 11.80 美元。数据突显了与以太坊网络交易相关的成本大幅飙升,表明链上活动显着增加。
此外,自从实施 Shapella 硬分叉以来,以太坊网络 L2 扩展解决方案 Arbitrum 每天处理 110 万到 150 万笔交易,而 L2 竞争对手 Optimism 自以太坊升级以来每天处理 24 万到 55 万笔交易。此外,Arbitrum 的平均交易费用为每笔转账 0.368 美元,而 Optimism 的平均交易费用略高,为每笔交易 0.682 美元。[2023/5/3 14:39:11]
加密衍生品交易所Alpha5融资超150万美元,FBG Capital等参投:即将启动的加密衍生品交易所Alpha5已经获得超过150万美元的种子轮资金。这一轮有多家风险投资和交易公司参与,包括FBG Capital、CMT Digital、Altonomy、SNZ Holding和Nima Capital,以及现有投资者Polychain Capital。(The Block)[2020/8/6]
本次事件的根本正是出在这种架构的问题上。通过一步步分析攻击者的交易行为,我们来还原整个攻击过程的核心:
本次攻击开始于Pancake的闪电贷,攻击者从Pancake中借出了大量的WBNB,然后将这些WBNB通过BurgerSwap?兑换成Burger代币。在完成以上的操作后,攻击者使用自己控制的代币(攻击合约本身)和Burger代币通过Delegate层创建了一个交易对并添加流动性,为后续攻击做准备。
VIE于6月5日15:00上线ZG:据官方公告,ZG.COM将于2020年6月4日15:00开放VIE的充币和提币业务,于6月5日15:00开启VIE/USDT交易对。
?据悉,VIE是首个基于流计算方式的区块链搜索引擎,发掘区块链价值新维度,VIE通过定义区块链世界的基本价值尺度,帮助用户更高效地发现和使用区块链上日渐丰富的的价值信息。[2020/6/2]
在完成代币的创建和准备之后,攻击者立马通过PaltForm层的swapExactTokensForTokens函数发起了兑换,兑换路径为
三大平台币全线上涨 HT24h上涨0.15%:金色财经数据显示,截至目前主流平台币种概况如下:BNB现价16.5006美元,24h上涨1.84%;OKB现价4.971美元,24h上涨0.59%;HT现价3.9301美元,24h上涨0.15%。[2020/5/28]
接下来进行了最关键的一次操作。
由于先前攻击者在创建交易对的时候使用的是自己控制的代币,在代币兑换过程中,_innerTransferFrom函数会调用攻击者控制的代币合约,于是攻击者可以_innerTransferFrom函数中重入swapExactTokensForTokens函数。为什么攻击者要这样做呢?
通过对PlatForm层的swapExactTokensForTokens函数进行代码分析,我们不难发现,合约在调用_innerTransferFrom函数时首先计算了用户的兑换数据,然后在_innerTransferFrom函数的操作后使用预先计算的数据来转发到底层进行真正的代币兑换。从这个函数层面来看,就算攻击者重入了swapExactTokensForTokens函数,底层调用的swap函数也是独立的,咋一看并没有什么问题,但是链上的一个行为引起了慢雾安全团队的注意:
我们惊讶地发现,在重入的兑换过程中,兑换的数量竟然没有因为滑点的关系而导致兑换数量的减少。这究竟是什么原因呢?看来关键是底层的Pair合约的问题了。我们又进一步分析了底层调用的Pair合约,代码如下:
通过分析Pair的代码,我们再次惊讶地发现在swap的过程中,合约竟然没有在兑换后根据恒定乘积公式检查兑换后的数值!!也就是说,Pair合约完全依赖了PlatForm层的数据进行兑换,导致了本次事件的发生。由于Pair层本身并不做恒定乘积的检查,在重入的过程中,PlatForm层的兑换数据预先进行了计算,在_innerTransferFrom函数完成后,Pair的更新数据也没有反映到PlatForm层中,导致重入交易中的兑换产生的滑点并不影响下一次的兑换,从而造成了损失。用图来看的话大概如下:
总结
本次攻击属于BurgerSwap架构上的问题,由于Pair层完全信任PaltForm层的数据,并没有自己再做一次检查,导致攻击的发生。最近DeFi安全事件频发,针对越来越密集的DApp攻击事件,慢雾安全团队建议DApp开发者在移植其他协议的代码时,需充分了解移植协议的架构,并充分考虑移植协议和自身项目的兼容性,且需通过专业安全审计机构的审计后才上线,防止资金损失情况的发生。
攻击交易参考:
https://bscscan.com/tx/0xac8a739c1f668b13d065d56a03c37a686e0aa1c9339e79fcbc5a2d0a6311e333
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。