据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)?。
Improbable首席执行官:Yuga Labs元宇宙Otherside已成功测试1.5万人同时交互:5月3日消息,据YugaLabs元宇宙Otherside背后的开发公司Improbable官方网站消息,该公司首席执行官Herman Narula表示:Otherside将颠覆人们的思想,同时颠覆数十年来关于游戏和开放平台的想法。
在Otherside的早期开发过程中,利用Improbable的M2技术已经成功地测试了超过15,000人同时在一个虚拟空间中进行交互。通过与YugaLabs合作,Improbable正在奠定元宇宙基础,从而为艺术、娱乐、游戏等领域的新体验打开大门。此前报道,Improbable旗下项目M2已完成1.5亿美元独立融资,a16z和软银愿景基金领投。[2022/5/3 2:47:09]
BSC链上Impossible Finance回应攻击事件:将100%赔付受影响用户:据官方消息,BSC链上DeFi协议Impossible Finance针对昨日发生的攻击事件发文称,其v2 swap遭到了闪电贷和恶意的ERC20代币攻击。这是一个孤立事件,被盗资金并没有对Impossible产生重大影响。所有在攻击前向流动性池充值的用户(LP)将获得100%的补偿。
昨日消息,PeckShield“派盾”预警显示,Impossible Finance遭到闪电贷攻击,攻击者获利1,510.75 WBNB(合计49.7万美元)。[2021/6/22 23:57:00]
随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。
中币(ZB)与Simplex达成合作,支持借记卡/信用卡买币服务:根据官方消息,ZB已宣布与获得欧盟许可的支付机构Simplex集成合作,允许中币(ZB)用户使用Visa和Mastercard购买BTC,ETH等其他主流加密货币。 Simplex支持50多种本地货币,包括美元,欧元,卢布,英镑,日元,加元,澳元和韩元。现在,世界各地的用户都可以使用法定货币在ZB平台上无缝购买加密货币。[2021/4/27 21:03:04]
动态 | 区块链公司SimplyVital Health获得美国国家科学基金会22.5万美元赠款:根据在10月10日发布的新闻稿,总部位于新英格兰的区块链公司SimplyVital Health已从美国国家科学基金会(NSF)获得225,000美元的赠款,用于研究其协议Nexus与Graphene协议的集成。NSF将该赠款作为其小型企业计划的一部分,该计划每年向创新型初创企业和小型企业捐款2亿美元。[2019/10/11]
之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:
ImpactPPA希望通过区块链技术加速全球清洁能源生产效率:基于以太坊区块链的ImpactPPA希望通过区块链技术加速全球清洁能源生产效率。ImpactPPA这一新系统将允许任何地方的任何人为任何项目创建提案,该系统主要关注对象为新兴经济体。首席执行官表示:对于很多发展中国家而言,中心化的非政府组织的资助过程过于繁琐和昂贵,很多国家的民众无法因此受益。[2018/2/25]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在Router合约调用AAA合约的transferFrom函数将AAA代币转入Pair合约的过程中,同时调用了一次Pair合约的swap函数(即在transferFrom函数实现了正常转账与swap调用的逻辑)。然后再通过项目设计预期的cheapSwap再进行一次正常的代币兑换操作。
通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用swap函数与cheapSwap函数进行两次代币兑换操作,最终收到了额外的BUSD代币。那么既然是进行兑换操作,理论上每次兑换操作都将导致K值的变化,最终使得用户无法获得预期的代币。
但通过分析ImpossiblePair的swap函数与cheapSwap函数的具体逻辑,我们发现一个惊人的情况:在swap函数中进行了K值检查,而在cheapSwap函数却未进行K值检查而直接进行了update操作。这就导致了攻击者进行了多次兑换操作获得了额外的BUSD。
攻击流程
1、攻击者先通过PancakeSwap闪电贷借出WBNB,并将WBNB兑换成IF代币。
2、创建恶意的代币合约AAA(BBB),并在Impossible中添加了AAA代币与IF代币流动性。
3、通过AAA->IF->BUSD路径进行AAA代币到BUSD代币的兑换,并在AAA代币转入Pair合约兑换成IF代币的过程中进行了一次IF代币与BUSD的兑换操作,随后再进行正常的cheapSwap操作。最终获得了额外的BUSD代币。
4、之后重复以上操作进行获利。
总结
本次攻击的核心在于cheapSwap函数中未进行K值检查,导致攻击者可以通过在一次兑换过程中进行多次兑换操作以获得额外的代币。慢雾安全团队建议DeFi协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。