By:yudan@慢雾安全团队
据慢雾区消息,2021年05月28日,币安智能链(BSC)DeFi项目BurgerSwap被黑,损失达330万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析
BurgerSwap是一个仿UniswapAMM项目,但是和Uniswap架构有所区别。BurgerSwap架构总体分成。其中Delegate层管理了所有的Pair的信息,并负责创建lpPlatForm层。然后lpPlatForm层再往下创建对应的Pair合约。在整个架构中,lpPlatForm层充当了Uniswap中Router的角色,负责将计算交易数据和要兑换的代币转发到Pair合约中,完成兑换。本次事件的根本正是出在这种架构的问题上。通过一步步分析攻击者的交易行为,我们来还原整个攻击过程的核心:
美国参议员:从政策制定的角度来看,拥有比特币与拥有牛没有什么不同:金色财经报道,美国参议员Cynthia Lummis正准备推出负责任的金融创新法案,这将影响加密货币的征税方式。她表示,从政策制定的角度来看,拥有比特币与拥有牛没有什么不同。作为2020年上任的参议员,Lummis 报告称持有价值 50,000 至 100,000 美元的 BTC,2021 年 8 月,她报告额外购买了价值 50,000 至 100,000 美元的 BTC。她没有从出售资产中获得任何收入。(decrypt)[2022/4/2 13:59:51]
Stellar首席执行官:加密货币有不同类型的共识机制,有些更环保:金色财经报道,今日在美国国会的加密听证会上,众议员Rashida Tlaib询问了比特币的能源使用情况,指出加密货币行业“目前消耗的能源足以为一个小国提供动力”。Tlaib说,比特币挖矿消耗的能源比阿根廷、苹果、Facebook和微软加起来还要多。对此,Stellar首席执行官Denelle Dixon指出,加密货币有不同类型的共识机制,它们使用更少的能源或可能更环保。Dixon指出了Marathon Digital在蒙大拿州的发电厂和Greenidge Generation的纽约矿场都是曾经关闭的燃煤发电厂被重新用于加密用途的例子。Dixon说:“我们都需要把精力集中在减少能源使用上。”[2021/12/9 12:59:34]
本次攻击开始于Pancake的闪电贷,攻击者从Pancake中借出了大量的WBNB,然后将这些WBNB通过BurgerSwap兑换成Burger代币。在完成以上的操作后,攻击者使用自己控制的代币(攻击合约本身)和Burger代币通过Delegate层创建了一个交易对并添加流动性,为后续攻击做准备。
动态 | 本周区块链资产总市值比上周上涨1.48%,TOP100项目中55个项目市值有不同程度上涨:火币区块链行业周报(第九十一期)今日发布,本周区块链资产总市值比上周上涨1.48%,TOP100项目中55个项目市值有不同程度上涨。12月8日,Bitcoin价格为7564.35美元,较上周上涨1.96%,Ethereum价格为151.26美元,较上周上涨0.13%。本周比特币算力上升、以太坊算力下降。比特币本周挖矿难度下降、以太坊挖矿难度环比上涨;本周比特币区块平均大小下降、区块平均交易次数下降,以太坊的区块平均大小下降,区块平均交易次数下降;本周比特币矿工费下降、以太坊矿工费下降;ZSC是本周代码活跃程度最高的项目。[2019/12/9]
动态 | Joseph Lubin和BM就区块链第一、二层技术发表不同看法:据ambcrypto消息,以太坊联合创始人Joseph Lubin和Block.One首席执行官BM就区块链的第一层和第二层技术进行了讨论,并发表了不尽相同的看法:BM称,无论是第一层还是第二层,都属区块链范畴,区块链是网络的网络,网络互相之间可以进行联系。他说:“第二层类似迷你区块链,与线路间的发生的一切息息相关”。他还表示,未来区块链行业将拥有数千个私人区块链,这些私有区块链将应用区块链间通信,以便与公共区块链进行交互,而未来将会有若干层区块链,但是,单一链条不会成为中央统治者。这些链条将使用点对点(P2P)通信,并且将比现在联系更加紧密。
以太坊联合创始人Joseph Lubin则表示,第一层和第二层都不是区块链,而是去中心化的协议。他认为区块链存在于基础层面,提供了“真正严格的信任”。Lubin称:“第二层技术涉及到像国家频道这样的东西,而不是真正的区块链。它们可以涉及到侧链,是被连接到基层的区块链。”[2018/10/1]
在完成代币的创建和准备之后,攻击者立马通过PaltForm层的swapExactTokensForTokens函数发起了兑换,兑换路径为
接下来进行了最关键的一次操作。由于先前攻击者在创建交易对的时候使用的是自己控制的代币,在代币兑换过程中,_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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。