By:yudan@慢雾安全团队
据慢雾区消息,2021年05月28日,币安智能链(BSC)DeFi项目BurgerSwap被黑,损失达330万美元。慢雾安全团队第一时间介入分析,并将结果分享如下:攻击细节分析
BurgerSwap是一个仿UniswapAMM项目,但是和Uniswap架构有所区别。BurgerSwap架构总体分成。其中Delegate层管理了所有的Pair的信息,并负责创建lpPlatForm层。然后lpPlatForm层再往下创建对应的Pair合约。在整个架构中,lpPlatForm层充当了Uniswap中Router的角色,负责将计算交易数据和要兑换的代币转发到Pair合约中,完成兑换。本次事件的根本正是出在这种架构的问题上。通过一步步分析攻击者的交易行为,我们来还原整个攻击过程的核心:
香港数码港疑被黑客入侵,有初创公司被盗近400GB数据:金色财经报道,有消息披露香港数码港被黑客入侵,有初创公司的资料、公司文件、身分证明文件等资料都被黑客所取得,合共约 400 GB 的公司数据。而在 X ( 原Twitter ) 一关注网路安全的帐号的贴文中可以看到,在黑客的网站中,该被偷取的资料索价约 30 万美元(约港币235 万)。[2023/9/7 13:22:31]
本次攻击开始于Pancake的闪电贷,攻击者从Pancake中借出了大量的WBNB,然后将这些WBNB通过BurgerSwap兑换成Burger代币。在完成以上的操作后,攻击者使用自己控制的代币(攻击合约本身)和Burger代币通过Delegate层创建了一个交易对并添加流动性,为后续攻击做准备。
Multichain将向veMULTI持有者分发超80万美元的奖励:4月12日消息,跨链互操作性协议 Multichain 将向 veMULTI 持有者分发 824,140.80 美元的奖励。从 veMULTI 奖励开始发放至今,Multichain 已分配了近 675 万美元的奖励。[2023/4/12 13:59:42]
在完成代币的创建和准备之后,攻击者立马通过PaltForm层的swapExactTokensForTokens函数发起了兑换,兑换路径为
Helium:迁移至Solana后Helium钱包将立即支持原生sub DAO代币赎回:金色财经报道,去中心化无线通信网络Helium官方发文称Binance.US宣布计划在Solana迁移之前,于2023年3月21日下架HNT/USD和HNT/USDT交易对,尽管Helium基金会对Binance.US决定在迁移之前采取这一行动感到失望,但我们理解他们的立场。
Helium表示迁移后Helium钱包应用将立即支持原生subDAO代币赎回(如HIP70中所述)以及SolanaDeFi平台内的其他集成,同时为HNT解锁更多去中心化交易协议。(Medium)[2023/3/14 13:02:38]
央行范一飞:推进跨境支付、清算结算、法定数字货币等标准制定:8月17日消息,近日,人民银行副行长范一飞在《中国金融》发表署名文章《加强标准化工作助力金融高质量发展》,对金融标准化工作进行总结的同时,也提出了新的展望。
范一飞表示,在助推金融数字化转型方面,目前,在征信、票据、跨境支付、银行间市场、证券期货交易等领域,我国已制定实施近20项信息交换标准,金融业通用报文库初步建成,基础设施信息共享和互联互通水平显着提升;随着大数据、人工智能、云计算、多方安全计算等新技术金融领域创新应用标准的出台,金融业数字化转型逐步实现有标可依。
范一飞透露,我国先后牵头制定了《金融服务的参考数据银行产品服务描述规范(BPoS)》《第三方支付服务信息系统的安全目的》《可持续金融基本概念和关键倡议》国际标准,并且实质性参与了绿色金融、金融科技、金融分布式账本、数字货币等23项国际标准研制。[2022/8/18 12:32:27]
接下来进行了最关键的一次操作。由于先前攻击者在创建交易对的时候使用的是自己控制的代币,在代币兑换过程中,_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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。