据慢雾区消息,币安智能链 (BSC) DeFi 项目 Impossible Finance 遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
Impossible Finance 的 DEX 架构参考了 Uniswap v2,但在 Pair 的实现上有所不同。Impossible Pair 分别实现了 cheapSwap 与 swap 两个接口。cheapSwap 函数限制了只由 Router 合约可进行调用,swap 函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从 PancakeSwap 中借出大量 WBNB,并最终将其兑换成 IF (Impossible Finance 代币) 。
声音 | BitPay CCO:“不可预见的“因素将助力比特币2020年底达到2万美元:加密支付公司BitPay CCO Sonny Singh近期在接受采访时被问及“加密货币市场有可能在2020年上涨的原因”,即在未来12个月推动比特币走高的基本因素。有趣的是,Singh并没有把目光放在即将到来的减半事件。相反,他认为加密货币领域“不可预见的事情”可能是比特币在今年年底达到2万美元的催化剂,这意味着它将比目前的8000美元价格高出约150%。作为一个例子,他提到了之前所谓的“黑天鹅事件”,例如Libra的启动等。他表示,当时正是Libra计划的公布推高了比特币的价格。Singh还表示,如果中国或印度等国让比特币合法化,如果其他与Facebook实力相当的公司进入加密领域,或者如果我们看到更多的宏观经济事件,BTC可能会朝着历史新高大步迈进。谈到可能推高比特币价格的辅助趋势时,Singh列举了以下两点:1.富达为其机构客户推出了机构级别的加密货币投资和托管服务,这可能成为大量资金涌入比特币市场的门户;2. Square聘请了大量以加密为中心的工程师,以让比特币变得更有用、适应性更强。随着时间的推移,这可能会增加对数字资产的需求。(CryptoSlate)[2020/1/9]
动态 | 加密货币爱好者John McAfee总统竞选口号:“不要为我投票”:据CCN消息,比特币传播者John McAfee已经加入了美国2020年总统选举之中。与他的竞争对手不同,McAfee有一个大胆、意想不到的口号:“不要投票给McAfee。”[2019/1/30]
随后攻击者创建了一个由自己控制的代币 AAA (BBB),并与上一步骤中获得的 IF 代币添加流动性。
之后攻击者通过 Router 传入自定的兑换路径 (AAA -> IF -> BUSD) 将 AAA 代币兑换成 BUSD 代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将 AAA 代币兑换成 IF 代币的过程中进行了两次兑换操作:
英国财政部着手研究数字货币和区块链监管 “不扼杀创新”成关键词:英国财政部委员会已启动对英国数字货币的调查,以监管这一新兴资产类别。调查将研究该技术对金融机构和基础设施的潜在影响,以及监管如何在“不扼杀创新”的情况下为消费者和企业提供保护。调查还将考量政府、金融行为监管局(FCA)和英格兰银行对数字货币的监管反应。财政部委员会主席、国会议员Nicky Morgan表示国内人们越来越关注比特币等数字货币,但他们可能并不知道数字货币目前在英国受到监管,因而个人投资者也没有保护。他认为非常有必要在监管数字货币和为消费者和企业提供充分的保护之间取得平衡,同时也不能扼杀创新。[2018/2/25]
摩根大通CEO杰米戴蒙:关于比特币自己“不会再说什么了”:摩根大通CEO杰米戴蒙周三在达沃斯论坛期间接受CNBC采访时称,关于比特币自己“不会再说什么了”( “I’m not going to say anymore”)。去年十月戴蒙也有类似的承诺,在他把比特币定义为局后不久,戴蒙发誓不再谈论比特币。然而到了第二天,他就公开抨击比特币投资者是“愚蠢的”。今年一月初,他又称后悔说比特币是局。[2018/1/25]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在 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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。