SWAP:我竟了我自己?|BurgerSwap 被黑分析_PAI

By:yudan@慢雾安全团队

据慢雾区消息,2021年05月28日,币安智能链(BSC)DeFi项目BurgerSwap被黑,损失达330万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析

BurgerSwap是一个仿UniswapAMM项目,但是和Uniswap架构有所区别。BurgerSwap架构总体分成。其中Delegate层管理了所有的Pair的信息,并负责创建lpPlatForm层。然后lpPlatForm层再往下创建对应的Pair合约。在整个架构中,lpPlatForm层充当了Uniswap中Router的角色,负责将计算交易数据和要兑换的代币转发到Pair合约中,完成兑换。本次事件的根本正是出在这种架构的问题上。通过一步步分析攻击者的交易行为,我们来还原整个攻击过程的核心:

加密金融公司Delio与数字资产银行Anchorage Digital达成合作:1月12日消息,韩国加密金融公司Delio与美国数字资产银行Anchorage Digital签订服务合同。

Delio CSO Kim Nam-seok表示,通过此次合作,Delio计划为全球客户(尤其是美国客户)推出定制服务;此外还在与美国的Signature Bank进行讨论。(Block Media)[2023/1/12 11:08:54]

本次攻击开始于Pancake的闪电贷,攻击者从Pancake中借出了大量的WBNB,然后将这些WBNB通过BurgerSwap兑换成Burger代币。在完成以上的操作后,攻击者使用自己控制的代币(攻击合约本身)和Burger代币通过Delegate层创建了一个交易对并添加流动性,为后续攻击做准备。

英国《金融时报》推出加密金融板块:7月22日消息,英国《金融时报》推出了Cryptofinance板块,这是一个集合加密货币报道的新的数字中心和每周通讯,旨在揭示数字资产行业以及创新如何影响主流金融。(Finance Feeds)[2022/7/22 2:31:08]

在完成代币的创建和准备之后,攻击者立马通过PaltForm层的swapExactTokensForTokens函数发起了兑换,兑换路径为

加密金融公司Matrixport推出NFT托管服务:5月4日消息,比特大陆联合创始人吴忌寒创立的数字资产金融服务公司 Matrixport 宣布与 NFT 资产发行和交易平台 MetaOpus 建立合作伙伴关系,为 NFT 投资者提供托管解决方案,MetaOpus 平台由 BlockCreateArt (BCA) Network 提供支持,Matrixport 将为高净值人士、机构投资者和散户投资者提供机构级 NFT 存储和保护措施。据悉,Matrixport 此前推出的合格机构托管解决方案 Cactus Custody 已经与 MetaMask Institutional (MMI) 集成,可以支持 MMI 的多链功能和 EVM 兼容链,而 Cactus Custody 现在推出的「DeFi Connector」功能将使机构客户能够无缝、安全地与 Dapp 和 NFT 市场交互他们的 NFT。(AmbCrypto)[2022/5/4 2:50:04]

接下来进行了最关键的一次操作。由于先前攻击者在创建交易对的时候使用的是自己控制的代币,在代币兑换过程中,_innerTransferFrom函数会调用攻击者控制的代币合约,于是攻击者可以_innerTransferFrom函数中重入swapExactTokensForTokens函数。为什么攻击者要这样做呢?

动态 | 加密金融科技初创公司Revolut计划向美国50个州提供加密服务:加密金融科技初创公司Revolut最近以55亿美元的估值筹集5亿美元,是欧洲最大金融公司之一。Revolut允许当地用户以29种法定货币买卖BTC、ETH、LTC、BCH和XRP。Revolut预计将开始向美国所有50个州的客户提供同样的服务。据此前报道,Revolut完成5亿美元D轮融资,此轮融资使其估值增加了三倍,达到55亿美元。[2020/2/28]

通过对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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:0ms0-4:21ms