据慢雾区消息,币安智能链 (BSC) DeFi 项目 Impossible Finance 遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
Impossible Finance 的 DEX 架构参考了 Uniswap v2,但在 Pair 的实现上有所不同。Impossible Pair 分别实现了 cheapSwap 与 swap 两个接口。cheapSwap 函数限制了只由 Router 合约可进行调用,swap 函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从 PancakeSwap 中借出大量 WBNB,并最终将其兑换成 IF (Impossible Finance 代币) 。
澳大利亚央行:比特币“不是真正的货币”,不构成金融稳定风险:澳大利亚央行(Reserve Bank of Australia)在众议院常务经济委员会(House of Representatives Standing Committee on Economics)的一次会议上,对比特币发表了略带轻蔑的评论。据Australian Financial Review周五报道,央行负责金融系统的助理行长Michelle Bullock表示:“比特币引发了很多争议”。这是对昆士兰自由国家党成员Julian Simmonds的回应,他曾询问助理行长是否认为比特币和加密货币是一种金融风险。Bullock称:“(比特币)不是一种支付工具,它甚至不是真正的钱。我认为,人们对它作为一种潜在资产有很多争议。”她不认为比特币的波动会给市场带来风险,该行行长Philip Lowe也持同样观点:“(比特币)对投资者来说是一种风险,但不是金融稳定风险。”Bullock指出,更引人注目的是围绕稳定币监管的问题。(CoinDesk)[2021/2/5 19:00:13]
声音 | 对冲基金创始人:比特币正在转向针对“不负责任”中央银行的保险政策:据cryptoglobe消息,对冲基金Ikigai的创始人Travis Kling最近表示:“我们真的很有可能拥有比黄金更好的东西。” Kling解释说,比特币投资可能与信用违约互换(CDS)类似,后者类似于在借款人违约时发放赔付的保险对策。他提到CDS是一种“针对财政和货币政策不负责任”的传统对冲工具。他指出,在遭受恶性通货膨胀的经济体中,可能发生比特币等另类投资形式(作为一种对冲工具)的“大规模采用”。 目前,Kling担心的是美国债务增加(约22万亿美元),以及美联储和其他国家的央行为刺激经济增长而采取的看似严厉的措施。一些分析师认为,持续的低利率加上不断增加的预算赤字可能导致恶性通货膨胀,这将从根本上侵蚀包括美元在内的法定货币的价值。[2019/2/10]
随后攻击者创建了一个由自己控制的代币 AAA (BBB),并与上一步骤中获得的 IF 代币添加流动性。
动态 | BitPay被BTC追随者指责“不道德”:据Coindaily消息,BTC追随者认为,BitPay欺瞒了BTC的交易状态,指责其“不道德的商业政策”。据悉,Bitpay保持“反比特币”的立场已超过9个月。[2018/8/21]
之后攻击者通过 Router 传入自定的兑换路径 (AAA -> IF -> BUSD) 将 AAA 代币兑换成 BUSD 代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将 AAA 代币兑换成 IF 代币的过程中进行了两次兑换操作:
蒙大拿州推迟比特币开采禁令 承认“不够了解”:美国蒙大拿州的一个县推迟了对一项为期一年的比特币开采禁令的投票,称其对加密货币的开采不够了解,无法做出明智的决定。“我们都明白我们不明白,”米苏拉县委员会专员让·柯蒂斯(Jean Curtiss)说。“我们不知道未来或长期的影响。”[2018/6/17]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在 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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。