据慢雾区消息,币安智能链 (BSC) DeFi 项目 Impossible Finance 遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
Impossible Finance 的 DEX 架构参考了 Uniswap v2,但在 Pair 的实现上有所不同。Impossible Pair 分别实现了 cheapSwap 与 swap 两个接口。cheapSwap 函数限制了只由 Router 合约可进行调用,swap 函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从 PancakeSwap 中借出大量 WBNB,并最终将其兑换成 IF (Impossible Finance 代币) 。
Custodia CEO:美联储已成为“不可逾越的山峰”:7月23日消息,Custodia银行CEO Caitlin Long表示,在进入FedNow支付系统的35家银行中,来自荷兰的Adyen“通过后门进入了系统”,称这对于一家欧洲公司来说是“非常不美国式”的,因为美国公司无法获得这样的机会。
就在上周SEC重新考虑Custodia银行成为会员机构的申请的最后期限之后,美联储否决了该申请,并在一份简短的声明中表示,Custodia的商业计划与法律要求的因素“不一致”。尽管她的银行争取主账户的权利,但Caitlin认为新的FedNow服务还不够好。
“它不具备互操作性,跨境能力,并且有严格的50万美元交易支付限制”,Caitlin Long声称FedNow将占据10%的支付份额,“但不会超过这个数”,她表示美联储声称他们将帮助公司进行监管,并且Custodia“尽力遵守”,但当局已经变得“不可动摇”。(decrypt)[2023/7/23 15:52:58]
香港金管局前总裁任志刚称“不会买”虚拟资产:金色财经报道,香港行政会议成员、金管局前总裁任志刚与财经事务及库务局局长许正宇昨日在《信报》50周年未来香港高峰论坛上同台激辩,任志刚质疑虚拟资产基本功,称“连资产负债表都不想看,如何可以支持经济?”又坦言自己“不会买”虚拟资产并向许正宇抛出问题:“虚拟资产点样可以支持到经济?”许正宇反问“任总赞成虚拟的技术,但不支持虚拟的资产?”,他指出香港金融的未来要有新有旧,香港是综合金融体系,互相连通。发展虚拟资产、货币能助支撑香港金融业在万变的国际市场中发展,但并非抹煞、不重视传统金融。虚拟资产可联系经济运行及效率提升,例如区块链,某程度上对经济系统运行和效率有提升。(星岛日报)[2023/7/11 10:48:34]
随后攻击者创建了一个由自己控制的代币 AAA (BBB),并与上一步骤中获得的 IF 代币添加流动性。
巴克莱私人银行首席市场策略师:比特币几乎是“不可投资的”:金色财经报道,1月21日消息,巴克莱私人银行首席市场策略师Gerald Moser表示,虽然预测比特币的预期回报率几乎是不可能的,但从投资组合的角度来看,它的波动性使得该资产几乎是“不可投资”的。(The Block)[2021/1/21 16:39:09]
之后攻击者通过 Router 传入自定的兑换路径 (AAA -> IF -> BUSD) 将 AAA 代币兑换成 BUSD 代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将 AAA 代币兑换成 IF 代币的过程中进行了两次兑换操作:
声音 | BM:监管授权“不良”做法时有鉴别力的消费者会受到伤害:BM发布推文称,监管可以授权 \"良好\" 做法, 也可以授权 \"不良\" 做法。 当 授权\"不良\" 做法时, 有鉴别力的消费者就会受到伤害, 因为 \"良好\" 是非法的。不受监管的市场确保有鉴别力的消费者有选择商品的自由。不要以为注册 \"不会造成伤害\"。[2019/4/9]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在 Router 合约调用 AAA 合约的 transferFrom 函数将 AAA 代币转入 Pair 合约的过程中,同时调用了一次 Pair 合约的 swap 函数 (即在 transferFrom 函数实现了正常转账与 swap 调用的逻辑)。然后再通过项目设计预期的 cheapSwap 再进行一次正常的代币兑换操作。
通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用 swap 函数与 cheapSwap 函数进行两次代币兑换操作,最终收到了额外的 BUSD 代币。那么既然是进行兑换操作,理论上每次兑换操作都将导致 K 值的变化,最终使得用户无法获得预期的代币。
但通过分析 Impossible Pair 的 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 协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。
参考交易:
https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。