CHE:“不可思议” 的被黑之旅: Impossible Finance 被黑分析

据慢雾区消息,币安智能链 (BSC) DeFi 项目 Impossible Finance 遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:

攻击细节分析

Impossible Finance 的 DEX 架构参考了 Uniswap v2,但在 Pair 的实现上有所不同。Impossible Pair 分别实现了 cheapSwap 与 swap 两个接口。cheapSwap 函数限制了只由 Router 合约可进行调用,swap 函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:

首先攻击者利用闪电贷从 PancakeSwap 中借出大量 WBNB,并最终将其兑换成 IF (Impossible Finance 代币) 。

印度经济事务部长:比特币和加密货币“不违法”:金色财经报道,据 bitcoinmagazine 在社交媒体透露,印度经济事务部长 Ajay Seth 表示比特币和加密货币在该国“不违法”,他解释称:“只有当某些事情被宣布为非法时,合法性问题才会出现,加密资产在(印度)这个国家并不违法,目前印度已经准备了一项经过内部讨论的草案。” Ajay Seth 是第二位澄清比特币“不违法”的印度官员,此前彭博社报道印度财政部长 TV Somanathan 也表示“买卖加密货币在印度并不违法”。[2023/2/4 11:47:12]

动态 | 印度“不受监管存款计划”的新法规或关闭ICO的大门:据crypto-news消息,印度府最近通过了一项法令,旨在禁止不受监管的存款,它的目的是保护易受的投资者免受庞氏局的伤害,但这样做也或为ICO在印度的发展关上了大门。该条例名为“2019年禁止无监管存款计划条例”。它禁止经营和推广不受监管的存款计划,并禁止个人和实体根据此类计划接受存款。任何这些罪行都可能招致从冻结资产到监禁的严厉惩罚。如果从加密社区的角度来看,这基本上意味着从现在开始,如果你是印度公民,参与任何ICO都不容易,更不用说组织ICO的想法了。[2019/2/25]

随后攻击者创建了一个由自己控制的代币 AAA (BBB),并与上一步骤中获得的 IF 代币添加流动性。

投票上币被质疑 何一回复“不是什么都需要区块链+”:微拍创始人胡震生与何一就“数字货币交易所投票上币”话题展开讨论。胡震生认为“投票上币”交易所没有公开投票地址,同时也未公布投票算法,他表示“作为参与方认为平台有修改数据的驱动力和可能性”,认为这“就不是一个优秀的区块链项目”。何一回复称币安的投票项目都会经过审核,且投票数据每次都会清洗;交易所本来就是中心化平台,每个组织有自己的规则,而她一直的观点是“不是什么都需要‘区块链+’”。[2018/2/28]

之后攻击者通过 Router 传入自定的兑换路径 (AAA -> IF -> BUSD) 将 AAA 代币兑换成 BUSD 代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将 AAA 代币兑换成 IF 代币的过程中进行了两次兑换操作:

CFTC主席建议对虚拟货币采取“不伤害”原则:美国商品期货交易委员会(CFTC)主席J. Christopher Giancarlo今天向美国参议院银行委员会提交了一份书面证词,建议对分布式账本技术(区块链)、虚拟货币公司和相关初创企业采取“不伤害”注册流程。他表示,“虚拟货币标志着我们看待支付、传统金融流程和参与经济活动的范式的转变。忽视这些事态发展B不仅不会让它们淡出视野,也不是一个监管部门的负责任的回应。”今晚23点,美国参议院举行虚拟货币监管主题听证会,SEC主席Jay Clayton和CFTC主席J. Christopher Giancarlo均将出席。[2018/2/6]

为什么在一次兑换过程中会进行两次兑换操作呢?

通过分析具体的内部调用流程我们可以发现,攻击者在 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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

TRXCOI:加密冬天来临时 收拾行李还是继续深挖?

当金融市场和改变范式的技术发生碰撞时……事情会变得很奇怪。时间被扭曲了。市场总是试图为未来定价,当颠覆性技术出现并有望改变我们对世界的一切了解时,人类会不经意地将其定价.

[0:0ms0-2:38ms