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

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

攻击细节分析

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

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

金色财经挖矿数据播报:BTC今日全网算力下跌0.85%:金色财经报道,据蜘蛛矿池数据显示:

BTC全网算力149.206 EH/s,挖矿难度25.05T,目前区块高度686728,理论收益0.00000620/T/天。

ETH全网算力619.066 TH/s,挖矿难度8121.54T,目前区块高度12591189,理论收益0.00255979/100MH/天。

BSV全网算力0.740EH/s,挖矿难度0.10T,目前区块高度690692,理论收益0.00121543/T/天。

BCH全网算力2.357 EH/s,挖矿难度0.35T,目前区块高度691284,理论收益0.00038178/T/天。[2021/6/8 23:20:12]

金色午报 | 9月30日午间重要动态一览:7:00-12:00关键词:Zinken、Dai、ENM、Yam Finance

1.Dai的流通量已超过9亿枚。

2.中国物联网区块链生态联盟在杭州成立。

3.委内瑞拉正研究在贸易中增加使用加密货币的可行性。

4.Yearn.finance:正在处理ENM被盗资产退还事宜。

5.Uniswap交易量超越第二大CEX Coinbase Pro。

6.网易邮箱推出“区块链电子邮件存证”服务。

7.以太坊2.0测试网Zinken将于10月5日上线。

8.法院驳回一项针对Overstock发行数字代币操纵市场的指控。

9.Yam Finance已正式提交修改Yam协议关键参数链上提案。

10.投资公司3iQ旗下比特币基金在直布罗陀证券交易所上市。[2020/9/30]

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

分析 | 金色盘面:BTC下破6300美元:金色盘面独家分析:最近国际金融市场的动荡终于波及到了数字货币市场,BTC 1小时内振幅近400美元,如果从技术看已经破位,反抽高点可能是短线离场的机会,建议投资者保持观望,等待趋势明朗。上述分析仅限技术交流,不作为交易参考,投资者需要理性看待市场价格波动,做好风险控制。(登录金色财经APP—发现,查看更多币种的独家点评)[2018/10/11]

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

CFTC已推动针对Reynolds的“不到庭而败诉”诉求:数月前,纽约南区法院裁定美国CFTC对加密计划Control-Finance创始人Benjamin Reynolds使用替代役(alternative service),CFTC现已推动针对Reynolds的不到庭而败诉(entry of default)的诉求。根据CFTC于2020年4月3日的文件,Reynolds应被宣布为“传唤而未出庭”,因为他没有回应CFTC的指控。同时,CFTC提交了一份自愿撤销其对Control-Finance行动的通知,并称撤销是没有偏见的。此前消息,2019年6月,CFTC指控Benjamin Reynolds通过名为Control-Finance“联盟计划”的庞氏局,从1000多名客户手中盗用至少22858.822枚比特币,至少价值1.47亿美元。(Finance Feeds)[2020/4/4]

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

通过分析具体的内部调用流程我们可以发现,攻击者在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协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。

参考交易:

https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8

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

大币网

[0:0ms0-17:238ms